mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-24 03:06:48 +01:00
1716c4e609
The TryParseTimestampRFC3339Nano() must properly parse RFC3339 timestamps with timezone offsets. While at it, make tryParseTimestampISO8601 function private in order to prevent from improper usage of this function from outside the lib/logstorage package. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6508
34 lines
1.0 KiB
Go
34 lines
1.0 KiB
Go
package insertutils
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logstorage"
|
|
)
|
|
|
|
// ExtractTimestampRFC3339NanoFromFields extracts RFC3339 timestamp in nanoseconds from the field with the name timeField at fields.
|
|
//
|
|
// The value for the timeField is set to empty string after returning from the function,
|
|
// so it could be ignored during data ingestion.
|
|
//
|
|
// The current timestamp is returned if fields do not contain a field with timeField name or if the timeField value is empty.
|
|
func ExtractTimestampRFC3339NanoFromFields(timeField string, fields []logstorage.Field) (int64, error) {
|
|
for i := range fields {
|
|
f := &fields[i]
|
|
if f.Name != timeField {
|
|
continue
|
|
}
|
|
if f.Value == "" || f.Value == "0" {
|
|
return time.Now().UnixNano(), nil
|
|
}
|
|
nsecs, ok := logstorage.TryParseTimestampRFC3339Nano(f.Value)
|
|
if !ok {
|
|
return 0, fmt.Errorf("cannot unmarshal rfc3339 timestamp from %s=%q", timeField, f.Value)
|
|
}
|
|
f.Value = ""
|
|
return nsecs, nil
|
|
}
|
|
return time.Now().UnixNano(), nil
|
|
}
|