telemetry icon indicating copy to clipboard operation
telemetry copied to clipboard

small qol update to :telemetry.attach/4 docs

Open ethangunderson opened this issue 2 years ago • 2 comments

This has come up a few times for us. It's not always obvious that the function supplied to attach must be /4. When supplying something else you get an exception message that also doesn't reveal the problem.

iex(2)> :telemetry.attach("test", [:test, :event], fn -> IO.inspect("Hello") end, nil)
** (FunctionClauseError) no function clause matching in :telemetry.attach_many/4

    The following arguments were given to :telemetry.attach_many/4:
        # 1
        "test"

        # 2
        [[:test, :event]]

        # 3
        #Function<43.3316493/0 in :erl_eval.expr/6>

        # 4
        nil

    (telemetry 1.2.1) /Users/egunderson/Library/Caches/mix/installs/elixir-1.14.2-erts-13.1.2/e123f7ef1d039f8d998d1a6a03fb9b81/deps/telemetry/src/telemetry.erl:106: :telemetry.attach_many/4
    iex:2: (file)

I'm hoping that adding a slightly more explicit explanation of the function argument in function doc will help some people avoid this confusion in the future.

ethangunderson avatar Jan 17 '23 20:01 ethangunderson

I think it might be worth improving the error message too. In Elixir, we've often done this by removing the arity from the is_function check. In this case, that is, use is_function(Fun) instead of is_function(Fun, 4). With this, when you try to call the function with a wrong arity, the error message is a lot easier to debug 😉

whatyouhide avatar Jan 18 '23 06:01 whatyouhide

@whatyouhide I like that suggestion. Do you want me to make that change in this PR?

ethangunderson avatar Jan 18 '23 14:01 ethangunderson