log_sense 1.3.0 → 1.3.5
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 +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: []
|