Class: EventMeter::Reports
- Inherits:
-
Object
- Object
- EventMeter::Reports
- Defined in:
- lib/event_meter/reports.rb
Constant Summary collapse
- DEFAULT_SERIES_SECONDS =
3600
Instance Method Summary collapse
- #compare(name, version:, before:, after:, by: {}) ⇒ Object
-
#initialize(configuration:, rollup_storage:) ⇒ Reports
constructor
A new instance of Reports.
- #series(name, version:, from: nil, to: nil, every: :minute, by: {}) ⇒ Object
- #summary(name, version:, from: nil, to: nil, by: {}) ⇒ Object
Constructor Details
#initialize(configuration:, rollup_storage:) ⇒ Reports
Returns a new instance of Reports.
7 8 9 10 |
# File 'lib/event_meter/reports.rb', line 7 def initialize(configuration:, rollup_storage:) @configuration = configuration @rollup_storage = rollup_storage end |
Instance Method Details
#compare(name, version:, before:, after:, by: {}) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/event_meter/reports.rb', line 44 def compare(name, version:, before:, after:, by: {}) before_from, before_to = comparison_window(before) after_from, after_to = comparison_window(after) { before: summary(name, version: version, from: before_from, to: before_to, by: by), after: summary(name, version: version, from: after_from, to: after_to, by: by) } end |
#series(name, version:, from: nil, to: nil, every: :minute, by: {}) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/event_meter/reports.rb', line 25 def series(name, version:, from: nil, to: nil, every: :minute, by: {}) every = TimeBuckets.normalize(every) to = to ? time_value(to) : TimeBuckets.time(Time.now.utc, every) + TimeBuckets.seconds(every) from = time_value(from) if from from ||= to - DEFAULT_SERIES_SECONDS validate_window!(from, to) definition = report_definition(name, version) index = definition.index_for!(by) buckets = TimeBuckets.between(from, to, every) keys = buckets.map { |bucket| rollup_key(definition, every, bucket, index) } raw_rollups = @rollup_storage.hgetall_many(keys) seconds = TimeBuckets.seconds(every) buckets.zip(raw_rollups).map do |bucket, raw| Rollup.from_hash(raw).to_h(seconds: seconds).merge(bucket: bucket.iso8601) end end |
#summary(name, version:, from: nil, to: nil, by: {}) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/event_meter/reports.rb', line 12 def summary(name, version:, from: nil, to: nil, by: {}) raise ArgumentError, "pass both from: and to:, or neither" if from.nil? != to.nil? from = time_value(from) if from to = time_value(to) if to validate_window!(from, to) if from && to definition = report_definition(name, version) index = definition.index_for!(by) keys, seconds = summary_keys(definition, from: from, to: to, index: index) Rollup.combine(@rollup_storage.hgetall_many(keys)).to_h(seconds: seconds) end |