mixpanel-client: Mixpanel client

[ apache, library, unclassified ] [ Propose Tags ] [ Report a vulnerability ]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.1, 0.2.0, 0.2.1, 0.3.0
Change log CHANGELOG.md
Dependencies aeson, base (>=4.7 && <5), base64-bytestring, bytestring, http-client, http-client-tls, servant (>=0.14.1), servant-client, string-conv, text, time [details]
License Apache-2.0
Copyright 2018 Domen Kožar
Author Domen Kožar
Maintainer domen@hercules-ci.com
Home page https://github.com/hercules-ci/mixpanel-client#readme
Bug tracker https://github.com/hercules-ci/mixpanel-client/issues
Source repo head: git clone https://github.com/hercules-ci/mixpanel-client
Uploaded by domenkozar at 2020-12-14T22:08:29Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 2191 total (16 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2020-12-14 [all 1 reports]

Readme for mixpanel-client-0.3.0

[back to package description]

MixPanel client for Haskell

Build Status Hackage

Implements major features of MixPanel HTTP API:

  • track
  • alias
  • engage
  • import
  • export

Getting started

import Data.Aeson      ( (.=) )
import Data.Time.Clock ( getCurrentTime )
import GHC.Exts        ( fromList )
import MixPanel        ( Operation(Set), engage, track, alias
                       , AuthToken(..), mkEnv
                       -- reexports
                       , newManager, tlsManagerSettings)


main :: IO ()
main = do
  -- setup
  manager <- newManager tlsManagerSettings
  let env = mkEnv (AuthToken "foobar") manager

  -- track a simple event
  Right () <- track env "Played Video" mempty

  -- track an event with extra properties
  Right () <- track env "Played Video Unique per user"
    $ fromList [ "distinct_id" .= ("generated-id" :: String)
               , "customProperty" .= True ]

  -- alias the user
  Right () <- alias env "generated-id" "user@example.com"

  -- profile engagement
  now <- getCurrentTime
  Right () <- engage env "user@example.com"
    $ Set (fromList [ "$created" .= now])

  putStrLn "All good!"

Design questions

a) Why does it use Object/Array intemediate values from Data.Aeson?

TODO

  • batch requests
  • expose extra url query paramerers
  • engage special properties more type safe?
  • filter out null values in requests to mixpanel
  • api support for tracking revenue