apache_log_report 0.9.2 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a554ad8352b97f32dd81c004d6b78f1e7d8e2ea284bb7dc7ef18eb3fee7687a
4
- data.tar.gz: 0d6e6243eabf89425e174a7ce76948cfd9517fbf3c226a2e77bb746bb43e8223
3
+ metadata.gz: d6585f8ec0330f9f396aff91cd5f45400e70afd77ab3aee3b780b940bf1fdfb2
4
+ data.tar.gz: 3c54f1128fb5a407ecd19e12252038ecdc4003fe0dc5ad309eb42e1d4a00126a
5
5
  SHA512:
6
- metadata.gz: 75a8de1b3375eec45a4ffb41cfa37d834c89ec07e92155d31b2e872e5040fb22709f759bd5aa6bbfc5ed5c84852a9b26c6f603019cb2fb43d21a56a0d33f8eaf
7
- data.tar.gz: baa9f268e1e7dcdb72463bf4b4aac1d585524b3ba7db2da1408259f8d54f59424003094372b491791b2788f9f7b3de68a8d1cec8919cd1991ccb5c856677b94c
6
+ metadata.gz: bf3705b84a912e7a0d6b8b13a26ae12be6da8cba2effbfa136f899e78c9727295035348eaf2d689ff5772de4b03e26790dc8cb2e7b2c84b2043e2f05028c74f4
7
+ data.tar.gz: fc87021cff6a8a97666d42477dbbc5236199c9c76b25be31cdf0b378ccdb91e853cbfca2faf7cc2c381ff23e440cb434c48e343a714ae7ead965e93633d7f639
data/README.org CHANGED
@@ -12,6 +12,13 @@
12
12
 
13
13
  See the [[file:CHANGELOG.org][CHANGELOG]] file.
14
14
 
15
+ * Todo
16
+
17
+ ** TODO Version information from command line and in reports
18
+ ** TODO Refactor code from one giant class to more manageable chunkes
19
+ ** TODO Move performance stats var to class (to isolate vars)
20
+ ** TODO Check total number of days (which is not working, now)
21
+
15
22
  * Compatibility
16
23
 
17
24
 
@@ -16,13 +16,12 @@ if @log_file and not File.exist? @log_file
16
16
  end
17
17
 
18
18
  #
19
- # Parse Log
19
+ # Parse Log and Track Statistics
20
20
  #
21
21
 
22
22
  @started_at = Time.now
23
23
  @db = ApacheLogReport.parse @log_file
24
24
  ApacheLogReport.analyze_data @db, @options
25
-
26
25
  @ended_at = Time.now
27
26
  @duration = @ended_at - @started_at
28
27
 
@@ -5,13 +5,14 @@ module ApacheLogReport
5
5
  #
6
6
  require 'optparse'
7
7
  require 'optparse/date'
8
+ require 'apache_log_report/version'
8
9
 
9
10
  def self.options_parse options
10
11
  limit = 30
11
12
  args = {}
12
13
 
13
14
  opt_parser = OptionParser.new do |opts|
14
- opts.banner = "Usage: log-analyzer.rb [options] logfile"
15
+ opts.banner = "Usage: apache_log_report [options] [logfile]"
15
16
 
16
17
  opts.on("-lN", "--limit=N", Integer, "Number of entries to show (defaults to #{limit})") do |n|
17
18
  args[:limit] = n
@@ -25,28 +26,42 @@ module ApacheLogReport
25
26
  args[:to_date] = n
26
27
  end
27
28
 
28
- opts.on("-i", "--ignore-crawlers", "Ignore crawlers") do |n|
29
+ opts.on("-i", "--ignore-crawlers", "Ignore crawlers") do
29
30
  args[:ignore_crawlers] = true
30
31
  end
31
32
 
32
- opts.on("-p", "--ignore-selfpoll", "Ignore apaches self poll entries (from ::1)") do |n|
33
+ opts.on("-p", "--ignore-selfpoll", "Ignore apaches self poll entries (from ::1)") do
33
34
  args[:no_selfpoll] = true
34
35
  end
35
36
 
36
- opts.on("-c", "--only-crawlers", "Perform analysis on crawlers only") do |n|
37
+ opts.on("-c", "--only-crawlers", "Perform analysis on crawlers only") do
37
38
  args[:only_crawlers] = true
38
39
  end
39
40
 
40
- opts.on("-u", "--prefix=PREFIX", String, "Prefix to add to all plots (used to run multiple analyses in the same dir)") do |n|
41
+ opts.on("-uPREFIX", "--prefix=PREFIX", String, "Prefix to add to all plots (used to run multiple analyses in the same dir)") do |n|
41
42
  args[:prefix] = n
42
43
  end
43
44
 
44
- opts.on("-w", "--suffix=SUFFIX", String, "Suffix to add to all plots (used to run multiple analyses in the same dir)") do |n|
45
+ opts.on("-wSUFFIX", "--suffix=SUFFIX", String, "Suffix to add to all plots (used to run multiple analyses in the same dir)") do |n|
45
46
  args[:suffix] = n
46
47
  end
47
48
 
49
+ opts.on("-cWHAT", "--code-export=WHAT", String, "Control :export directive in code blocks (code, results, *both*, none)") do |n|
50
+ args[:code_export] = n
51
+ end
52
+
53
+ opts.on("-v", "--version", "Prints version information") do
54
+ puts "apache_log_report version #{ApacheLogReport::VERSION}"
55
+ puts "Copyright (C) 2020 Adolfo Villafiorita"
56
+ puts "Distributed under the terms of the MIT license"
57
+ puts ""
58
+ puts "Written by Adolfo Villafiorita"
59
+ exit
60
+ end
61
+
48
62
  opts.on("-h", "--help", "Prints this help") do
49
63
  puts opts
64
+ puts "This is version #{ApacheLogReport::VERSION}"
50
65
  exit
51
66
  end
52
67
  end
@@ -58,7 +73,8 @@ module ApacheLogReport
58
73
  args[:no_selfpoll] ||= false
59
74
  args[:only_crawlers] ||= false
60
75
  args[:prefix] ||= ""
61
- args[:suffic] ||= ""
76
+ args[:suffix] ||= ""
77
+ args[:code_export] ||= "both"
62
78
 
63
79
  return args
64
80
  end
@@ -125,7 +141,7 @@ module ApacheLogReport
125
141
  hash[:datetime].iso8601,
126
142
  hash[:remote_host],
127
143
  hash[:user],
128
- hash[:remote_host] + hash[:user_agent],
144
+ hash[:datetime].iso8601 + " " + hash[:remote_host] + " " + hash[:user_agent],
129
145
  hash[:request][:method],
130
146
  hash[:request][:path],
131
147
  (hash[:request][:path] ? File.extname(hash[:request][:path]) : ""),
@@ -188,8 +204,8 @@ module ApacheLogReport
188
204
  @missed_resources = db.execute "SELECT path, count(path), count(distinct(unique_visitor)) from LogLine where status == '404' and #{@filter} group by path order by count(path) desc limit #{options[:limit]}"
189
205
 
190
206
  @reasonable_requests_exts = [ ".html", ".css", ".js", ".jpg", ".svg", ".png", ".woff", ".xml", ".ttf", ".ico", ".pdf", ".htm", ".txt", ".org" ].map { |x|
191
- "extension == '#{x}'"
192
- }.join " or "
207
+ "extension != '#{x}'"
208
+ }.join " and "
193
209
 
194
210
  @attacks = db.execute "SELECT path, count(path), count(distinct(unique_visitor)) from LogLine where status == '404' and #{@filter} and (#{@reasonable_requests_exts}) group by path order by count(path) desc limit #{options[:limit]}"
195
211
 
@@ -231,8 +247,9 @@ module ApacheLogReport
231
247
  end
232
248
 
233
249
  def self.emit options = {}, command, log_file, started_at, ended_at, duration
234
- @prefx = options[:prefix]
250
+ @prefix = options[:prefix]
235
251
  @suffix = options[:suffix]
252
+ @export = options[:code_export]
236
253
 
237
254
  <<EOS
238
255
  #+TITLE: Apache Log Analysis: #{log_file}
@@ -253,7 +270,7 @@ module ApacheLogReport
253
270
 
254
271
  #{ output_table "daily_distribution", ["Day", "Hits", "Visits", "Size"], @daily_distribution }
255
272
 
256
- #+BEGIN_SRC gnuplot :var data = daily_distribution :results output :exports both :file #{@prefix}daily#{@suffix}.svg
273
+ #+BEGIN_SRC gnuplot :var data = daily_distribution :results output :exports #{@export} :file #{@prefix}daily#{@suffix}.svg
257
274
  reset
258
275
  set grid ytics linestyle 0
259
276
  set grid xtics linestyle 0
@@ -267,7 +284,8 @@ set xtics rotate by 60 right
267
284
  set title "Hits and Visitors"
268
285
  set xlabel "Date"
269
286
  set ylabel "Hits"
270
- set ylabel2 "Visits"
287
+ set y2label "Visits"
288
+ set y2tics
271
289
 
272
290
  set style fill transparent solid 0.2 noborder
273
291
 
@@ -285,7 +303,7 @@ data using 1:($2+100):2 with labels notitle textcolor rgb "#0000AA" axes x1y2
285
303
  #{ output_table "time_distribution", ["Hour", "Hits", "Visits", "Size"], @time_distribution }
286
304
 
287
305
 
288
- #+BEGIN_SRC gnuplot :var data = time_distribution :results output :exports both :file #{@prefix}time#{@suffix}.svg
306
+ #+BEGIN_SRC gnuplot :var data = time_distribution :results output :exports #{@export} :file #{@prefix}time#{@suffix}.svg
289
307
  reset
290
308
  set terminal svg size 1200,800 fname 'Arial' fsize 10
291
309
 
@@ -293,7 +311,9 @@ set grid ytics linestyle 0
293
311
 
294
312
  set title "Hits and Visitors"
295
313
  set xlabel "Date"
296
- set ylabel "Hits and Visits"
314
+ set ylabel "Hits"
315
+ set y2label "Visitors"
316
+ set y2tics
297
317
 
298
318
  set style fill solid 0.25
299
319
  set boxwidth 0.6
@@ -307,7 +327,7 @@ data using ($0 - 0.2):($2 + 10):2 with labels title "" textcolor rgb("#0000AA"),
307
327
  data using ($0 + 0.2):($3 + 10):3 with labels title "" textcolor rgb("#AA0000") axes x1y2
308
328
  #+END_SRC
309
329
 
310
- #+BEGIN_SRC gnuplot :var data = time_distribution :results output :exports both :file #{@prefix}time-traffic#{@suffix}.svg
330
+ #+BEGIN_SRC gnuplot :var data = time_distribution :results output :exports #{@export} :file #{@prefix}time-traffic#{@suffix}.svg
311
331
  reset
312
332
  set terminal svg size 1200,800 fname 'Arial' fsize 10
313
333
 
@@ -345,13 +365,13 @@ data using ($0):($2 + 10):2 with labels title "" textcolor rgb("#00AA00")
345
365
 
346
366
  * Possible Attacks
347
367
 
348
- #{ output_table "Attacks", ["Path", "Hits", "Visitors"], @attacks }
368
+ #{ output_table "attacks", ["Path", "Hits", "Visitors"], @attacks }
349
369
 
350
370
  * Statuses
351
371
 
352
372
  #{ output_table "statuses", ["Status", "Count"], @statuses }
353
373
 
354
- #+BEGIN_SRC gnuplot :var data = statuses :results output :exports both :file #{@prefix}statuses#{@suffix}.svg
374
+ #+BEGIN_SRC gnuplot :var data = statuses :results output :exports #{@export} :file #{@prefix}statuses#{@suffix}.svg
355
375
  reset
356
376
  set grid ytics linestyle 0
357
377
  set terminal svg size 1200,800 fname 'Arial' fsize 10
@@ -367,7 +387,7 @@ data using ($0):($2+100):2 with labels textcolor rgb "#0000AA"
367
387
 
368
388
  #{ output_table "daily_statuses", ["Status", "2xx", "3xx", "4xx"], @statuses_by_day }
369
389
 
370
- #+BEGIN_SRC gnuplot :var data = daily_statuses :results output :exports both :file #{@prefix}daily-statuses#{@suffix}.svg
390
+ #+BEGIN_SRC gnuplot :var data = daily_statuses :results output :exports #{@export} :file #{@prefix}daily-statuses#{@suffix}.svg
371
391
  reset
372
392
  set terminal svg size 1200,800 fname 'Arial' fsize 10
373
393
 
@@ -384,19 +404,19 @@ set boxwidth 0.6
384
404
  set style data histograms
385
405
  set style histogram clustered gap 1
386
406
 
387
- plot data using 2:xtic(1) lc rgb "#CC0000" title "4xx", \\
407
+ plot data using 2:xtic(1) lc rgb "#00AA00" title "2xx", \\
388
408
  data using 3 lc rgb "#0000CC" title "3xx", \\
389
- data using 4 lc rgb "#00AA00" title "2xx", \\
390
- data using ($0 - 1. / 4):($2 + 0.5):2 with labels title "" textcolor rgb("#CC0000"), \\
409
+ data using 4 lc rgb "#AA0000" title "4xx", \\
410
+ data using ($0 - 1. / 4):($2 + 0.5):2 with labels title "" textcolor rgb("#00AA00"), \\
391
411
  data using ($0):($3 + 0.5):3 with labels title "" textcolor rgb("#0000CC"), \\
392
- data using ($0 + 1. / 4):($4 + 0.5):4 with labels title "" textcolor rgb("#00AA00")
412
+ data using ($0 + 1. / 4):($4 + 0.5):4 with labels title "" textcolor rgb("#AA0000")
393
413
  #+END_SRC
394
414
 
395
415
  * Browsers
396
416
 
397
417
  #{ output_table "browsers", ["Browser", "Hits", "Visitors", "Size"], @browsers }
398
418
 
399
- #+BEGIN_SRC gnuplot :var data = browsers :results output :exports both :file #{@prefix}browser#{@suffix}.svg
419
+ #+BEGIN_SRC gnuplot :var data = browsers :results output :exports #{@export} :file #{@prefix}browser#{@suffix}.svg
400
420
  reset
401
421
  set grid ytics linestyle 0
402
422
  set terminal svg size 1200,800 fname 'Arial' fsize 10
@@ -412,7 +432,7 @@ data using ($0):($2+100):2 with labels textcolor rgb "#0000AA"
412
432
 
413
433
  #{ output_table "platforms", ["Platform", "Hits", "Visitors", "Size"], @platforms }
414
434
 
415
- #+BEGIN_SRC gnuplot :var data = platforms :results output :exports both :file #{@prefix}platforms#{@suffix}.svg
435
+ #+BEGIN_SRC gnuplot :var data = platforms :results output :exports #{@export} :file #{@prefix}platforms#{@suffix}.svg
416
436
  reset
417
437
  set grid ytics linestyle 0
418
438
  set terminal svg size 1200,800 fname 'Arial' fsize 10
@@ -433,7 +453,7 @@ data using ($0):($2+100):2 with labels textcolor rgb "#0000AA"
433
453
 
434
454
  #{ output_table "referers", ["Referers", "Hits", "Visitors", "Size"], @referers }
435
455
 
436
- #+BEGIN_SRC gnuplot :var data = referers :results output :exports both :file #{@prefix}referers#{@suffix}.svg
456
+ #+BEGIN_SRC gnuplot :var data = referers :results output :exports #{@export} :file #{@prefix}referers#{@suffix}.svg
437
457
  reset
438
458
  set terminal svg size 1200,800 fname 'Arial' fsize 10
439
459
 
@@ -1,3 +1,3 @@
1
1
  module ApacheLogReport
2
- VERSION = "0.9.2"
2
+ VERSION = "0.9.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apache_log_report
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adolfo Villafiorita
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-28 00:00:00.000000000 Z
11
+ date: 2020-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apache_log-parser
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []
112
- rubygems_version: 3.1.2
112
+ rubygems_version: 3.0.3
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: Generate a request report in OrgMode format from an Apache log file.