in pcap-cli/internal/transformer/json_translator.go [91:160]
func (t *JSONPcapTranslator) next(
ctx context.Context,
nic *PcapIface,
serial *uint64,
packet *gopacket.Packet,
) fmt.Stringer {
flowID := fnv1a.AddUint64(fnv1a.Init64, uint64(t.iface.Index))
flowIDstr := strconv.FormatUint(flowID, 10)
json := gabs.New()
id := ctx.Value(ContextID)
logName := ctx.Value(ContextLogName)
pcap, _ := json.Object("pcap")
serialStr := strconv.FormatUint(*serial, 10)
pcap.Set(serialStr, "num")
labels, _ := json.Object("logging.googleapis.com/labels")
labels.Set("pcap-sidecar", "run.googleapis.com/tool")
metadata := (*packet).Metadata()
info := metadata.CaptureInfo
meta, _ := json.Object("meta")
meta.Set(flowIDstr, "flow")
meta.Set(metadata.Truncated, "trunc")
timestamp, _ := json.Object("timestamp")
timestamp.Set(info.Timestamp.Unix(), "seconds")
timestamp.Set(info.Timestamp.Nanosecond(), "nanos")
atDebugVerbosity(ctx,
t.pcapTranslator,
func(
ctx context.Context,
translator *pcapTranslator,
) {
pcap.Set(id, "id")
labels.Set(id, "run.googleapis.com/pcap/id")
pcap.Set(logName, "ctx")
labels.Set(logName, "run.googleapis.com/pcap/name")
labels.Set(t.iface.Name, "run.googleapis.com/pcap/iface")
meta.Set(info.Length, "len")
meta.Set(info.CaptureLength, "cap_len")
meta.Set(info.Timestamp.Format(time.RFC3339Nano), "timestamp")
netIface := *nic
iface, _ := json.Object("iface")
iface.Set(netIface.Index, "index")
iface.Set(netIface.Name, "name")
if sizeOfAddrs := nic.Addrs.Cardinality(); sizeOfAddrs > 0 {
addrs, _ := iface.ArrayOfSize(sizeOfAddrs, "addrs")
netIface.Addrs.Each(func(IP string) bool {
sizeOfAddrs -= 1
addrs.SetIndex(IP, sizeOfAddrs)
return false
})
}
})
return json
}