[SOLVED] HTTP 500 error sometimes

Hi, I observe 500 error code sometimes with version 0.7.30. Any reason for this error?

Edit: I tested with an older version(0.7.26) and the below exceptions are not observed, I am thinking of downgrading, or just remove the data and setup with an older version.

12:03:18.752 erl_level=error domain=cowboy pid=<0.1431.0> [error] #PID<0.1434.0> running FzHttpWeb.Endpoint (connection #PID<0.1431.0>, stream id 2) terminated
Server: vpn.example.com:80 (http)
Request: POST /v0/devices
** (exit) an exception was raised:
    ** (Protocol.UndefinedError) protocol Jason.Encoder not implemented for %Protocol.UndefinedError{protocol: Jason.Encoder, value: %FzHttp.Types.IPPort{type: :ipv4, address: {44, 206, 128, 68}, port: 51820}, description: "Jason.Encoder protocol must always be explicitly implemented.\n\nIf you own the struct, you can derive the implementation specifying which fields should be encoded to JSON:\n\n    @derive {Jason.Encoder, only: [....]}\n    defstruct ...\n\nIt is also possible to encode all fields, although this should be used carefully to avoid accidentally leaking private information when new fields are added:\n\n    @derive Jason.Encoder\n    defstruct ...\n\nFinally, if you don't own the struct you want to encode to JSON, you may use Protocol.derive/3 placed outside of any module:\n\n    Protocol.derive(Jason.Encoder, NameOfTheStruct, only: [...])\n    Protocol.derive(Jason.Encoder, NameOfTheStruct)\n"} of type Protocol.UndefinedError (a struct), Jason.Encoder protocol must always be explicitly implemented.

If you own the struct, you can derive the implementation specifying which fields should be encoded to JSON:

    @derive {Jason.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 Jason.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(Jason.Encoder, NameOfTheStruct, only: [...])
    Protocol.derive(Jason.Encoder, NameOfTheStruct)
. This protocol is implemented for the following type(s): Any, Atom, BitString, Date, DateTime, Decimal, Ecto.Association.NotLoaded, Ecto.Schema.Metadata, Float, Integer, Jason.Fragment, Jason.OrderedObject, List, Map, NaiveDateTime, Postgrex.INET, Time
        (jason 1.4.0) lib/jason.ex:213: Jason.encode_to_iodata!/2
        (phoenix 1.7.2) lib/phoenix/controller.ex:1010: anonymous fn/5 in Phoenix.Controller.template_render_to_iodata/4
        (telemetry 1.2.1) /app/deps/telemetry/src/telemetry.erl:321: :telemetry.span/3
        (phoenix 1.7.2) lib/phoenix/controller.ex:976: Phoenix.Controller.render_and_send/4
        (phoenix 1.7.2) lib/phoenix/endpoint/render_errors.ex:84: Phoenix.Endpoint.RenderErrors.instrument_render_and_send/5
        (phoenix 1.7.2) lib/phoenix/endpoint/render_errors.ex:62: Phoenix.Endpoint.RenderErrors.__catch__/5
        (plug_cowboy 2.6.1) lib/plug/cowboy/handler.ex:11: Plug.Cowboy.Handler.init/2
        (cowboy 2.9.0) /app/deps/cowboy/src/cowboy_handler.erl:37: :cowboy_handler.execute/2

I guess some of the requests were failing as the CIDR limits were reached, we changed the limits to get the test scripts run and complete. These scripts create ~300 users and devices where as /24 was limited to ~255.

The settings to change were as below, with /16 CIDR:

WIREGUARD_IPV4_NETWORK=10.3.0.0/16
WIREGUARD_IPV4_ADDRESS=10.3.2.1