README.md

# Opencensus.Plug

[![CircleCI](https://circleci.com/gh/opencensus-beam/opencensus_plug.svg?style=svg)](https://circleci.com/gh/opencensus-beam/opencensus_plug)
[![CodeCov](https://codecov.io/gh/opencensus-beam/opencensus_plug/branch/master/graph/badge.svg)](https://codecov.io/gh/opencensus-beam/opencensus_plug)
[![Inline docs](http://inch-ci.org/github/opencensus-beam/opencensus_plug.svg)](http://inch-ci.org/github/opencensus-beam/opencensus_plug)

[Plug][plug] integration for [OpenCensus][oc]. It provides tracer and metrics
integration.

## Installation

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

```elixir
def deps do
  [
    {:opencensus_plug, "~> 0.1.0"}
  ]
end
```

The docs can be found at [https://hexdocs.pm/opencensus\_plug](https://hexdocs.pm/opencensus_plug).

## Usage

### Tracing

Create tracing module:

```elixir
defmodule MyApp.TracePlug do
  use Opencensus.Plug.Trace
end
```

And then add it on the beginning of your pipeline (the sooner the better):

```elixir
plug MyApp.TracePlug
```

This will extract parent trace from the headers accordingly
to [Tracing Context](https://github.com/w3c/trace-context) proposal and it will
create new span. By default span name will match request path, you can configure
that by defining `span_name/2` method that will receive `Plug.Conn.t` as a first
argument and plug options as a second.

### Metrics

Create metrics module:

```elixir
defmodule MyApp.MetricsPlug do
  use Opencensus.Plug.Metrics
end
```

And then add it on the beginning of your pipeline (the sooner the better):

```elixir
plug MyApp.MetricsPlug
```

You also need to define metrics that will be measured, fortunately there is
helper method for you, just call `MyApp.MetricsPlug.setup_metrics()` **before**
running pipeline.

Available metrics:

- `"plug/requests/duration"` - request duration in microseconds
- `"plug/requests/count"` - requests count

**WARNING!** This defines only metrics, not views. You need to define views on
your own to be able to see them in the exporters.

## License

See [LICENSE](LICENSE) file.

[plug]: https://github.com/elixir-plug/plug
[oc]: https://opencensus.io