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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d8d1676ea63d17f63d196dd955d52bcd822c28b
4
- data.tar.gz: 6a0a0341ed6a5050cefa8871835247122f2a2934
3
+ metadata.gz: 1cbef4f189ec7cfb603680dab2ed9b40a4fee998
4
+ data.tar.gz: 3c569116d366e62e0f476ed134764559cb7b4538
5
5
  SHA512:
6
- metadata.gz: dabe200a09f9dd8f508726c6b8ba8471847c713ae0e142c0121ea8eafb526321cc023972c6c0d830996de5107158981fafa987c53f44074af772947fe9a9bae8
7
- data.tar.gz: b5e7aa89a019a2582fbf0296fc38a3350da2a7aba1cc41c03b7fed1f01948b768f570807fce987b81a9cf6842b7fb770c68ce363946ce55f4a1ed3a14c19825e
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 could look like this:
53
+ An example configuration (~/.sms-logparser.yml) for adapting the default MySQL password and setting the api_key:
54
54
 
55
55
  ```yaml
56
- :mysql_password: "my!secret"
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
@@ -1,7 +1,7 @@
1
1
  require "rubygems" # ruby1.9 doesn't "require" it though
2
2
  require "thor"
3
3
  require 'mysql2'
4
- require 'rest_client'
4
+ require 'faraday'
5
5
 
6
6
  require "sms-logparser/version"
7
7
  require "sms-logparser/mysql"
@@ -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
- urls = []
10
- base_url = "#{@options[:api_base_path]}/"
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
- urls = ["#{base_url}/#{data[:traffic_type]}/#{data[:bytes]}"]
30
+ uris << [base_uri, data[:traffic_type], data[:bytes]].join('/')
16
31
  end
17
32
  if data[:visitor_type]
18
- urls << "#{base_url}/#{data[:visitor_type]}/1"
33
+ uris << [base_uri, data[:visitor_type], 1].join('/')
19
34
  end
20
35
  unless @options[:simulate]
21
- urls.each do |url|
36
+ uris.each do |uri|
22
37
  begin
23
- RestClient::Request.execute(
24
- :method => :post,
25
- :url => url,
26
- :headers => {
27
- 'X-simplex-api-key' => @options[:api_key]
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
- urls
47
+ uris
36
48
  end
37
49
 
38
50
  end # class
@@ -8,49 +8,46 @@ module SmsLogparser
8
8
  }
9
9
 
10
10
  class_option :config,
11
- :default => File.join(Dir.home, '.sms-logparser.yml'),
12
- :aliases => %w(-c),
13
- :desc => "Configuration file for default options"
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
- :default => 'localhost',
17
- :aliases => %w(-h),
18
- :desc => "MySQL host"
16
+ aliases: %w(-h),
17
+ desc: "MySQL host"
19
18
 
20
19
  class_option :mysql_user,
21
- :default => 'root',
22
- :aliases => %w(-u),
23
- :desc => "MySQL user"
20
+ aliases: %w(-u),
21
+ desc: "MySQL user (default: root)"
24
22
 
25
23
  class_option :mysql_password,
26
- :aliases => %w(-p),
27
- :desc => "MySQL password"
24
+ aliases: %w(-p),
25
+ desc: "MySQL password"
28
26
 
29
27
  class_option :mysql_db,
30
- :default => 'Syslog',
31
- :aliases => %w(-d),
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 version #{SmsLogparser::VERSION}"
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
- :default => 'http://dev.simplex.tv/creator/rest',
43
- :aliases => %w(-a)
39
+ aliases: %w(-a),
40
+ desc: "Base path of the SMS API (default: http://localhost:8080/)"
44
41
  option :api_key,
45
- :aliases => %w(-k)
42
+ aliases: %w(-k)
46
43
  option :simulate,
47
- :type => :boolean,
48
- :default => false,
49
- :aliases => %w(-s)
44
+ type: :boolean,
45
+ default: false,
46
+ aliases: %w(-s)
50
47
  option :verbose,
51
- :type => :boolean,
52
- :default => false,
53
- :aliases => %w(-v)
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
- urls = api.send(data)
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, urls, entry)
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
- :type => :numeric,
102
- :default => 10,
103
- :aliases => %w(-n),
104
- :desc => "Number of results to display"
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
- :type => :boolean,
131
- :default => false,
132
- :aliases => %w(-f),
133
- :desc => "Drop an existing table if it exists"
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 "URL:\t", :cyan
153
- say urls.join("\n\t")
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
@@ -7,10 +7,10 @@ module SmsLogparser
7
7
 
8
8
  def client
9
9
  @client ||= Mysql2::Client.new(
10
- :host => @options[:mysql_host],
11
- :username => @options[:mysql_user],
12
- :password => @options[:mysql_password],
13
- :database => @options[:mysql_db]
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
 
@@ -1,3 +1,3 @@
1
1
  module SmsLogparser
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -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 Logparser}
12
- spec.summary = %q{SMS Logparser}
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 "bundler", "~> 1.3"
24
- spec.add_development_dependency "rake"
23
+ spec.add_development_dependency 'bundler', '~> 1.3'
24
+ spec.add_development_dependency 'rake'
25
25
 
26
- spec.add_dependency "thor"
27
- spec.add_dependency "mysql2"
28
- spec.add_dependency "rest_client"
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 /.+\/1\/2\/3\/TRAFFIC_WEBCAST\/128$/
26
- urls[1].must_match /.+\/1\/2\/3\/VISITORS_WEBCAST\/1$/
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 /.+\/100\/200\/300\/VISITORS_MOBILE\/1$/
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 /.+\/101\/202\/303\/TRAFFIC_MOBILE\/48$/
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[:api_base_path] = 'http://devnull-as-a-service.com/dev/null/'
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
- TestHelper.seed_db(1)
33
- parser = TestHelper.sms_logparser
34
- parser.options[:api_base_path] = 'http://devnull-as-a-service.com/dev/null/'
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
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[:api_base_path] = 'http://devnull-as-a-service.com/dev/null/'
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.0
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-26 00:00:00.000000000 Z
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: '0'
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: '0'
54
+ version: 0.19.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: mysql2
56
+ name: faraday
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
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: '0'
68
+ version: 0.9.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: rest_client
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: SMS Logparser
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: SMS Logparser
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