fix packet_type logging for packet_lost, packet_dropped and packet_buffered

This commit is contained in:
Marten Seemann
2021-01-07 11:12:43 +08:00
parent 84af90f2f8
commit f28db16df4
4 changed files with 52 additions and 20 deletions

View File

@@ -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())
}

View File

@@ -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))
}

View File

@@ -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),
})

View File

@@ -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"))
})