func()

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
}