envoi-mam-agent 1.3.1 → 1.3.3

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: 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