Closed ninaspitfire closed 3 years ago
Updated this patch to treat epoch time as seconds not milliseconds. Am I correct in assuming that the :time
of a Mirabelle event is in epoch seconds, like a Riemann event?
Thanks.
OK. I found in the documentation that event time is, indeed, measured in seconds. (Superb documentation, by the way). <3
Hello,
Thank you for your contribution :)
Updated this patch to treat epoch time as seconds not milliseconds. Am I correct in assuming that the :time of a Mirabelle event is in epoch seconds, like a Riemann event?
The :time value can have different types:
1626457328
1626457328.123456
: Indeed, the Riemann (and so the Mirabelle) protocol has two fields for the time: time
and time_micros
: https://github.com/riemann/riemann-java-client/blob/master/riemann-java-client/src/main/proto/riemann/proto.proto#L29.
time_micros
is a value in microseconds, you can see how it's decoded here: https://github.com/riemann/riemann-clojure-client/blob/master/src/riemann/codec.clj#L41I/O should usually support all of these types (and not throw if a ratio or a double is passed for example).
For example, in the InfluxDB I/O, I do (long (* 1000000 (:time event)))
to not lose precision and to be sure I have a long at the end: https://github.com/mcorbin/mirabelle/blob/master/src/clojure/mirabelle/io/influxdb.clj#L67
Thank you for the fix about the local time zone. I was also indeed calling long
twice.
ofEpochSeconds
works as expected for all types, so I think we are good with your modifications:
(java.time.Instant/ofEpochSecond (/ 19 3))
#object[java.time.Instant 0x3445dce0 "1970-01-01T00:00:06Z"]
mirabelle.time> (java.time.Instant/ofEpochSecond 19)
#object[java.time.Instant 0x55f7b836 "1970-01-01T00:00:19Z"]
mirabelle.time> (java.time.Instant/ofEpochSecond 19.10)
#object[java.time.Instant 0x6da8e2bc "1970-01-01T00:00:19Z"]
I also have no idea how to check this timestamp value in the Pagerduty UI to be honest, only the creation time seems displayed :D
(Superb documentation, by the way). <3
Thank you, don't hesitate to give me feedbacks or your thoughts about the project and what can be improved or added. I should really configure Github action on the repo for example (I will do it this week end).
If it's OK for you I can merge the PR.
Hi,
Thank you for all this wonderful explanation!
So if time_micros
exists on the Protobuf message, :time
will be seconds as float64 / double
. If only time
is on the message, :time
will be seconds as int64 / long
. Is that correct? I got a bit confused because the old tests were asserting that the ISO timestamp should be 1 millisecond after the epoch.
ofEpochSeconds works as expected for all types, so I think we are good with your modifications
Thanks. I tried it in the REPL with long and float, but not a rational. I can add tests for the different types, if you like.
I also have no idea how to check this timestamp value in the Pagerduty UI to be honest, only the creation time seems displayed :D
I spend more time in the PagerDuty interface than I would like to admit! I'll have a play around :). In my Riemann config, I add the :time
and the time the incident was triggered as ISO-8601 timestamps in :custom_details
.
EDIT: I can't find anything useful that PagerDuty does with the top-level timestamp, either. :confused:
Thank you once again for being so helpful and open to discussion.
So if time_micros exists on the Protobuf message, :time will be seconds as float64 / double. If only time is on the message, :time will be seconds as int64 / long. Is that correct?
Yes
I will merge the pull request, I tested ratios locally and it also works.
EDIT: I can't find anything useful that PagerDuty does with the top-level timestamp, either. confused
Same for me :D
Thank you again for your contribution.
Make the Pagerduty IO use UTC time, not local time for formatting date strings.
Without this patch, the behaviour of the IO (and the tests) depends on the local timezone. The tests can only pass when TZ=UTC-1.