wp-sessioniser 0.2.1
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 +7 -0
- data/bin/wp-sessioniser +40 -0
- data/lib/wp-sessioniser.rb +60 -0
- data/lib/wp-sessioniser/Visitor.rb +27 -0
- metadata +61 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a465c16ccbeda920f06585cdd4c72d757dd8e487
|
4
|
+
data.tar.gz: d5127fad61ff5fbbaa7089dd22473786104de6b6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 383efaf6690603b322a023aa77f4652aa2898f15ad22b5d66d7949a648b2b0eef12562de642c1b38b4e780e99aa899819b5f163ded6d70858a2b28306868e757
|
7
|
+
data.tar.gz: 1decebd5af6c90656cb871889743e0f2783f9f5b09e748bfc934cc85e2f252c42fb49395647ea306b1e82a65fbfca1ec4df3c19d33c33512f48168050f8ad8f6
|
data/bin/wp-sessioniser
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
#################################################################
|
4
|
+
# #
|
5
|
+
# Copyright 2016, Ryan McCoskrie under the MIT License #
|
6
|
+
# #
|
7
|
+
#################################################################
|
8
|
+
|
9
|
+
require 'apache_log_regex'
|
10
|
+
require 'wp-sessioniser'
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
begin
|
16
|
+
#Check arguments
|
17
|
+
if ARGV.length != 1
|
18
|
+
$stderr.puts "Usage: httpscanner logfile"
|
19
|
+
exit 1
|
20
|
+
end
|
21
|
+
|
22
|
+
file = File.open(ARGV[0], "r")
|
23
|
+
|
24
|
+
visitors = WPSessioniser.parse(file)
|
25
|
+
|
26
|
+
visitors.each do |ip, visitor|
|
27
|
+
puts "ip: #{ip}:"
|
28
|
+
visitor.hits.each do |page, time|
|
29
|
+
puts "\tpage: #{page}, time: #{time}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
rescue SystemCallError => e
|
33
|
+
$stderr.puts "Could not open #{ARGV[0]}"
|
34
|
+
$stderr.puts e.to_s
|
35
|
+
rescue ApacheLogRegex::ParseError => e
|
36
|
+
$stderr.puts "Could not parse #{ARGV[0]}"
|
37
|
+
$stder.puts e.to_s
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#
|
2
|
+
# = WP Sessioniser
|
3
|
+
#
|
4
|
+
# Convert access logs from wordpress blogs into tidy user sessions
|
5
|
+
#
|
6
|
+
# Category::
|
7
|
+
# Package:: WPSessioniser
|
8
|
+
# Author:: Ryan McCoskrie <ryan.mccoskrie@gmail.com>
|
9
|
+
# License:: MIT License
|
10
|
+
|
11
|
+
require 'apache_log_regex'
|
12
|
+
require 'wp-sessioniser/Visitor'
|
13
|
+
|
14
|
+
|
15
|
+
#
|
16
|
+
# = WPSessioniser
|
17
|
+
#
|
18
|
+
# == Example Usage
|
19
|
+
#
|
20
|
+
# file = File.open("/var/log/apache/access.log")
|
21
|
+
# visitors = WPSessioniser.parse(file)
|
22
|
+
#
|
23
|
+
|
24
|
+
module WPSessioniser
|
25
|
+
#Changing this string breaks parsing. I don't know why.
|
26
|
+
FORMAT = '%h %l %u %t \"%r\" %>s %b \"{Referer}i\" \"%{User-Agent}i\"'
|
27
|
+
PARSER = ApacheLogRegex.new(FORMAT)
|
28
|
+
|
29
|
+
def WPSessioniser.parse file
|
30
|
+
visitors = Hash.new()
|
31
|
+
|
32
|
+
file.each do |line|
|
33
|
+
h = PARSER.parse! line
|
34
|
+
#Ignore non-pages
|
35
|
+
next if h["%r"] !~ /GET/
|
36
|
+
next if h["%r"] =~ /xmlrpc.php/
|
37
|
+
next if h["%r"] =~ /favicon.ico/
|
38
|
+
next if h["%r"] =~ /robots.txt/
|
39
|
+
next if h["%r"] =~ /\?sccss/
|
40
|
+
next if h["%r"] =~ /wp-admin/
|
41
|
+
next if h["%r"] =~ /wp-content/
|
42
|
+
next if h["%r"] =~ /wp-includes/
|
43
|
+
next if h["%r"] =~ /wp-json/
|
44
|
+
next if h["%r"] =~ /\/\/images/
|
45
|
+
next if h["%r"] =~ /\?plugin=/
|
46
|
+
|
47
|
+
page = h["%r"].delete('GET ', '').delete(' HTTP/1.1', '')
|
48
|
+
|
49
|
+
if visitors.has_key? h["%h"]
|
50
|
+
visitors[h["%h"]].push_hit page, h["%t"]
|
51
|
+
else
|
52
|
+
visitors[h["%h"]] = Visitor.new
|
53
|
+
visitors[h["%h"]].push_hit page, h["%t"]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
return visitors
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# = Visitor
|
3
|
+
#
|
4
|
+
# Used to handle Visitor profiles in WPSessioniser
|
5
|
+
#
|
6
|
+
# Category::
|
7
|
+
# Package:: WPSessioniser
|
8
|
+
# Author:: Ryan McCoskrie <ryan.mccoskrie@gmail.com>
|
9
|
+
# License:: MIT License
|
10
|
+
#
|
11
|
+
|
12
|
+
class Visitor
|
13
|
+
attr_reader :hits
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@hits = Hash.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def push_hit(page, date)
|
20
|
+
if @hits.has_key?(page)
|
21
|
+
@hits[page].push(date)
|
22
|
+
else
|
23
|
+
@hits[page] = [date]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wp-sessioniser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan McCoskrie
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: apachelogregex
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
27
|
+
description: Displays reader sessions from an apache wordpress log
|
28
|
+
email: ryan.mccoskrie@gmail.com
|
29
|
+
executables:
|
30
|
+
- wp-sessioniser
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- bin/wp-sessioniser
|
35
|
+
- lib/wp-sessioniser.rb
|
36
|
+
- lib/wp-sessioniser/Visitor.rb
|
37
|
+
homepage: http://rubygems.org/gems/wp-sessioniser
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.5.1
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Wordpress session analyser
|
61
|
+
test_files: []
|