open-telemetry / opentelemetry-erlang-api

Erlang/Elixir OpenTelemetry API
Apache License 2.0
60 stars 13 forks source link

Counter.add/2 causes a warning, Counter.add/2 causes a runtime error #65

Closed marcdel closed 3 years ago

marcdel commented 4 years ago

Version information:

elixir         1.10.3
erlang         22.2.7

{:opentelemetry_api, "~> 0.3.2"}

The following code causes a compile time warning:

OpenTelemetry.Tracer.with_span "some-span" do
  OpenTelemetry.Counter.add("some-counter", 1)
end
warning: :ot_meter.record/3 is undefined or private. Did you mean one of:

      * record/2
      * record/4

While this code causes a runtime error (this is likely due to me not understanding how the API is meant to be used):

OpenTelemetry.Tracer.with_span "some-span" do
  OpenTelemetry.Counter.add("some-counter", 1, [{"label", "idk?"}])
end
[error] GenServer MetricsDemo.MetricsGenerator terminating
** (UndefinedFunctionError) function :ot_tracer_default.record/4 is undefined or private
    (opentelemetry 0.4.0) :ot_tracer_default.record({:ot_tracer_default, {:tracer, :ot_tracer_default, :ot_span_ets, :ot_ctx_pdict, #Function<0.91999149/1 in :ot_tracer_server.on_start/1>, #Function<1.91999149/1 in :ot_tracer_server.on_end/1>, {&:ot_sampler.always_on/8, []}, {:instrumentation_library, "metrics_demo", "0.1.0"}, {:telemetry_library, "opentelemetry", "erlang", "0.4.0"}, {:ot_resource, []}}}, "some-counter", [{"label", "idk"}], 1)
    (metrics_demo 0.1.0) lib/metrics_demo/metrics_generator.ex:25: anonymous fn/1 in MetricsDemo.MetricsGenerator.handle_info/2
    (opentelemetry 0.4.0) /Users/marc/Code/marcdel/metrics_demo/deps/opentelemetry/src/ot_tracer_default.erl:107: :ot_tracer_default.with_span/4
    (metrics_demo 0.1.0) lib/metrics_demo/metrics_generator.ex:20: MetricsDemo.MetricsGenerator.handle_info/2
    (stdlib 3.11.2) gen_server.erl:637: :gen_server.try_dispatch/4
    (stdlib 3.11.2) gen_server.erl:711: :gen_server.handle_msg/6
    (stdlib 3.11.2) proc_lib.erl:249: :proc_lib.init_p_do_apply/3

Not sure how erlang things get versioned, but in master at least, it looks like there are :ot_meter.record/3,4? https://github.com/open-telemetry/opentelemetry-erlang/blob/master/src/ot_meter_default.erl#L59

Happy to provide any other info that would be helpful!

tsloughter commented 4 years ago

Hey, sorry I missed this. Somehow it is getting the Tracer ot_tracer_default (function :ot_tracer_default.record/4) instead of the Meter ot_meter_default implementation when it goes to record a metric.

Can you try the latest master branches? I can't find where it would be be mixing thos eup.