envoi-mam-agent 1.3.1 → 1.3.3

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: 786d46404e4cba2dc315f28715568437da1f5b7a
4
- data.tar.gz: ee6601a7376a73e74ab0f7278a5a766bbb9d0db5
3
+ metadata.gz: 6c018c235b16bdb909cc62ef96f71a50d41471ca
4
+ data.tar.gz: 9762194aa13fd04a301699ef3572cdab5efc719d
5
5
  SHA512:
6
- metadata.gz: 22b74933cae7aa8dbaf193434d193feca691a35f3b61b5ad290df4e4babcb01bb76e51edc9e51d89195ab3fcae9f494e422541a3bdc8f8b3b57cb9e0fc856694
7
- data.tar.gz: b35dd88fe050844c25e0da41dd28070de6b05184b8bc70c27e240be3a466ed2590bf48422bb410bcc11604d46032d51cb246a75b1f02de382a6a19c16dee65f7
6
+ metadata.gz: 7000b7b8b389f9cac2d6cc50c7949b87ca79dae5cb394fa96e50dccade9015d8bb4ac3689dab6bbec3283e62166567759b110c8779a6ed344ea76edbdcd92960
7
+ data.tar.gz: 0016e9047d4424a9d3be07ea59118751e8ee4f9a24e21821dc54e6ae0ba32b8c97b5729323e5d44d2c36b99fe4debcc89ce027a16ec8d6435f3e447c04fc624a
@@ -1,7 +1,7 @@
1
1
  module Envoi
2
2
  module Mam
3
3
  class Agent
4
- VERSION = '1.3.1'.freeze
4
+ VERSION = '1.3.3'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -9,10 +9,55 @@ module Envoi
9
9
 
10
10
  class Restore
11
11
 
12
+ class SQSMessageHandler
13
+
14
+ attr_accessor :logger
15
+ attr_accessor :queue_handler, :event_handler, :message
16
+ attr_accessor :worker_thread
17
+
18
+ def initialize(args = {})
19
+ @logger = args[:logger]
20
+ @queue_handler = args[:queue_handler]
21
+ @message = args[:message]
22
+ @event_handler = args[:event_handler]
23
+ end
24
+
25
+ def process
26
+ msg_body_parsed = JSON.parse(message.body)
27
+ event = msg_body_parsed
28
+
29
+ worker_thread = Thread.new(event, @event_handler) do
30
+ @event_handler.process_event(event)
31
+ end
32
+
33
+ visibility_timeout = 5
34
+ new_visibility_timeout = 60
35
+
36
+ while worker_thread.alive?
37
+ change_message_visibility_timeout(new_visibility_timeout)
38
+ sleep visibility_timeout
39
+ end
40
+
41
+ delete_message
42
+ end
43
+
44
+ def change_message_visibility_timeout(visibility_timeout)
45
+ logger.debug { "Updating Visibility Timeout for Message #{message.receipt_handle}..."}
46
+ queue_handler.poller.change_message_visibility_timeout(message, visibility_timeout)
47
+ end
48
+
49
+ def delete_message
50
+ logger.debug { "Deleting Message #{message.receipt_handle}..."}
51
+ queue_handler.poller.delete_message(message)
52
+ end
53
+
54
+ end
55
+
12
56
  class Agent < Envoi::Mam::Agent
13
57
 
14
58
  DEFAULT_ASPERA_ARGS = '-v -k3 --overwrite=diff -P 33001'
15
59
  DEFAULT_DESTINATION_PATH = '.'
60
+ DEFAULT_THREAD_LIMIT = 10
16
61
 
17
62
  attr_accessor :default_aspera_ascp_args,
18
63
  :default_aspera_ascp_path
@@ -23,6 +68,9 @@ module Envoi
23
68
  @should_stop = false
24
69
  @default_aspera_ascp_path = args[:default_aspera_ascp_path]
25
70
  @default_aspera_args = args[:default_ascp_args] || DEFAULT_ASPERA_ARGS
71
+
72
+ @thread_limit = args.fetch(:thread_limit, DEFAULT_THREAD_LIMIT)
73
+
26
74
  initialize_queue_handler
27
75
  initialize_event_handler
28
76
  end
@@ -32,7 +80,7 @@ module Envoi
32
80
  end
33
81
 
34
82
  def sqs_config
35
- @sqs_config ||= system_config['sqs'] || {}
83
+ @sqs_config ||= system_config['sqs'] || { skip_delete: true}
36
84
  end
37
85
 
38
86
  def initialize_queue_handler
@@ -43,19 +91,31 @@ module Envoi
43
91
  end
44
92
 
45
93
  def initialize_event_handler
46
- @event_handler = GlacierRestoreEventHandler.new(config: sqs_config)
94
+ @event_handler = GlacierRestoreEventHandler.new(config: sqs_config, logger: logger)
47
95
  end
48
96
 
49
97
  def run
50
98
  @running = true
51
- @queue_handler.poll do |messages|
52
- [*messages].each do |msg|
99
+ logger.info { "Running..." }
100
+ @threads = []
101
+ @queue_handler.poll do |messages, stats|
102
+ messages = [ messages ] unless messages.is_a?(Array)
103
+ messages.each do |msg|
53
104
  break if @should_stop
54
- msg_body_parsed = JSON.parse(msg.body)
55
- event = msg_body_parsed
56
- @event_handler.process_event(event)
105
+ break if @thread_limit && @threads.length >= @thread_limit
106
+ logger.info { "Processing Message... "}
107
+ logger.info { "Message: #{msg}" }
108
+
109
+ message_handler = SQSMessageHandler.new(logger: logger,
110
+ queue_handler: @queue_handler.dup,
111
+ message: msg.dup,
112
+ event_handler: @event_handler.dup)
113
+ t = Thread.new(message_handler) { |mh| mh.process }
114
+ @threads << t
57
115
  end
116
+ @threads.keep_if { |t| t.alive? }
58
117
  throw :stop_polling if @should_stop
118
+ throw :skip_delete
59
119
  end
60
120
  @running = false
61
121
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envoi-mam-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Whitson