log_analyzer 0.2.3 → 0.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e933c971bc33456e167e9da461dff0b6db50e6e4
4
- data.tar.gz: ab391dcb2ae13bf67777478fb0aba0f8b88c6218
3
+ metadata.gz: c264c821832afb95340f8ca5271b0b1689cc3b6a
4
+ data.tar.gz: f43cdb0b6233b0176e228e85b497ab282c85f4ae
5
5
  SHA512:
6
- metadata.gz: 29874cd653ff93588bea67ced17ef9963f8b61190df48927034a7e3a41926e3e141c7ccbe26cba516f5e449b788462c5049f486462c3ef23cdb494d2d18a63ca
7
- data.tar.gz: 1b6ff98956805a2bc5f77fb6ccc0e40bb0187a26f299bc866208f964829275bfd336245f52b5ddbd346f8a28323d3a13b54c00d05962052c8d66c1e90d11e36b
6
+ metadata.gz: 471593211dbb5d4687688a00fbc27e9ce344f6b2c992d460efa66aecf725b6aa993df3ac5f79fe41170beffb9aa915543ce9bdf0aecd30400fd45b1410f66d7e
7
+ data.tar.gz: 51f4851dc0f8eb1d245f4af434ecb2b4e4c2c9cc4e5a52bbbcad67a0654d5a4cd786db33ad3d95f008bf7bb7f343582424a151d378b109e8884d24b7a76fc529
data/Gemfile.lock CHANGED
@@ -1,8 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- log_analyzer (0.2.2)
4
+ log_analyzer (0.3.0)
5
5
  colorize
6
+ prawn
7
+ prawn-table
6
8
  rake
7
9
  terminal-table
8
10
  thor
@@ -16,6 +18,12 @@ GEM
16
18
  docile (1.1.5)
17
19
  json (2.0.3)
18
20
  method_source (0.9.0)
21
+ pdf-core (0.7.0)
22
+ prawn (2.2.2)
23
+ pdf-core (~> 0.7.0)
24
+ ttfunk (~> 1.5)
25
+ prawn-table (0.2.2)
26
+ prawn (>= 1.3.0, < 3.0.0)
19
27
  pry (0.11.3)
20
28
  coderay (~> 1.1.0)
21
29
  method_source (~> 0.9.0)
@@ -41,6 +49,7 @@ GEM
41
49
  terminal-table (1.8.0)
42
50
  unicode-display_width (~> 1.1, >= 1.1.1)
43
51
  thor (0.20.0)
52
+ ttfunk (1.5.1)
44
53
  unicode-display_width (1.3.0)
45
54
 
46
55
  PLATFORMS
@@ -54,4 +63,4 @@ DEPENDENCIES
54
63
  simplecov
55
64
 
56
65
  BUNDLED WITH
57
- 1.14.6
66
+ 1.15.3
data/README.md CHANGED
@@ -42,6 +42,8 @@ Samples:
42
42
 
43
43
  * `log_analyzer log/development.log -s count`
44
44
  * `log_analyzer log/production.log`
45
+ * `log_analyzer production.log -csv`
46
+ * `log_analyzer production.log -pdf`
45
47
  * `log_analyzer -f log/production.log -s name`
46
48
  * `log_analyzer -f log/production.log -s time -f v`
47
49
  * `log_analyzer -file log/production.log -sort count`
@@ -74,13 +76,12 @@ Big thank you to all our contributors:
74
76
  * [@ck3g](https://github.com/ck3g)
75
77
  * [@ritaritual](https://github.com/ritaritual)
76
78
  * [@y-yagi](https://github.com/y-yagi)
79
+ * [@RafaelHashimoto](https://github.com/RafaelHashimoto)
77
80
 
78
81
  ## TODO
79
82
 
80
83
  * more analytics
81
84
  * more specs
82
- * export to PDF
83
- * export to CSV
84
85
  * export to XLS
85
86
  * export to HTML/CSS/JS with datatable.js
86
87
 
data/bin/log_analyzer CHANGED
@@ -27,6 +27,14 @@ parser = OptionParser.new do |opts|
27
27
  options[:short] = v
28
28
  end
29
29
 
30
+ opts.on("-pdf", "--output=pdf", "Export to .pdf") do |v|
31
+ options[:format] = 'pdf'
32
+ end
33
+
34
+ opts.on('-csv', '--output=csv', 'Export to .csv') do |v|
35
+ options[:format] = 'csv'
36
+ end
37
+
30
38
  opts.on('-h', '--help', 'Displays Help') do
31
39
  puts opts
32
40
  exit
@@ -40,22 +48,32 @@ end
40
48
 
41
49
  parser.parse!
42
50
 
51
+ # Define default params
43
52
  options[:file] = ARGV[0] if ARGV.size == 1 # user first argument as filename
44
53
  options[:sort] ||= :time # default order
45
54
  options[:filter] ||= :all # default order
46
55
  options[:short] ||= false
56
+ options[:format] ||= 'console'
47
57
 
48
58
  LogAnalyzer::Configuration.configure do |config|
49
59
  config.filter = options[:filter]
50
60
  end
51
61
 
52
- # puts "Running with: #{options.inspect}" # debug
62
+ # puts "Running with: #{options.inspect}".green # debug
53
63
 
54
64
  if options[:file] && options[:sort]
55
65
  analyzer = LogAnalyzer.analyze(filename: options[:file])
56
66
  analyzer.run
57
67
  analyzer.order(by: options[:sort])
58
- analyzer.visualize(short: options[:short])
68
+ case options[:format]
69
+ when 'pdf'
70
+ analyzer.to_pdf(LogAnalyzer::Utils.report_name('pdf'), short: options[:short])
71
+ when 'csv'
72
+ analyzer.to_csv(LogAnalyzer::Utils.report_name('csv'), short: options[:short])
73
+ else
74
+ analyzer.visualize(short: options[:short])
75
+ end
59
76
  else
60
77
  parser.parse! %w[--help]
61
78
  end
79
+
data/lib/log_analyzer.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  require "terminal-table"
2
2
  require "colorize"
3
+ require "prawn"
4
+ require "prawn/table"
5
+ require "csv"
3
6
  require "log_analyzer/version"
4
7
  require "log_analyzer/configuration"
5
8
  require "log_analyzer/utils"
@@ -49,7 +49,7 @@ module LogAnalyzer
49
49
  stats.each do |path, stat|
50
50
  next unless LogAnalyzer.configuration.filters.include?(stat.type)
51
51
 
52
- table.add_row format_row(path, stat, short)
52
+ table.add_row console_row(path, stat, short)
53
53
 
54
54
  rows_count += 1
55
55
  end
@@ -63,9 +63,44 @@ module LogAnalyzer
63
63
  puts(table)
64
64
  end
65
65
 
66
+ def to_pdf(out_filename, short: false)
67
+ this = self
68
+ data = [HEADER]
69
+ this.stats.each do |path, stat|
70
+ next unless LogAnalyzer.configuration.filters.include?(stat.type)
71
+ data << pdf_row(path, stat, short)
72
+ end
73
+ Prawn::Document.generate(out_filename) do
74
+ width = 72
75
+ text "LogAnalyzer Report", align: :center, size: 18
76
+ text Time.now.strftime("Generated on %B %d, %Y at %I:%M%p") , align: :center, size: 7
77
+ move_down 12
78
+ table data,
79
+ width: bounds.width,
80
+ header: true,
81
+ row_colors: ["FFFFFF", "FFFFCC"],
82
+ cell_style: { padding: [2, 2, 2, 2], size: 7 } do |t|
83
+ t.columns(0).style(align: :center)
84
+ end
85
+ move_down 20
86
+ text %(Generated by <link href="https://github.com/igorkasyanchuk/log_analyzer">https://github.com/igorkasyanchuk/log_analyzer</link>.), inline_format: true, size: 5, color: 'CCCCCC'
87
+ end
88
+ end
89
+
90
+ def to_csv(out_filename, short: false)
91
+ CSV.open("#{Dir.pwd}/#{out_filename}", 'w') do |csv|
92
+ #CSV header
93
+ csv << HEADER
94
+ #CSV content
95
+ stats.each do |path, stat|
96
+ csv << csv_format_row(path, stat, short)
97
+ end
98
+ end
99
+ end
100
+
66
101
  private
67
102
 
68
- def format_row(path, stat, short)
103
+ def console_row(path, stat, short)
69
104
  [
70
105
  Utils.type_label(stat.type),
71
106
  Utils.path_to_display(path, short: short, length: CONTENT_LENGTH),
@@ -76,6 +111,20 @@ module LogAnalyzer
76
111
  ]
77
112
  end
78
113
 
114
+ def simple_row(path, stat, short)
115
+ [
116
+ stat.type,
117
+ Utils.path_to_display(path, short: short, length: CONTENT_LENGTH),
118
+ stat.count,
119
+ stat.avg,
120
+ stat.max,
121
+ stat.min,
122
+ ]
123
+ end
124
+
125
+ alias :pdf_row :simple_row
126
+ alias :csv_format_row :simple_row
127
+
79
128
  def new_table
80
129
  Terminal::Table.new(headings: HEADER, width: DEFAULT_TABLE_WIDTH)
81
130
  end
@@ -44,5 +44,9 @@ module LogAnalyzer
44
44
  end
45
45
  end
46
46
 
47
+ def Utils.report_name(extension)
48
+ "report-log-analyzer-#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}.#{extension}"
49
+ end
50
+
47
51
  end
48
52
  end
@@ -1,3 +1,3 @@
1
1
  module LogAnalyzer
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
data/log_analyzer.gemspec CHANGED
@@ -26,6 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency "rake"
27
27
  spec.add_dependency "terminal-table"
28
28
  spec.add_dependency "colorize"
29
+ spec.add_dependency "prawn"
30
+ spec.add_dependency "prawn-table"
29
31
 
30
32
  spec.add_development_dependency "bundler", "> 1.14"
31
33
  spec.add_development_dependency "rspec", "~> 3.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: log_analyzer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-23 00:00:00.000000000 Z
11
+ date: 2018-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: prawn
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: prawn-table
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: bundler
71
99
  requirement: !ruby/object:Gem::Requirement