cantemo-portal-agent 1.3.0 → 1.3.1

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