Current section
Files
Jump to
Current section
Files
src/datadog_query@filter.erl
-module(datadog_query@filter).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/datadog_query/filter.gleam").
-export([tag/2, negated_tag/2, tag_in/2, tag_not_in/2, tag_gt/2, tag_gte/2, tag_lt/2, tag_lte/2, tag_gt_int/2, tag_gte_int/2, tag_lt_int/2, tag_lte_int/2, tag_regex/2, all_of/1, any_of/1, group/1, not_/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/datadog_query/filter.gleam", 17).
?DOC(" `name:value` — wildcards in `value` are preserved.\n").
-spec tag(binary(), binary()) -> binary().
tag(Name, Value) ->
<<<<Name/binary, ":"/utf8>>/binary,
(datadog_query@quote:value(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 22).
?DOC(" `!name:value` — negated tag filter.\n").
-spec negated_tag(binary(), binary()) -> binary().
negated_tag(Name, Value) ->
<<<<<<"!"/utf8, Name/binary>>/binary, ":"/utf8>>/binary,
(datadog_query@quote:value(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 27).
?DOC(" `name IN (v1, v2, ...)` — empty list returns \"\".\n").
-spec tag_in(binary(), list(binary())) -> binary().
tag_in(Name, Values) ->
case Values of
[] ->
<<""/utf8>>;
_ ->
<<<<<<Name/binary, " IN ("/utf8>>/binary,
(begin
_pipe = Values,
_pipe@1 = gleam@list:map(
_pipe,
fun datadog_query@quote:value/1
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end)/binary>>/binary,
")"/utf8>>
end.
-file("src/datadog_query/filter.gleam", 39).
?DOC(" `name NOT IN (v1, v2, ...)` — empty list returns \"\".\n").
-spec tag_not_in(binary(), list(binary())) -> binary().
tag_not_in(Name, Values) ->
case Values of
[] ->
<<""/utf8>>;
_ ->
<<<<<<Name/binary, " NOT IN ("/utf8>>/binary,
(begin
_pipe = Values,
_pipe@1 = gleam@list:map(
_pipe,
fun datadog_query@quote:value/1
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end)/binary>>/binary,
")"/utf8>>
end.
-file("src/datadog_query/filter.gleam", 74).
?DOC(
" Datadog rejects scientific notation in thresholds, but `float.to_string`\n"
" emits `1.0e3` for whole values. Render whole numbers as `N.0`, fall back\n"
" to `float.to_string` for fractional values.\n"
).
-spec format_float(float()) -> binary().
format_float(F) ->
Truncated = erlang:trunc(F),
case erlang:float(Truncated) =:= F of
true ->
<<(erlang:integer_to_binary(Truncated))/binary, ".0"/utf8>>;
false ->
gleam_stdlib:float_to_string(F)
end.
-file("src/datadog_query/filter.gleam", 52).
?DOC(
" `name:>value` — numeric greater-than. Value rendered without quoting\n"
" since comparisons are only meaningful on numbers/durations.\n"
).
-spec tag_gt(binary(), float()) -> binary().
tag_gt(Name, Value) ->
<<<<Name/binary, ":>"/utf8>>/binary, (format_float(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 57).
?DOC(" `name:>=value`.\n").
-spec tag_gte(binary(), float()) -> binary().
tag_gte(Name, Value) ->
<<<<Name/binary, ":>="/utf8>>/binary, (format_float(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 62).
?DOC(" `name:<value`.\n").
-spec tag_lt(binary(), float()) -> binary().
tag_lt(Name, Value) ->
<<<<Name/binary, ":<"/utf8>>/binary, (format_float(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 67).
?DOC(" `name:<=value`.\n").
-spec tag_lte(binary(), float()) -> binary().
tag_lte(Name, Value) ->
<<<<Name/binary, ":<="/utf8>>/binary, (format_float(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 84).
?DOC(
" Integer variant of `tag_gt`. Convenience for callers working with\n"
" integer thresholds (e.g. `@http.status_code:>=500`).\n"
).
-spec tag_gt_int(binary(), integer()) -> binary().
tag_gt_int(Name, Value) ->
<<<<Name/binary, ":>"/utf8>>/binary,
(erlang:integer_to_binary(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 88).
-spec tag_gte_int(binary(), integer()) -> binary().
tag_gte_int(Name, Value) ->
<<<<Name/binary, ":>="/utf8>>/binary,
(erlang:integer_to_binary(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 92).
-spec tag_lt_int(binary(), integer()) -> binary().
tag_lt_int(Name, Value) ->
<<<<Name/binary, ":<"/utf8>>/binary,
(erlang:integer_to_binary(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 96).
-spec tag_lte_int(binary(), integer()) -> binary().
tag_lte_int(Name, Value) ->
<<<<Name/binary, ":<="/utf8>>/binary,
(erlang:integer_to_binary(Value))/binary>>.
-file("src/datadog_query/filter.gleam", 102).
?DOC(
" `name:~pattern` — regex match. Pattern is quoted via `quote.value` so\n"
" patterns containing whitespace round-trip safely.\n"
).
-spec tag_regex(binary(), binary()) -> binary().
tag_regex(Name, Pattern) ->
<<<<Name/binary, ":~"/utf8>>/binary,
(datadog_query@quote:value(Pattern))/binary>>.
-file("src/datadog_query/filter.gleam", 109).
?DOC(
" Joins sub-filters with ` AND `. Empty-string fragments are dropped so\n"
" composing with `tag_in([])` doesn't leave a dangling joiner.\n"
" Empty list (or all-empty list) returns \"\".\n"
).
-spec all_of(list(binary())) -> binary().
all_of(Filters) ->
_pipe = Filters,
_pipe@1 = gleam@list:filter(_pipe, fun(F) -> F /= <<""/utf8>> end),
gleam@string:join(_pipe@1, <<" AND "/utf8>>).
-file("src/datadog_query/filter.gleam", 114).
?DOC(" Joins sub-filters with ` OR `. See `all_of` for empty-fragment handling.\n").
-spec any_of(list(binary())) -> binary().
any_of(Filters) ->
_pipe = Filters,
_pipe@1 = gleam@list:filter(_pipe, fun(F) -> F /= <<""/utf8>> end),
gleam@string:join(_pipe@1, <<" OR "/utf8>>).
-file("src/datadog_query/filter.gleam", 130).
?DOC(" Wraps a sub-filter in parens. Empty input returns \"\" (no `()`).\n").
-spec group(binary()) -> binary().
group(Filter) ->
case Filter of
<<""/utf8>> ->
<<""/utf8>>;
_ ->
<<<<"("/utf8, Filter/binary>>/binary, ")"/utf8>>
end.
-file("src/datadog_query/filter.gleam", 122).
?DOC(
" `NOT <filter>` — boolean negation of a sub-expression.\n"
" Differs from `negated_tag`: that emits `!key:value` (negation of a\n"
" SimpleFilter token); this emits `NOT (...)` over arbitrary sub-filters.\n"
" Empty input returns \"\".\n"
).
-spec not_(binary()) -> binary().
not_(Filter) ->
case Filter of
<<""/utf8>> ->
<<""/utf8>>;
_ ->
<<"NOT "/utf8, (group(Filter))/binary>>
end.