From 5984b9d8b7529714b7a25d7735e3e9160b84d550 Mon Sep 17 00:00:00 2001 From: goddesseyes <43697935+GoddessEyes@users.noreply.github.com> Date: Thu, 27 Jul 2023 15:26:21 +0300 Subject: [PATCH] Add instream 2.0.0+ support (#6) --- .../adapters/instream_v2.ex | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 lib/telemetry_metrics_telegraf/adapters/instream_v2.ex diff --git a/lib/telemetry_metrics_telegraf/adapters/instream_v2.ex b/lib/telemetry_metrics_telegraf/adapters/instream_v2.ex new file mode 100644 index 0000000..139f6dc --- /dev/null +++ b/lib/telemetry_metrics_telegraf/adapters/instream_v2.ex @@ -0,0 +1,65 @@ +defmodule TelemetryMetricsTelegraf.Adapters.InstreamV2 do + @moduledoc """ + Writer adapter for 2+ versions [Instream](https://hex.pm/packages/instream). + + ## Options + + * `:connection` - `Instream` connection module, required; + * `:log` - controls instream queries logging, default - `false`; + + ## Example + + # instream connection + defmodule MyApp.MyConnection do + use Instream.Connection, otp_app: :my_app + end + + # telemetry metrics supervisor + defmodule MyApp.Telemetry do + use Supervisor + import Telemetry.Metrics + + def start_link(arg) do + Supervisor.start_link(__MODULE__, arg, name: __MODULE__) + end + + @impl true + def init(_arg) do + children = [ + {TelemetryMetricsTelegraf, + metrics: metrics(), + adapter: {TelemetryMetricsTelegraf.Adapters.Instream, [connection: MyApp.MyConnection]}} + ] + + Supervisor.init(children, strategy: :one_for_one) + end + + def metrics do + [ + # ... + ] + end + end + """ + + @behaviour TelemetryMetricsTelegraf.Writer + + @type options :: [{:connection, module()}, {:log, boolean()}] + + @impl TelemetryMetricsTelegraf.Writer + @spec init(options()) :: options() + def init(opts) do + [ + connection: Keyword.fetch!(opts, :connection), + log: Keyword.get(opts, :log, false) + ] + end + + @impl TelemetryMetricsTelegraf.Writer + def write(measurement_name, tags, fields, opts) do + opts[:connection].write( + %{measurement: measurement_name, fields: fields, tags: tags}, + log: opts[:log] + ) + end +end