in otelcollector/fluent-bit/src/cmetrics_decoder.go [227:274]
func GetRecord(dec *FLBDecoder) (ret int, ts interface{}, rec map[interface{}]interface{}) {
var check error
var m interface{}
check = dec.mpdec.Decode(&m)
if check != nil {
return -1, 0, nil
}
i := reflect.ValueOf(m)
if i.Len() != 2 {
return -2, 0, nil
}
switch i.Kind() {
case reflect.Map: // Metrics
map_data := i.Interface().(map[interface{}]interface{})
return 0, 0, map_data
case reflect.Slice: // Logs
var t interface{}
ts = i.Index(0).Interface()
switch ty := ts.(type) {
case FLBTime:
t = ty
case uint64:
t = ty
case []interface{}: // for Fluent Bit V2 metadata type of format
s := reflect.ValueOf(ty)
if s.Kind() != reflect.Slice || s.Len() < 2 {
return -4, 0, nil
}
t = s.Index(0).Interface()
default:
return -5, 0, nil
}
data := i.Index(1)
map_data, ok := data.Interface().(map[interface{}]interface{})
if !ok {
return -3, 0, nil
}
return 0, t, map_data
default:
return -2, 0, nil
}
}