rsmp 0.5.2 → 0.5.6

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
  SHA256:
3
- metadata.gz: 9551219e8b4223f7d3fc615efe9a6e0c648b930c30e023426a4fafd60e15cdc8
4
- data.tar.gz: 859c020b24d0065d692cbba2ae1cb8de4a3498a03cd6d888fbdf8dab88e90491
3
+ metadata.gz: 22ab99646f7155eb2bd6cd2f39923f499f7fa5b019f63a5124886bc1ef4cbb15
4
+ data.tar.gz: db75cb477bfe945f799f37108a33550b4251d05b3d1a4f225e962dad16a4c827
5
5
  SHA512:
6
- metadata.gz: 4d5817111ffefe2cef5bc11a66872ef473203eeacd12fbb59c2c001cdb461b8d53cb7965855449083bf7db7225a2390eac4d5f49227c9d8bafa9285a40332837
7
- data.tar.gz: 85d4bea87373f4d65efd271877627d2be1eb43fc3c75368e312ab2942a3e8db99e512fd2be0351d1add466a43b87c3f8a5477ccb7d72ee9487dd932c43bbaca6
6
+ metadata.gz: c311032b06dab4f4d0aeb3a1ce61c961b87125546116eba2429bce01f3cdb5bcd0a9bf0bbe037dedb6c0cea2e269926cc180be51823bcddddebe89bde55c273f
7
+ data.tar.gz: 3121265aa3f49f49131a4afe7fe2479bcad25b2be74bcfaabb89ef8cf485cbae20298a33df456913c5818f160d0fa1e5ce7adf8142cbdac962cd109e8b13fd66
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rsmp (0.5.2)
4
+ rsmp (0.5.6)
5
5
  async (~> 1.29.1)
6
6
  async-io (~> 1.32.1)
7
7
  colorize (~> 0.8.1)
@@ -15,9 +15,10 @@ log:
15
15
  component: true
16
16
  ip: false
17
17
  port: true
18
- site_id: true
18
+ site_id: 9
19
+ component_id: 3
19
20
  text: true
20
- direction: true
21
+ direction: false
21
22
  level: false
22
23
  debug: true
23
24
  json: true
data/config/tlc.yaml CHANGED
@@ -34,13 +34,14 @@ log:
34
34
  color: true
35
35
  timestamp: true
36
36
  id: true
37
- component: true
37
+ component_id: true
38
38
  ip: false
39
- site_id: true
39
+ site_id: 9
40
+ component_id: 3
40
41
  level: false
41
42
  debug: true
42
43
  text: true
43
- direction: true
44
+ direction: false
44
45
  json: true
45
46
  acknowledgements: false
46
47
  watchdogs: false
@@ -61,9 +61,18 @@ module RSMP
61
61
  str = "#{@title.capitalize} collection"
62
62
  str << " in response to #{options[:m_id]}" if options[:m_id]
63
63
  str << " didn't complete within #{@options[:timeout]}s"
64
+ reached = progress
65
+ str << ", reached #{progress[:reached]}/#{progress[:need]}"
64
66
  raise RSMP::TimeoutError.new str
65
67
  end
66
68
 
69
+ # Return progress as collected vs. number requested
70
+ def progress
71
+ need = @options[:num]
72
+ reached = @messages.size
73
+ { need: need, got: reached }
74
+ end
75
+
67
76
  # Get the collected message.
68
77
  def message
69
78
  @messages.first
@@ -70,6 +70,13 @@ module RSMP
70
70
  @queries.map { |query| query.message }.uniq
71
71
  end
72
72
 
73
+ # Return progress as completes queries vs. total number of queries
74
+ def progress
75
+ need = @queries.size
76
+ reached = @queries.count { |query| query.done? }
77
+ { need: need, reached: reached }
78
+ end
79
+
73
80
  # Are there queries left to match?
74
81
  def done?
75
82
  @queries.all? { |query| query.done? }
@@ -16,12 +16,17 @@ module RSMP
16
16
  @notify_queue = []
17
17
  end
18
18
 
19
+ def clear_deferred_notify &block
20
+ @notify_queue = []
21
+ end
22
+
19
23
  def deferred_notify &block
20
24
  was, @defer_notify = @defer_notify, true
21
25
  yield
22
26
  dequeue_notify
23
27
  ensure
24
28
  @defer_notify = was
29
+ @notify_queue = []
25
30
  end
26
31
 
27
32
  def dequeue_notify
data/lib/rsmp/logger.rb CHANGED
@@ -5,33 +5,60 @@ module RSMP
5
5
 
6
6
  def initialize settings={}
7
7
  defaults = {
8
- 'prefix'=>nil,
9
8
  'active'=>false,
10
9
  'path'=>nil,
11
10
  'stream'=>nil,
12
- 'author'=>false,
13
11
  'color'=>true,
14
- 'site_id'=>true,
15
- 'component'=>false,
16
- 'level'=>false,
17
- 'ip'=>false,
18
- 'port'=>false,
19
- 'index'=>false,
20
- 'timestamp'=>true,
21
- 'json'=>false,
22
12
  'debug'=>false,
23
13
  'statistics'=>false,
24
14
  'hide_ip_and_port' => false,
25
- 'acknowledgements' => false
15
+ 'acknowledgements' => false,
16
+ 'json'=>false,
17
+ 'tabs'=>'-',
18
+
19
+ 'prefix'=>false,
20
+ 'index'=>false,
21
+ 'author'=>false,
22
+ 'timestamp'=>true,
23
+ 'ip'=>false,
24
+ 'port'=>false,
25
+ 'site_id'=>true,
26
+ 'component_id'=>true,
27
+ 'direction'=>false,
28
+ 'level'=>false,
29
+ 'id'=>false,
30
+ 'str'=>true,
31
+ }
32
+
33
+ default_lengths = {
34
+ 'index'=>7,
35
+ 'author'=>13,
36
+ 'timestamp'=>24,
37
+ 'ip'=>22,
38
+ 'port'=>5,
39
+ 'site_id'=>19,
40
+ 'component_id'=>19,
41
+ 'direction'=>4,
42
+ 'level'=>7,
43
+ 'id'=>4,
26
44
  }
45
+
27
46
  if settings
28
47
  @settings = defaults.merge settings
29
48
  else
30
49
  @settings = defaults
31
50
  end
32
51
 
33
- @muted = {}
52
+ # copy default length for items that are set to true
53
+ @settings = @settings.map do |key,value|
54
+ if value == true && default_lengths[key]
55
+ [ key, default_lengths[key] ]
56
+ else
57
+ [ key, value ]
58
+ end
59
+ end.to_h
34
60
 
61
+ @muted = {}
35
62
  setup_output_destination
36
63
  end
37
64
 
@@ -138,43 +165,39 @@ module RSMP
138
165
  end
139
166
  log.join("\n")
140
167
  end
141
-
142
- def build_output item
143
- parts = []
144
- parts << "#{@settings['prefix']} " if @settings['prefix']
145
- parts << item[:index].to_s.ljust(7) if @settings["index"] == true
146
- parts << item[:author].to_s.ljust(13) if @settings["author"] == true
147
- parts << Clock.to_s(item[:timestamp]).ljust(24) unless @settings["timestamp"] == false
148
- parts << item[:ip].to_s.ljust(22) unless @settings["ip"] == false
149
- parts << item[:port].to_s.ljust(8) unless @settings["port"] == false
150
- parts << item[:site_id].to_s.ljust(13) unless @settings["site_id"] == false
151
- parts << item[:component_id].to_s.ljust(18) unless @settings["component"] == false
152
-
153
- directions = {in:"-->",out:"<--"}
154
- parts << directions[item[:direction]].to_s.ljust(4) unless @settings["direction"] == false
155
-
156
- parts << item[:level].to_s.capitalize.ljust(7) unless @settings["level"] == false
157
168
 
169
+ def build_part parts, item, key, &block
170
+ skey = key.to_s
171
+ return unless @settings[skey]
158
172
 
159
- unless @settings["id"] == false
160
- length = 4
161
- if item[:message]
162
- parts << Logger.shorten_message_id(item[:message].m_id,length)+' '
163
- else
164
- parts << " "*(length+1)
165
- end
166
- end
167
- parts << item[:str].to_s.strip unless @settings["text"] == false
168
- parts << item[:message].json unless @settings["json"] == false || item[:message] == nil
169
-
170
- if item[:exception]
171
- parts << "#{item[:exception].class.to_s}\n"
172
- parts << item[:exception].backtrace.join("\n")
173
- end
174
-
175
- out = parts.join(' ').chomp(' ')
176
- out
173
+ part = item[key]
174
+ part = yield part if block
175
+ part = part.to_s
176
+ part = part.ljust @settings[skey] if @settings[skey].is_a?(Integer)
177
+
178
+ # replace the first char with a dash if string is all whitespace
179
+ part = @settings['tabs'].ljust(part.length) if @settings['tabs'] && part !~ /\S/
180
+ parts << part
177
181
  end
178
182
 
183
+ def build_output item
184
+ parts = []
185
+ build_part( parts, item, :prefix ) { @settings['prefix'] if @settings['prefix'] != false}
186
+ build_part( parts, item, :index )
187
+ build_part( parts, item, :author )
188
+ build_part( parts, item, :timestamp ) { |part| Clock.to_s part }
189
+ build_part( parts, item, :ip )
190
+ build_part( parts, item, :port )
191
+ build_part( parts, item, :site_id )
192
+ build_part( parts, item, :component_id )
193
+ build_part( parts, item, :direction ) { |part| {in:"-->",out:"<--"}[part] }
194
+ build_part( parts, item, :level ) { |part| part.capitalize }
195
+ build_part( parts, item, :id ) { Logger.shorten_message_id(item[:message].m_id,4) if item[:message] }
196
+ build_part( parts, item, :str )
197
+ build_part( parts, item, :json ) { item[:message].json if item[:message] }
198
+ build_part( parts, item, :exception ) { |e| [e.class,e.backtrace].flatten.join("\n") }
199
+
200
+ parts.join(' ').chomp(@settings['tabs']).rstrip
201
+ end
179
202
  end
180
- end
203
+ end
data/lib/rsmp/node.rb CHANGED
@@ -38,6 +38,10 @@ module RSMP
38
38
  def do_deferred item
39
39
  end
40
40
 
41
+ def clear_deferred
42
+ @deferred.clear
43
+ end
44
+
41
45
  def do_start task
42
46
  task.annotate self.class.to_s
43
47
  @task = task
data/lib/rsmp/proxy.rb CHANGED
@@ -350,7 +350,7 @@ module RSMP
350
350
  rescue SchemaError, RSMP::Schemer::Error => e
351
351
  str = "Received invalid #{message.type}, schema errors: #{e.message}"
352
352
  log str, message: message, level: :warning
353
- notify_error e.exception("#{str} #{message.json}"), message: message
353
+ notify_error e.exception(str), message: message
354
354
  dont_acknowledge message, str
355
355
  message
356
356
  rescue InvalidMessage => e
@@ -360,10 +360,12 @@ module RSMP
360
360
  message
361
361
  rescue FatalError => e
362
362
  str = "Rejected #{message.type},"
363
- notify_error e.exception("#{str} #{message.json}"), message: message
363
+ notify_error e.exception(str), message: message
364
364
  dont_acknowledge message, str, "#{e.message}"
365
365
  stop
366
366
  message
367
+ ensure
368
+ node.clear_deferred
367
369
  end
368
370
 
369
371
  def process_message message
data/lib/rsmp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RSMP
2
- VERSION = "0.5.2"
2
+ VERSION = "0.5.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Tin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-08 00:00:00.000000000 Z
11
+ date: 2021-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async