apache_log_report 0.9.2 → 0.9.7

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
  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.