func GetRecord()

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
	}
}