Skip to content

Commit ab86164

Browse files
authored
Console log measurement name with conversion fun name (#109)
1 parent 182dbd7 commit ab86164

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

lib/telemetry_metrics/console_reporter.ex

+10-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ defmodule Telemetry.Metrics.ConsoleReporter do
8585
for %struct{} = metric <- metrics do
8686
header = """
8787
88-
Metric measurement: #{inspect(metric.measurement)} (#{metric(struct)})
88+
Metric measurement: #{measurement_name(metric)} (#{metric(struct)})
8989
"""
9090

9191
[
@@ -133,6 +133,15 @@ defmodule Telemetry.Metrics.ConsoleReporter do
133133
IO.puts(device, [prelude | parts])
134134
end
135135

136+
defp measurement_name(%{measurement: measurement}) when is_atom(measurement),
137+
do: inspect(measurement)
138+
139+
defp measurement_name(%{measurement: fun, name: name}) when is_function(fun) do
140+
measurement = List.last(name)
141+
142+
"#{inspect(measurement)} [via #{inspect(fun)}]"
143+
end
144+
136145
defp keep?(%{keep: nil}, _metadata), do: true
137146
defp keep?(metric, metadata), do: metric.keep.(metadata)
138147

test/console_reporter_test.exs

+42-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ defmodule Telemetry.Metrics.ConsoleReporterTest do
3030
),
3131
distribution("phoenix.endpoint.stop.duration",
3232
measurement: &__MODULE__.measurement/1
33-
)
33+
),
34+
summary("my_app.repo.query.query_time", unit: {:native, :millisecond})
3435
]
3536

3637
{:ok, device} = StringIO.open("")
@@ -158,7 +159,7 @@ defmodule Telemetry.Metrics.ConsoleReporterTest do
158159
All measurements: %{}
159160
All metadata: %{key: :value}
160161
161-
Metric measurement: &Telemetry.Metrics.ConsoleReporterTest.metadata_measurement/2 (sum)
162+
Metric measurement: :metadata [via &Telemetry.Metrics.ConsoleReporterTest.metadata_measurement/2] (sum)
162163
With value: 1
163164
Tag values: %{}
164165
@@ -176,10 +177,48 @@ defmodule Telemetry.Metrics.ConsoleReporterTest do
176177
All measurements: %{duration: 100}
177178
All metadata: %{}
178179
179-
Metric measurement: &Telemetry.Metrics.ConsoleReporterTest.measurement/1 (distribution)
180+
Metric measurement: :duration [via &Telemetry.Metrics.ConsoleReporterTest.measurement/1] (distribution)
180181
With value: 100
181182
Tag values: %{}
182183
183184
"""
184185
end
186+
187+
test "can show metric name and unit conversion fun", %{device: device, formatter: formatter} do
188+
event = [:my_app, :repo, :query]
189+
native_time = :erlang.system_time()
190+
191+
expected_millisecond = native_time * (1 / System.convert_time_unit(1, :millisecond, :native))
192+
193+
expected_measurement_fun = measurement_fun(event, :query_time, formatter, device)
194+
195+
:telemetry.execute(event, %{query_time: native_time})
196+
197+
{_in, out} = StringIO.contents(device)
198+
199+
assert out == """
200+
[Telemetry.Metrics.ConsoleReporter] Got new event!
201+
Event name: my_app.repo.query
202+
All measurements: %{query_time: #{native_time}}
203+
All metadata: %{}
204+
205+
Metric measurement: :query_time [via #{inspect(expected_measurement_fun)}] (summary)
206+
With value: #{expected_millisecond} millisecond
207+
Tag values: %{}
208+
209+
"""
210+
end
211+
212+
defp measurement_fun(event, measurement, formatter, device) do
213+
name = event ++ [measurement]
214+
215+
event
216+
|> :telemetry.list_handlers()
217+
|> Enum.find_value(fn
218+
%{id: {Telemetry.Metrics.ConsoleReporter, ^event, ^formatter}, config: {config, ^device}} ->
219+
Enum.find_value(config, fn %{name: ^name, measurement: fun} when is_function(fun) ->
220+
fun
221+
end)
222+
end)
223+
end
185224
end

0 commit comments

Comments
 (0)