Files
quic-go/qlog/event.go
2020-02-12 10:42:38 +07:00

99 lines
2.5 KiB
Go

package qlog
import (
"time"
"github.com/francoispqt/gojay"
)
var eventFields = [4]string{"time", "category", "event", "data"}
type events []event
var _ gojay.MarshalerJSONArray = events{}
func (e events) IsNil() bool { return e == nil }
func (e events) MarshalJSONArray(enc *gojay.Encoder) {
for _, ev := range e {
enc.Array(ev)
}
}
type eventDetails interface {
Category() category
Name() string
gojay.MarshalerJSONObject
}
type event struct {
Time time.Time
eventDetails
}
var _ gojay.MarshalerJSONArray = event{}
func (e event) IsNil() bool { return false }
func (e event) MarshalJSONArray(enc *gojay.Encoder) {
enc.Float64(float64(e.Time.UnixNano()) / 1e6)
enc.String(e.Category().String())
enc.String(e.Name())
enc.Object(e.eventDetails)
}
type eventPacketSent struct {
PacketType packetType
Header packetHeader
Frames frames
IsCoalesced bool
Trigger string
}
var _ eventDetails = eventPacketSent{}
func (e eventPacketSent) Category() category { return categoryTransport }
func (e eventPacketSent) Name() string { return "packet_sent" }
func (e eventPacketSent) IsNil() bool { return false }
func (e eventPacketSent) MarshalJSONObject(enc *gojay.Encoder) {
enc.StringKey("packet_type", e.PacketType.String())
enc.ObjectKey("header", e.Header)
enc.ArrayKeyOmitEmpty("frames", e.Frames)
enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced)
enc.StringKeyOmitEmpty("trigger", e.Trigger)
}
type eventPacketReceived struct {
PacketType packetType
Header packetHeader
Frames frames
IsCoalesced bool
Trigger string
}
var _ eventDetails = eventPacketReceived{}
func (e eventPacketReceived) Category() category { return categoryTransport }
func (e eventPacketReceived) Name() string { return "packet_received" }
func (e eventPacketReceived) IsNil() bool { return false }
func (e eventPacketReceived) MarshalJSONObject(enc *gojay.Encoder) {
enc.StringKey("packet_type", e.PacketType.String())
enc.ObjectKey("header", e.Header)
enc.ArrayKeyOmitEmpty("frames", e.Frames)
enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced)
enc.StringKeyOmitEmpty("trigger", e.Trigger)
}
type eventRetryReceived struct {
Header packetHeader
}
func (e eventRetryReceived) Category() category { return categoryTransport }
func (e eventRetryReceived) Name() string { return "packet_received" }
func (e eventRetryReceived) IsNil() bool { return false }
func (e eventRetryReceived) MarshalJSONObject(enc *gojay.Encoder) {
enc.StringKey("packet_type", packetTypeRetry.String())
enc.ObjectKey("header", e.Header)
}