Learn how to announce values with a single point of time reference.
Beam values
Beam values runs ping on the driver that behaves similarly like set but does not uses Nocturnal to round the at timestamps. Instead it uses raw value of at to indicate when ping has been received.
beam(key: String, at: Time, values: Hash, **options)
key- string identifier for the metricsat- timestamp of the sample (in most cases current timestamp)values- hash of values. Can contain only nested hashes and numbers (Integer, Float, BigDecimal). Any other objects will cause an error.options- hash of optional arguments:config- optional configuration instance ofTrifle::Stats::Configuration. It defaults to global configuration, otherwise uses passed in configuration.
Beam your first values
Trifle::Stats.beam(key: 'event::logs', at: Time.now, values: {count: 1, duration: 2, lines: 241})
=> [{2021-01-25 16:21:33 +0100=>{:count=>1, :duration=>2, :lines=>241}}]
Then do it few more times
Trifle::Stats.beam(key: 'event::logs', at: Time.now, values: {count: 1, duration: 1, lines: 56})
=> [{2021-01-25 16:22:12 +0100=>{:count=>1, :duration=>1, :lines=>56}}]
Trifle::Stats.beam(key: 'event::logs', at: Time.now, values: {count: 1, duration: 5, lines: 361})
=> [{2021-01-25 16:22:16 +0100=>{:count=>1, :duration=>5, :lines=>361}}]
Get values
In case of beam there is no range to retrieve. Instead you need to scan for specific key that returns last ping received for the value. Trifle::Stats stores only the latest value of a ping.
Trifle::Stats.scan(key: 'event::logs')
=> {:at=>[2021-01-25 16:22:16 +0200], :values=>[{"count"=>1, "duration"=>5, "lines"=>361}]}