Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -120,5 +120,8 @@ distclean: clean-build-image

test: eunit common-test

dbg:
$(REBAR) ct -v --suite=apps/hellgate/test/hg_invoice_tests_SUITE.erl --group=all_non_destructive_tests --case=payment_big_cascade_success

cover-report:
$(REBAR) cover
23 changes: 7 additions & 16 deletions apps/hellgate/src/hellgate.erl
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,10 @@ ensure_otel_log_handler() ->
DelayMs = application:get_env(hellgate, otel_log_scheduled_delay_ms, 1000),
TimeoutMs = application:get_env(hellgate, otel_log_exporting_timeout_ms, 300000),
LogLevel = application:get_env(hellgate, otel_log_level, info),
HandlerConfig = #{
report_cb => fun hg_otel_log_filter:format_otp_report_utf8/1,
LoggerHandlerConfig = #{
level => LogLevel,
filter_default => log,
filters => [{hg_otel_trace_id_bytes, {fun hg_otel_log_filter:filter/2, undefined}}],
exporter =>
{otel_exporter_logs_otlp, #{
protocol => http_protobuf,
Expand All @@ -145,13 +147,7 @@ ensure_otel_log_handler() ->
scheduled_delay_ms => DelayMs,
exporting_timeout_ms => TimeoutMs
},
LoggerHandlerConfig = #{
level => LogLevel,
filter_default => log,
filters => [{hg_otel_trace_id_bytes, {fun hg_otel_log_filter:filter/2, undefined}}],
config => HandlerConfig
},
case logger:add_handler(otel_logs, hg_otel_log_handler, LoggerHandlerConfig) of
case logger:add_handler(otel_logs, otel_log_handler, LoggerHandlerConfig) of
ok ->
ok;
{error, {already_exist, _}} ->
Expand All @@ -171,13 +167,8 @@ ensure_otel_log_handler() ->
flush_otel_logs() ->
case logger:get_handler_config(otel_logs) of
{ok, HandlerCfg} ->
Config = maps:get(config, HandlerCfg, #{}),
DelayMs = maps:get(
scheduled_delay_ms,
Config,
maps:get(scheduled_delay_ms, HandlerCfg, 1000)
),
_ = logger:info("otel_log_handler_flush"),
_ = logger:info("Waiting for OTEL logs exporter to flush"),
DelayMs = maps:get(scheduled_delay_ms, HandlerCfg, 1000),
timer:sleep(erlang:min(?FLUSH_MAX_WAIT_MS, DelayMs + ?FLUSH_EXPORT_OVERHEAD_MS)),
ok;
_ ->
Expand Down
24 changes: 1 addition & 23 deletions apps/hellgate/src/hg_otel_log_filter.erl
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,10 @@
-module(hg_otel_log_filter).

-export([filter/2]).
-export([format_otp_report_utf8/1]).

-spec filter(logger:log_event(), term()) -> logger:filter_return().
filter(#{meta := Meta} = LogEvent, _FilterConfig) ->
case convert_otel_ids(Meta) of
Meta ->
LogEvent;
Meta1 ->
LogEvent#{meta => Meta1}
end.
LogEvent#{meta := convert_otel_ids(Meta)}.

%% Конвертируем hex -> raw bytes только если формат hex (32/16 символов).
%% OTLP LogRecord: trace_id=16 bytes, span_id=8 bytes.
Expand All @@ -30,22 +24,6 @@ convert_otel_ids(#{otel_trace_id := TraceIdHex, otel_span_id := SpanIdHex} = Met
convert_otel_ids(Meta) ->
Meta.

%% logger:format_otp_report/1 возвращает chardata (часто list()),
%% из-за чего downstream JSON может сериализовать body как массив байт.
%% Явно приводим к UTF-8 binary(), чтобы body в OTel/Loki был строкой.
-spec format_otp_report_utf8(logger:report()) -> {unicode:chardata(), list()}.
format_otp_report_utf8(Report) ->
Bin =
try logger:format_otp_report(Report) of
{Format, Args} ->
unicode:characters_to_binary(io_lib:format(Format, Args))
catch
_:_ ->
%% Не даём report_cb падать: fallback в печатное представление отчёта.
unicode:characters_to_binary(io_lib:format("~tp", [Report]))
end,
{"~ts", [Bin]}.

hex_to_trace_id_bytes(Hex) when is_binary(Hex), byte_size(Hex) =:= 32 ->
try
<<(binary_to_integer(Hex, 16)):128>>
Expand Down
48 changes: 0 additions & 48 deletions apps/hellgate/src/hg_otel_log_handler.erl

This file was deleted.

1 change: 1 addition & 0 deletions apps/hellgate/test/hg_invoice_tests_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ groups() ->

-spec init_per_suite(config()) -> config().
init_per_suite(C) ->
% ok = logger:set_primary_config(level, debug),
% _ = dbg:tracer(),
% _ = dbg:p(all, c),
% _ = dbg:tpl({'hg_invoice_payment', 'p', '_'}, x),
Expand Down
4 changes: 2 additions & 2 deletions rebar.lock
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,12 @@
0},
{<<"opentelemetry_experimental">>,
{git_subdir,"https://github.com/valitydev/opentelemetry-erlang.git",
{ref,"685389b35fb188166e072c389a487a8e5a9f0804"},
{ref,"ddf1efb45e3d2f334ff4b78f0d482f2ab9d32428"},
"apps/opentelemetry_experimental"},
0},
{<<"opentelemetry_exporter">>,
{git_subdir,"https://github.com/valitydev/opentelemetry-erlang.git",
{ref,"685389b35fb188166e072c389a487a8e5a9f0804"},
{ref,"ddf1efb45e3d2f334ff4b78f0d482f2ab9d32428"},
"apps/opentelemetry_exporter"},
0},
{<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.1">>},2},
Expand Down
Loading