Packages

Primitives for emitting and linting Datadog query syntax.

Current section

Files

Jump to
datadog_query src datadog_query@query.erl
Raw

src/datadog_query@query.erl

-module(datadog_query@query).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/datadog_query/query.gleam").
-export([new/3, by/2, with_function/2, aggregator_to_string/1, to_string/1]).
-export_type([aggregator/0, 'query'/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 aggregator() :: sum | avg | max | min | count | {percentile, integer()}.
-type 'query'() :: {'query',
aggregator(),
binary(),
binary(),
list(binary()),
list(binary())}.
-file("src/datadog_query/query.gleam", 38).
?DOC(
" Convenience constructor with sensible defaults: empty grouping and no\n"
" postfix functions. `scope` may be `\"\"` to emit the empty `{}` scope or\n"
" `filter.wildcard_all` to emit `{*}`.\n"
).
-spec new(aggregator(), binary(), binary()) -> 'query'().
new(Aggregator, Metric, Scope) ->
{'query', Aggregator, Metric, Scope, [], []}.
-file("src/datadog_query/query.gleam", 43).
?DOC(" Returns a copy of `query` with `grouping` set.\n").
-spec by('query'(), list(binary())) -> 'query'().
by(Query, Grouping) ->
{'query',
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
Grouping,
erlang:element(6, Query)}.
-file("src/datadog_query/query.gleam", 48).
?DOC(" Appends a postfix function (already-rendered) to the chain.\n").
-spec with_function('query'(), binary()) -> 'query'().
with_function(Query, Function) ->
{'query',
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
erlang:element(5, Query),
lists:append(erlang:element(6, Query), [Function])}.
-file("src/datadog_query/query.gleam", 66).
-spec aggregator_to_string(aggregator()) -> binary().
aggregator_to_string(Aggregator) ->
case Aggregator of
sum ->
<<"sum"/utf8>>;
avg ->
<<"avg"/utf8>>;
max ->
<<"max"/utf8>>;
min ->
<<"min"/utf8>>;
count ->
<<"count"/utf8>>;
{percentile, N} ->
<<"p"/utf8, (erlang:integer_to_binary(N))/binary>>
end.
-file("src/datadog_query/query.gleam", 52).
-spec to_string('query'()) -> binary().
to_string(Query) ->
Prefix = <<(aggregator_to_string(erlang:element(2, Query)))/binary,
":"/utf8>>,
Body = <<<<<<(erlang:element(3, Query))/binary, "{"/utf8>>/binary,
(erlang:element(4, Query))/binary>>/binary,
"}"/utf8>>,
By_clause = case erlang:element(5, Query) of
[] ->
<<""/utf8>>;
_ ->
<<<<" by {"/utf8,
(gleam@string:join(erlang:element(5, Query), <<","/utf8>>))/binary>>/binary,
"}"/utf8>>
end,
Func_chain = case erlang:element(6, Query) of
[] ->
<<""/utf8>>;
Fs ->
<<"."/utf8, (gleam@string:join(Fs, <<"."/utf8>>))/binary>>
end,
<<<<<<Prefix/binary, Body/binary>>/binary, By_clause/binary>>/binary,
Func_chain/binary>>.