diff --git a/lib/protoparser/opentsdb/streamparser.go b/lib/protoparser/opentsdb/streamparser.go index 94e7fc5b8..5fa6df76b 100644 --- a/lib/protoparser/opentsdb/streamparser.go +++ b/lib/protoparser/opentsdb/streamparser.go @@ -168,9 +168,13 @@ func (uw *unmarshalWork) Unmarshal() { } } - // Convert timestamps from seconds to milliseconds + // Convert timestamps in seconds to milliseconds if needed. + // See http://opentsdb.net/docs/javadoc/net/opentsdb/core/Const.html#SECOND_MASK for i := range rows { - rows[i].Timestamp *= 1e3 + r := &rows[i] + if r.Timestamp&secondMask == 0 { + r.Timestamp *= 1e3 + } } // Trim timestamps if required. @@ -185,6 +189,8 @@ func (uw *unmarshalWork) Unmarshal() { putUnmarshalWork(uw) } +const secondMask int64 = 0x7FFFFFFF00000000 + func getUnmarshalWork() *unmarshalWork { v := unmarshalWorkPool.Get() if v == nil {