double_agent 0.2.3 → 1.0.0
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.
- data/CHANGELOG +15 -0
- data/README.rdoc +33 -47
- data/data/browsers.yml +39 -35
- data/data/oses.yml +63 -37
- data/lib/double_agent/double_agent.rb +60 -0
- data/lib/double_agent/parser.rb +35 -155
- data/lib/double_agent/{resources.rb → resource.rb} +24 -31
- data/lib/double_agent/user_agent.rb +14 -0
- data/lib/double_agent/version.rb +1 -1
- data/lib/double_agent.rb +7 -1
- metadata +8 -16
- data/lib/double_agent/all.rb +0 -5
- data/lib/double_agent/logs.rb +0 -110
- data/lib/double_agent/stats.rb +0 -65
- data/spec/data/httpd.access.log +0 -20
- data/spec/data/httpd.access.log.1.gz +0 -0
- data/spec/data_spec.rb +0 -105
- data/spec/parser_spec.rb +0 -114
- data/spec/resources_spec.rb +0 -78
- data/spec/spec_helper.rb +0 -19
- data/spec/stats_spec.rb +0 -64
data/spec/parser_spec.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
|
3
|
-
describe DoubleAgent do
|
4
|
-
context 'Parser' do
|
5
|
-
before do
|
6
|
-
@ua_string = 'Mozilla/5.0 (X11; Ubuntu Linux i686; rv:2.0) Gecko/20100101 Firefox/4.0'
|
7
|
-
end
|
8
|
-
|
9
|
-
#browser
|
10
|
-
it 'returns Firefox 4 for browser' do
|
11
|
-
DoubleAgent.browser(@ua_string).should == 'Firefox 4'
|
12
|
-
end
|
13
|
-
it 'returns Unknown for browser' do
|
14
|
-
DoubleAgent.browser('froofroo').should == 'Unknown'
|
15
|
-
end
|
16
|
-
|
17
|
-
#browser_sym
|
18
|
-
it 'returns :firefox for browser_sym' do
|
19
|
-
DoubleAgent.browser_sym(@ua_string).should == :firefox
|
20
|
-
end
|
21
|
-
it 'returns :unknown for browser_sym' do
|
22
|
-
DoubleAgent.browser_sym('froofroo').should == :unknown
|
23
|
-
end
|
24
|
-
it 'returns :unknown for an empty browser_sym' do
|
25
|
-
DoubleAgent.browser_sym('').should == :unknown
|
26
|
-
end
|
27
|
-
it 'returns :unknown for a nil browser_sym' do
|
28
|
-
DoubleAgent.browser_sym(nil).should == :unknown
|
29
|
-
end
|
30
|
-
|
31
|
-
#browser_family
|
32
|
-
it 'returns Firefox for browser family' do
|
33
|
-
DoubleAgent.browser_family(@ua_string).should == 'Firefox'
|
34
|
-
end
|
35
|
-
|
36
|
-
#browser_family_sym
|
37
|
-
it 'returns :firefox for browser_family_sym' do
|
38
|
-
DoubleAgent.browser_family_sym(@ua_string).should == :firefox
|
39
|
-
end
|
40
|
-
it 'returns :unknown for an empty browser_family_sym' do
|
41
|
-
DoubleAgent.browser_family_sym('').should == :unknown
|
42
|
-
end
|
43
|
-
it 'returns :unknown for a nil browser_family_sym' do
|
44
|
-
DoubleAgent.browser_family_sym(nil).should == :unknown
|
45
|
-
end
|
46
|
-
|
47
|
-
#browser_icon
|
48
|
-
it 'returns :firefox for browser_sym' do
|
49
|
-
DoubleAgent.browser_icon(@ua_string).should == :firefox
|
50
|
-
end
|
51
|
-
it 'returns :unkown for an empty browser_sym' do
|
52
|
-
DoubleAgent.browser_icon('').should == :unknown
|
53
|
-
end
|
54
|
-
it 'returns :unkown for a nil browser_sym' do
|
55
|
-
DoubleAgent.browser_icon(nil).should == :unknown
|
56
|
-
end
|
57
|
-
|
58
|
-
#browser_family_icon
|
59
|
-
it 'returns :firefox for browser_family_sym' do
|
60
|
-
DoubleAgent.browser_family_icon(@ua_string).should == :firefox
|
61
|
-
end
|
62
|
-
it 'returns :unkown for an empty browser_family_sym' do
|
63
|
-
DoubleAgent.browser_family_icon('').should == :unknown
|
64
|
-
end
|
65
|
-
it 'returns :unkown for a nil browser_family_sym' do
|
66
|
-
DoubleAgent.browser_family_icon(nil).should == :unknown
|
67
|
-
end
|
68
|
-
|
69
|
-
#os
|
70
|
-
it 'returns Ubuntua for OS' do
|
71
|
-
DoubleAgent.os(@ua_string).should == 'Ubuntu'
|
72
|
-
end
|
73
|
-
it 'returns Unknowna for OS' do
|
74
|
-
DoubleAgent.os('froofroo').should == 'Unknown'
|
75
|
-
end
|
76
|
-
it 'returns Unknowna for OS' do
|
77
|
-
DoubleAgent.os('').should == 'Unknown'
|
78
|
-
end
|
79
|
-
|
80
|
-
#os_sym
|
81
|
-
it 'returns :ubuntu for os_sym' do
|
82
|
-
DoubleAgent.os_sym(@ua_string).should == :ubuntu
|
83
|
-
end
|
84
|
-
it 'returns :unknown for os_sym' do
|
85
|
-
DoubleAgent.os_sym('froofroo').should == :unknown
|
86
|
-
end
|
87
|
-
it 'returns :unknown for an empty os_sym' do
|
88
|
-
DoubleAgent.os_sym('').should == :unknown
|
89
|
-
end
|
90
|
-
it 'returns :unknown for a nil os_sym' do
|
91
|
-
DoubleAgent.os_sym(nil).should == :unknown
|
92
|
-
end
|
93
|
-
|
94
|
-
#os_family
|
95
|
-
it 'returns GNU/Linux OS family' do
|
96
|
-
DoubleAgent.os_family(@ua_string).should == 'GNU/Linux'
|
97
|
-
end
|
98
|
-
|
99
|
-
#os_family_sym
|
100
|
-
it 'returns :linux for os_family_sym' do
|
101
|
-
DoubleAgent.os_family_sym(@ua_string).should == :linux
|
102
|
-
end
|
103
|
-
|
104
|
-
#os_icon
|
105
|
-
it 'returns :ubuntu for os_sym' do
|
106
|
-
DoubleAgent.os_icon(@ua_string).should == :ubuntu
|
107
|
-
end
|
108
|
-
|
109
|
-
#os_family_icon
|
110
|
-
it 'returns :linux for os_family_sym' do
|
111
|
-
DoubleAgent.os_family_icon(@ua_string).should == :linux
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
data/spec/resources_spec.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
|
3
|
-
class Login
|
4
|
-
include DoubleAgent::Resource
|
5
|
-
attr_accessor :user_agent
|
6
|
-
|
7
|
-
def initialize(ua)
|
8
|
-
@user_agent = ua
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe DoubleAgent do
|
13
|
-
context 'Resource' do
|
14
|
-
before do
|
15
|
-
@login = Login.new 'Mozilla/5.0 (X11; Ubuntu Linux i686; rv:2.0) Gecko/20100101 Firefox/4.0'
|
16
|
-
end
|
17
|
-
|
18
|
-
#browser
|
19
|
-
it 'returns Firefox 4 for browser' do
|
20
|
-
@login.browser.should == 'Firefox 4'
|
21
|
-
end
|
22
|
-
|
23
|
-
#browser_sym
|
24
|
-
it 'returns :firefox for browser_sym' do
|
25
|
-
@login.browser_sym.should == :firefox
|
26
|
-
end
|
27
|
-
|
28
|
-
#browser_family
|
29
|
-
it 'returns Firefox for browser family' do
|
30
|
-
@login.browser_family.should == 'Firefox'
|
31
|
-
end
|
32
|
-
|
33
|
-
#browser_family_sym
|
34
|
-
it 'returns :firefox for browser_family_sym' do
|
35
|
-
@login.browser_family_sym.should == :firefox
|
36
|
-
end
|
37
|
-
|
38
|
-
#browser_icon
|
39
|
-
it 'returns :firefox for browser_sym' do
|
40
|
-
@login.browser_icon.should == :firefox
|
41
|
-
end
|
42
|
-
|
43
|
-
#browser_family_icon
|
44
|
-
it 'returns :firefox for browser_family_sym' do
|
45
|
-
@login.browser_family_icon.should == :firefox
|
46
|
-
end
|
47
|
-
|
48
|
-
#os
|
49
|
-
it 'returns Ubuntua for OS' do
|
50
|
-
@login.os.should == 'Ubuntu'
|
51
|
-
end
|
52
|
-
|
53
|
-
#os_sym
|
54
|
-
it 'returns :ubuntu for os_sym' do
|
55
|
-
@login.os_sym.should == :ubuntu
|
56
|
-
end
|
57
|
-
|
58
|
-
#os_family
|
59
|
-
it 'returns GNU/Linux OS family' do
|
60
|
-
@login.os_family.should == 'GNU/Linux'
|
61
|
-
end
|
62
|
-
|
63
|
-
#os_family_sym
|
64
|
-
it 'returns :linux for os_family_sym' do
|
65
|
-
@login.os_family_sym.should == :linux
|
66
|
-
end
|
67
|
-
|
68
|
-
#os_icon
|
69
|
-
it 'returns :ubuntu for os_sym' do
|
70
|
-
@login.os_icon.should == :ubuntu
|
71
|
-
end
|
72
|
-
|
73
|
-
#os_family_icon
|
74
|
-
it 'returns :linux for os_family_sym' do
|
75
|
-
@login.os_family_icon.should == :linux
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
require File.dirname(__FILE__) + '/../lib/double_agent/parser'
|
3
|
-
require File.dirname(__FILE__) + '/../lib/double_agent/resources'
|
4
|
-
require File.dirname(__FILE__) + '/../lib/double_agent/stats'
|
5
|
-
require File.dirname(__FILE__) + '/../lib/double_agent/logs'
|
6
|
-
|
7
|
-
RSpec.configure do |c|
|
8
|
-
c.mock_with :rspec
|
9
|
-
end
|
10
|
-
|
11
|
-
module Kernel
|
12
|
-
def suppress_warnings
|
13
|
-
original_verbosity = $VERBOSE
|
14
|
-
$VERBOSE = nil
|
15
|
-
result = yield
|
16
|
-
$VERBOSE = original_verbosity
|
17
|
-
return result
|
18
|
-
end
|
19
|
-
end
|
data/spec/stats_spec.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
|
3
|
-
log_glob = File.dirname(__FILE__) + '/data/*.access.log*'
|
4
|
-
entries = DoubleAgent::Logs::entries(log_glob, :match => /^\d/)
|
5
|
-
|
6
|
-
describe DoubleAgent do
|
7
|
-
context 'Logs' do
|
8
|
-
it 'should have loaded n log entries' do
|
9
|
-
entries.size.should == 47
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should have loaded n log entries' do
|
13
|
-
DoubleAgent::Logs::entries(log_glob, :match => /^\d/, :ignore => %r{ /dashboard }).size.should == 44
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'without zlib' do
|
17
|
-
it 'should have loaded n log entries' do
|
18
|
-
suppress_warnings { DoubleAgent::Logs::ZLIB = false }
|
19
|
-
plain_entries = DoubleAgent::Logs::entries(log_glob, :match => /^\d/)
|
20
|
-
suppress_warnings { DoubleAgent::Logs::ZLIB = true }
|
21
|
-
plain_entries.size.should == 17
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'parsing other data' do
|
26
|
-
before :each do
|
27
|
-
@line = DoubleAgent::Logs::Entry.new '68.52.99.211 - - [04/May/2011:08:21:04 -0400] "GET / HTTP/1.1" 200 1312 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17"'
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should parse the IP' do
|
31
|
-
@line.ip.should == '68.52.99.211'
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'should parse datestamps' do
|
35
|
-
@line.on.should == Date.new(2011, 5, 4)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'should parse timestamps' do
|
39
|
-
@line.at.should == DateTime.new(2011, 5, 4, 8, 21, 4, '-0400')
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'Stats' do
|
45
|
-
it 'should calculate stats' do
|
46
|
-
stats = DoubleAgent::Stats.percentages_for entries, :browser_family, :os_family
|
47
|
-
answer = [["Internet Explorer", "Windows", 42.55, 20],
|
48
|
-
["Chromium", "GNU/Linux", 40.43, 19],
|
49
|
-
["Firefox", "GNU/Linux", 10.64, 5],
|
50
|
-
["Firefox", "OS X", 4.26, 2],
|
51
|
-
["Safari", "OS X", 2.13, 1]]
|
52
|
-
stats.should == answer
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should ignore stats below the threshold' do
|
56
|
-
stats = DoubleAgent::Stats.percentages_for entries, :browser_family, :os_family, :threshold => 3.0
|
57
|
-
answer = [["Internet Explorer", "Windows", 42.55, 20],
|
58
|
-
["Chromium", "GNU/Linux", 40.43, 19],
|
59
|
-
["Firefox", "GNU/Linux", 10.64, 5],
|
60
|
-
["Firefox", "OS X", 4.26, 2]]
|
61
|
-
stats.should == answer
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|