apache_log_report 0.9.1 → 0.9.6

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: a790d10e531dbe48d5bff951de0e2a3bc47188dcffd03d952597019012e76bed
4
- data.tar.gz: 22ff24d2b7a292bd8ef58d0ca49d0f55aa3a12d9400568ba46da5f0280fed3b2
3
+ metadata.gz: 1355b18ac3bb8e190bcc4e7a7fa5e655c465ffd45a7797895bd2be4d78f54cff
4
+ data.tar.gz: caa3b8c7795633901db1b5e24ddddd90c49bc47a00dcc0d0e8f2d46bdc4cf162
5
5
  SHA512:
6
- metadata.gz: abe3454d3679848d92f375f73b18efee2c090d83ba6d069146e3773542dccaa2c924b9b9813bc1311ad71ad82acb970d570a3f08674b4ffca00f6efbc80fde1a
7
- data.tar.gz: 60e70449964fb3460eec9a8c0ac6f155959ea697f694a65755e79beb13fe25a2199ebb8b17e01f941c022035791436f062fb909617c0eae785fd28f400a07fa0
6
+ metadata.gz: a811150ba66b92f6763b9e4657207a964b8873579a6ee08f6d58e011b09690f888f85b4543230291793d0c5ef1623547c4a02aa888c44bda20399c95701d32fa
7
+ data.tar.gz: b7559878a74638baff3c4281faae927e024f5c6e702f8128c986f3a659f81c8162b4e2ee934c47d3cd007874da0188f083c5b3739cad058a117985baecc403c0
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
 
@@ -45,6 +45,10 @@ module ApacheLogReport
45
45
  args[:suffix] = n
46
46
  end
47
47
 
48
+ opts.on("-c", "--code-export=WHAT", String, "Control :export directive in code blocks (code, results, *both*, none)") do |n|
49
+ args[:code_export] = n
50
+ end
51
+
48
52
  opts.on("-h", "--help", "Prints this help") do
49
53
  puts opts
50
54
  exit
@@ -58,7 +62,8 @@ module ApacheLogReport
58
62
  args[:no_selfpoll] ||= false
59
63
  args[:only_crawlers] ||= false
60
64
  args[:prefix] ||= ""
61
- args[:suffic] ||= ""
65
+ args[:suffix] ||= ""
66
+ args[:code_export] ||= "both"
62
67
 
63
68
  return args
64
69
  end
@@ -116,17 +121,16 @@ module ApacheLogReport
116
121
 
117
122
  parser = ApacheLog::Parser.new(options[:format] || 'combined')
118
123
 
119
- content.collect { |line|
120
- hash = parser.parse line
124
+ content.each do |line|
125
+ begin
126
+ hash = parser.parse line
121
127
 
122
- if hash != {}
123
128
  ua = Browser.new(hash[:user_agent], accept_language: "en-us")
124
-
125
129
  ins.execute(
126
130
  hash[:datetime].iso8601,
127
131
  hash[:remote_host],
128
132
  hash[:user],
129
- hash[:remote_host] + hash[:user_agent],
133
+ hash[:datetime].iso8601 + " " + hash[:remote_host] + " " + hash[:user_agent],
130
134
  hash[:request][:method],
131
135
  hash[:request][:path],
132
136
  (hash[:request][:path] ? File.extname(hash[:request][:path]) : ""),
@@ -140,17 +144,14 @@ module ApacheLogReport
140
144
  (ua.platform.name || ""),
141
145
  (ua.platform.version || "")
142
146
  )
147
+ rescue
148
+ STDERR.puts "Apache Log parser error: could not parse #{line}"
143
149
  end
144
- }
145
-
150
+ end
151
+
146
152
  db
147
153
  end
148
154
 
149
-
150
- def self.reasonable_response_type ext
151
-
152
- end
153
-
154
155
  #
155
156
  # take a sqlite3 databae and analyze data
156
157
  #
@@ -192,8 +193,8 @@ end
192
193
  @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]}"
193
194
 
194
195
  @reasonable_requests_exts = [ ".html", ".css", ".js", ".jpg", ".svg", ".png", ".woff", ".xml", ".ttf", ".ico", ".pdf", ".htm", ".txt", ".org" ].map { |x|
195
- "extension == '#{x}'"
196
- }.join " or "
196
+ "extension != '#{x}'"
197
+ }.join " and "
197
198
 
198
199
  @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]}"
199
200
 
@@ -235,8 +236,9 @@ end
235
236
  end
236
237
 
237
238
  def self.emit options = {}, command, log_file, started_at, ended_at, duration
238
- @prefx = options[:prefix]
239
+ @prefix = options[:prefix]
239
240
  @suffix = options[:suffix]
241
+ @export = options[:code_export]
240
242
 
241
243
  <<EOS
242
244
  #+TITLE: Apache Log Analysis: #{log_file}
@@ -257,7 +259,7 @@ end
257
259
 
258
260
  #{ output_table "daily_distribution", ["Day", "Hits", "Visits", "Size"], @daily_distribution }
259
261
 
260
- #+BEGIN_SRC gnuplot :var data = daily_distribution :results output :exports both :file #{@prefix}daily#{@suffix}.svg
262
+ #+BEGIN_SRC gnuplot :var data = daily_distribution :results output :exports #{@export} :file #{@prefix}daily#{@suffix}.svg
261
263
  reset
262
264
  set grid ytics linestyle 0
263
265
  set grid xtics linestyle 0
@@ -271,7 +273,8 @@ set xtics rotate by 60 right
271
273
  set title "Hits and Visitors"
272
274
  set xlabel "Date"
273
275
  set ylabel "Hits"
274
- set ylabel2 "Visits"
276
+ set y2label "Visits"
277
+ set y2tics
275
278
 
276
279
  set style fill transparent solid 0.2 noborder
277
280
 
@@ -289,7 +292,7 @@ data using 1:($2+100):2 with labels notitle textcolor rgb "#0000AA" axes x1y2
289
292
  #{ output_table "time_distribution", ["Hour", "Hits", "Visits", "Size"], @time_distribution }
290
293
 
291
294
 
292
- #+BEGIN_SRC gnuplot :var data = time_distribution :results output :exports both :file #{@prefix}time#{@suffix}.svg
295
+ #+BEGIN_SRC gnuplot :var data = time_distribution :results output :exports #{@export} :file #{@prefix}time#{@suffix}.svg
293
296
  reset
294
297
  set terminal svg size 1200,800 fname 'Arial' fsize 10
295
298
 
@@ -297,7 +300,9 @@ set grid ytics linestyle 0
297
300
 
298
301
  set title "Hits and Visitors"
299
302
  set xlabel "Date"
300
- set ylabel "Hits and Visits"
303
+ set ylabel "Hits"
304
+ set y2label "Visitors"
305
+ set y2tics
301
306
 
302
307
  set style fill solid 0.25
303
308
  set boxwidth 0.6
@@ -311,7 +316,7 @@ data using ($0 - 0.2):($2 + 10):2 with labels title "" textcolor rgb("#0000AA"),
311
316
  data using ($0 + 0.2):($3 + 10):3 with labels title "" textcolor rgb("#AA0000") axes x1y2
312
317
  #+END_SRC
313
318
 
314
- #+BEGIN_SRC gnuplot :var data = time_distribution :results output :exports both :file #{@prefix}time-traffic#{@suffix}.svg
319
+ #+BEGIN_SRC gnuplot :var data = time_distribution :results output :exports #{@export} :file #{@prefix}time-traffic#{@suffix}.svg
315
320
  reset
316
321
  set terminal svg size 1200,800 fname 'Arial' fsize 10
317
322
 
@@ -349,13 +354,13 @@ data using ($0):($2 + 10):2 with labels title "" textcolor rgb("#00AA00")
349
354
 
350
355
  * Possible Attacks
351
356
 
352
- #{ output_table "Attacks", ["Path", "Hits", "Visitors"], @attacks }
357
+ #{ output_table "attacks", ["Path", "Hits", "Visitors"], @attacks }
353
358
 
354
359
  * Statuses
355
360
 
356
361
  #{ output_table "statuses", ["Status", "Count"], @statuses }
357
362
 
358
- #+BEGIN_SRC gnuplot :var data = statuses :results output :exports both :file #{@prefix}statuses#{@suffix}.svg
363
+ #+BEGIN_SRC gnuplot :var data = statuses :results output :exports #{@export} :file #{@prefix}statuses#{@suffix}.svg
359
364
  reset
360
365
  set grid ytics linestyle 0
361
366
  set terminal svg size 1200,800 fname 'Arial' fsize 10
@@ -371,7 +376,7 @@ data using ($0):($2+100):2 with labels textcolor rgb "#0000AA"
371
376
 
372
377
  #{ output_table "daily_statuses", ["Status", "2xx", "3xx", "4xx"], @statuses_by_day }
373
378
 
374
- #+BEGIN_SRC gnuplot :var data = daily_statuses :results output :exports both :file #{@prefix}daily-statuses#{@suffix}.svg
379
+ #+BEGIN_SRC gnuplot :var data = daily_statuses :results output :exports #{@export} :file #{@prefix}daily-statuses#{@suffix}.svg
375
380
  reset
376
381
  set terminal svg size 1200,800 fname 'Arial' fsize 10
377
382
 
@@ -388,19 +393,19 @@ set boxwidth 0.6
388
393
  set style data histograms
389
394
  set style histogram clustered gap 1
390
395
 
391
- plot data using 2:xtic(1) lc rgb "#CC0000" title "4xx", \\
396
+ plot data using 2:xtic(1) lc rgb "#00AA00" title "2xx", \\
392
397
  data using 3 lc rgb "#0000CC" title "3xx", \\
393
- data using 4 lc rgb "#00AA00" title "2xx", \\
394
- data using ($0 - 1. / 4):($2 + 0.5):2 with labels title "" textcolor rgb("#CC0000"), \\
398
+ data using 4 lc rgb "#AA0000" title "4xx", \\
399
+ data using ($0 - 1. / 4):($2 + 0.5):2 with labels title "" textcolor rgb("#00AA00"), \\
395
400
  data using ($0):($3 + 0.5):3 with labels title "" textcolor rgb("#0000CC"), \\
396
- data using ($0 + 1. / 4):($4 + 0.5):4 with labels title "" textcolor rgb("#00AA00")
401
+ data using ($0 + 1. / 4):($4 + 0.5):4 with labels title "" textcolor rgb("#AA0000")
397
402
  #+END_SRC
398
403
 
399
404
  * Browsers
400
405
 
401
406
  #{ output_table "browsers", ["Browser", "Hits", "Visitors", "Size"], @browsers }
402
407
 
403
- #+BEGIN_SRC gnuplot :var data = browsers :results output :exports both :file #{@prefix}browser#{@suffix}.svg
408
+ #+BEGIN_SRC gnuplot :var data = browsers :results output :exports #{@export} :file #{@prefix}browser#{@suffix}.svg
404
409
  reset
405
410
  set grid ytics linestyle 0
406
411
  set terminal svg size 1200,800 fname 'Arial' fsize 10
@@ -416,7 +421,7 @@ data using ($0):($2+100):2 with labels textcolor rgb "#0000AA"
416
421
 
417
422
  #{ output_table "platforms", ["Platform", "Hits", "Visitors", "Size"], @platforms }
418
423
 
419
- #+BEGIN_SRC gnuplot :var data = platforms :results output :exports both :file #{@prefix}platforms#{@suffix}.svg
424
+ #+BEGIN_SRC gnuplot :var data = platforms :results output :exports #{@export} :file #{@prefix}platforms#{@suffix}.svg
420
425
  reset
421
426
  set grid ytics linestyle 0
422
427
  set terminal svg size 1200,800 fname 'Arial' fsize 10
@@ -437,7 +442,7 @@ data using ($0):($2+100):2 with labels textcolor rgb "#0000AA"
437
442
 
438
443
  #{ output_table "referers", ["Referers", "Hits", "Visitors", "Size"], @referers }
439
444
 
440
- #+BEGIN_SRC gnuplot :var data = referers :results output :exports both :file #{@prefix}referers#{@suffix}.svg
445
+ #+BEGIN_SRC gnuplot :var data = referers :results output :exports #{@export} :file #{@prefix}referers#{@suffix}.svg
441
446
  reset
442
447
  set terminal svg size 1200,800 fname 'Arial' fsize 10
443
448
 
@@ -1,3 +1,3 @@
1
1
  module ApacheLogReport
2
- VERSION = "0.9.1"
2
+ VERSION = "0.9.6"
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.1
4
+ version: 0.9.6
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