# `TelemetryDeck.Client`
[🔗](https://github.com/boldflight/telemetry-deck-elixir/blob/v0.1.0/lib/telemetry_deck/client.ex#L1)

Sends `TelemetryDeck.Signal` data to TelemetryDeck Ingest API v2.

`TelemetryDeck.Client` posts signals as the JSON array shape expected by
TelemetryDeck. A custom request function can be provided through
`TelemetryDeck.Config` for tests or alternate HTTP behavior.

# `send`
*since 0.1.0* 

```elixir
@spec send(TelemetryDeck.Config.t(), TelemetryDeck.Signal.t()) ::
  {:ok, TelemetryDeck.Response.t()} | {:error, TelemetryDeck.Error.t()}
```

Sends one `TelemetryDeck.Signal`.

Returns `{:ok, %TelemetryDeck.Response{}}` for 2xx responses and
`{:error, %TelemetryDeck.Error{}}` for request failures or non-2xx responses.

## Examples

    iex> config =
    ...>   TelemetryDeck.Config.new!(
    ...>     namespace: "acme",
    ...>     app_id: "APP-ID",
    ...>     request_fun: fn _url, _opts -> {:ok, %Req.Response{status: 202, body: "accepted"}} end
    ...>   )
    iex> signal = TelemetryDeck.Signal.new!(type: "App.started", client_user: "user-hash")
    iex> TelemetryDeck.Client.send(config, signal)
    {:ok, %TelemetryDeck.Response{status: 202, body: "accepted"}}

# `send_batch`
*since 0.1.0* 

```elixir
@spec send_batch(TelemetryDeck.Config.t(), [TelemetryDeck.Signal.t()]) ::
  {:ok, TelemetryDeck.Response.t()} | {:error, TelemetryDeck.Error.t()}
```

Sends multiple `TelemetryDeck.Signal` structs in one request.

TelemetryDeck Ingest API v2 accepts an array of signal objects, so batching is
the natural transport shape for this client.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
