# Mxpanel

<!-- MDOC !-->

Client for Mixpanel Ingestion API.

[![ Version](](
[![Coverage Status](](

It provides a sync API that makes HTTP request to the Mixpanel API. And also a
async API that buffers and delivers the buffered events to Mixpanel in background.

[Checkout the documentation]( for more information.

## Installation

The package can be installed by adding `mxpanel` to your list of dependencies in `mix.exs`:

def deps do
    {:mxpanel, "~> 1.0.1"},
    {:jason, "~> 1.2"},
    {:hackney, "~> 1.17"}

## Examples

# Create a client struct with your project token
client = %Mxpanel.Client{token: "<mixpanel project token>"}

# track an event
|> Mxpanel.track("billybob")
|> Mxpanel.deliver(client)

# track an event with optional properties
|> Mxpanel.track("billybob", %{"Favourite Color" => "Red"})
|> Mxpanel.deliver(client)

# set an IP address to get automatic geolocation info
|> Mxpanel.track("billybob", %{}, ip: "")
|> Mxpanel.deliver(client)

# track an event with a specific timestamp
|> Mxpanel.track("billybob", %{}, time: System.os_time(:second) - 60)
|> Mxpanel.deliver(client)

# track an event in background, the event will be buffered, and later sent in batches
Mxpanel.Batcher.start_link(name: MyApp.Batcher, token: "<mixpanel project token>")

|> Mxpanel.track("billybob")
|> Mxpanel.deliver_later(MyApp.MxpanelBatcher)


[Checkout the documentation]( for complete usage and available functions.

## Telemetry

Mxpanel currently exposes following Telemetry events:

  * `[:mxpanel, :batcher, :buffers_info]` - Dispatched periodically by each
  running batcher exposing the size of each running buffer per endpoint in the pool.

    * Measurement: `%{}`
    * Metadata: `%{batcher_name: atom(), buffer_sizes: %{atom() => [integer()]}}`

## Changelog

See the [changelog](

<!-- MDOC !-->

## Contributing

See the [contributing file](

## License

Copyright 2021 (c) Thiago Santos.

Mxpanel source code is released under Apache 2 License.

Check [LICENSE]( file for more information.