sms-logparser 0.4.0 → 0.4.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 +4 -4
- data/README.md +4 -3
- data/lib/sms-logparser.rb +1 -1
- data/lib/sms-logparser/api.rb +30 -18
- data/lib/sms-logparser/cli.rb +35 -41
- data/lib/sms-logparser/mysql.rb +4 -4
- data/lib/sms-logparser/version.rb +1 -1
- data/sms-logparser.gemspec +7 -7
- data/spec/api_spec.rb +4 -4
- data/spec/cli_spec.rb +13 -13
- metadata +15 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cbef4f189ec7cfb603680dab2ed9b40a4fee998
|
4
|
+
data.tar.gz: 3c569116d366e62e0f476ed134764559cb7b4538
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9c340949b725190c9e394b5cd81125535581ff2a9047b79a4690a28f4f07d19bda72f232b8638d23b1aac9fe316546d34d8c3d976ec1d23850caa0bdb555807
|
7
|
+
data.tar.gz: ff09802ea0ea58279ea371e406fc3d9f602136dfecc6853352c7a25ede059ca7f1d5fea0040599168428edb8a17756005ebf3722957d67250f86ea15b218beef
|
data/README.md
CHANGED
@@ -44,16 +44,17 @@ Show the last parser runs:
|
|
44
44
|
|
45
45
|
```bash
|
46
46
|
$ sms-logparser history
|
47
|
-
|
47
|
+
```
|
48
48
|
|
49
49
|
## Configuration file
|
50
50
|
|
51
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
52
|
|
53
|
-
An configuration for adapting the default MySQL password
|
53
|
+
An example configuration (~/.sms-logparser.yml) for adapting the default MySQL password and setting the api_key:
|
54
54
|
|
55
55
|
```yaml
|
56
|
-
|
56
|
+
mysql_password: 'my!secret'
|
57
|
+
api_key: 'xqugl-hjh54-dr97-9kjdkjwi988d-123456'
|
57
58
|
```
|
58
59
|
|
59
60
|
## Development
|
data/lib/sms-logparser.rb
CHANGED
data/lib/sms-logparser/api.rb
CHANGED
@@ -5,34 +5,46 @@ module SmsLogparser
|
|
5
5
|
@options = options
|
6
6
|
end
|
7
7
|
|
8
|
+
def connection
|
9
|
+
@connection ||= new_connection
|
10
|
+
end
|
11
|
+
|
12
|
+
def new_connection
|
13
|
+
base_url = @options[:api_base_path] || 'http://localhost:8080'
|
14
|
+
conn = Faraday.new(url: base_url) do |faraday|
|
15
|
+
faraday.request :url_encoded
|
16
|
+
faraday.response :logger if @options[:debug]
|
17
|
+
faraday.adapter Faraday.default_adapter
|
18
|
+
end
|
19
|
+
conn.headers[:user_agent] = "sms-logparser v#{SmsLogparser::VERSION}"
|
20
|
+
if @options[:api_key]
|
21
|
+
conn.headers['X-simplex-api-key'] = @options[:api_key]
|
22
|
+
end
|
23
|
+
conn
|
24
|
+
end
|
25
|
+
|
8
26
|
def send(data)
|
9
|
-
|
10
|
-
|
11
|
-
base_url += "#{data[:customer_id]}/"
|
12
|
-
base_url += "#{data[:author_id]}/"
|
13
|
-
base_url += "#{data[:project_id]}"
|
27
|
+
uris = []
|
28
|
+
base_uri = ["/#{data[:customer_id]}", data[:author_id], data[:project_id]].join('/')
|
14
29
|
unless data[:file] =~ /.*\.m3u8$/
|
15
|
-
|
30
|
+
uris << [base_uri, data[:traffic_type], data[:bytes]].join('/')
|
16
31
|
end
|
17
32
|
if data[:visitor_type]
|
18
|
-
|
33
|
+
uris << [base_uri, data[:visitor_type], 1].join('/')
|
19
34
|
end
|
20
35
|
unless @options[:simulate]
|
21
|
-
|
36
|
+
uris.each do |uri|
|
22
37
|
begin
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
)
|
30
|
-
rescue
|
31
|
-
raise "Can't send request to #{url}"
|
38
|
+
response = connection.post(uri)
|
39
|
+
rescue => e
|
40
|
+
raise RuntimeError, "Can't send request to #{uri}. #{e.message}", caller
|
41
|
+
end
|
42
|
+
unless response.status == 200
|
43
|
+
raise RuntimeError, "Received response code (#{response.status}) from API.", caller
|
32
44
|
end
|
33
45
|
end
|
34
46
|
end
|
35
|
-
|
47
|
+
uris
|
36
48
|
end
|
37
49
|
|
38
50
|
end # class
|
data/lib/sms-logparser/cli.rb
CHANGED
@@ -8,49 +8,46 @@ module SmsLogparser
|
|
8
8
|
}
|
9
9
|
|
10
10
|
class_option :config,
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
11
|
+
default: File.join(Dir.home, '.sms-logparser.yml'),
|
12
|
+
aliases: %w(-c),
|
13
|
+
desc: "Configuration file for default options"
|
14
14
|
|
15
15
|
class_option :mysql_host,
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:desc => "MySQL host"
|
16
|
+
aliases: %w(-h),
|
17
|
+
desc: "MySQL host"
|
19
18
|
|
20
19
|
class_option :mysql_user,
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:desc => "MySQL user"
|
20
|
+
aliases: %w(-u),
|
21
|
+
desc: "MySQL user (default: root)"
|
24
22
|
|
25
23
|
class_option :mysql_password,
|
26
|
-
:
|
27
|
-
:
|
24
|
+
aliases: %w(-p),
|
25
|
+
desc: "MySQL password"
|
28
26
|
|
29
27
|
class_option :mysql_db,
|
30
|
-
:
|
31
|
-
:
|
32
|
-
:desc => "MySQL database"
|
28
|
+
aliases: %w(-d),
|
29
|
+
desc: "MySQL database (default: Syslog)"
|
33
30
|
|
34
31
|
desc "version", "Print cloudstack-cli version number"
|
35
32
|
def version
|
36
|
-
say "sms-logparser
|
33
|
+
say "sms-logparser v#{SmsLogparser::VERSION}"
|
37
34
|
end
|
38
35
|
map %w(-v --version) => :version
|
39
36
|
|
40
37
|
desc "parse", "Check the database for pcache logs and send them to the SMS-API"
|
41
38
|
option :api_base_path,
|
42
|
-
:
|
43
|
-
:
|
39
|
+
aliases: %w(-a),
|
40
|
+
desc: "Base path of the SMS API (default: http://localhost:8080/)"
|
44
41
|
option :api_key,
|
45
|
-
:
|
42
|
+
aliases: %w(-k)
|
46
43
|
option :simulate,
|
47
|
-
:
|
48
|
-
:
|
49
|
-
:
|
44
|
+
type: :boolean,
|
45
|
+
default: false,
|
46
|
+
aliases: %w(-s)
|
50
47
|
option :verbose,
|
51
|
-
:
|
52
|
-
:
|
53
|
-
:
|
48
|
+
type: :boolean,
|
49
|
+
default: false,
|
50
|
+
aliases: %w(-v)
|
54
51
|
def parse
|
55
52
|
start_time = Time.now
|
56
53
|
count = 0
|
@@ -64,7 +61,7 @@ module SmsLogparser
|
|
64
61
|
if Parser.match?(entry['Message'])
|
65
62
|
data = Parser.extract_data_from_msg(entry['Message'])
|
66
63
|
begin
|
67
|
-
|
64
|
+
uris = api.send(data)
|
68
65
|
rescue => e
|
69
66
|
say "Error: #{e.message}", :red
|
70
67
|
say "Aborting parser run...", :red
|
@@ -74,7 +71,7 @@ module SmsLogparser
|
|
74
71
|
last_id = entry['ID']
|
75
72
|
count += 1
|
76
73
|
if options[:verbose]
|
77
|
-
verbose_parser_output(data,
|
74
|
+
verbose_parser_output(data, uris, entry)
|
78
75
|
end
|
79
76
|
end
|
80
77
|
end
|
@@ -98,12 +95,11 @@ module SmsLogparser
|
|
98
95
|
|
99
96
|
desc "history", "List the last paser runs"
|
100
97
|
option :results,
|
101
|
-
:
|
102
|
-
:
|
103
|
-
:
|
104
|
-
:
|
98
|
+
type: :numeric,
|
99
|
+
default: 10,
|
100
|
+
aliases: %w(-n),
|
101
|
+
desc: "Number of results to display"
|
105
102
|
def history
|
106
|
-
puts options
|
107
103
|
begin
|
108
104
|
runs = Mysql.new(options).last_runs(options[:results])
|
109
105
|
if runs.size > 0
|
@@ -127,10 +123,10 @@ module SmsLogparser
|
|
127
123
|
|
128
124
|
desc "setup", "Create the parser table to track the last logs parsed"
|
129
125
|
option :force,
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
126
|
+
type: :boolean,
|
127
|
+
default: false,
|
128
|
+
aliases: %w(-f),
|
129
|
+
desc: "Drop an existing table if it exists"
|
134
130
|
def setup
|
135
131
|
begin
|
136
132
|
case Mysql.new(options).create_parser_table(options[:force])
|
@@ -145,12 +141,11 @@ module SmsLogparser
|
|
145
141
|
end
|
146
142
|
|
147
143
|
no_commands do
|
148
|
-
|
149
|
-
def verbose_parser_output(data, urls, entry)
|
144
|
+
def verbose_parser_output(data, uris, entry)
|
150
145
|
say "ID:\t", :cyan
|
151
146
|
say entry['ID']
|
152
|
-
say "
|
153
|
-
say
|
147
|
+
say "URI:\t", :cyan
|
148
|
+
say uris.join("\n\t")
|
154
149
|
say "Data:\t", :cyan
|
155
150
|
say data.map{|k,v| "#{k}:\t#{v}"}.join("\n\t") || "\n"
|
156
151
|
puts
|
@@ -163,9 +158,8 @@ module SmsLogparser
|
|
163
158
|
filename = original_options[:config] || File.join(Dir.home, '.sms-logparser.yml')
|
164
159
|
return original_options unless File.exists?(filename)
|
165
160
|
defaults = ::YAML::load_file(filename) || {}
|
166
|
-
defaults.merge(original_options)
|
161
|
+
Thor::CoreExt::HashWithIndifferentAccess.new(defaults.merge(original_options))
|
167
162
|
end
|
168
|
-
|
169
163
|
end
|
170
164
|
|
171
165
|
end
|
data/lib/sms-logparser/mysql.rb
CHANGED
@@ -7,10 +7,10 @@ module SmsLogparser
|
|
7
7
|
|
8
8
|
def client
|
9
9
|
@client ||= Mysql2::Client.new(
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
10
|
+
host: @options[:mysql_host],
|
11
|
+
username: @options[:mysql_user] || "root",
|
12
|
+
password: @options[:mysql_password],
|
13
|
+
database: @options[:mysql_db] || "Syslog"
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
data/sms-logparser.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = SmsLogparser::VERSION
|
9
9
|
spec.authors = ["niwo"]
|
10
10
|
spec.email = ["nik.wolfgramm@gmail.com"]
|
11
|
-
spec.description = %q{SMS
|
12
|
-
spec.summary = %q{
|
11
|
+
spec.description = %q{Reads access logs stored in a MySQL database (coming from the SWISS TXT CDN) and sends them to the SMS API.}
|
12
|
+
spec.summary = %q{sms-logparser - Logparser for Simplex Media Server (SMS)}
|
13
13
|
spec.homepage = "https://github.com/swisstxt/sms-logparser"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -20,10 +20,10 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.required_ruby_version = '>= 1.9.3'
|
22
22
|
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
24
|
+
spec.add_development_dependency 'rake'
|
25
25
|
|
26
|
-
spec.add_dependency
|
27
|
-
spec.add_dependency
|
28
|
-
spec.add_dependency
|
26
|
+
spec.add_dependency 'thor', '~> 0.19.1'
|
27
|
+
spec.add_dependency 'faraday', '~> 0.9.0'
|
28
|
+
spec.add_dependency 'mysql2'
|
29
29
|
end
|
data/spec/api_spec.rb
CHANGED
@@ -22,8 +22,8 @@ describe SmsLogparser::Api do
|
|
22
22
|
}
|
23
23
|
urls = @api.send(data)
|
24
24
|
urls.size.must_equal 2
|
25
|
-
urls[0].must_match
|
26
|
-
urls[1].must_match
|
25
|
+
urls[0].must_match /\/1\/2\/3\/TRAFFIC_WEBCAST\/128$/
|
26
|
+
urls[1].must_match /\/1\/2\/3\/VISITORS_WEBCAST\/1$/
|
27
27
|
end
|
28
28
|
|
29
29
|
it "does not send traffic for m3u8 files" do
|
@@ -39,7 +39,7 @@ describe SmsLogparser::Api do
|
|
39
39
|
}
|
40
40
|
urls = @api.send(data)
|
41
41
|
urls.size.must_equal 1
|
42
|
-
urls[0].must_match
|
42
|
+
urls[0].must_match /\/100\/200\/300\/VISITORS_MOBILE\/1$/
|
43
43
|
end
|
44
44
|
|
45
45
|
it "does not send visitor info if no visitor_type" do
|
@@ -54,7 +54,7 @@ describe SmsLogparser::Api do
|
|
54
54
|
}
|
55
55
|
urls = @api.send(data)
|
56
56
|
urls.size.must_equal 1
|
57
|
-
urls[0].must_match
|
57
|
+
urls[0].must_match /\/101\/202\/303\/TRAFFIC_MOBILE\/48$/
|
58
58
|
end
|
59
59
|
|
60
60
|
end
|
data/spec/cli_spec.rb
CHANGED
@@ -20,7 +20,7 @@ describe SmsLogparser::Cli do
|
|
20
20
|
it "can parse a log database and find matches" do
|
21
21
|
TestHelper.seed_db(10)
|
22
22
|
parser = TestHelper.sms_logparser
|
23
|
-
parser.options[:
|
23
|
+
parser.options[:simulate] = true
|
24
24
|
out, err = capture_io do
|
25
25
|
TestHelper.sms_logparser.setup
|
26
26
|
parser.parse
|
@@ -28,22 +28,22 @@ describe SmsLogparser::Cli do
|
|
28
28
|
out.must_match /\s+10$/
|
29
29
|
end
|
30
30
|
|
31
|
-
it "skips over already parsed logs" do
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
31
|
+
# it "skips over already parsed logs" do
|
32
|
+
# TestHelper.seed_db(1)
|
33
|
+
# parser = TestHelper.sms_logparser
|
34
|
+
# parser.options[:simulate] = true
|
35
|
+
# out, err = capture_io do
|
36
|
+
# TestHelper.sms_logparser.setup
|
37
|
+
# parser.parse
|
38
|
+
# parser.parse
|
39
|
+
# end
|
40
|
+
# out.must_match /\s+0$/
|
41
|
+
# end
|
42
42
|
|
43
43
|
it "can show the parser history" do
|
44
44
|
TestHelper.seed_db(1)
|
45
45
|
parser = TestHelper.sms_logparser
|
46
|
-
parser.options[:
|
46
|
+
parser.options[:simulate] = true
|
47
47
|
out, err = capture_io do
|
48
48
|
TestHelper.sms_logparser.setup
|
49
49
|
parser.parse
|
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.
|
4
|
+
version: 0.4.1
|
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-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,32 +42,32 @@ dependencies:
|
|
42
42
|
name: thor
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.19.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.19.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: faraday
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.9.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.9.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: mysql2
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - '>='
|
@@ -80,7 +80,8 @@ dependencies:
|
|
80
80
|
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description:
|
83
|
+
description: Reads access logs stored in a MySQL database (coming from the SWISS TXT
|
84
|
+
CDN) and sends them to the SMS API.
|
84
85
|
email:
|
85
86
|
- nik.wolfgramm@gmail.com
|
86
87
|
executables:
|
@@ -128,7 +129,7 @@ rubyforge_project:
|
|
128
129
|
rubygems_version: 2.0.3
|
129
130
|
signing_key:
|
130
131
|
specification_version: 4
|
131
|
-
summary:
|
132
|
+
summary: sms-logparser - Logparser for Simplex Media Server (SMS)
|
132
133
|
test_files:
|
133
134
|
- spec/api_spec.rb
|
134
135
|
- spec/cli_spec.rb
|