12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/ezmetrics/storage.rb', line 12
def log(payload={duration: 0.0, views: 0.0, db: 0.0, queries: 0, status: 200, store_each_value: false})
@safe_payload = {
duration: payload[:duration].to_f,
views: payload[:views].to_f,
db: payload[:db].to_f,
queries: payload[:queries].to_i,
status: payload[:status].to_i,
store_each_value: payload[:store_each_value].to_s == "true"
}
this_second = Time.now.to_i
status_group = "#{payload[:status].to_s[0]}xx"
@this_second_metrics = redis.get(this_second)
if this_second_metrics
@this_second_metrics = Oj.load(this_second_metrics)
METRICS.each do |metrics_type|
update_sum(metrics_type)
update_max(metrics_type)
store_value(metrics_type) if safe_payload[:store_each_value]
end
this_second_metrics[schema["all"]] += 1
this_second_metrics[schema[status_group]] += 1
else
@this_second_metrics = {
"second" => this_second,
"duration_sum" => safe_payload[:duration],
"duration_max" => safe_payload[:duration],
"views_sum" => safe_payload[:views],
"views_max" => safe_payload[:views],
"db_sum" => safe_payload[:db],
"db_max" => safe_payload[:db],
"queries_sum" => safe_payload[:queries],
"queries_max" => safe_payload[:queries],
"2xx" => 0,
"3xx" => 0,
"4xx" => 0,
"5xx" => 0,
"all" => 1
}
if safe_payload[:store_each_value]
this_second_metrics.merge!(
"duration_values" => [safe_payload[:duration]],
"views_values" => [safe_payload[:views]],
"db_values" => [safe_payload[:db]],
"queries_values" => [safe_payload[:queries]]
)
end
this_second_metrics[status_group] = 1
@this_second_metrics = this_second_metrics.values
end
redis.setex(this_second, interval_seconds, Oj.dump(this_second_metrics))
true
rescue => error
formatted_error(error)
end
|