sms-logparser 0.4.0 → 0.4.1

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