quic_qlog (quic v1.3.1)

View Source

QLOG Tracing for QUIC (draft-ietf-quic-qlog-quic-events)

Provides JSON-SEQ format trace files for debug visibility with Wireshark/qvis compatibility.

Usage: pass qlog option to quic:connect/4: #{qlog => #{enabled => true, dir => "/tmp/qlog"}}

Summary

Functions

Close the QLOG context and flush remaining data.

Log connection_closed event.

Log connection_started event.

Log connection_state_updated event.

Log frames_processed event.

Check if QLOG is enabled for this context.

Log metrics_updated event.

Create a new QLOG context from connection options. Returns undefined if qlog is disabled.

Log packet_lost event.

Log a packet_received event.

Log a packet_sent event.

Start the async writer process.

Writer process main loop.

Types

qlog_opts/0

-type qlog_opts() :: #{enabled => boolean(), dir => file:filename(), events => all | [atom()]}.

Functions

close(Qlog_ctx)

-spec close(#qlog_ctx{enabled :: boolean(),
                      writer :: pid() | undefined,
                      odcid :: binary() | undefined,
                      reference_time :: integer() | undefined,
                      vantage_point :: client | server | undefined,
                      events :: all | [atom()],
                      dir :: file:filename()} |
            undefined) ->
               ok.

Close the QLOG context and flush remaining data.

connection_closed(Qlog_ctx, ErrorCode, Reason)

-spec connection_closed(#qlog_ctx{enabled :: boolean(),
                                  writer :: pid() | undefined,
                                  odcid :: binary() | undefined,
                                  reference_time :: integer() | undefined,
                                  vantage_point :: client | server | undefined,
                                  events :: all | [atom()],
                                  dir :: file:filename()} |
                        undefined,
                        integer() | atom(),
                        binary() | undefined) ->
                           ok.

Log connection_closed event.

connection_started(Qlog_ctx)

-spec connection_started(#qlog_ctx{enabled :: boolean(),
                                   writer :: pid() | undefined,
                                   odcid :: binary() | undefined,
                                   reference_time :: integer() | undefined,
                                   vantage_point :: client | server | undefined,
                                   events :: all | [atom()],
                                   dir :: file:filename()} |
                         undefined) ->
                            ok.

Log connection_started event.

connection_state_updated(Qlog_ctx, OldState, NewState)

-spec connection_state_updated(#qlog_ctx{enabled :: boolean(),
                                         writer :: pid() | undefined,
                                         odcid :: binary() | undefined,
                                         reference_time :: integer() | undefined,
                                         vantage_point :: client | server | undefined,
                                         events :: all | [atom()],
                                         dir :: file:filename()} |
                               undefined,
                               atom(),
                               atom()) ->
                                  ok.

Log connection_state_updated event.

frames_processed(Qlog_ctx, Frames)

-spec frames_processed(#qlog_ctx{enabled :: boolean(),
                                 writer :: pid() | undefined,
                                 odcid :: binary() | undefined,
                                 reference_time :: integer() | undefined,
                                 vantage_point :: client | server | undefined,
                                 events :: all | [atom()],
                                 dir :: file:filename()} |
                       undefined,
                       [term()]) ->
                          ok.

Log frames_processed event.

is_enabled(Qlog_ctx)

-spec is_enabled(#qlog_ctx{enabled :: boolean(),
                           writer :: pid() | undefined,
                           odcid :: binary() | undefined,
                           reference_time :: integer() | undefined,
                           vantage_point :: client | server | undefined,
                           events :: all | [atom()],
                           dir :: file:filename()} |
                 undefined) ->
                    boolean().

Check if QLOG is enabled for this context.

metrics_updated(Qlog_ctx, Metrics)

-spec metrics_updated(#qlog_ctx{enabled :: boolean(),
                                writer :: pid() | undefined,
                                odcid :: binary() | undefined,
                                reference_time :: integer() | undefined,
                                vantage_point :: client | server | undefined,
                                events :: all | [atom()],
                                dir :: file:filename()} |
                      undefined,
                      map()) ->
                         ok.

Log metrics_updated event.

new(Opts, ODCID, VantagePoint)

-spec new(Opts :: map(), ODCID :: binary(), VantagePoint :: client | server) ->
             #qlog_ctx{enabled :: boolean(),
                       writer :: pid() | undefined,
                       odcid :: binary() | undefined,
                       reference_time :: integer() | undefined,
                       vantage_point :: client | server | undefined,
                       events :: all | [atom()],
                       dir :: file:filename()} |
             undefined.

Create a new QLOG context from connection options. Returns undefined if qlog is disabled.

packet_lost(Qlog_ctx, Info)

-spec packet_lost(#qlog_ctx{enabled :: boolean(),
                            writer :: pid() | undefined,
                            odcid :: binary() | undefined,
                            reference_time :: integer() | undefined,
                            vantage_point :: client | server | undefined,
                            events :: all | [atom()],
                            dir :: file:filename()} |
                  undefined,
                  map()) ->
                     ok.

Log packet_lost event.

packet_received(Qlog_ctx, Info)

-spec packet_received(#qlog_ctx{enabled :: boolean(),
                                writer :: pid() | undefined,
                                odcid :: binary() | undefined,
                                reference_time :: integer() | undefined,
                                vantage_point :: client | server | undefined,
                                events :: all | [atom()],
                                dir :: file:filename()} |
                      undefined,
                      map()) ->
                         ok.

Log a packet_received event.

packet_sent(Qlog_ctx, Info)

-spec packet_sent(#qlog_ctx{enabled :: boolean(),
                            writer :: pid() | undefined,
                            odcid :: binary() | undefined,
                            reference_time :: integer() | undefined,
                            vantage_point :: client | server | undefined,
                            events :: all | [atom()],
                            dir :: file:filename()} |
                  undefined,
                  map()) ->
                     ok.

Log a packet_sent event.

packets_acked(Qlog_ctx, PacketNumbers, Info)

-spec packets_acked(#qlog_ctx{enabled :: boolean(),
                              writer :: pid() | undefined,
                              odcid :: binary() | undefined,
                              reference_time :: integer() | undefined,
                              vantage_point :: client | server | undefined,
                              events :: all | [atom()],
                              dir :: file:filename()} |
                    undefined,
                    [non_neg_integer()],
                    map()) ->
                       ok.

Log packets_acked event.

start_writer(Filename, Header)

-spec start_writer(file:filename(), iodata()) -> {ok, pid()}.

Start the async writer process.

writer_loop(Writer_state)

Writer process main loop.