README.md

# OpentelemetryFinch

OpentelemetryFinch uses [telemetry](https://hexdocs.pm/telemetry/) handlers to
create `OpenTelemetry` spans from Finch events.

## Installation

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

```elixir
  def deps do
    [
      {:opentelemetry_finch, "~> 0.1"}
    ]
  end
```

In your application start:

```elixir
  def start(_type, _args) do
    OpentelemetryFinch.setup()

    # ...
  end
```

*Since this instrumentation is based on telemetry, it is not possible to automatically propagate the context in the http headers. If you need to perform context propagation, you should opt for manual instrumentation. Something like this:*

```elixir
    require OpenTelemetry.Tracer, as: Tracer

    Tracer.with_span "HTTP #{url}" do
      headers = :otel_propagator_text_map.inject([])

      with request <- Finch.build(:get, url, headers),
           {:ok, response} <- Finch.request(request, HttpFinch) do

        Tracer.set_attributes([
          {"http.url", url},
          {"http.method", request.method},
          {"http.status_code", response.status}])
        {:ok, response}
      else
        {:error, %{__exception__: true} = error} ->
          Tracer.set_status(:error, Exception.message(error))
          {:error, error}
      end
    end
```

## Compatibility Matrix

| OpentelemetryFinch Version | Otel Version | Notes |
| :------------------------- | :----------- | :---- |
|                            |              |       |
| v0.1.0                     | v1.0.0       |       |


Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at [https://hexdocs.pm/opentelemetry_finch](https://hexdocs.pm/opentelemetry_finch).