Skip to content

Confusion around Counter #110

@yordis

Description

@yordis

Hey there, currently I have the following module,

defmodule MyAppWeb.SafeResolverMiddleware do
  # ...
  @impl Absinthe.Middleware
  def call(resolution, resolver) do
    op = Enum.find(resolution.path, &current_operation?/1)

    span_nometa(
      [:safe_resolver_middleware],
      %{operation_name: operation_name(op), operation_type: operation_type(op)},
      fn -> Resolution.call(resolution, resolver) end
    )
  rescue
    exception ->
      # ....
  end

  # ... in another module
  def span_nometa(event, start_and_stop_metadata, fun) do
    # more and less what we have today
    :telemetry.span([:myapp] ++ event, start_and_stop_metadata, fn ->
      {fun.(), start_and_stop_metadata}
    end)
  end
end

Which I would like to have a counter around the exception,

counter(
  "myapp.safe_resolver_middleware.exception.duration",
  tags: [:operation_name, :operation_type]
)

Readind the following,

You could define a counter metric, which counts how many HTTP requests were
completed:
Telemetry.Metrics.counter("http.request.stop.duration")

You could define a counter metric, which counts how many HTTP requests were
completed:

Telemetry.Metrics.counter("http.request.stop.duration")

The metrics mention that it is counting how many, but it is using duration
measurement, which is confusing to me. Counting "duration" sounds odd.

I tried to change the measurement to .count, but that doesn't exist in
the measurement of the metrics so that it would fail.

measurement = %{monotonic_time: -576460706732624847, duration: 4314}
metadata = %{reason: %RuntimeError{message: "hello, world"}, stacktrace: [], kind: :error, operation_name: "listUsers", operation_type: :query, telemetry_span_context: #Reference<0.3696372234.2707161091.20455>}

I understand that I can avoid using the convention from

[:http , :request, :stop] :duration
<----- event name ------> <-- measurement -->

and I could have more control over the metrics.

Also, I could pass :count as a measurement by using :telemetry.execute/3 but
:telemetry.span/3 does not allow me to pass the measurement, and it is probably
more common to use :telemetry.span/3 than :telemetry.execute/3 I found.

So, I am confused about how to focus on just counting +1.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions