sms-logparser 0.3.0 → 0.4.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.
- checksums.yaml +4 -4
- data/README.md +31 -17
- data/lib/sms-logparser/api.rb +7 -2
- data/lib/sms-logparser/cli.rb +94 -23
- data/lib/sms-logparser/mysql.rb +42 -14
- data/lib/sms-logparser/parser.rb +8 -2
- data/lib/sms-logparser/version.rb +1 -1
- data/sms-logparser.gemspec +2 -0
- data/spec/api_spec.rb +60 -0
- data/spec/cli_spec.rb +4 -4
- data/spec/parser_spec.rb +19 -11
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d8d1676ea63d17f63d196dd955d52bcd822c28b
|
4
|
+
data.tar.gz: 6a0a0341ed6a5050cefa8871835247122f2a2934
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dabe200a09f9dd8f508726c6b8ba8471847c713ae0e142c0121ea8eafb526321cc023972c6c0d830996de5107158981fafa987c53f44074af772947fe9a9bae8
|
7
|
+
data.tar.gz: b5e7aa89a019a2582fbf0296fc38a3350da2a7aba1cc41c03b7fed1f01948b768f570807fce987b81a9cf6842b7fb770c68ce363946ce55f4a1ed3a14c19825e
|
data/README.md
CHANGED
@@ -1,46 +1,60 @@
|
|
1
|
-
#
|
1
|
+
# SMS Logparser
|
2
2
|
|
3
|
-
sms-logparser -
|
3
|
+
sms-logparser - Logparser for Simplex Media Server (SMS). Reads access logs stored in a MySQL database (coming from the SWISS TXT CDN) and sends them to the SMS API.
|
4
4
|
|
5
5
|
[](http://badge.fury.io/rb/sms-logparser)
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
9
|
-
|
9
|
+
Install the sms-logpaser gem:
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
$ bundle
|
16
|
-
|
17
|
-
Or install it yourself as:
|
18
|
-
|
19
|
-
$ gem install sms-logparser
|
11
|
+
```bash
|
12
|
+
$ gem install sms-logparser
|
13
|
+
```
|
20
14
|
|
21
15
|
## Setup
|
22
16
|
|
23
17
|
Create the database table to track which logs have been parsed:
|
24
18
|
|
25
|
-
|
19
|
+
```bash
|
20
|
+
$ sms-logparser setup
|
21
|
+
```
|
26
22
|
|
27
23
|
Make a test run:
|
28
24
|
|
29
|
-
|
25
|
+
```bash
|
26
|
+
$ sms-logparser parse --simulate --verbose
|
27
|
+
```
|
30
28
|
|
31
29
|
## Usage
|
32
30
|
|
33
31
|
See available commands:
|
34
32
|
|
35
|
-
|
33
|
+
```bash
|
34
|
+
$ sms-logparser help
|
35
|
+
```
|
36
36
|
|
37
37
|
Parse logs from database and send them to the API
|
38
38
|
|
39
|
-
|
39
|
+
```bash
|
40
|
+
$ sms-logparser parse
|
41
|
+
```
|
40
42
|
|
41
43
|
Show the last parser runs:
|
42
44
|
|
43
|
-
|
45
|
+
```bash
|
46
|
+
$ sms-logparser history
|
47
|
+
``
|
48
|
+
|
49
|
+
## Configuration file
|
50
|
+
|
51
|
+
sms-logparser tries to read default options from a yaml file named '.sms-logparser.yml' placed in your home directory. Using the "-c/--config" flag you can adapt the path to the configuration file.
|
52
|
+
|
53
|
+
An configuration for adapting the default MySQL password could look like this:
|
54
|
+
|
55
|
+
```yaml
|
56
|
+
:mysql_password: "my!secret"
|
57
|
+
```
|
44
58
|
|
45
59
|
## Development
|
46
60
|
|
data/lib/sms-logparser/api.rb
CHANGED
@@ -6,12 +6,17 @@ module SmsLogparser
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def send(data)
|
9
|
+
urls = []
|
9
10
|
base_url = "#{@options[:api_base_path]}/"
|
10
11
|
base_url += "#{data[:customer_id]}/"
|
11
12
|
base_url += "#{data[:author_id]}/"
|
12
13
|
base_url += "#{data[:project_id]}"
|
13
|
-
|
14
|
-
|
14
|
+
unless data[:file] =~ /.*\.m3u8$/
|
15
|
+
urls = ["#{base_url}/#{data[:traffic_type]}/#{data[:bytes]}"]
|
16
|
+
end
|
17
|
+
if data[:visitor_type]
|
18
|
+
urls << "#{base_url}/#{data[:visitor_type]}/1"
|
19
|
+
end
|
15
20
|
unless @options[:simulate]
|
16
21
|
urls.each do |url|
|
17
22
|
begin
|
data/lib/sms-logparser/cli.rb
CHANGED
@@ -1,22 +1,56 @@
|
|
1
1
|
module SmsLogparser
|
2
2
|
class Cli < Thor
|
3
|
+
require 'yaml'
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
STATUS = {
|
6
|
+
:ok => 0,
|
7
|
+
:api_error => 1
|
8
|
+
}
|
8
9
|
|
9
|
-
|
10
|
+
class_option :config,
|
11
|
+
:default => File.join(Dir.home, '.sms-logparser.yml'),
|
12
|
+
:aliases => %w(-c),
|
13
|
+
:desc => "Configuration file for default options"
|
14
|
+
|
15
|
+
class_option :mysql_host,
|
16
|
+
:default => 'localhost',
|
17
|
+
:aliases => %w(-h),
|
18
|
+
:desc => "MySQL host"
|
19
|
+
|
20
|
+
class_option :mysql_user,
|
21
|
+
:default => 'root',
|
22
|
+
:aliases => %w(-u),
|
23
|
+
:desc => "MySQL user"
|
24
|
+
|
25
|
+
class_option :mysql_password,
|
26
|
+
:aliases => %w(-p),
|
27
|
+
:desc => "MySQL password"
|
28
|
+
|
29
|
+
class_option :mysql_db,
|
30
|
+
:default => 'Syslog',
|
31
|
+
:aliases => %w(-d),
|
32
|
+
:desc => "MySQL database"
|
33
|
+
|
34
|
+
desc "version", "Print cloudstack-cli version number"
|
10
35
|
def version
|
11
36
|
say "sms-logparser version #{SmsLogparser::VERSION}"
|
12
37
|
end
|
13
38
|
map %w(-v --version) => :version
|
14
39
|
|
15
|
-
desc "parse", "Check the database for pcache logs and send them to SMS"
|
16
|
-
option :api_base_path,
|
17
|
-
|
18
|
-
|
19
|
-
option :
|
40
|
+
desc "parse", "Check the database for pcache logs and send them to the SMS-API"
|
41
|
+
option :api_base_path,
|
42
|
+
:default => 'http://dev.simplex.tv/creator/rest',
|
43
|
+
:aliases => %w(-a)
|
44
|
+
option :api_key,
|
45
|
+
:aliases => %w(-k)
|
46
|
+
option :simulate,
|
47
|
+
:type => :boolean,
|
48
|
+
:default => false,
|
49
|
+
:aliases => %w(-s)
|
50
|
+
option :verbose,
|
51
|
+
:type => :boolean,
|
52
|
+
:default => false,
|
53
|
+
:aliases => %w(-v)
|
20
54
|
def parse
|
21
55
|
start_time = Time.now
|
22
56
|
count = 0
|
@@ -25,44 +59,61 @@ module SmsLogparser
|
|
25
59
|
entries = mysql.get_entries
|
26
60
|
api = Api.new(options)
|
27
61
|
last_id = mysql.get_last_parse_id
|
62
|
+
status = STATUS[:ok]
|
28
63
|
entries.each do |entry|
|
29
|
-
if Parser.match(entry['Message'])
|
64
|
+
if Parser.match?(entry['Message'])
|
30
65
|
data = Parser.extract_data_from_msg(entry['Message'])
|
31
66
|
begin
|
32
67
|
urls = api.send(data)
|
33
68
|
rescue => e
|
34
69
|
say "Error: #{e.message}", :red
|
35
70
|
say "Aborting parser run...", :red
|
71
|
+
status = STATUS[:api_error]
|
36
72
|
break
|
37
73
|
end
|
38
74
|
last_id = entry['ID']
|
39
75
|
count += 1
|
40
|
-
|
76
|
+
if options[:verbose]
|
77
|
+
verbose_parser_output(data, urls, entry)
|
78
|
+
end
|
41
79
|
end
|
42
80
|
end
|
43
|
-
|
81
|
+
unless options[:simulate]
|
82
|
+
mysql.write_parse_result(last_id, count, status)
|
83
|
+
end
|
44
84
|
say "Started:\t", :cyan
|
45
85
|
say start_time.strftime('%d.%d.%Y %T')
|
46
86
|
say "Runtime:\t", :cyan
|
47
87
|
say "#{(Time.now - start_time).round(2)}s"
|
48
|
-
options[:simulate]
|
88
|
+
if options[:simulate]
|
89
|
+
say("Events found:\t", :cyan)
|
90
|
+
else
|
91
|
+
say("Events sent:\t", :cyan)
|
92
|
+
end
|
49
93
|
say count
|
50
94
|
rescue => e
|
51
95
|
say "Error: #{e.message}", :red
|
52
96
|
end
|
53
97
|
end
|
54
98
|
|
55
|
-
desc "
|
56
|
-
|
99
|
+
desc "history", "List the last paser runs"
|
100
|
+
option :results,
|
101
|
+
:type => :numeric,
|
102
|
+
:default => 10,
|
103
|
+
:aliases => %w(-n),
|
104
|
+
:desc => "Number of results to display"
|
105
|
+
def history
|
106
|
+
puts options
|
57
107
|
begin
|
58
|
-
runs = Mysql.new(options).last_runs
|
108
|
+
runs = Mysql.new(options).last_runs(options[:results])
|
59
109
|
if runs.size > 0
|
60
|
-
table = [%w(RunAt #Events LastEventID)]
|
61
|
-
runs.each do |run|
|
110
|
+
table = [%w(RunAt #Events LastEventID Status)]
|
111
|
+
runs.to_a.reverse.each do |run|
|
62
112
|
table << [
|
63
113
|
run['RunAt'],
|
64
114
|
run['EventsFound'],
|
65
|
-
run['LastEventID']
|
115
|
+
run['LastEventID'],
|
116
|
+
STATUS.index(run['Status']).upcase
|
66
117
|
]
|
67
118
|
end
|
68
119
|
print_table table
|
@@ -75,26 +126,46 @@ module SmsLogparser
|
|
75
126
|
end
|
76
127
|
|
77
128
|
desc "setup", "Create the parser table to track the last logs parsed"
|
129
|
+
option :force,
|
130
|
+
:type => :boolean,
|
131
|
+
:default => false,
|
132
|
+
:aliases => %w(-f),
|
133
|
+
:desc => "Drop an existing table if it exists"
|
78
134
|
def setup
|
79
135
|
begin
|
80
|
-
Mysql.new(options).create_parser_table
|
81
|
-
|
136
|
+
case Mysql.new(options).create_parser_table(options[:force])
|
137
|
+
when 0
|
138
|
+
say "OK, table created.", :green
|
139
|
+
when 1
|
140
|
+
say "Table already exists.", :yellow
|
141
|
+
end
|
82
142
|
rescue => e
|
83
143
|
say "Error: #{e.message}", :red
|
84
144
|
end
|
85
145
|
end
|
86
146
|
|
87
147
|
no_commands do
|
148
|
+
|
88
149
|
def verbose_parser_output(data, urls, entry)
|
89
150
|
say "ID:\t", :cyan
|
90
151
|
say entry['ID']
|
91
152
|
say "URL:\t", :cyan
|
92
153
|
say urls.join("\n\t")
|
93
154
|
say "Data:\t", :cyan
|
94
|
-
say data.map{|k,v| "#{k}:\t#{v}"}.join("\n\t")
|
155
|
+
say data.map{|k,v| "#{k}:\t#{v}"}.join("\n\t") || "\n"
|
156
|
+
puts
|
95
157
|
puts "-" * 100
|
96
158
|
puts
|
97
159
|
end
|
160
|
+
|
161
|
+
def options
|
162
|
+
original_options = super
|
163
|
+
filename = original_options[:config] || File.join(Dir.home, '.sms-logparser.yml')
|
164
|
+
return original_options unless File.exists?(filename)
|
165
|
+
defaults = ::YAML::load_file(filename) || {}
|
166
|
+
defaults.merge(original_options)
|
167
|
+
end
|
168
|
+
|
98
169
|
end
|
99
170
|
|
100
171
|
end
|
data/lib/sms-logparser/mysql.rb
CHANGED
@@ -14,27 +14,54 @@ module SmsLogparser
|
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
17
|
-
def last_runs
|
17
|
+
def last_runs(results = 10)
|
18
18
|
begin
|
19
19
|
runs = client.query(
|
20
|
-
"SELECT * FROM SmsParserRuns ORDER BY ID
|
20
|
+
"SELECT * FROM SmsParserRuns ORDER BY ID DESC LIMIT #{results}"
|
21
21
|
)
|
22
22
|
rescue Mysql2::Error => e
|
23
23
|
raise e
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
27
|
+
def parser_table_exists?
|
28
28
|
begin
|
29
29
|
return client.query(
|
30
|
-
"
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
"SHOW TABLES LIKE 'SmsParserRuns'"
|
31
|
+
).size > 0
|
32
|
+
rescue Mysql2::Error => e
|
33
|
+
raise e
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_parser_table(force = false)
|
38
|
+
if force
|
39
|
+
drop_parser_table
|
40
|
+
elsif parser_table_exists?
|
41
|
+
return 1
|
42
|
+
end
|
43
|
+
begin
|
44
|
+
client.query(
|
45
|
+
"CREATE TABLE SmsParserRuns(\
|
46
|
+
ID SERIAL PRIMARY KEY AUTO_INCREMENT,\
|
47
|
+
RunAt datetime DEFAULT NULL,\
|
48
|
+
LastEventID BIGINT(20) UNSIGNED DEFAULT 0,\
|
49
|
+
EventsFound INT DEFAULT 0,\
|
50
|
+
Status TINYINT UNSIGNED DEFAULT 0,\
|
51
|
+
INDEX `LastEventID_I1` (`LastEventID`)
|
52
|
+
)"
|
53
|
+
)
|
54
|
+
rescue Mysql2::Error => e
|
55
|
+
raise e
|
56
|
+
end
|
57
|
+
return 0
|
58
|
+
end
|
59
|
+
|
60
|
+
def drop_parser_table
|
61
|
+
return nil unless parser_table_exists?
|
62
|
+
begin
|
63
|
+
return client.query(
|
64
|
+
"DROP TABLE SmsParserRuns"
|
38
65
|
)
|
39
66
|
rescue Mysql2::Error => e
|
40
67
|
raise e
|
@@ -53,12 +80,13 @@ module SmsLogparser
|
|
53
80
|
end
|
54
81
|
end
|
55
82
|
|
56
|
-
def write_parse_result(id, count)
|
57
|
-
client.query("INSERT INTO SmsParserRuns(RunAt, LastEventID, EventsFound)\
|
83
|
+
def write_parse_result(id, count, status)
|
84
|
+
client.query("INSERT INTO SmsParserRuns(RunAt, LastEventID, EventsFound, Status)\
|
58
85
|
VALUES(\
|
59
86
|
'#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}',\
|
60
87
|
#{id},\
|
61
|
-
#{count}
|
88
|
+
#{count},\
|
89
|
+
#{status}
|
62
90
|
)"
|
63
91
|
)
|
64
92
|
end
|
data/lib/sms-logparser/parser.rb
CHANGED
@@ -18,8 +18,14 @@ module SmsLogparser
|
|
18
18
|
}
|
19
19
|
end
|
20
20
|
|
21
|
-
def self.match(message)
|
22
|
-
|
21
|
+
def self.match?(message)
|
22
|
+
match = message.match(
|
23
|
+
/\/content\/.+\/(\w+\.(f4v|flv|mp4|mp3|ts|m3u8)) .+ (200|206)/i
|
24
|
+
)
|
25
|
+
if match
|
26
|
+
return true unless match[1] =~ /detect.mp4|index.m3u8/i
|
27
|
+
end
|
28
|
+
false
|
23
29
|
end
|
24
30
|
|
25
31
|
# see https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent
|
data/sms-logparser.gemspec
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.required_ruby_version = '>= 1.9.3'
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
24
|
spec.add_development_dependency "rake"
|
23
25
|
|
data/spec/api_spec.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SmsLogparser::Api do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@api = SmsLogparser::Api.new(
|
7
|
+
simulate: true,
|
8
|
+
api_base_path: "http://myapi.com/rest/"
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "sends the correct information to the api" do
|
13
|
+
data = {
|
14
|
+
:customer_id => 1,
|
15
|
+
:author_id => 2,
|
16
|
+
:project_id => 3,
|
17
|
+
:file => 'myfile.mp4',
|
18
|
+
:bytes => 128,
|
19
|
+
:user_agent => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko)",
|
20
|
+
:traffic_type => 'TRAFFIC_WEBCAST',
|
21
|
+
:visitor_type => 'VISITORS_WEBCAST'
|
22
|
+
}
|
23
|
+
urls = @api.send(data)
|
24
|
+
urls.size.must_equal 2
|
25
|
+
urls[0].must_match /.+\/1\/2\/3\/TRAFFIC_WEBCAST\/128$/
|
26
|
+
urls[1].must_match /.+\/1\/2\/3\/VISITORS_WEBCAST\/1$/
|
27
|
+
end
|
28
|
+
|
29
|
+
it "does not send traffic for m3u8 files" do
|
30
|
+
data = {
|
31
|
+
:customer_id => 100,
|
32
|
+
:author_id => 200,
|
33
|
+
:project_id => 300,
|
34
|
+
:file => 'myfile.m3u8',
|
35
|
+
:bytes => 512,
|
36
|
+
:user_agent => 'Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0',
|
37
|
+
:traffic_type => 'TRAFFIC_MOBILE',
|
38
|
+
:visitor_type => 'VISITORS_MOBILE'
|
39
|
+
}
|
40
|
+
urls = @api.send(data)
|
41
|
+
urls.size.must_equal 1
|
42
|
+
urls[0].must_match /.+\/100\/200\/300\/VISITORS_MOBILE\/1$/
|
43
|
+
end
|
44
|
+
|
45
|
+
it "does not send visitor info if no visitor_type" do
|
46
|
+
data = {
|
47
|
+
:customer_id => 101,
|
48
|
+
:author_id => 202,
|
49
|
+
:project_id => 303,
|
50
|
+
:file => 'myfile.mp4',
|
51
|
+
:bytes => 48,
|
52
|
+
:user_agent => 'Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0',
|
53
|
+
:traffic_type => 'TRAFFIC_MOBILE',
|
54
|
+
}
|
55
|
+
urls = @api.send(data)
|
56
|
+
urls.size.must_equal 1
|
57
|
+
urls[0].must_match /.+\/101\/202\/303\/TRAFFIC_MOBILE\/48$/
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/spec/cli_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe SmsLogparser::Cli do
|
|
14
14
|
out, err = capture_io do
|
15
15
|
TestHelper.sms_logparser.setup
|
16
16
|
end
|
17
|
-
out.must_match /OK
|
17
|
+
out.must_match /OK.*/
|
18
18
|
end
|
19
19
|
|
20
20
|
it "can parse a log database and find matches" do
|
@@ -40,15 +40,15 @@ describe SmsLogparser::Cli do
|
|
40
40
|
out.must_match /\s+0$/
|
41
41
|
end
|
42
42
|
|
43
|
-
it "
|
43
|
+
it "can show the parser history" do
|
44
44
|
TestHelper.seed_db(1)
|
45
45
|
parser = TestHelper.sms_logparser
|
46
46
|
parser.options[:api_base_path] = 'http://devnull-as-a-service.com/dev/null/'
|
47
47
|
out, err = capture_io do
|
48
48
|
TestHelper.sms_logparser.setup
|
49
49
|
parser.parse
|
50
|
-
parser.
|
50
|
+
parser.history
|
51
51
|
end
|
52
|
-
|
52
|
+
err.must_equal ""
|
53
53
|
end
|
54
54
|
end
|
data/spec/parser_spec.rb
CHANGED
@@ -4,41 +4,49 @@ describe SmsLogparser::Parser do
|
|
4
4
|
|
5
5
|
%w(f4v flv mp4 mp3 ts m3u8).each do |extension|
|
6
6
|
it "matches #{extension} files" do
|
7
|
-
SmsLogparser::Parser.match(
|
7
|
+
SmsLogparser::Parser.match?(
|
8
8
|
"GET /content/2/719/54986/file.#{extension} HTTP/1.1\" 200 6741309 "
|
9
|
-
).
|
9
|
+
).must_equal true
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
%w(jpg js css m4a docx).each do |extension|
|
14
14
|
it "does not matche #{extension} files" do
|
15
|
-
SmsLogparser::Parser.match(
|
15
|
+
SmsLogparser::Parser.match?(
|
16
16
|
"GET /content/2/719/54986/file.#{extension} HTTP/1.1\" 200 6741309 "
|
17
|
-
).
|
17
|
+
).must_equal false
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
%w(200 206).each do |status|
|
22
22
|
it "does match status code #{status}" do
|
23
|
-
SmsLogparser::Parser.match(
|
23
|
+
SmsLogparser::Parser.match?(
|
24
24
|
"GET /content/2/719/54986/file.mp4 HTTP/1.1\" #{status} 50000 "
|
25
|
-
).
|
25
|
+
).must_equal true
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
%w(404 500 304).each do |status|
|
30
30
|
it "does not match status code #{status}" do
|
31
|
-
SmsLogparser::Parser.match(
|
31
|
+
SmsLogparser::Parser.match?(
|
32
32
|
"GET /content/2/719/54986/file.mp4 HTTP/1.1\" #{status} 50000 "
|
33
|
-
).
|
33
|
+
).must_equal false
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
%w(contents public index
|
37
|
+
%w(contents public index assets).each do |dir|
|
38
38
|
it "does not match directories other than /content" do
|
39
|
-
SmsLogparser::Parser.match(
|
39
|
+
SmsLogparser::Parser.match?(
|
40
40
|
"GET /#{dir}/2/719/54986/file.mp4 HTTP/1.1\" 200 50000 "
|
41
|
-
).
|
41
|
+
).must_equal false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
%w(detect.mp4 index.m3u8).each do |file|
|
46
|
+
it "does not match excluded files" do
|
47
|
+
SmsLogparser::Parser.match?(
|
48
|
+
"GET /content/2/719/54986/#{file} HTTP/1.1\" 200 128 "
|
49
|
+
).must_equal false
|
42
50
|
end
|
43
51
|
end
|
44
52
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sms-logparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- niwo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- lib/sms-logparser/parser.rb
|
102
102
|
- lib/sms-logparser/version.rb
|
103
103
|
- sms-logparser.gemspec
|
104
|
+
- spec/api_spec.rb
|
104
105
|
- spec/cli_spec.rb
|
105
106
|
- spec/parser_spec.rb
|
106
107
|
- spec/spec_helper.rb
|
@@ -116,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
117
|
requirements:
|
117
118
|
- - '>='
|
118
119
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
120
|
+
version: 1.9.3
|
120
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
122
|
requirements:
|
122
123
|
- - '>='
|
@@ -129,6 +130,7 @@ signing_key:
|
|
129
130
|
specification_version: 4
|
130
131
|
summary: SMS Logparser
|
131
132
|
test_files:
|
133
|
+
- spec/api_spec.rb
|
132
134
|
- spec/cli_spec.rb
|
133
135
|
- spec/parser_spec.rb
|
134
136
|
- spec/spec_helper.rb
|