I see this error locally when running my application. mix deps
shows versions:
- oban 2.19.1
- oban_met 0.1.11
- oban_pro 1.5.0
- oban_web 2.10.2
- telemetry 1.3.0
- telemetry_metrics 1.1.0
- telemetry_poller 1.1.0
[error] GenServer {Oban.Registry, {Oban, Oban.Met.Listener}} terminating
** (Protocol.UndefinedError) protocol JSON.Encoder not implemented for type Oban.Met.Values.Gauge (a struct), the protocol must be explicitly implemented.
If you have a struct, you can derive the implementation specifying which fields should be encoded to JSON:
@derive {JSON.Encoder, only: [....]}
defstruct ...
It is also possible to encode all fields, although this should be used carefully to avoid accidentally leaking private information when new fields are added:
@derive JSON.Encoder
defstruct ...
Finally, if you don't own the struct you want to encode to JSON, you may use Protocol.derive/3 placed outside of any module:
Protocol.derive(JSON.Encoder, NameOfTheStruct, only: [...])
Protocol.derive(JSON.Encoder, NameOfTheStruct). This protocol is implemented for the following type(s): Atom, BitString, Date, DateTime, Decimal, Duration, Float, Integer, List, Map, NaiveDateTime, Oban.Pro.Producer, Oban.Pro.Producer.Meta.GlobalLimit, Oban.Pro.Producer.Meta.GlobalLimit.Partition, Oban.Pro.Producer.Meta.RateLimit, Oban.Pro.Producer.Meta.RateLimit.Partition, Time
Got value:
%Oban.Met.Values.Gauge{data: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
(elixir 1.18.2) lib/json.ex:1: JSON.Encoder.impl_for!/1
(elixir 1.18.2) lib/json.ex:109: JSON.Encoder.encode/2
(elixir 1.18.2) src/elixir_json.erl:323: :elixir_json."-do_encode_map/2-lc$^0/1-0-"/2
(elixir 1.18.2) src/elixir_json.erl:323: :elixir_json.do_encode_map/2
(elixir 1.18.2) src/elixir_json.erl:308: :elixir_json.do_encode_list/2
(elixir 1.18.2) src/elixir_json.erl:323: :elixir_json."-do_encode_map/2-lc$^0/1-0-"/2
(elixir 1.18.2) src/elixir_json.erl:323: :elixir_json."-do_encode_map/2-lc$^0/1-0-"/2
(elixir 1.18.2) src/elixir_json.erl:323: :elixir_json.do_encode_map/2
(oban 2.19.1) lib/oban/notifier.ex:307: Oban.Notifier.encode/1
(elixir 1.18.2) lib/enum.ex:1714: Enum."-map/2-lists^map/1-1-"/2
(oban 2.19.1) lib/oban/notifier.ex:202: anonymous fn/4 in Oban.Notifier.notify/3
(telemetry 1.3.0) /Users/me/code/myapp/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3
(oban_met 0.1.11) lib/oban/met/listener.ex:82: Oban.Met.Listener.handle_info/2
(stdlib 6.2) gen_server.erl:2345: :gen_server.try_handle_info/3
(stdlib 6.2) gen_server.erl:2433: :gen_server.handle_msg/6
(stdlib 6.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
Last message: :report