sms-logparser 0.12.1 → 0.12.2

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: 8392eba52e67bfc44639dc8b2e916ca9497335e2
4
- data.tar.gz: 3409ba5f83db6a33334d58bbd2ccb1f00e1165ae
3
+ metadata.gz: f0b45a865df500739a1bea384895fbee8fbad15c
4
+ data.tar.gz: 41b69f59f7d1d691a66e7c0b2cced2ad16e4ec66
5
5
  SHA512:
6
- metadata.gz: b3350474625d5cc675cfb18b5e4243ce81e6912ef123df9a86d9d7bef67a59b831926678288684e683b58043b29314ee7ff9a8794566319ece8f2f6045f12148
7
- data.tar.gz: ac650bc8109cede2eb992035c94e0ae6936633e21cb3d408ece3c1a9a00962204bcf0e0a18a41208c1aa759bff075344a42a3bdf59e5d28b060a904531215dd5
6
+ metadata.gz: 39d0e9abc5cb3777f2b222196b94387ede340817fcf52b58999bc9c93175ae20f156b384940ada9946703799883ed20fb4c3a2f6eb792a7f830cb2f04571eb5f
7
+ data.tar.gz: 8c3efb728d6c670cdcac62bf9cecbf022d65a2f1dc9e12528dde9aa89e77a0cbcfa6e3ee4e8d416606edf00f5bbcecedab0aad51059bea24d41be265420f369c
@@ -13,7 +13,6 @@ module SmsLogparser
13
13
  @data_cache = {}
14
14
  end
15
15
 
16
-
17
16
  def send(data)
18
17
  requests = build_urls(data)
19
18
  return requests if @options[:simulate]
@@ -36,11 +35,11 @@ module SmsLogparser
36
35
  requests
37
36
  end
38
37
 
39
- def send_from_queue(data_sets)
38
+ def send_sets(data_sets, concurrency=4)
40
39
  queue = Queue.new
41
40
  semaphore = Mutex.new
42
41
  data_sets.each {|set| queue << set }
43
- threads = 4.times.map do
42
+ threads = concurrency.times.map do
44
43
  Thread.new do
45
44
  while !queue.empty?
46
45
  begin
@@ -33,10 +33,14 @@ module SmsLogparser
33
33
  option :limit, type: :numeric, aliases: %w(-L), desc: "Limit the number of entries to query"
34
34
  option :accepted_api_responses, type: :array, aliases: %w(-r),
35
35
  desc: "API HTTP responses which are accepted (Default: only accept 200)."
36
+ option :cache, type: :boolean, desc: "Accumulate and cache results and send totals"
37
+ option :concurrency, type: :numeric, default: 4,
38
+ desc: "How many threads to use in parallel when sending cached results"
36
39
  def parse
37
40
  start_message = "Parser started"
38
41
  start_message += options[:simulate] ? " in simulation mode." : "."
39
42
  logger.info(start_message)
43
+ cache = DataCache.new if options[:cache]
40
44
  mysql = Mysql.new(options)
41
45
  if !options[:simulate] && mysql.parser_running?
42
46
  logger.warn("Exit. Another instance of the parser is already running.")
@@ -55,83 +59,23 @@ module SmsLogparser
55
59
  entries.each do |entry|
56
60
  Parser.extract_data_from_msg(entry['Message']) do |data|
57
61
  if data
58
- requests = api.send(data)
59
- state[:match_count] += 1
60
- verbose_parser_output(entry['ID'], data, requests)
62
+ if options[:cache]
63
+ cache.add(data)
64
+ logger.debug {"Cached data: #{data}"}
65
+ else
66
+ requests = api.send(data)
67
+ verbose_parser_output(entry['ID'], data, requests)
68
+ end
61
69
  state[:last_event_id] = entry['ID']
62
- end
63
- end
64
- end
65
- end
66
- rescue SystemExit, Interrupt
67
- logger.error("Received an interrupt. Stopping the parser run.")
68
- state[:status] = STATUS[:interrupted] if state
69
- rescue => e
70
- logger.error "Aborting the parser run."
71
- logger.error e
72
- state[:status] = STATUS[:api_error] if state
73
- else
74
- state[:status] = STATUS[:ok]
75
- ensure
76
- begin
77
- if mysql && state
78
- state[:run_time] = (Time.now - state[:started_at]).round(2)
79
- if state[:id]
80
- mysql.write_parse_result(state) unless options[:simulate]
81
- end
82
- log_parse_results(state)
83
- SmsLogparser::Loggster.instance.close
84
- end
85
- rescue => e
86
- logger.fatal e
87
- end
88
- end
89
-
90
- desc "cached_pase", "Check the database for pcache logs and put them into the cache"
91
- option :api_base_url, aliases: %w(-a),
92
- desc: "Base path of the SMS API (Default: http://localhost:8080/creator/rest/)"
93
- option :api_key, aliases: %w(-k), desc: "SMS API Key"
94
- option :simulate, type: :boolean, aliases: %w(-s),
95
- desc: "Dry run without submitting any data"
96
- option :verbose, type: :boolean, aliases: %w(-v), desc: "Verbose output"
97
- option :limit, type: :numeric, aliases: %w(-L), desc: "Limit the number of entries to query"
98
- option :accepted_api_responses, type: :array, aliases: %w(-r),
99
- desc: "API HTTP responses which are accepted (Default: only accept 200)."
100
- def cached_parse
101
- start_message = "Parser started"
102
- start_message += options[:simulate] ? " in simulation mode." : "."
103
- logger.info(start_message)
104
- mysql = Mysql.new(options)
105
- if !options[:simulate] && mysql.parser_running?
106
- logger.warn("Exit. Another instance of the parser is already running.")
107
- exit!
108
- end
109
- state = {
110
- last_event_id: mysql.get_last_parse_id,
111
- match_count: 0,
112
- status: STATUS[:running],
113
- started_at: Time.now,
114
- run_time: 0.0
115
- }
116
- state = mysql.start_run(state) unless options[:simulate]
117
- cache = DataCache.new
118
- mysql = Mysql.new(options)
119
- say "Getting entries from database..."
120
- mysql.get_entries(last_id: state[:last_event_id], limit: options[:limit]) do |entries|
121
- entries.each do |entry|
122
- Parser.extract_data_from_msg(entry['Message']) do |data|
123
- if data
124
- cache.add(data)
125
- logger.debug {"Cached data: #{data}"}
126
70
  state[:match_count] += 1
127
- state[:last_event_id] = entry['ID']
128
71
  end
129
72
  end
130
73
  end
131
74
  end
132
- api = Api.new(options)
133
- api.send_from_queue(cache.data_sets) do |url, response|
134
- say "#{url} (#{response})"
75
+ if options[:cache]
76
+ api.send_sets(cache.data_sets, options[:concurrency]) do |url, response|
77
+ logger.info { "POST #{url} (#{response})" }
78
+ end
135
79
  end
136
80
  rescue SystemExit, Interrupt
137
81
  logger.error("Received an interrupt. Stopping the parser run.")
@@ -155,7 +99,6 @@ module SmsLogparser
155
99
  rescue => e
156
100
  logger.fatal e
157
101
  end
158
-
159
102
  end
160
103
 
161
104
  desc "history", "List the last paser runs"
@@ -108,7 +108,7 @@ module SmsLogparser
108
108
  def select_entries(last_id, max_id)
109
109
  query = %Q{
110
110
  SELECT ID, Message FROM SystemEvents
111
- WHERE ID BETWEEN #{last_id} AND #{max_id}
111
+ WHERE ID BETWEEN #{last_id + 1} AND #{max_id}
112
112
  ORDER BY ID ASC
113
113
  LIMIT #{@query_limit};
114
114
  }.gsub(/\s+/, " ").strip
@@ -1,3 +1,3 @@
1
1
  module SmsLogparser
2
- VERSION = "0.12.1"
2
+ VERSION = "0.12.2"
3
3
  end
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.12.1
4
+ version: 0.12.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - niwo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-15 00:00:00.000000000 Z
11
+ date: 2014-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler