-module(datadog_client@metric).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/datadog_client/metric.gleam").
-export([gauge/2, count/2, rate/2, with_tags/2, add_tag/2, with_host/2, with_type/2, with_interval/2, with_points/2, add_point/3, to_json/1]).
-export_type([point/0, metric_type/0, metric/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type point() :: {point, integer(), float()}.
-type metric_type() :: gauge | count | rate.
-opaque metric() :: {metric,
binary(),
metric_type(),
list(point()),
list(binary()),
gleam@option:option(binary()),
gleam@option:option(integer())}.
-file("src/datadog_client/metric.gleam", 47).
-spec build(binary(), metric_type(), float()) -> metric().
build(Name, Kind, Value) ->
{metric,
Name,
Kind,
[{point, datadog_client@common:now_seconds(), Value}],
[],
none,
none}.
-file("src/datadog_client/metric.gleam", 33).
?DOC(" Gauge metric at the current time.\n").
-spec gauge(binary(), float()) -> metric().
gauge(Name, Value) ->
build(Name, gauge, Value).
-file("src/datadog_client/metric.gleam", 38).
?DOC(" Count metric at the current time.\n").
-spec count(binary(), float()) -> metric().
count(Name, Value) ->
build(Name, count, Value).
-file("src/datadog_client/metric.gleam", 43).
?DOC(" Rate metric at the current time. Set the interval with `with_interval`.\n").
-spec rate(binary(), float()) -> metric().
rate(Name, Value) ->
build(Name, rate, Value).
-file("src/datadog_client/metric.gleam", 61).
?DOC(" Replace the metric's tags.\n").
-spec with_tags(metric(), list(binary())) -> metric().
with_tags(Metric, Tags) ->
{metric,
erlang:element(2, Metric),
erlang:element(3, Metric),
erlang:element(4, Metric),
Tags,
erlang:element(6, Metric),
erlang:element(7, Metric)}.
-file("src/datadog_client/metric.gleam", 66).
?DOC(" Append a single tag.\n").
-spec add_tag(metric(), binary()) -> metric().
add_tag(Metric, Tag) ->
{metric,
erlang:element(2, Metric),
erlang:element(3, Metric),
erlang:element(4, Metric),
[Tag | erlang:element(5, Metric)],
erlang:element(6, Metric),
erlang:element(7, Metric)}.
-file("src/datadog_client/metric.gleam", 71).
?DOC(" Set the reporting host.\n").
-spec with_host(metric(), binary()) -> metric().
with_host(Metric, Host) ->
{metric,
erlang:element(2, Metric),
erlang:element(3, Metric),
erlang:element(4, Metric),
erlang:element(5, Metric),
{some, Host},
erlang:element(7, Metric)}.
-file("src/datadog_client/metric.gleam", 76).
?DOC(" Set the metric type (gauge/count/rate).\n").
-spec with_type(metric(), metric_type()) -> metric().
with_type(Metric, Kind) ->
{metric,
erlang:element(2, Metric),
Kind,
erlang:element(4, Metric),
erlang:element(5, Metric),
erlang:element(6, Metric),
erlang:element(7, Metric)}.
-file("src/datadog_client/metric.gleam", 81).
?DOC(" Set the flush interval in seconds (required for `Rate`).\n").
-spec with_interval(metric(), integer()) -> metric().
with_interval(Metric, Seconds) ->
{metric,
erlang:element(2, Metric),
erlang:element(3, Metric),
erlang:element(4, Metric),
erlang:element(5, Metric),
erlang:element(6, Metric),
{some, Seconds}}.
-file("src/datadog_client/metric.gleam", 86).
?DOC(" Replace all points.\n").
-spec with_points(metric(), list(point())) -> metric().
with_points(Metric, Points) ->
{metric,
erlang:element(2, Metric),
erlang:element(3, Metric),
Points,
erlang:element(5, Metric),
erlang:element(6, Metric),
erlang:element(7, Metric)}.
-file("src/datadog_client/metric.gleam", 91).
?DOC(" Append a single point at the given timestamp.\n").
-spec add_point(metric(), integer(), float()) -> metric().
add_point(Metric, Timestamp, Value) ->
{metric,
erlang:element(2, Metric),
erlang:element(3, Metric),
[{point, Timestamp, Value} | erlang:element(4, Metric)],
erlang:element(5, Metric),
erlang:element(6, Metric),
erlang:element(7, Metric)}.
-file("src/datadog_client/metric.gleam", 121).
-spec point_to_json(point()) -> gleam@json:json().
point_to_json(Point) ->
gleam@json:preprocessed_array(
[gleam@json:int(erlang:element(2, Point)),
gleam@json:float(erlang:element(3, Point))]
).
-file("src/datadog_client/metric.gleam", 125).
-spec type_to_string(metric_type()) -> binary().
type_to_string(Kind) ->
case Kind of
gauge ->
<<"gauge"/utf8>>;
count ->
<<"count"/utf8>>;
rate ->
<<"rate"/utf8>>
end.
-file("src/datadog_client/metric.gleam", 101).
?DOC(" JSON object for a single metric, matching Datadog's v1 series schema.\n").
-spec to_json(metric()) -> gleam@json:json().
to_json(Metric) ->
Base = [{<<"metric"/utf8>>, gleam@json:string(erlang:element(2, Metric))},
{<<"type"/utf8>>,
gleam@json:string(type_to_string(erlang:element(3, Metric)))},
{<<"points"/utf8>>,
gleam@json:array(erlang:element(4, Metric), fun point_to_json/1)},
{<<"tags"/utf8>>,
gleam@json:array(erlang:element(5, Metric), fun gleam@json:string/1)}],
With_host_field = case erlang:element(6, Metric) of
{some, H} ->
[{<<"host"/utf8>>, gleam@json:string(H)} | Base];
none ->
Base
end,
_pipe = case erlang:element(7, Metric) of
{some, I} ->
[{<<"interval"/utf8>>, gleam@json:int(I)} | With_host_field];
none ->
With_host_field
end,
gleam@json:object(_pipe).