log_sense 1.3.0 → 1.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.org +17 -6
- data/Gemfile.lock +1 -3
- data/README.org +53 -35
- data/apache-screenshot.png +0 -0
- data/lib/log_sense/apache_log_line_parser.rb +7 -4
- data/lib/log_sense/emitter.rb +7 -0
- data/lib/log_sense/templates/_output_table.html.erb +15 -11
- data/lib/log_sense/templates/_report_data.html.erb +12 -0
- data/lib/log_sense/templates/apache.html.erb +7 -14
- data/lib/log_sense/templates/rails.html.erb +23 -14
- data/lib/log_sense/version.rb +1 -1
- data/log_sense.gemspec +20 -20
- metadata +15 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30e8194103003ca9861272072bbf9ef199d7d80b67a0b73fb38d510f23adacee
|
4
|
+
data.tar.gz: 00b36829dd41b27e79cd6a41cacb412479631c0be9a9e2b79d585f81e0c7efa8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41b392e7d5ec01052dbb645d50b6dc6736a82c04ea231ac33f3fa2c3679cc27a959164a8f5f9524f1604f1b495c032978a2e4e14ca01a706448fc6a8d7556185
|
7
|
+
data.tar.gz: fea27d4e0765fec9b090101a3efec3eb5ebd162af1c7389162d34c876754980b5dbccb22141b3aa4a0ec3eeb44bfd3936e17cc5463dc93148c3718bb51a1dcec
|
data/CHANGELOG.org
CHANGED
@@ -2,13 +2,24 @@
|
|
2
2
|
#+AUTHOR: Adolfo Villafiorita
|
3
3
|
#+STARTUP: showall
|
4
4
|
|
5
|
-
*
|
6
|
-
<2021-12-17 Fri>
|
5
|
+
* 1.3.3 and 1.3.4
|
7
6
|
|
8
|
-
-
|
7
|
+
- [Gem] Moved repository to Github and fixes to gemspec
|
9
8
|
|
10
|
-
*
|
11
|
-
<2021-12-17 Fri>
|
9
|
+
* 1.3.2
|
12
10
|
|
13
|
-
-
|
11
|
+
- [Code] HTML reports now generate JSON data which is shared between
|
12
|
+
DataTable and Vega Light: this should reduce page size and loading
|
13
|
+
time of HTML reports
|
14
|
+
- [Doc] Added screenshot and fixed some text
|
15
|
+
- [Doc] Fixes requirements on Ruby version
|
14
16
|
|
17
|
+
* 1.3.1
|
18
|
+
|
19
|
+
- [Code] Strengthened parsing of Apache Logs (added WebDav and other methods)
|
20
|
+
|
21
|
+
* 1.3.0
|
22
|
+
|
23
|
+
- [Code] Removed dependency from =apache_log-parser= and implemented our own
|
24
|
+
parser for the combined format.
|
25
|
+
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
log_sense (1.
|
5
|
-
apache_log-parser
|
4
|
+
log_sense (1.3.1)
|
6
5
|
browser
|
7
6
|
ipaddr
|
8
7
|
iso_country_codes
|
@@ -12,7 +11,6 @@ PATH
|
|
12
11
|
GEM
|
13
12
|
remote: https://rubygems.org/
|
14
13
|
specs:
|
15
|
-
apache_log-parser (3.1.2)
|
16
14
|
browser (5.3.1)
|
17
15
|
byebug (11.1.3)
|
18
16
|
ipaddr (1.2.3)
|
data/README.org
CHANGED
@@ -4,24 +4,10 @@
|
|
4
4
|
|
5
5
|
* Introduction
|
6
6
|
|
7
|
-
LogSense generates reports and statistics from Apache
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
LogSense moves along the lines of tools such as [[https://goaccess.io/][GoAccess]]
|
13
|
-
and [[https://umami.is/][Umami]], focusing on privacy and data-ownership: the data
|
14
|
-
generated by LogSense is stored on your computer and owned by
|
15
|
-
you (like it should be).
|
16
|
-
|
17
|
-
LogSense is also inspired by *static websites generators*: statistics
|
18
|
-
are generated from the command line and accessed as static HTML files.
|
19
|
-
By generating static resources, LogSense significantly reduces the
|
20
|
-
attack surface of your webserver and installation headaches.
|
21
|
-
|
22
|
-
We have, for instance, a cron job running on our servers, generating
|
23
|
-
statistics at night. The generated files are then made available on a
|
24
|
-
private area on the web.
|
7
|
+
LogSense generates reports and statistics from Apache and Ruby on
|
8
|
+
Rails logs. Written in Ruby, it runs from the command line, it is
|
9
|
+
fast, and it can be installed on any system with a relatively recent
|
10
|
+
version of Ruby. We tested on Ruby 2.6.9, Ruby 3.0.x and later.
|
25
11
|
|
26
12
|
LogSense reports the following data:
|
27
13
|
|
@@ -40,7 +26,27 @@ LogSense reports the following data:
|
|
40
26
|
Filters from the command line allow to analyze specific periods and
|
41
27
|
distinguish traffic generated by self polls and crawlers.
|
42
28
|
|
43
|
-
LogSense generates HTML, txt
|
29
|
+
LogSense generates HTML, txt, and SQLite outputs.
|
30
|
+
|
31
|
+
And, of course, the compulsory screenshot:
|
32
|
+
|
33
|
+
#+ATTR_HTML: :width 80%
|
34
|
+
[[file:./apache-screenshot.png]]
|
35
|
+
|
36
|
+
* Motivation
|
37
|
+
|
38
|
+
LogSense moves along the lines of tools such as [[https://goaccess.io/][GoAccess]] (which
|
39
|
+
strongly inspired the development of Log Sense) and [[https://umami.is/][Umami]], focusing on
|
40
|
+
*privacy* and *data-ownership*: the data generated by LogSense is
|
41
|
+
stored on your computer and owned by you (like it should be)[fn:1].
|
42
|
+
|
43
|
+
LogSense is also inspired by *static websites generators*: statistics
|
44
|
+
are generated from the command line and accessed as static HTML files.
|
45
|
+
LogSense thus significantly reduces the attack surface of your
|
46
|
+
web server and installation headaches. We have, for instance, a cron
|
47
|
+
job running on our servers, generating statistics at night. The
|
48
|
+
generated files are then made available on a private area on the web.
|
49
|
+
|
44
50
|
|
45
51
|
* Installation
|
46
52
|
|
@@ -70,48 +76,60 @@ LogSense generates HTML, txt (Org Mode), and SQLite outputs.
|
|
70
76
|
-v, --version Prints version information
|
71
77
|
-h, --help Prints this help
|
72
78
|
|
73
|
-
This is version 1.
|
79
|
+
This is version 1.3.1
|
74
80
|
|
75
81
|
Output formats
|
76
|
-
apache parsing can produce the following outputs:
|
77
|
-
- sqlite
|
78
|
-
- html
|
79
82
|
rails parsing can produce the following outputs:
|
80
83
|
- sqlite
|
81
84
|
- txt
|
85
|
+
- html
|
86
|
+
apache parsing can produce the following outputs:
|
87
|
+
- sqlite
|
88
|
+
- html
|
82
89
|
#+end_example
|
83
90
|
|
91
|
+
Examples:
|
92
|
+
|
93
|
+
#+begin_example sh
|
94
|
+
log_sense -f apache -i access.log -t txt > access-data.txt
|
95
|
+
log_sense -f rails -i production.log -t html -o performance.txt
|
96
|
+
#+end_example
|
97
|
+
|
84
98
|
* Change Log
|
85
99
|
|
86
100
|
See the [[file:CHANGELOG.org][CHANGELOG]] file.
|
87
101
|
|
88
102
|
* Compatibility
|
89
103
|
|
90
|
-
LogSense should run on any system on which Ruby
|
104
|
+
LogSense should run on any system on which a recent version of Ruby
|
105
|
+
runs. We tested it with Ruby 2.6.9 and Ruby 3.x.x.
|
91
106
|
|
92
107
|
Concerning the outputs:
|
93
108
|
|
94
|
-
-
|
95
|
-
are downloaded from a CDN
|
96
|
-
- The textual format is compatible with Org Mode and can be further
|
97
|
-
processed to any format Org Mode can be exported to (including HTML
|
98
|
-
and PDF)
|
109
|
+
- HTML reports use [[https://get.foundation/][Zurb Foundation]], [[https://www.datatables.net/][Data Tables]], and [[https://vega.github.io/vega-lite/][Vega Light]], which
|
110
|
+
are all downloaded from a CDN
|
111
|
+
- The textual format is compatible with [[https://orgmode.org/][Org Mode]] and can be further
|
112
|
+
processed to any format [[https://orgmode.org/][Org Mode]] can be exported to (including HTML
|
113
|
+
and PDF)
|
99
114
|
|
100
115
|
* Author and Contributors
|
101
116
|
|
102
|
-
[[
|
117
|
+
[[https://shair.tech][Shair.Tech]]
|
103
118
|
|
104
119
|
* Known Bugs
|
105
120
|
|
106
|
-
|
107
|
-
|
121
|
+
No known bugs; an unknown number of unknown bugs.
|
108
122
|
(See the open issues for the known bugs.)
|
109
123
|
|
110
124
|
* License
|
111
125
|
|
112
126
|
Distributed under the terms of the [[http://opensource.org/licenses/MIT][MIT License]].
|
113
127
|
|
114
|
-
Geolocation is made possible by the DB-IP.com IP to City database,
|
115
|
-
a CC license.
|
116
|
-
|
128
|
+
Geolocation is made possible by the DB-IP.com IP to City database,
|
129
|
+
released under a CC license.
|
117
130
|
|
131
|
+
[fn:1] There is a small catch: CSS and JavaScript for layout and plots
|
132
|
+
are downloaded from a CDN. Technically, thus, if you generate HTML
|
133
|
+
reports and open them, a request is performed and the CDN might keep a
|
134
|
+
track (see [[https://en.wikipedia.org/wiki/Content_delivery_network#Security_and_privacy][CDN Security and Privacy on Wikipedia]] for more details).
|
135
|
+
Textual reports don't have this issue.
|
Binary file
|
@@ -25,16 +25,19 @@ module LogSense
|
|
25
25
|
TIMEC = /[0-9]{2}/
|
26
26
|
TIMEZONE = /(\+|-)[0-9]{4}/
|
27
27
|
|
28
|
-
IP = /(?<ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/
|
28
|
+
IP = /(?<ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|::1)/
|
29
29
|
IDENT = /(?<ident>[^ ]+|-)/
|
30
30
|
USERID = /(?<userid>[^ ]+|-)/
|
31
31
|
|
32
32
|
TIMESTAMP = /(?<date>#{DAY}\/#{MONTH}\/#{YEAR}):(?<time>#{TIMEC}:#{TIMEC}:#{TIMEC} #{TIMEZONE})/
|
33
33
|
|
34
|
-
|
34
|
+
HTTP_METHODS=/GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH/
|
35
|
+
WEBDAV_METHODS=/COPY|LOCK|MKCOL|MOVE|PROPFIND|PROPPATCH|UNLOCK/
|
36
|
+
OTHER_METHODS=/SEARCH|REPORT/
|
37
|
+
METHOD=/(?<method>#{HTTP_METHODS}|#{WEBDAV_METHODS}|#{OTHER_METHODS})/
|
35
38
|
PROTOCOL=/(?<protocol>HTTP\/[0-9]\.[0-9])/
|
36
39
|
URL=/(?<url>[^ ]+)/
|
37
|
-
REFERER=/(?<referer>[^ ])
|
40
|
+
REFERER=/(?<referer>[^ ]+)/
|
38
41
|
RETURN_CODE=/(?<status>[1-5][0-9][0-9])/
|
39
42
|
SIZE=/(?<size>[0-9]+|-)/
|
40
43
|
|
@@ -43,7 +46,7 @@ module LogSense
|
|
43
46
|
attr_reader :format
|
44
47
|
|
45
48
|
def initialize
|
46
|
-
@format = /#{IP} #{IDENT} #{USERID} \[#{TIMESTAMP}\] "#{
|
49
|
+
@format = /#{IP} #{IDENT} #{USERID} \[#{TIMESTAMP}\] "#{METHOD} #{URL} #{PROTOCOL}" #{RETURN_CODE} #{SIZE} "#{REFERER}" "#{USER_AGENT}"/
|
47
50
|
end
|
48
51
|
|
49
52
|
def parse line
|
data/lib/log_sense/emitter.rb
CHANGED
@@ -40,5 +40,12 @@ module LogSense
|
|
40
40
|
ERB.new(erb_template).result(OpenStruct.new(vars).instance_eval { binding })
|
41
41
|
end
|
42
42
|
|
43
|
+
def self.escape_javascript(string)
|
44
|
+
js_escape_map = { "\\" => "\\\\", "</" => '<\/', "\r\n" => '\n', "\n" => '\n', "\r" => '\n', '"' => '\\"', "'" => "\\'", "`" => "\\`", "$" => "\\$" }
|
45
|
+
js_escape_map.each do |k, v|
|
46
|
+
string = string.gsub(k, v)
|
47
|
+
end
|
48
|
+
string
|
49
|
+
end
|
43
50
|
end
|
44
51
|
end
|
@@ -4,22 +4,26 @@ def slugify string
|
|
4
4
|
end
|
5
5
|
%>
|
6
6
|
|
7
|
-
<table id="
|
7
|
+
<table id="table-<%= index %>" class="table unstriped">
|
8
8
|
<thead>
|
9
9
|
<tr>
|
10
|
-
<% header.each do |
|
11
|
-
<th
|
10
|
+
<% report[:header].each do |header| %>
|
11
|
+
<th><%= header %></th>
|
12
12
|
<% end %>
|
13
13
|
</tr>
|
14
14
|
</thead>
|
15
15
|
<tbody>
|
16
|
-
<% rows.each do |row| %>
|
17
|
-
<tr>
|
18
|
-
<% row.each_with_index do |cell, i| %>
|
19
|
-
<td class="<%= slugify (header[i] || "") %>"><%= cell %></td>
|
20
|
-
<% end %>
|
21
|
-
</tr>
|
22
|
-
<% end %>
|
23
16
|
</tbody>
|
24
17
|
</table>
|
25
|
-
|
18
|
+
<script>
|
19
|
+
$(document).ready(function(){
|
20
|
+
$('#table-<%= index %>').dataTable({
|
21
|
+
data: data_<%= index %>,
|
22
|
+
columns: [
|
23
|
+
<% report[:header].each do |header| %>
|
24
|
+
{ data: '<%= header %>', className: '<%= slugify(header) %>' },
|
25
|
+
<% end %>
|
26
|
+
]
|
27
|
+
});
|
28
|
+
});
|
29
|
+
</script>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<script>
|
2
|
+
/* this is used both by Vega and DataTable */
|
3
|
+
data_<%= index %> = [
|
4
|
+
<% report[:rows].each do |row| %>
|
5
|
+
{
|
6
|
+
<% report[:header].each_with_index do |h, i| %>
|
7
|
+
"<%= h %>": <%= (row[i].class == Integer or row[i].class == Float) ? row[i] : "\"#{Emitter::escape_javascript(row[i] || '')}\"" %>,
|
8
|
+
<% end %>
|
9
|
+
},
|
10
|
+
<% end %>
|
11
|
+
]
|
12
|
+
</script>
|
@@ -17,6 +17,8 @@
|
|
17
17
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.4/dist/css/foundation.min.css">
|
18
18
|
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/zf/dt-1.11.3/datatables.min.css"/>
|
19
19
|
|
20
|
+
<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
21
|
+
<script type="text/javascript" src="https://cdn.datatables.net/v/zf/dt-1.11.3/datatables.min.js"></script>
|
20
22
|
|
21
23
|
<script src="https://cdn.jsdelivr.net/npm/vega@5.21.0"></script>
|
22
24
|
<script src="https://cdn.jsdelivr.net/npm/vega-lite@5.2.0"></script>
|
@@ -426,7 +428,7 @@
|
|
426
428
|
<%= report[:title] %>
|
427
429
|
</h2>
|
428
430
|
</div>
|
429
|
-
|
431
|
+
<%= render "report_data.html.erb", report: report, index: index %>
|
430
432
|
<% if report[:vega_spec] %>
|
431
433
|
<div id="<%= "plot-#{index}" %>"></div>
|
432
434
|
<script>
|
@@ -436,22 +438,15 @@
|
|
436
438
|
width: "container",
|
437
439
|
description: "<%= report[:title] %>",
|
438
440
|
data: {
|
439
|
-
values:
|
440
|
-
<% report[:rows].each do |row| %>
|
441
|
-
{
|
442
|
-
<% report[:header].each_with_index do |h, i| %>
|
443
|
-
"<%= h %>": <%= (row[i].class == Integer or row[i].class == Float) ? row[i] : "\"#{row[i]}\"" %>,
|
444
|
-
<% end %>
|
445
|
-
},
|
446
|
-
<% end %>
|
447
|
-
]
|
441
|
+
values: data_<%= index %>
|
448
442
|
},
|
449
443
|
});
|
450
444
|
vegaEmbed('#<%= "plot-#{index}"%>', plot_spec_<%= index %>);
|
451
445
|
</script>
|
452
446
|
<% end %>
|
453
|
-
|
454
|
-
|
447
|
+
|
448
|
+
<div class="card-section">
|
449
|
+
<%= render "output_table.html.erb", report: report, index: index %>
|
455
450
|
</div>
|
456
451
|
</article>
|
457
452
|
<% end %>
|
@@ -569,9 +564,7 @@
|
|
569
564
|
</section>
|
570
565
|
</div>
|
571
566
|
|
572
|
-
<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
573
567
|
<script type="text/javascript" src="js/vendor/what-input.js"></script>
|
574
|
-
<script type="text/javascript" src="https://cdn.datatables.net/v/zf/dt-1.11.3/datatables.min.js"></script>
|
575
568
|
<script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
|
576
569
|
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.4/dist/js/foundation.min.js" crossorigin="anonymous"></script>
|
577
570
|
<script>
|
@@ -17,6 +17,8 @@
|
|
17
17
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.4/dist/css/foundation.min.css">
|
18
18
|
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/zf/dt-1.11.3/datatables.min.css"/>
|
19
19
|
|
20
|
+
<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
21
|
+
<script type="text/javascript" src="https://cdn.datatables.net/v/zf/dt-1.11.3/datatables.min.js"></script>
|
20
22
|
|
21
23
|
<script src="https://cdn.jsdelivr.net/npm/vega@5.21.0"></script>
|
22
24
|
<script src="https://cdn.jsdelivr.net/npm/vega-lite@5.2.0"></script>
|
@@ -306,7 +308,24 @@
|
|
306
308
|
vega_spec: {
|
307
309
|
"layer": [
|
308
310
|
{
|
309
|
-
"mark":
|
311
|
+
"mark": {
|
312
|
+
"type": "point",
|
313
|
+
"name": "data_points"
|
314
|
+
}
|
315
|
+
},
|
316
|
+
{
|
317
|
+
"mark": {
|
318
|
+
"name": "label",
|
319
|
+
"type": "text",
|
320
|
+
"align": "left",
|
321
|
+
"baseline": "middle",
|
322
|
+
"dx": 5,
|
323
|
+
"yOffset": 0
|
324
|
+
},
|
325
|
+
"encoding": {
|
326
|
+
"text": {"field": "Controller"},
|
327
|
+
"fontSize": {"value": 8}
|
328
|
+
},
|
310
329
|
},
|
311
330
|
],
|
312
331
|
"encoding": {
|
@@ -341,7 +360,7 @@
|
|
341
360
|
<%= report[:title] %>
|
342
361
|
</h2>
|
343
362
|
</div>
|
344
|
-
|
363
|
+
<%= render "report_data.html.erb", report: report, index: index %>
|
345
364
|
<% if report[:vega_spec] %>
|
346
365
|
<div id="<%= "plot-#{index}" %>"></div>
|
347
366
|
<script>
|
@@ -351,22 +370,14 @@
|
|
351
370
|
width: "container",
|
352
371
|
description: "<%= report[:title] %>",
|
353
372
|
data: {
|
354
|
-
values:
|
355
|
-
<% report[:rows].each do |row| %>
|
356
|
-
{
|
357
|
-
<% report[:header].each_with_index do |h, i| %>
|
358
|
-
"<%= h %>": <%= (row[i].class == Integer or row[i].class == Float) ? row[i] : "\"#{row[i]}\"" %>,
|
359
|
-
<% end %>
|
360
|
-
},
|
361
|
-
<% end %>
|
362
|
-
]
|
373
|
+
values: data_<%= index %>
|
363
374
|
},
|
364
375
|
});
|
365
376
|
vegaEmbed('#<%= "plot-#{index}"%>', plot_spec_<%= index %>);
|
366
377
|
</script>
|
367
378
|
<% end %>
|
368
379
|
<div class="card-section">
|
369
|
-
<%= render "output_table.html.erb", report %>
|
380
|
+
<%= render "output_table.html.erb", report: report, index: index %>
|
370
381
|
</div>
|
371
382
|
</article>
|
372
383
|
<% end %>
|
@@ -392,9 +403,7 @@
|
|
392
403
|
</section>
|
393
404
|
</div>
|
394
405
|
|
395
|
-
<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
396
406
|
<script type="text/javascript" src="js/vendor/what-input.js"></script>
|
397
|
-
<script type="text/javascript" src="https://cdn.datatables.net/v/zf/dt-1.11.3/datatables.min.js"></script>
|
398
407
|
<script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
|
399
408
|
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.4/dist/js/foundation.min.js" crossorigin="anonymous"></script>
|
400
409
|
<script>
|
data/lib/log_sense/version.rb
CHANGED
data/log_sense.gemspec
CHANGED
@@ -1,38 +1,38 @@
|
|
1
1
|
require_relative 'lib/log_sense/version'
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
|
-
spec.name =
|
4
|
+
spec.name = 'log_sense'
|
5
5
|
spec.version = LogSense::VERSION
|
6
|
-
spec.authors = [
|
7
|
-
spec.email = [
|
6
|
+
spec.authors = ['Adolfo Fibrillation']
|
7
|
+
spec.email = ['adolfo@shair.tech']
|
8
8
|
|
9
|
-
spec.summary = %q{Generate analytics
|
10
|
-
spec.description = %q{Generate
|
11
|
-
spec.homepage =
|
12
|
-
spec.license =
|
13
|
-
spec.required_ruby_version = Gem::Requirement.new(
|
9
|
+
spec.summary = %q{Generate analytics for Apache and Rails log file.}
|
10
|
+
spec.description = %q{Generate analytics in HTML, txt, and SQLite format for Apache and Rails log files.}
|
11
|
+
spec.homepage = 'https://github.com/shair-tech/log_sense/log_sense'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.6.9')
|
14
14
|
|
15
|
-
spec.metadata[
|
15
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org/'
|
16
16
|
|
17
|
-
spec.metadata[
|
18
|
-
spec.metadata[
|
19
|
-
spec.metadata[
|
17
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
18
|
+
spec.metadata['source_code_uri'] = 'https://github.com/shair-tech/log_sense/log_sense'
|
19
|
+
spec.metadata['changelog_uri'] = 'https://github.com/shair-tech/log_sense/blob/main/CHANGELOG.org'
|
20
20
|
|
21
21
|
# Specify which files should be added to the gem when it is released.
|
22
22
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
23
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
24
24
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
25
|
end
|
26
|
-
spec.bindir =
|
26
|
+
spec.bindir = 'exe'
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
-
spec.require_paths = [
|
28
|
+
spec.require_paths = ['lib']
|
29
29
|
|
30
|
-
spec.add_dependency
|
31
|
-
spec.add_dependency
|
32
|
-
spec.add_dependency
|
33
|
-
spec.add_dependency
|
34
|
-
spec.add_dependency
|
30
|
+
spec.add_dependency 'browser'
|
31
|
+
spec.add_dependency 'ipaddr'
|
32
|
+
spec.add_dependency 'iso_country_codes'
|
33
|
+
spec.add_dependency 'sqlite3'
|
34
|
+
spec.add_dependency 'terminal-table'
|
35
35
|
|
36
36
|
spec.add_development_dependency 'byebug'
|
37
|
-
spec.add_development_dependency
|
37
|
+
spec.add_development_dependency 'minitest'
|
38
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: log_sense
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Adolfo
|
7
|
+
- Adolfo Fibrillation
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: browser
|
@@ -108,10 +108,10 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
description: Generate
|
112
|
-
|
111
|
+
description: Generate analytics in HTML, txt, and SQLite format for Apache and Rails
|
112
|
+
log files.
|
113
113
|
email:
|
114
|
-
- adolfo
|
114
|
+
- adolfo@shair.tech
|
115
115
|
executables:
|
116
116
|
- log_sense
|
117
117
|
extensions: []
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- LICENSE.txt
|
125
125
|
- README.org
|
126
126
|
- Rakefile
|
127
|
+
- apache-screenshot.png
|
127
128
|
- bin/console
|
128
129
|
- bin/setup
|
129
130
|
- exe/log_sense
|
@@ -143,6 +144,7 @@ files:
|
|
143
144
|
- lib/log_sense/templates/_output_table.html.erb
|
144
145
|
- lib/log_sense/templates/_performance.html.erb
|
145
146
|
- lib/log_sense/templates/_performance.txt.erb
|
147
|
+
- lib/log_sense/templates/_report_data.html.erb
|
146
148
|
- lib/log_sense/templates/_summary.html.erb
|
147
149
|
- lib/log_sense/templates/_summary.txt.erb
|
148
150
|
- lib/log_sense/templates/apache.html.erb
|
@@ -153,14 +155,14 @@ files:
|
|
153
155
|
- sample_logs/empty_log.log
|
154
156
|
- sample_logs/safety-critical_org.log
|
155
157
|
- sample_logs/spmbook_com.log
|
156
|
-
homepage: https://
|
158
|
+
homepage: https://github.com/shair-tech/log_sense/log_sense
|
157
159
|
licenses:
|
158
160
|
- MIT
|
159
161
|
metadata:
|
160
162
|
allowed_push_host: https://rubygems.org/
|
161
|
-
homepage_uri: https://
|
162
|
-
source_code_uri: https://
|
163
|
-
changelog_uri: https://
|
163
|
+
homepage_uri: https://github.com/shair-tech/log_sense/log_sense
|
164
|
+
source_code_uri: https://github.com/shair-tech/log_sense/log_sense
|
165
|
+
changelog_uri: https://github.com/shair-tech/log_sense/blob/main/CHANGELOG.org
|
164
166
|
post_install_message:
|
165
167
|
rdoc_options: []
|
166
168
|
require_paths:
|
@@ -169,15 +171,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
171
|
requirements:
|
170
172
|
- - ">="
|
171
173
|
- !ruby/object:Gem::Version
|
172
|
-
version: 2.
|
174
|
+
version: 2.6.9
|
173
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
176
|
requirements:
|
175
177
|
- - ">="
|
176
178
|
- !ruby/object:Gem::Version
|
177
179
|
version: '0'
|
178
180
|
requirements: []
|
179
|
-
rubygems_version: 3.
|
181
|
+
rubygems_version: 3.0.3.1
|
180
182
|
signing_key:
|
181
183
|
specification_version: 4
|
182
|
-
summary: Generate analytics
|
184
|
+
summary: Generate analytics for Apache and Rails log file.
|
183
185
|
test_files: []
|