ezmetrics 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ezmetrics.rb +14 -12
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 475ced129635b18e5c1239c72b6458b88f5733b9
|
4
|
+
data.tar.gz: bc2c498c2d5b6773f7cbc995f10c8e8d1c8f1e25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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, :
|
5
|
+
attr_reader :redis, :interval_seconds, :interval_metrics, :requests, :redis_key
|
6
6
|
|
7
|
-
def initialize
|
8
|
-
@
|
9
|
-
@
|
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.
|
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}",
|
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
|
-
|
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
|
58
|
+
return empty_metrics unless interval_metrics.any?
|
57
59
|
|
58
|
-
@requests =
|
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
|
-
(
|
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
|
-
|
96
|
+
interval_metrics.map { |h| h[metrics.to_s] }.max.round
|
95
97
|
end
|
96
98
|
|
97
99
|
def count(group)
|
98
|
-
|
100
|
+
interval_metrics.map { |h| h["statuses"][group.to_s] }.sum
|
99
101
|
end
|
100
102
|
|
101
103
|
def display_error(error)
|