log_stats 0.4.8 → 0.4.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/log_stats +2 -1
- data/example/log_stats +1 -1
- data/lib/log_stats.rb +0 -11
- data/lib/log_stats/version.rb +1 -1
- metadata +1 -2
- data/lib/log_stats/requests/text_output.rb +0 -87
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e0ad41ee5b5d35c23a2669ac48946e99dc4f471
|
4
|
+
data.tar.gz: 2bd2d252fc83f5737ed95e270eb3d9133ce2c4bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6943a1e81fa11ef62d27c8a95f1c7d4b87e680913e8686dd4d6c862fe28ca45969c13f28278520798de06ce4c56e3067f1edd0f014d41bcf6c9e23def4621218
|
7
|
+
data.tar.gz: 1e4bc92ba0ae07c32a258f205923bd264ae628014908e64974fa4dcdb075215ff671363c1b0d8261baf6c3aeeed1bff12f777f81fba734b86457a555bd4b6639
|
data/bin/log_stats
CHANGED
data/example/log_stats
CHANGED
@@ -101,7 +101,7 @@ stats_path = File.join(dir_path, 'stats.json')
|
|
101
101
|
if File.exists?(events_path)
|
102
102
|
# NOTE: it's faster to read cached JSON events data than processing the log file
|
103
103
|
events = LogStats::Logger.elapsed(config, "Reading and parsing #{events_path}") do
|
104
|
-
JSON.parse(IO.read(events_path))
|
104
|
+
JSON.parse(IO.read(events_path), symbolize_names: true)
|
105
105
|
end
|
106
106
|
else
|
107
107
|
log_file_data = LogStats::Logger.elapsed(config, "Reading log file #{file_path}") do
|
data/lib/log_stats.rb
CHANGED
@@ -10,17 +10,6 @@ require "log_stats/requests/text_output"
|
|
10
10
|
require "time"
|
11
11
|
|
12
12
|
module LogStats
|
13
|
-
def self.run(log_data, config)
|
14
|
-
stats = get_stats(log_data, config)
|
15
|
-
if config[:output_format] == "text" && request_config = config[:events][:requests]
|
16
|
-
Requests::TextOutput.print(stats[:requests], request_config)
|
17
|
-
end
|
18
|
-
if config[:output_format] == "json"
|
19
|
-
puts JSON.pretty_generate(stats)
|
20
|
-
end
|
21
|
-
stats
|
22
|
-
end
|
23
|
-
|
24
13
|
def self.get_stats(log_data, config)
|
25
14
|
events = get_events(log_data, config)
|
26
15
|
process_events(events, config)
|
data/lib/log_stats/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: log_stats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Marklund
|
@@ -75,7 +75,6 @@ files:
|
|
75
75
|
- lib/log_stats/logger.rb
|
76
76
|
- lib/log_stats/requests/kpi.rb
|
77
77
|
- lib/log_stats/requests/stats.rb
|
78
|
-
- lib/log_stats/requests/text_output.rb
|
79
78
|
- lib/log_stats/stats.rb
|
80
79
|
- lib/log_stats/version.rb
|
81
80
|
- log_stats.gemspec
|
@@ -1,87 +0,0 @@
|
|
1
|
-
module LogStats
|
2
|
-
module Requests
|
3
|
-
module TextOutput
|
4
|
-
def self.print(data, event_config)
|
5
|
-
print_heading("KPIs")
|
6
|
-
print_kpi(data[:kpi])
|
7
|
-
|
8
|
-
print_heading("STATUS CODES")
|
9
|
-
print_percentages(data[:requests_count], data[:requests_by_status])
|
10
|
-
|
11
|
-
print_heading("HEROKU ERROR CODES")
|
12
|
-
print_percentages(data[:requests_count], data[:requests_by_code])
|
13
|
-
|
14
|
-
top_list_options = {
|
15
|
-
direction: 1,
|
16
|
-
limit: event_config[:top_list_limit],
|
17
|
-
apdex_goal: event_config[:apdex_goal]
|
18
|
-
}
|
19
|
-
|
20
|
-
print_heading("POPULARITY TOP LIST")
|
21
|
-
print_top_list(data[:stats], Stats.method(:popularity_metric), top_list_options)
|
22
|
-
|
23
|
-
print_heading("APDEX TOP LIST")
|
24
|
-
print_top_list(data[:stats], Stats.method(:apdex_metric), top_list_options.merge(direction: -1))
|
25
|
-
|
26
|
-
print_heading("DURATION TOP LIST")
|
27
|
-
print_top_list(data[:stats], Stats.method(:duration_metric), top_list_options)
|
28
|
-
|
29
|
-
print_heading("ERROR RATE TOP LIST")
|
30
|
-
print_top_list(data[:stats], Stats.method(:error_rate_metric), top_list_options)
|
31
|
-
|
32
|
-
print_heading("TIMEOUT TOP LIST")
|
33
|
-
print_top_list(data[:stats], Stats.method(:timeout_metric), top_list_options)
|
34
|
-
|
35
|
-
data[:requests_by_status].each do |status, requests|
|
36
|
-
print_heading("REQUESTS - STATUS #{status}")
|
37
|
-
Stats.requests_by_duration(requests).each do |request|
|
38
|
-
print_request(request)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.print_request(request)
|
44
|
-
parts = [(request[:method] == "GET" ? nil : request[:method]),
|
45
|
-
request[:path],
|
46
|
-
request[:service],
|
47
|
-
request[:code]
|
48
|
-
].compact
|
49
|
-
if parts.size > 1
|
50
|
-
puts parts.join(" ")
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.print_percentages(total_lines_count, grouped_lines)
|
55
|
-
grouped_lines.select { |key, _| !key.nil? }.each do |key, lines|
|
56
|
-
percent = (lines.size.to_f*100/total_lines_count).round(4)
|
57
|
-
puts "#{key} #{percent}%"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.print_top_list(stats, metric, options = {})
|
62
|
-
Stats.stats_by_metric(stats, metric, options[:direction])[0, options[:limit]].each do |stat|
|
63
|
-
apdex = Stats.apdex_metric(stat).round(2)
|
64
|
-
puts [stat[:id],
|
65
|
-
metric.call(stat),
|
66
|
-
"count=#{stat[:count]}",
|
67
|
-
"apdex=#{apdex}",
|
68
|
-
(apdex >= options[:apdex_goal] ? "OK" : "SLOW")
|
69
|
-
].join(' ')
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def self.print_heading(heading)
|
74
|
-
puts "\n-----------------------------------------------------------"
|
75
|
-
puts heading
|
76
|
-
puts "-----------------------------------------------------------\n\n"
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
|
-
def self.print_kpi(kpi)
|
81
|
-
kpi.each do |key, value|
|
82
|
-
puts "#{key}: #{value}"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|