-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).