wp-sessioniser 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -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: []