From f28db16df4d856f4acb5dc768a931cfb7004f60c Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 7 Jan 2021 11:12:43 +0800 Subject: [PATCH] fix packet_type logging for packet_lost, packet_dropped and packet_buffered --- qlog/event.go | 17 ++++++++++------- qlog/packet_header.go | 34 +++++++++++++++++++++++++++------- qlog/qlog.go | 4 ++-- qlog/qlog_test.go | 17 +++++++++++++---- 4 files changed, 52 insertions(+), 20 deletions(-) diff --git a/qlog/event.go b/qlog/event.go index 096d9e79..165a66bb 100644 --- a/qlog/event.go +++ b/qlog/event.go @@ -195,7 +195,7 @@ func (e eventVersionNegotiationReceived) MarshalJSONObject(enc *gojay.Encoder) { } type eventPacketBuffered struct { - PacketType packetType + PacketType logging.PacketType } func (e eventPacketBuffered) Category() category { return categoryTransport } @@ -203,12 +203,13 @@ func (e eventPacketBuffered) Name() string { return "packet_buffered" } func (e eventPacketBuffered) IsNil() bool { return false } func (e eventPacketBuffered) MarshalJSONObject(enc *gojay.Encoder) { - enc.StringKey("packet_type", e.PacketType.String()) + //nolint:gosimple + enc.ObjectKey("header", packetHeaderWithType{PacketType: e.PacketType}) enc.StringKey("trigger", "keys_unavailable") } type eventPacketDropped struct { - PacketType packetType + PacketType logging.PacketType PacketSize protocol.ByteCount Trigger packetDropReason } @@ -218,7 +219,7 @@ func (e eventPacketDropped) Name() string { return "packet_dropped" } func (e eventPacketDropped) IsNil() bool { return false } func (e eventPacketDropped) MarshalJSONObject(enc *gojay.Encoder) { - enc.StringKeyOmitEmpty("packet_type", e.PacketType.String()) + enc.ObjectKey("header", packetHeaderWithType{PacketType: e.PacketType}) enc.ObjectKey("raw", rawInfo{Length: e.PacketSize}) enc.StringKey("trigger", e.Trigger.String()) } @@ -281,7 +282,7 @@ func (e eventUpdatedPTO) MarshalJSONObject(enc *gojay.Encoder) { } type eventPacketLost struct { - PacketType packetType + PacketType logging.PacketType PacketNumber protocol.PacketNumber Trigger packetLossReason } @@ -291,8 +292,10 @@ func (e eventPacketLost) Name() string { return "packet_lost" } func (e eventPacketLost) IsNil() bool { return false } func (e eventPacketLost) MarshalJSONObject(enc *gojay.Encoder) { - enc.StringKey("packet_type", e.PacketType.String()) - enc.Int64Key("packet_number", int64(e.PacketNumber)) + enc.ObjectKey("header", packetHeaderWithTypeAndPacketNumber{ + PacketType: e.PacketType, + PacketNumber: e.PacketNumber, + }) enc.StringKey("trigger", e.Trigger.String()) } diff --git a/qlog/packet_header.go b/qlog/packet_header.go index 70802245..7e8c8959 100644 --- a/qlog/packet_header.go +++ b/qlog/packet_header.go @@ -10,21 +10,19 @@ import ( "github.com/francoispqt/gojay" ) -func getPacketTypeFromEncryptionLevel(encLevel protocol.EncryptionLevel) packetType { - var t logging.PacketType +func getPacketTypeFromEncryptionLevel(encLevel protocol.EncryptionLevel) logging.PacketType { switch encLevel { case protocol.EncryptionInitial: - t = logging.PacketTypeInitial + return logging.PacketTypeInitial case protocol.EncryptionHandshake: - t = logging.PacketTypeHandshake + return logging.PacketTypeHandshake case protocol.Encryption0RTT: - t = logging.PacketType0RTT + return logging.PacketType0RTT case protocol.Encryption1RTT: - t = logging.PacketType1RTT + return logging.PacketType1RTT default: panic("unknown encryption level") } - return packetType(t) } type token struct { @@ -100,3 +98,25 @@ func (h packetHeader) MarshalJSONObject(enc *gojay.Encoder) { enc.ObjectKey("token", h.Token) } } + +// a minimal header that only outputs the packet type +type packetHeaderWithType struct { + PacketType logging.PacketType +} + +func (h packetHeaderWithType) IsNil() bool { return false } +func (h packetHeaderWithType) MarshalJSONObject(enc *gojay.Encoder) { + enc.StringKey("packet_type", packetType(h.PacketType).String()) +} + +// a minimal header that only outputs the packet type +type packetHeaderWithTypeAndPacketNumber struct { + PacketType logging.PacketType + PacketNumber logging.PacketNumber +} + +func (h packetHeaderWithTypeAndPacketNumber) IsNil() bool { return false } +func (h packetHeaderWithTypeAndPacketNumber) MarshalJSONObject(enc *gojay.Encoder) { + enc.StringKey("packet_type", packetType(h.PacketType).String()) + enc.Int64Key("packet_number", int64(h.PacketNumber)) +} diff --git a/qlog/qlog.go b/qlog/qlog.go index 3563554e..7bd78eb5 100644 --- a/qlog/qlog.go +++ b/qlog/qlog.go @@ -269,14 +269,14 @@ func (t *connectionTracer) ReceivedVersionNegotiationPacket(hdr *wire.Header, ve func (t *connectionTracer) BufferedPacket(pt logging.PacketType) { t.mutex.Lock() - t.recordEvent(time.Now(), &eventPacketBuffered{PacketType: packetType(pt)}) + t.recordEvent(time.Now(), &eventPacketBuffered{PacketType: pt}) t.mutex.Unlock() } func (t *connectionTracer) DroppedPacket(pt logging.PacketType, size protocol.ByteCount, reason logging.PacketDropReason) { t.mutex.Lock() t.recordEvent(time.Now(), &eventPacketDropped{ - PacketType: packetType(pt), + PacketType: pt, PacketSize: size, Trigger: packetDropReason(reason), }) diff --git a/qlog/qlog_test.go b/qlog/qlog_test.go index 41274ed9..fc457375 100644 --- a/qlog/qlog_test.go +++ b/qlog/qlog_test.go @@ -484,7 +484,10 @@ var _ = Describe("Tracing", func() { Expect(entry.Time).To(BeTemporally("~", time.Now(), scaleDuration(10*time.Millisecond))) Expect(entry.Name).To(Equal("transport:packet_buffered")) ev := entry.Event - Expect(ev).To(HaveKeyWithValue("packet_type", "handshake")) + Expect(ev).To(HaveKey("header")) + hdr := ev["header"].(map[string]interface{}) + Expect(hdr).To(HaveLen(1)) + Expect(hdr).To(HaveKeyWithValue("packet_type", "handshake")) Expect(ev).To(HaveKeyWithValue("trigger", "keys_unavailable")) }) @@ -494,9 +497,12 @@ var _ = Describe("Tracing", func() { Expect(entry.Time).To(BeTemporally("~", time.Now(), scaleDuration(10*time.Millisecond))) Expect(entry.Name).To(Equal("transport:packet_dropped")) ev := entry.Event - Expect(ev).To(HaveKeyWithValue("packet_type", "handshake")) Expect(ev).To(HaveKey("raw")) Expect(ev["raw"].(map[string]interface{})).To(HaveKeyWithValue("length", float64(1337))) + Expect(ev).To(HaveKey("header")) + hdr := ev["header"].(map[string]interface{}) + Expect(hdr).To(HaveLen(1)) + Expect(hdr).To(HaveKeyWithValue("packet_type", "handshake")) Expect(ev).To(HaveKeyWithValue("trigger", "payload_decrypt_error")) }) @@ -581,8 +587,11 @@ var _ = Describe("Tracing", func() { Expect(entry.Time).To(BeTemporally("~", time.Now(), scaleDuration(10*time.Millisecond))) Expect(entry.Name).To(Equal("recovery:packet_lost")) ev := entry.Event - Expect(ev).To(HaveKeyWithValue("packet_type", "handshake")) - Expect(ev).To(HaveKeyWithValue("packet_number", float64(42))) + Expect(ev).To(HaveKey("header")) + hdr := ev["header"].(map[string]interface{}) + Expect(hdr).To(HaveLen(2)) + Expect(hdr).To(HaveKeyWithValue("packet_type", "handshake")) + Expect(hdr).To(HaveKeyWithValue("packet_number", float64(42))) Expect(ev).To(HaveKeyWithValue("trigger", "reordering_threshold")) })