defmodule Exbox.Metrics.ControllerSeries do @moduledoc """ This module defines generic controller metrics. The fields captured are: * duration_ms - The time taken to process the request in milliseconds * success - Whether the request was successful (1.0) or not (0.0) * path - The path of the request * http_referer - The referer of the request * count - The number of requests * request_id - The request ID of the request The tags allowed are: * controller - The name of the controller * action - The name of the action * method - The HTTP method of the request * format - The format of the request * status - The status of the request """ use Instream.Series series do measurement("controller_metrics") tag(:controller) tag(:action) tag(:method) tag(:format) tag(:status) field(:duration_ms) field(:success) field(:path) field(:http_referer) field(:trace_id) field(:count) field(:request_id) end @doc """ Adds a tag to the series """ @spec tag(t(), atom(), any()) :: t() def tag(%__MODULE__{} = series, key, value) do %{series | tags: Map.put(series.tags, key, value)} end @doc """ Adds a field to the series """ @spec field(t(), atom(), any()) :: t() def field(%__MODULE__{} = series, key, value) do %{series | fields: Map.put(series.fields, key, value)} end end