github.com/MerlinKodo/quic-go@v0.39.2/qlog/trace.go (about) 1 package qlog 2 3 import ( 4 "time" 5 6 "github.com/MerlinKodo/quic-go/internal/protocol" 7 "github.com/MerlinKodo/quic-go/logging" 8 9 "github.com/francoispqt/gojay" 10 ) 11 12 type topLevel struct { 13 trace trace 14 } 15 16 func (topLevel) IsNil() bool { return false } 17 func (l topLevel) MarshalJSONObject(enc *gojay.Encoder) { 18 enc.StringKey("qlog_format", "NDJSON") 19 enc.StringKey("qlog_version", "draft-02") 20 enc.StringKeyOmitEmpty("title", "quic-go qlog") 21 enc.ObjectKey("configuration", configuration{Version: quicGoVersion}) 22 enc.ObjectKey("trace", l.trace) 23 } 24 25 type configuration struct { 26 Version string 27 } 28 29 func (c configuration) IsNil() bool { return false } 30 func (c configuration) MarshalJSONObject(enc *gojay.Encoder) { 31 enc.StringKey("code_version", c.Version) 32 } 33 34 type vantagePoint struct { 35 Name string 36 Type protocol.Perspective 37 } 38 39 func (p vantagePoint) IsNil() bool { return false } 40 func (p vantagePoint) MarshalJSONObject(enc *gojay.Encoder) { 41 enc.StringKeyOmitEmpty("name", p.Name) 42 switch p.Type { 43 case protocol.PerspectiveClient: 44 enc.StringKey("type", "client") 45 case protocol.PerspectiveServer: 46 enc.StringKey("type", "server") 47 } 48 } 49 50 type commonFields struct { 51 ODCID logging.ConnectionID 52 GroupID logging.ConnectionID 53 ProtocolType string 54 ReferenceTime time.Time 55 } 56 57 func (f commonFields) MarshalJSONObject(enc *gojay.Encoder) { 58 enc.StringKey("ODCID", f.ODCID.String()) 59 enc.StringKey("group_id", f.ODCID.String()) 60 enc.StringKeyOmitEmpty("protocol_type", f.ProtocolType) 61 enc.Float64Key("reference_time", float64(f.ReferenceTime.UnixNano())/1e6) 62 enc.StringKey("time_format", "relative") 63 } 64 65 func (f commonFields) IsNil() bool { return false } 66 67 type trace struct { 68 VantagePoint vantagePoint 69 CommonFields commonFields 70 } 71 72 func (trace) IsNil() bool { return false } 73 func (t trace) MarshalJSONObject(enc *gojay.Encoder) { 74 enc.ObjectKey("vantage_point", t.VantagePoint) 75 enc.ObjectKey("common_fields", t.CommonFields) 76 }