From f5f6665a1972463f112355a92a70c0cfbd12bdf9 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Mon, 13 Jul 2020 10:57:59 +0700 Subject: [PATCH] add a metric for sent packets --- metrics/metrics.go | 17 ++++++++++++++++- metrics/types.go | 21 +++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/metrics/metrics.go b/metrics/metrics.go index 912c81129..351503a1f 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -16,6 +16,7 @@ import ( var ( connections = stats.Int64("quic-go/connections", "number of QUIC connections", stats.UnitDimensionless) lostPackets = stats.Int64("quic-go/lost-packets", "number of packets declared lost", stats.UnitDimensionless) + sentPackets = stats.Int64("quic-go/sent-packets", "number of packets sent", stats.UnitDimensionless) ) // Tags @@ -24,6 +25,7 @@ var ( keyIPVersion, _ = tag.NewKey("ip_version") keyEncryptionLevel, _ = tag.NewKey("encryption_level") keyPacketLossReason, _ = tag.NewKey("packet_loss_reason") + keyPacketType, _ = tag.NewKey("packet_type") ) // Views @@ -38,12 +40,18 @@ var ( TagKeys: []tag.Key{keyEncryptionLevel, keyPacketLossReason}, Aggregation: view.Count(), } + SentPacketsView = &view.View{ + Measure: sentPackets, + TagKeys: []tag.Key{keyPacketType}, + Aggregation: view.Count(), + } ) // DefaultViews collects all OpenCensus views for metric gathering purposes var DefaultViews = []*view.View{ ConnectionsView, LostPacketsView, + SentPacketsView, } type tracer struct{} @@ -98,7 +106,14 @@ func (t *connTracer) StartedConnection(local, _ net.Addr, _ logging.VersionNumbe func (t *connTracer) ClosedConnection(logging.CloseReason) {} func (t *connTracer) SentTransportParameters(*logging.TransportParameters) {} func (t *connTracer) ReceivedTransportParameters(*logging.TransportParameters) {} -func (t *connTracer) SentPacket(*logging.ExtendedHeader, logging.ByteCount, *logging.AckFrame, []logging.Frame) { +func (t *connTracer) SentPacket(hdr *logging.ExtendedHeader, _ logging.ByteCount, _ *logging.AckFrame, _ []logging.Frame) { + stats.RecordWithTags( + context.Background(), + []tag.Mutator{ + tag.Upsert(keyPacketType, packetType(logging.PacketTypeFromHeader(&hdr.Header)).String()), + }, + sentPackets.M(1), + ) } func (t *connTracer) ReceivedVersionNegotiationPacket(*logging.Header, []logging.VersionNumber) {} func (t *connTracer) ReceivedRetry(*logging.Header) {} diff --git a/metrics/types.go b/metrics/types.go index 6242a4742..29db99ee8 100644 --- a/metrics/types.go +++ b/metrics/types.go @@ -44,3 +44,24 @@ func (r packetLossReason) String() string { panic("unknown packet loss reason") } } + +type packetType logging.PacketType + +func (t packetType) String() string { + switch logging.PacketType(t) { + case logging.PacketTypeInitial: + return "initial" + case logging.PacketTypeHandshake: + return "handshake" + case logging.PacketTypeVersionNegotiation: + return "version_negotiation" + case logging.PacketTypeRetry: + return "retry" + case logging.PacketType0RTT: + return "0-RTT" + case logging.PacketType1RTT: + return "1-RTT" + default: + panic("unknown packet type") + } +}