mirror of
https://github.com/netsampler/goflow2.git
synced 2024-05-06 15:54:52 +00:00
producer: add datetime render (#225)
This commit is contained in:
@ -43,6 +43,8 @@ formatter:
|
||||
- name: csum
|
||||
index: 999
|
||||
type: varint
|
||||
render:
|
||||
time_received_ns: datetimenano
|
||||
# Decoder mappings
|
||||
ipfix:
|
||||
mapping:
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"encoding/hex"
|
||||
"net"
|
||||
"net/netip"
|
||||
"time"
|
||||
)
|
||||
|
||||
type RenderFunc func(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}
|
||||
@ -19,6 +20,8 @@ const (
|
||||
RendererProto RendererID = "proto"
|
||||
RendererType RendererID = "type"
|
||||
RendererNetwork RendererID = "network"
|
||||
RendererDateTime RendererID = "datetime"
|
||||
RendererDateTimeNano RendererID = "datetimenano"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -28,6 +31,8 @@ var (
|
||||
RendererMac: MacRenderer,
|
||||
RendererEtype: EtypeRenderer,
|
||||
RendererProto: ProtoRenderer,
|
||||
RendererDateTime: DateTimeRenderer,
|
||||
RendererDateTimeNano: DateTimeNanoRenderer,
|
||||
}
|
||||
|
||||
defaultRenderers = map[string]RenderFunc{
|
||||
@ -90,6 +95,34 @@ func NilRenderer(msg *ProtoProducerMessage, fieldName string, data interface{})
|
||||
return data
|
||||
}
|
||||
|
||||
func DateTimeRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{} {
|
||||
if dataC, ok := data.(uint64); ok {
|
||||
ts := time.Unix(int64(dataC), 0).UTC()
|
||||
return ts.Format(time.RFC3339Nano)
|
||||
} else if dataC, ok := data.(int64); ok {
|
||||
ts := time.Unix(dataC, 0).UTC()
|
||||
return ts.Format(time.RFC3339Nano)
|
||||
} else if dataC, ok := data.(uint32); ok {
|
||||
ts := time.Unix(int64(dataC), 0).UTC()
|
||||
return ts.Format(time.RFC3339Nano)
|
||||
} else if dataC, ok := data.(int32); ok {
|
||||
ts := time.Unix(int64(dataC), 0).UTC()
|
||||
return ts.Format(time.RFC3339Nano)
|
||||
}
|
||||
return NilRenderer(msg, fieldName, data)
|
||||
}
|
||||
|
||||
func DateTimeNanoRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{} {
|
||||
if dataC, ok := data.(uint64); ok {
|
||||
ts := time.Unix(int64(dataC)/1e9, int64(dataC)%1e9).UTC()
|
||||
return ts.Format(time.RFC3339Nano)
|
||||
} else if dataC, ok := data.(int64); ok {
|
||||
ts := time.Unix(dataC/1e9, dataC%1e9).UTC()
|
||||
return ts.Format(time.RFC3339Nano)
|
||||
}
|
||||
return NilRenderer(msg, fieldName, data)
|
||||
}
|
||||
|
||||
func MacRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{} {
|
||||
if dataC, ok := data.(uint64); ok {
|
||||
var mac [8]byte
|
||||
|
Reference in New Issue
Block a user