ezmetrics 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ezmetrics.rb +14 -12
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92da4bdfb62dd5fdfffb963b9ac7bd495ee23f79
4
- data.tar.gz: d92a3bef8073d80cb09c0f08d5d80e5ae7d8ce80
3
+ metadata.gz: 475ced129635b18e5c1239c72b6458b88f5733b9
4
+ data.tar.gz: bc2c498c2d5b6773f7cbc995f10c8e8d1c8f1e25
5
5
  SHA512:
6
- metadata.gz: fae80b74ebf4249fc595fa162d5af72acabd2370bd4c917970896e072c3a5fbded5a6465c8a5f80bf0e05d947e30e969a5a81074eefbb05d797debfc1335d538
7
- data.tar.gz: 450a7093e3c63c604452892cbb1f61ebb372f313a5d155247beae834afecafca2143a2bc90ec941e57b8edeee8c3ca2f1da56f9a8eb3a8da587891503dd57852
6
+ metadata.gz: 45f9625c446f68a92e501d0f3d815b64c3751c76170a16da2b887a9e45fb3b3c267fa03f526e667f821e06e633e1df2e42641e4f3553aa9fa6f46300aa0e5ec5
7
+ data.tar.gz: a5ec929272536f76d9e9527e1b63d9a3d7ec2850f470e46eeadf5b13947af6b2558f676aa687ffaca28e39d1f7070c8eff0f4c27f730fc46455bfba49711638b
data/lib/ezmetrics.rb CHANGED
@@ -2,11 +2,12 @@ require "redis" unless defined?(Redis)
2
2
  require "json" unless defined?(JSON)
3
3
 
4
4
  class EZmetrics
5
- attr_reader :redis, :last_minute_metrics, :requests, :redis_key
5
+ attr_reader :redis, :interval_seconds, :interval_metrics, :requests, :redis_key
6
6
 
7
- def initialize
8
- @redis = Redis.new
9
- @redis_key = "ez-metrics"
7
+ def initialize(interval_seconds=60)
8
+ @interval_seconds = interval_seconds.to_i
9
+ @redis = Redis.new
10
+ @redis_key = "ez-metrics"
10
11
  end
11
12
 
12
13
  def log(payload)
@@ -17,7 +18,7 @@ class EZmetrics
17
18
  status: payload[:status].to_i
18
19
  }
19
20
 
20
- current_second = Time.now.sec
21
+ current_second = Time.now.to_i
21
22
  status_group = "#{payload[:status].to_s[0]}xx"
22
23
  this_second_metrics = redis.get("#{redis_key}:#{current_second}")
23
24
 
@@ -45,17 +46,18 @@ class EZmetrics
45
46
  this_second_metrics["statuses"][status_group] = 1
46
47
  end
47
48
 
48
- redis.setex("#{redis_key}:#{current_second}", 59, JSON.generate(this_second_metrics))
49
+ redis.setex("#{redis_key}:#{current_second}", interval_seconds, JSON.generate(this_second_metrics))
49
50
  rescue => error
50
51
  display_error(error)
51
52
  end
52
53
 
53
54
  def show
54
- @last_minute_metrics = redis.mget((0..59).to_a.map { |second| "#{redis_key}:#{second}" }).compact.map { |m| JSON.parse(m) }
55
+ interval_start = Time.now.to_i - interval_seconds
56
+ @interval_metrics = redis.mget((interval_start..Time.now.to_i).to_a.map { |second| "#{redis_key}:#{second}" }).compact.map { |m| JSON.parse(m) }
55
57
 
56
- return empty_metrics unless last_minute_metrics.any?
58
+ return empty_metrics unless interval_metrics.any?
57
59
 
58
- @requests = last_minute_metrics.map { |h| h["statuses"]["all"] }.compact.sum
60
+ @requests = interval_metrics.map { |h| h["statuses"]["all"] }.compact.sum
59
61
 
60
62
  {
61
63
  duration: {
@@ -87,15 +89,15 @@ class EZmetrics
87
89
  private
88
90
 
89
91
  def avg(metrics)
90
- (last_minute_metrics.map { |h| h[metrics.to_s] }.sum.to_f / requests).round
92
+ (interval_metrics.map { |h| h[metrics.to_s] }.sum.to_f / requests).round
91
93
  end
92
94
 
93
95
  def max(metrics)
94
- last_minute_metrics.map { |h| h[metrics.to_s] }.max.round
96
+ interval_metrics.map { |h| h[metrics.to_s] }.max.round
95
97
  end
96
98
 
97
99
  def count(group)
98
- last_minute_metrics.map { |h| h["statuses"][group.to_s] }.sum
100
+ interval_metrics.map { |h| h["statuses"][group.to_s] }.sum
99
101
  end
100
102
 
101
103
  def display_error(error)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ezmetrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolae Rotaru