cantemo-portal-agent 1.3.0 → 1.3.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: deef6be201da32030d9b495463c2c5b2a1a55086
4
- data.tar.gz: 89ca91ba9fadf0f204cb9180ca28d3c3110766e7
3
+ metadata.gz: 9b3f1ea75c5103dd91d6b863538cb5bd4b6ff7c2
4
+ data.tar.gz: '0796314e40e182e785a2d8cc8290be0e0a653545'
5
5
  SHA512:
6
- metadata.gz: 7f24e5db79bed7d457b59e0d845aff26e4f388e651ea5378a889ffcde36d3e5d1618a26ef570851501f391fead8ab3779017324ac4b2be668cdd07c7da53db14
7
- data.tar.gz: 01d9ab468ba03278a8db51c057210cb8109ab96c37ff6ba719fb2bc581d08f0782695cb8e1d8f80dc99290e14e1547b1138313d236c4f3aa572872bb481a357e
6
+ metadata.gz: a57aeb7f14fceb67dfbbbfe091593c49ef57491fb5968b3f4b46e9a3beccff7964153a8b06d88e13268b10de315102db28a147647a5c9455090c4a7fe46af748
7
+ data.tar.gz: 68487f27150376d370b6254df75a339b49385d3957eb490e90e79bc9c3054dc7b77d8e5fe50dae5ad0ee42c9eea71d5fee803306e7378338c18bb6ae00e18083
@@ -37,12 +37,12 @@ op = OptionParser.new
37
37
  op.on('-c', '--config-file-path FILEPATH', 'The path to the configuration file.',
38
38
  "Default Path(s): #{args[:config_file_path]}") { |v| args[:config_file_path] = v }
39
39
  # op.on('-b', '--[no-]background', 'Tells the application to run in the background.') { |v| args[:daemonize] = v }
40
- op.on_tail('-t', '--log-to FILEPATH', 'Log file to log to') { |log_to| args[:log_to] = log_to }
41
- op.on_tail('-l', '--log-level LEVEL', ['fatal', 'error', 'warn', 'info', 'debug'], 'Select logging level') do |log_level|
42
- args[:log_level] = log_level.upcase
40
+ op.on_tail('-t', '--log-to FILEPATH', 'Log file to log to') { |v| args[:log_to] = v }
41
+ op.on_tail('-l', '--log-level LEVEL', %w(fatal error warn info debug), 'Select logging level') do |v|
42
+ args[:log_level] = v
43
43
  end
44
44
  op.on_tail('-v', '--version', 'Output the version and exit.') { puts "Version #{Cantemo::Portal::Agent::VERSION}"; exit }
45
- op.on_tail('--help', 'Show this message.') { puts op; exit }
45
+ op.on_tail('-h', '--help', 'Show this message.') { puts op; exit }
46
46
  op.load
47
47
  op.parse!
48
48
 
@@ -53,27 +53,26 @@ if sub_command == 'help'
53
53
  end
54
54
 
55
55
  config_file_path = args[:config_file_path]
56
- args[:config_file_path].map! { |v| File.expand_path(v) } if config_file_path.is_a?(Array)
57
-
58
- daemon_control_command_present = sub_command && begin
59
- sub_command = sub_command.dup.downcase if sub_command
60
- %w(start stop restart zap killall status).include?(sub_command)
61
- end
62
- should_daemonize = (daemon_control_command_present && %w(start restart).include?(sub_command)) || args[:daemonize]
63
-
64
- if sub_command
65
- case sub_command
66
- when 'install'
67
- puts
68
- when 'uninstall'
69
- puts
70
- else
71
- puts
72
- end
56
+ if config_file_path.is_a?(Array)
57
+ args[:config_file_path].map! { |v| File.expand_path(v) }
58
+ config_file_path = config_file_path.find { |file_path| File.exist?(file_path) }
73
59
  end
74
60
 
61
+
62
+ # daemon_control_command_present = sub_command && begin
63
+ # sub_command = sub_command.dup.downcase if sub_command
64
+ # %w(start stop restart zap killall status).include?(sub_command)
65
+ # end
66
+ # should_daemonize = (daemon_control_command_present && %w(start restart).include?(sub_command)) || args[:daemonize]
67
+
68
+ WATCH_FOLDER_MANAGER_CLASS = Envoi::Mam::Cantemo::Agent::WatchFolderManager
69
+
75
70
  if sub_command == 'run'
76
- Envoi::Mam::Cantemo::Agent::WatchFolderManager.run(args)
71
+ begin
72
+ WATCH_FOLDER_MANAGER_CLASS.run(args)
73
+ rescue => e
74
+ abort("An exception occurred: #{e.message}#{args[:log_level] == 'debug' ? " - #{e.backtrace.first}" : ''}")
75
+ end
77
76
  exit
78
77
  end
79
78
 
@@ -110,16 +109,90 @@ module Application
110
109
  end
111
110
 
112
111
  def service_main(*args)
113
- @WatchFolderManager = Envoi::Mam::Cantemo::Agent::WatchFolderManager.run(args)
112
+ @WatchFolderManager = WATCH_FOLDER_MANAGER_CLASS.run(args)
114
113
  end
115
114
 
116
115
  def service_stop
117
116
  @WatchFolderManager.stop
118
117
  end
119
118
 
119
+ def service_pause
120
+
121
+ end
122
+
123
+ def service_resume
124
+
125
+ end
126
+
127
+ # Watcher - Windows
120
128
  end
121
129
  else
122
- class Watcher < Envoi::Mam::Cantemo::Agent::WatchFolderManager; end
130
+ class Watcher
131
+ APP_NAME = 'cantemo-portal-watch-folders'
132
+
133
+ def self.run(args)
134
+ WATCH_FOLDER_MANAGER_CLASS.run(args)
135
+ end
136
+
137
+ def self.daemons_run_proc_with_cleanup(options, &block)
138
+ options[:dir_mode] = :normal
139
+ options[:dir] = File.split(__FILE__)[0]
140
+
141
+ if block_given?
142
+ options[:mode] = :proc
143
+ options[:proc] = block
144
+ end
145
+
146
+ controller = Daemons::Controller.new(options, ARGV)
147
+ _command, _controller_part, _app_part = controller.class.split_argv(ARGV)
148
+
149
+ controller_group = Daemons::ApplicationGroup.new(controller.app_name, controller.options)
150
+ controller_group.controller_argv = _controller_part
151
+ controller_group.app_argv = _app_part
152
+
153
+ controller_group.setup
154
+ applications = controller_group.applications
155
+
156
+ is_running = applications.find { |a| a.running? }
157
+ if !applications.empty?
158
+ puts "Found #{applications.length} existing pid file(s) #{applications.map { |a| a.pid.pid }}"
159
+ should_zap_all = !is_running || (applications.length == 1 && applications.first.pid.pid == 0)
160
+ if should_zap_all
161
+ warn "Found stale pid file(s)"
162
+ controller_group.zap_all
163
+ controller_group.options[:force] = true
164
+ # controller_group.applications = []
165
+
166
+ controller.options[:force] = true
167
+ end
168
+ end
169
+
170
+ Daemons.run_proc(options[:app_name], options, &block)
171
+ # controller.catch_exceptions do
172
+ # controller.run
173
+ # end
174
+
175
+ end
176
+
177
+ def self.run_with_process_manager(args, options = {})
178
+ # ARGV.unshift 'run' unless %w(start stop restart run zap killall status).include? ARGV.first
179
+ self.run(args)
180
+ require 'daemons'
181
+ proc = Proc.new { self.run(args) }
182
+ app_name = APP_NAME
183
+
184
+ # options[:app_name] = app_name
185
+ # daemons_run_proc_with_cleanup(options, &proc)
186
+
187
+ # options[:force] = true
188
+ Daemons.run_proc(app_name, options, &proc)
189
+ end
190
+
191
+ def self.run_in_foreground(args, options = { })
192
+ self.run(args)
193
+ end
194
+ # Watcher - *nix
195
+ end
123
196
  end
124
197
 
125
198
 
@@ -139,18 +212,16 @@ end
139
212
 
140
213
  if !Application::OS.windows?
141
214
  begin
142
- Watcher.run_with_process_manager(args)
215
+ Application.run_with_process_manager(args)
143
216
  exit
144
217
  rescue => e
145
- abort("An error occurred. #{e.message}")
218
+ abort("An exception occurred: #{e.message}#{args[:log_level] == 'debug' ? " - #{e.backtrace.first}" : ''}")
146
219
  end
147
220
  end
148
221
 
149
222
  # Options:
150
- # install - Installs the service. The service name is "DemoSvc"
151
- # and the display name is "Demo".
152
- # start - Starts the service. Make sure you stop it at some point or
153
- # you will eventually fill up your filesystem!.
223
+ # install - Installs the service.
224
+ # start - Starts the service.
154
225
  # stop - Stops the service.
155
226
  # pause - Pauses the service.
156
227
  # resume - Resumes the service.
@@ -161,31 +232,18 @@ require 'rbconfig'
161
232
  include Win32
162
233
  include RbConfig
163
234
 
164
- # Make sure you're using the version you think you're using.
165
- puts 'VERSION: ' + Service::VERSION
166
-
167
235
  SERVICE_NAME = 'cantemo_portal_watch_folder_agent'
168
236
  SERVICE_DISPLAYNAME = 'Cantemo Portal Watch Folder Agent'
169
237
  EXECUTABLE_NAME = __FILE__
170
238
 
171
239
 
172
240
  # You must provide at least one argument.
173
- raise ArgumentError, 'No argument provided' unless sub_command
241
+ abort('No argument provided.') unless sub_command
242
+ abort('Service not installed.') unless Service.exists?(SERVICE_NAME) && sub_command == 'install'
174
243
 
175
- case sub_command
176
- when 'install'
177
- # Quote the full path to deal with possible spaces in the path name.
178
- ruby = File.join(CONFIG['bindir'], CONFIG['ruby_install_name']).tr('/', '\\')
179
- path = %Q(#{File.dirname(File.expand_path($0)).tr('/', '\\')}\\#{EXECUTABLE_NAME})
180
- cmd = %Q("#{ruby}" "#{path}" run --config-file-path "#{config_file_path}")
181
244
 
182
- Service.new(
183
- :service_name => SERVICE_NAME,
184
- :display_name => SERVICE_DISPLAYNAME,
185
- :description => 'Watch Folder Agent for Cantemo Portal',
186
- :binary_path_name => cmd
187
- )
188
- puts 'Service ' + SERVICE_NAME + ' installed'
245
+ case sub_command
246
+ when 'runasservice'
189
247
  when 'start'
190
248
  if Service.status(SERVICE_NAME).current_state != 'running'
191
249
  Service.start(SERVICE_NAME, nil)
@@ -208,16 +266,6 @@ when 'stop'
208
266
  else
209
267
  puts 'Already stopped'
210
268
  end
211
- when 'uninstall', 'delete'
212
- if Service.status(SERVICE_NAME).current_state != 'stopped'
213
- Service.stop(SERVICE_NAME)
214
- end
215
- while Service.status(SERVICE_NAME).current_state != 'stopped'
216
- puts 'One moment...' + Service.status(SERVICE_NAME).current_state
217
- sleep 1
218
- end
219
- Service.delete(SERVICE_NAME)
220
- puts 'Service ' + SERVICE_NAME + ' deleted'
221
269
  when 'pause'
222
270
  if Service.status(SERVICE_NAME).current_state != 'paused'
223
271
  Service.pause(SERVICE_NAME)
@@ -242,6 +290,30 @@ when 'resume'
242
290
  end
243
291
  when 'status'
244
292
  puts Service.status(SERVICE_NAME)
293
+ when 'install'
294
+ # Quote the full path to deal with possible spaces in the path name.
295
+ ruby = File.join(CONFIG['bindir'], CONFIG['ruby_install_name']).tr('/', '\\')
296
+ path = %Q(#{File.dirname(File.expand_path($0)).tr('/', '\\')}\\#{EXECUTABLE_NAME})
297
+ cmd = %Q("#{ruby}" "#{path}" runasservice --config-file-path "#{config_file_path}")
298
+
299
+ Service.new(
300
+ :service_name => SERVICE_NAME,
301
+ :display_name => SERVICE_DISPLAYNAME,
302
+ :description => 'Watch Folder Agent for Cantemo Portal',
303
+ :binary_path_name => cmd
304
+ )
305
+ puts 'Service ' + SERVICE_NAME + ' installed'
306
+ when 'uninstall', 'delete'
307
+ if Service.status(SERVICE_NAME).current_state != 'stopped'
308
+ Service.stop(SERVICE_NAME)
309
+ end
310
+ while Service.status(SERVICE_NAME).current_state != 'stopped'
311
+ puts 'One moment...' + Service.status(SERVICE_NAME).current_state
312
+ sleep 1
313
+ end
314
+ Service.delete(SERVICE_NAME)
315
+ puts 'Service ' + SERVICE_NAME + ' deleted'
316
+
245
317
  else
246
318
  raise ArgumentError, 'unknown option: ' + sub_command
247
319
  end
@@ -1,7 +1,7 @@
1
1
  module Cantemo
2
2
  module Portal
3
3
  class Agent
4
- VERSION = '1.3.0'.freeze
4
+ VERSION = '1.3.1'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -5,48 +5,10 @@ require 'envoi/watch_folder_utility/watch_folder/handler/listen'
5
5
 
6
6
  module Envoi::Mam::Cantemo
7
7
 
8
- module OS
9
- def OS.windows?
10
- (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
11
- end
12
-
13
- def OS.mac?
14
- (/darwin/ =~ RUBY_PLATFORM) != nil
15
- end
16
-
17
- def OS.unix?
18
- !OS.windows?
19
- end
20
-
21
- def OS.linux?
22
- OS.unix? and not OS.mac?
23
- end
24
- end
25
-
26
8
  class Agent
27
9
 
28
10
  class WatchFolderManager
29
11
 
30
-
31
- class MultiIO
32
- def initialize(*targets)
33
- @targets = targets
34
- end
35
-
36
- def write(*args)
37
- @targets.each {|t| t.write(*args)}
38
- end
39
-
40
- def close
41
- @targets.each(&:close)
42
- end
43
-
44
- def add_target(*target)
45
- @targets.concat target
46
- end
47
-
48
- end
49
-
50
12
  class MultiLogger
51
13
  attr_accessor :targets
52
14
 
@@ -340,6 +302,10 @@ module Envoi::Mam::Cantemo
340
302
  end
341
303
  end
342
304
 
305
+ def run_once
306
+ # AWF.run_once(watch_folders) { |wf| process_watch_folder(wf) }
307
+ end
308
+
343
309
  # The main execution method
344
310
  def run
345
311
  @should_run = true
@@ -367,18 +333,28 @@ module Envoi::Mam::Cantemo
367
333
  logger.info { 'Exiting...' }
368
334
  end
369
335
 
370
- def run_once
371
- # AWF.run_once(watch_folders) { |wf| process_watch_folder(wf) }
372
- end
373
-
374
336
  def stop
375
337
  if @should_run
376
338
  @should_run = false
377
- logger.info { "Stopping..." }
339
+ logger.info { 'Stopping...' }
378
340
  watch_folders.each { |wf| wf.stop if wf.respond_to?(:stop) }
379
341
  end
380
342
  end
381
343
 
344
+ def pause
345
+ if @should_run
346
+ logger.info { 'Pausing...' }
347
+ watch_folders.each { |wf| wf.pause if wf.respond_to?(:pause) }
348
+ end
349
+ end
350
+
351
+ def resume
352
+ if @should_run
353
+ logger.info { 'Resuming...' }
354
+ watch_folders.each { |wf| wf.resume if wf.respond_to?(:resume) }
355
+ end
356
+ end
357
+
382
358
  # Converts hash keys to symbols
383
359
  #
384
360
  # @param [Hash] value hash
@@ -398,67 +374,7 @@ module Envoi::Mam::Cantemo
398
374
  def self.run(args)
399
375
  w = self.new(args)
400
376
  w.run
401
- end
402
-
403
- def self.daemons_run_proc_with_cleanup(options, &block)
404
- options[:dir_mode] = :normal
405
- options[:dir] = File.split(__FILE__)[0]
406
-
407
- if block_given?
408
- options[:mode] = :proc
409
- options[:proc] = block
410
- end
411
-
412
- controller = Daemons::Controller.new(options, ARGV)
413
- _command, _controller_part, _app_part = controller.class.split_argv(ARGV)
414
-
415
- controller_group = Daemons::ApplicationGroup.new(controller.app_name, controller.options)
416
- controller_group.controller_argv = _controller_part
417
- controller_group.app_argv = _app_part
418
-
419
- controller_group.setup
420
- applications = controller_group.applications
421
-
422
- is_running = applications.find { |a| a.running? }
423
- if !applications.empty?
424
- puts "Found #{applications.length} existing pid file(s) #{applications.map { |a| a.pid.pid }}"
425
- should_zap_all = !is_running || (applications.length == 1 && applications.first.pid.pid == 0)
426
- if should_zap_all
427
- warn "Found stale pid file(s)"
428
- controller_group.zap_all
429
- controller_group.options[:force] = true
430
- # controller_group.applications = []
431
-
432
- controller.options[:force] = true
433
- end
434
- end
435
-
436
- Daemons.run_proc(options[:app_name], options, &block)
437
- # controller.catch_exceptions do
438
- # controller.run
439
- # end
440
-
441
- end
442
-
443
- def self.run_with_process_manager(args, options = {})
444
- # ARGV.unshift 'run' unless %w(start stop restart run zap killall status).include? ARGV.first
445
- if OS.windows?
446
- self.run(args)
447
- else
448
- require 'daemons'
449
- proc = Proc.new { self.run(args) }
450
- app_name = 'cantemo-portal-watch-folders'
451
-
452
- # options[:app_name] = app_name
453
- # daemons_run_proc_with_cleanup(options, &proc)
454
-
455
- # options[:force] = true
456
- Daemons.run_proc(app_name, options, &proc)
457
- end
458
- end
459
-
460
- def self.run_in_foreground(args, options = { })
461
- self.run(args)
377
+ w
462
378
  end
463
379
 
464
380
  end
@@ -229,8 +229,8 @@ module Envoi
229
229
 
230
230
  logger.debug { "Initializing parameter 'upload/import arguments'." }
231
231
  upload_args = watch_folder_def['upload_args']
232
- item_add_args = watch_folder_def['item_add_args']
233
- item_add_options = watch_folder_def['item_add_options']
232
+ item_add_args = watch_folder_def['item_add_args'] || { }
233
+ item_add_options = watch_folder_def['item_add_options'] || { }
234
234
  import_args = watch_folder_def['import_args'] || { }
235
235
  import_options = watch_folder_def['import_options'] || { }
236
236
 
@@ -238,26 +238,26 @@ module Envoi
238
238
  import_options = Hash[import_options.map { |k,v| [ k.respond_to?(:to_sym) ? k.to_sym.downcase : k, v ] }]
239
239
 
240
240
  # Allow adding to collection to be overridden
241
- add_item_to_collection = import_options.fetch(:add_item_to_collection,
242
- import_args.fetch(:add_item_to_collection,
241
+ add_item_to_collection = item_add_args.fetch(:add_item_to_collection,
242
+ item_add_options.fetch(:add_item_to_collection,
243
243
  watch_folder_def['add_item_to_collection']))
244
244
  if add_item_to_collection.nil? || add_item_to_collection
245
245
  _add_item_to_collection = false
246
246
  collection_id = watch_folder_def['collection_id']
247
247
  if collection_id
248
- import_args[:collection_id] ||= collection_id
248
+ item_add_args[:collection_id] ||= collection_id
249
249
  _add_item_to_collection = true
250
250
  watch_folder_def.delete('collection_id')
251
251
  else
252
252
  collection_name = watch_folder_def['collection_name']
253
253
  if collection_name
254
- import_args[:collection_name] ||= collection_name
254
+ item_add_args[:collection_name] ||= collection_name
255
255
  _add_item_to_collection = true
256
256
  watch_folder_def.delete('collection_name')
257
257
  else
258
258
  file_path_collection_name_position = watch_folder_def['file_path_collection_name_position']
259
259
  if file_path_collection_name_position
260
- import_args[:file_path_collection_name_position] = file_path_collection_name_position
260
+ item_add_args[:file_path_collection_name_position] = file_path_collection_name_position
261
261
  _add_item_to_collection = true
262
262
  watch_folder_def.delete('file_path_collection_name_position')
263
263
  end
@@ -268,13 +268,14 @@ module Envoi
268
268
 
269
269
  metadata = watch_folder_def['metadata']
270
270
  if metadata
271
- import_args[:metadata] = metadata
271
+ item_add_args[:metadata] = metadata
272
272
  watch_folder_def.delete('metadata')
273
273
  end
274
274
 
275
- metadata_group = watch_folder_def['metadata_group'] || watch_folder_def['field_group']
276
- if metadata_group
277
- import_options[:field_group] = metadata_group
275
+ field_group = watch_folder_def['field_group']
276
+ if field_group
277
+ item_add_args[:field_group] = field_group
278
+ watch_folder_def.delete('field_group')
278
279
  end
279
280
 
280
281
  ingest_group = watch_folder_def['ingest_group']
@@ -283,11 +284,12 @@ module Envoi
283
284
  job_metadata += ',' unless job_metadata.empty?
284
285
  job_metadata += "portal_groups:StringArray=#{ingest_group}"
285
286
  import_args[:jobmetadata] = job_metadata
287
+ watch_folder_def.delete('ingest_group')
286
288
  end
287
289
 
288
290
  item_add_args = symbolize_keys(item_add_args)
289
- ((item_add_args ||= {})[:import_args] ||= {}).merge! import_args if import_args.is_a?(Hash)
290
- ((item_add_args ||= {})[:import_options] ||= {}).merge! import_options if import_options.is_a?(Hash)
291
+ (item_add_args[:import_args] ||= {}).merge! import_args if import_args.is_a?(Hash)
292
+ (item_add_args[:import_options] ||= {}).merge! import_options if import_options.is_a?(Hash)
291
293
 
292
294
  upload_args = symbolize_keys(upload_args)
293
295
  ((upload_args ||= {})[:item_add_args] ||= {}).merge! item_add_args if item_add_args.is_a?(Hash)
@@ -398,8 +400,67 @@ module Envoi
398
400
  end
399
401
  end
400
402
 
401
- def process_stable_file(file)
403
+ # @param [Object] file
404
+ # @return [Hash]
405
+ def process_file(file)
406
+ file.processing = true
407
+ file_name = file.name || file.path
408
+ logger.debug { "Processing File '#{file_name}'" }
402
409
 
410
+ storage_id = watch_folder.definition['upload_to_storage_id']
411
+
412
+ unless storage_id
413
+ logger.warn { "Skipping processing of file because of missing storage ID." }
414
+ return { success: false, message: 'Missing storage ID.' }
415
+ end
416
+
417
+ quarantine_directory_path = definition['quarantine_directory_path']
418
+ completed_directory_path = definition['completed_directory_path']
419
+ watch_folder_upload_args = definition['upload_args']
420
+
421
+ # full_file_path = File.join(watch_folder.path, file.path)
422
+ full_file_path = file.path
423
+
424
+ upload_args = {
425
+ file_path: full_file_path,
426
+ storage_id: storage_id
427
+ }
428
+ upload_args.merge!(watch_folder_upload_args) if watch_folder_upload_args.is_a?(Hash)
429
+
430
+ logger.debug { "Executing Upload. #{upload_args}" }
431
+ _response = agent.upload(upload_args)
432
+ _response = { success: _response } if _response == true || _response == false
433
+
434
+ if _response[:success]
435
+ if completed_directory_path
436
+ if Dir.exist?(completed_directory_path)
437
+ logger.debug { "Moving '#{full_file_path}' to completed directory path '#{completed_directory_path}'" }
438
+ FileUtils.mv full_file_path, completed_directory_path
439
+ else
440
+ logger.warn { "Completed directory path not found: '#{completed_directory_path}'" }
441
+ add_to_ignore(file)
442
+ end
443
+ else
444
+ FileUtils.rm full_file_path
445
+ end
446
+ else
447
+ if quarantine_directory_path && Dir.exist?(quarantine_directory_path)
448
+ logger.warn { "Moving '#{full_file_path}' to quarantine directory path '#{quarantine_directory_path}'" }
449
+ FileUtils.mv full_file_path, quarantine_directory_path
450
+ else
451
+ logger.warn { "Adding '#{full_file_path}' to the temporary ignore list." }
452
+ add_to_ignore(file)
453
+ end
454
+ end
455
+
456
+ file.processed = true
457
+
458
+ _response
459
+ rescue => e
460
+ file.exception = e
461
+ raise e
462
+ ensure
463
+ file.processing = false
403
464
  end
404
465
 
405
466
  # Converts hash keys to symbols
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cantemo-portal-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Whitson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-11 00:00:00.000000000 Z
11
+ date: 2019-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asperalm
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.6.2
75
+ version: 1.6.4
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.6.2
82
+ version: 1.6.4
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement