pushmi_pullyu 1.0.3 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,7 @@ require 'optparse'
4
4
  require 'rollbar'
5
5
  require 'singleton'
6
6
  require 'yaml'
7
+ require 'json'
7
8
 
8
9
  # CLI runner
9
10
  class PushmiPullyu::CLI
@@ -48,7 +49,6 @@ class PushmiPullyu::CLI
48
49
  setup_signal_traps
49
50
 
50
51
  setup_log
51
- setup_db_connection
52
52
  print_banner
53
53
 
54
54
  run_tick_loop
@@ -60,6 +60,19 @@ class PushmiPullyu::CLI
60
60
  Rollbar.configure do |config|
61
61
  config.enabled = false unless options[:rollbar][:token].present?
62
62
  config.access_token = options[:rollbar][:token]
63
+ config.use_exception_level_filters_default = true
64
+ config.exception_level_filters['IOError'] = 'ignore'
65
+ # add a filter after Rollbar has built the error payload but before it is delivered to the API,
66
+ # in order to strip sensitive information out of certain error messages
67
+ exception_message_transformer = proc do |payload|
68
+ clean_message = payload[:exception][:message].sub(/http:\/\/.+:.+@(.+)\/aip\/v1\/(.*)/,
69
+ "http://\1/aip/v1/\2")
70
+ payload[:exception][:message] = clean_message
71
+ payload[:message] = clean_message
72
+ end
73
+
74
+ config.transform << exception_message_transformer
75
+
63
76
  if options[:rollbar][:proxy_host].present?
64
77
  config.proxy = {}
65
78
  config.proxy[:host] = options[:rollbar][:proxy_host]
@@ -169,26 +182,29 @@ class PushmiPullyu::CLI
169
182
  end
170
183
 
171
184
  def run_preservation_cycle
172
- item = queue.wait_next_item
173
- return unless item.present?
185
+ entity_json = JSON.parse(queue.wait_next_item)
186
+ entity = {
187
+ type: entity_json['type'],
188
+ uuid: entity_json['uuid']
189
+ }
190
+ return unless entity[:type].present? && entity[:uuid].present?
174
191
 
175
192
  # add additional information about the error context to errors that occur while processing this item.
176
- Rollbar.scoped(noid: item) do
177
- begin
178
- # Download AIP from Fedora, bag and tar AIP directory and cleanup after block code
179
- PushmiPullyu::AIP.create(item) do |aip_filename, aip_directory|
180
- # Push tarred AIP to swift API
181
- deposited_file = swift.deposit_file(aip_filename, options[:swift][:container])
182
- # Log successful preservation event to the log files
183
- PushmiPullyu::Logging.log_preservation_event(deposited_file, aip_directory)
184
- end
185
- # rubocop:disable Lint/RescueException
186
- rescue Exception => e
187
- Rollbar.error(e)
188
- logger.error(e)
189
- # TODO: we could re-raise here and let the daemon die on any preservation error, or just log the issue and
190
- # move on to the next item.
193
+ Rollbar.scoped(entity_uuid: entity[:uuid]) do
194
+ # Download AIP from Jupiter, bag and tar AIP directory and cleanup after
195
+ # block code
196
+ PushmiPullyu::AIP.create(entity) do |aip_filename, aip_directory|
197
+ # Push tarred AIP to swift API
198
+ deposited_file = swift.deposit_file(aip_filename, options[:swift][:container])
199
+ # Log successful preservation event to the log files
200
+ PushmiPullyu::Logging.log_preservation_event(deposited_file, aip_directory)
191
201
  end
202
+ # rubocop:disable Lint/RescueException
203
+ rescue Exception => e
204
+ Rollbar.error(e)
205
+ logger.error(e)
206
+ # TODO: we could re-raise here and let the daemon die on any preservation error, or just log the issue and
207
+ # move on to the next item.
192
208
  # rubocop:enable Lint/RescueException
193
209
  end
194
210
  end
@@ -264,12 +280,4 @@ class PushmiPullyu::CLI
264
280
  end
265
281
  end
266
282
 
267
- def setup_db_connection
268
- ActiveRecord::Base.establish_connection(database_configuration)
269
- end
270
-
271
- def database_configuration
272
- PushmiPullyu.options[:database][:url]
273
- end
274
-
275
283
  end
@@ -48,7 +48,7 @@ module PushmiPullyu::Logging
48
48
 
49
49
  message = "#{deposited_file.name} was successfully deposited into Swift Storage!\n"\
50
50
  "Here are the details of this preservation event:\n"\
51
- "\tNOID: '#{deposited_file.name}'\n"\
51
+ "\tUUID: '#{deposited_file.name}'\n"\
52
52
  "\tTimestamp of Completion: '#{deposited_file.last_modified}'\n"\
53
53
  "\tAIP Checksum: '#{deposited_file.etag}'\n"\
54
54
  "\tMetadata: #{deposited_file.metadata}\n"\
@@ -63,6 +63,7 @@ class PushmiPullyu::PreservationQueue
63
63
  while PushmiPullyu.continue_polling?
64
64
  element = next_item
65
65
  return element if element.present?
66
+
66
67
  sleep @poll_interval
67
68
  end
68
69
  end
@@ -50,7 +50,7 @@ class PushmiPullyu::SwiftDepositer
50
50
  else
51
51
  # for creating new: construct hash with symbols as keys, add metadata as a hash within the header hash
52
52
  headers = { etag: checksum,
53
- content_type: 'application/x-tar',
53
+ content_type: 'application/x-tar',
54
54
  metadata: metadata }
55
55
  deposited_file = era_container.create_object(file_base_name, headers, File.open(file_name))
56
56
  end
@@ -1,3 +1,3 @@
1
1
  module PushmiPullyu
2
- VERSION = '1.0.3'.freeze
2
+ VERSION = '2.0.1'.freeze
3
3
  end
@@ -5,10 +5,10 @@ require 'pushmi_pullyu/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'pushmi_pullyu'
7
7
  spec.version = PushmiPullyu::VERSION
8
- spec.authors = ['Shane Murnaghan']
9
- spec.email = ['murnagha@ualberta.ca']
8
+ spec.authors = ['Shane Murnaghan', 'Omar Rodriguez-Arenas']
9
+ spec.email = ['murnagha@ualberta.ca', 'orodrigu@ualberta.ca']
10
10
 
11
- spec.summary = 'Ruby application to manage flow of content from Fedora into Swift for preservation'
11
+ spec.summary = 'Ruby application to manage flow of content from Jupiter into Swift for preservation'
12
12
  spec.homepage = 'https://github.com/ualbertalib/pushmi_pullyu'
13
13
  spec.license = 'MIT'
14
14
 
@@ -19,31 +19,32 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ['lib']
21
21
 
22
- spec.required_ruby_version = '>= 2.3.1'
22
+ spec.required_ruby_version = '>= 2.5'
23
23
 
24
- spec.add_runtime_dependency 'activerecord', '>= 5.1.5', '< 5.3.0'
25
- spec.add_runtime_dependency 'activesupport', '~> 5.0'
24
+ spec.add_runtime_dependency 'activesupport', '>= 5', '< 7'
26
25
  spec.add_runtime_dependency 'bagit', '~> 0.4'
27
26
  spec.add_runtime_dependency 'connection_pool', '~> 2.2'
28
27
  spec.add_runtime_dependency 'daemons', '~> 1.2', '>= 1.2.4'
29
- spec.add_runtime_dependency 'minitar', '~> 0.6'
28
+ spec.add_runtime_dependency 'minitar', '~> 0.7'
30
29
  spec.add_runtime_dependency 'openstack', '~> 3.3', '>= 3.3.10'
31
- spec.add_runtime_dependency 'pg', '~> 1.0.0'
30
+ spec.add_runtime_dependency 'pg', '>= 1.0', '< 1.2'
32
31
  spec.add_runtime_dependency 'rdf', '>= 1.99', '< 4.0'
33
32
  spec.add_runtime_dependency 'rdf-n3', '>= 1.99', '< 4.0'
34
33
  spec.add_runtime_dependency 'redis', '>= 3.3', '< 5.0'
35
34
  spec.add_runtime_dependency 'rest-client', '>= 1.8', '< 3.0'
36
- spec.add_runtime_dependency 'rollbar', '~> 2.14'
35
+ spec.add_runtime_dependency 'rollbar', '>= 2.18', '< 4.0'
36
+ spec.add_runtime_dependency 'uuid', '~> 2.3.9'
37
37
 
38
- spec.add_development_dependency 'bundler', '~> 1.14'
38
+ spec.add_development_dependency 'bundler', '~> 2.0'
39
39
  spec.add_development_dependency 'coveralls', '~> 0.8'
40
- spec.add_development_dependency 'danger', '~> 5.2'
40
+ spec.add_development_dependency 'danger', '~> 8.0'
41
41
  spec.add_development_dependency 'pry', '~> 0.10', '>= 0.10.4'
42
- spec.add_development_dependency 'rake', '~> 12.0'
42
+ spec.add_development_dependency 'pry-byebug', '~> 3.6'
43
+ spec.add_development_dependency 'rake', '~> 13.0'
43
44
  spec.add_development_dependency 'rspec', '~> 3.0'
44
45
  spec.add_development_dependency 'rubocop', '~> 0.51'
45
46
  spec.add_development_dependency 'rubocop-rspec', '~> 1.10'
46
47
  spec.add_development_dependency 'timecop', '~> 0.8'
47
- spec.add_development_dependency 'vcr', '~> 4.0'
48
+ spec.add_development_dependency 'vcr', '~> 5.0'
48
49
  spec.add_development_dependency 'webmock', '~> 3.3'
49
50
  end
metadata CHANGED
@@ -1,49 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pushmi_pullyu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Murnaghan
8
+ - Omar Rodriguez-Arenas
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2018-08-23 00:00:00.000000000 Z
12
+ date: 2021-02-02 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: activerecord
15
+ name: activesupport
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - ">="
18
19
  - !ruby/object:Gem::Version
19
- version: 5.1.5
20
+ version: '5'
20
21
  - - "<"
21
22
  - !ruby/object:Gem::Version
22
- version: 5.3.0
23
+ version: '7'
23
24
  type: :runtime
24
25
  prerelease: false
25
26
  version_requirements: !ruby/object:Gem::Requirement
26
27
  requirements:
27
28
  - - ">="
28
29
  - !ruby/object:Gem::Version
29
- version: 5.1.5
30
+ version: '5'
30
31
  - - "<"
31
32
  - !ruby/object:Gem::Version
32
- version: 5.3.0
33
- - !ruby/object:Gem::Dependency
34
- name: activesupport
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '5.0'
40
- type: :runtime
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '5.0'
33
+ version: '7'
47
34
  - !ruby/object:Gem::Dependency
48
35
  name: bagit
49
36
  requirement: !ruby/object:Gem::Requirement
@@ -98,14 +85,14 @@ dependencies:
98
85
  requirements:
99
86
  - - "~>"
100
87
  - !ruby/object:Gem::Version
101
- version: '0.6'
88
+ version: '0.7'
102
89
  type: :runtime
103
90
  prerelease: false
104
91
  version_requirements: !ruby/object:Gem::Requirement
105
92
  requirements:
106
93
  - - "~>"
107
94
  - !ruby/object:Gem::Version
108
- version: '0.6'
95
+ version: '0.7'
109
96
  - !ruby/object:Gem::Dependency
110
97
  name: openstack
111
98
  requirement: !ruby/object:Gem::Requirement
@@ -130,16 +117,22 @@ dependencies:
130
117
  name: pg
131
118
  requirement: !ruby/object:Gem::Requirement
132
119
  requirements:
133
- - - "~>"
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '1.0'
123
+ - - "<"
134
124
  - !ruby/object:Gem::Version
135
- version: 1.0.0
125
+ version: '1.2'
136
126
  type: :runtime
137
127
  prerelease: false
138
128
  version_requirements: !ruby/object:Gem::Requirement
139
129
  requirements:
140
- - - "~>"
130
+ - - ">="
141
131
  - !ruby/object:Gem::Version
142
- version: 1.0.0
132
+ version: '1.0'
133
+ - - "<"
134
+ - !ruby/object:Gem::Version
135
+ version: '1.2'
143
136
  - !ruby/object:Gem::Dependency
144
137
  name: rdf
145
138
  requirement: !ruby/object:Gem::Requirement
@@ -222,32 +215,52 @@ dependencies:
222
215
  version: '3.0'
223
216
  - !ruby/object:Gem::Dependency
224
217
  name: rollbar
218
+ requirement: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '2.18'
223
+ - - "<"
224
+ - !ruby/object:Gem::Version
225
+ version: '4.0'
226
+ type: :runtime
227
+ prerelease: false
228
+ version_requirements: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: '2.18'
233
+ - - "<"
234
+ - !ruby/object:Gem::Version
235
+ version: '4.0'
236
+ - !ruby/object:Gem::Dependency
237
+ name: uuid
225
238
  requirement: !ruby/object:Gem::Requirement
226
239
  requirements:
227
240
  - - "~>"
228
241
  - !ruby/object:Gem::Version
229
- version: '2.14'
242
+ version: 2.3.9
230
243
  type: :runtime
231
244
  prerelease: false
232
245
  version_requirements: !ruby/object:Gem::Requirement
233
246
  requirements:
234
247
  - - "~>"
235
248
  - !ruby/object:Gem::Version
236
- version: '2.14'
249
+ version: 2.3.9
237
250
  - !ruby/object:Gem::Dependency
238
251
  name: bundler
239
252
  requirement: !ruby/object:Gem::Requirement
240
253
  requirements:
241
254
  - - "~>"
242
255
  - !ruby/object:Gem::Version
243
- version: '1.14'
256
+ version: '2.0'
244
257
  type: :development
245
258
  prerelease: false
246
259
  version_requirements: !ruby/object:Gem::Requirement
247
260
  requirements:
248
261
  - - "~>"
249
262
  - !ruby/object:Gem::Version
250
- version: '1.14'
263
+ version: '2.0'
251
264
  - !ruby/object:Gem::Dependency
252
265
  name: coveralls
253
266
  requirement: !ruby/object:Gem::Requirement
@@ -268,14 +281,14 @@ dependencies:
268
281
  requirements:
269
282
  - - "~>"
270
283
  - !ruby/object:Gem::Version
271
- version: '5.2'
284
+ version: '8.0'
272
285
  type: :development
273
286
  prerelease: false
274
287
  version_requirements: !ruby/object:Gem::Requirement
275
288
  requirements:
276
289
  - - "~>"
277
290
  - !ruby/object:Gem::Version
278
- version: '5.2'
291
+ version: '8.0'
279
292
  - !ruby/object:Gem::Dependency
280
293
  name: pry
281
294
  requirement: !ruby/object:Gem::Requirement
@@ -296,20 +309,34 @@ dependencies:
296
309
  - - ">="
297
310
  - !ruby/object:Gem::Version
298
311
  version: 0.10.4
312
+ - !ruby/object:Gem::Dependency
313
+ name: pry-byebug
314
+ requirement: !ruby/object:Gem::Requirement
315
+ requirements:
316
+ - - "~>"
317
+ - !ruby/object:Gem::Version
318
+ version: '3.6'
319
+ type: :development
320
+ prerelease: false
321
+ version_requirements: !ruby/object:Gem::Requirement
322
+ requirements:
323
+ - - "~>"
324
+ - !ruby/object:Gem::Version
325
+ version: '3.6'
299
326
  - !ruby/object:Gem::Dependency
300
327
  name: rake
301
328
  requirement: !ruby/object:Gem::Requirement
302
329
  requirements:
303
330
  - - "~>"
304
331
  - !ruby/object:Gem::Version
305
- version: '12.0'
332
+ version: '13.0'
306
333
  type: :development
307
334
  prerelease: false
308
335
  version_requirements: !ruby/object:Gem::Requirement
309
336
  requirements:
310
337
  - - "~>"
311
338
  - !ruby/object:Gem::Version
312
- version: '12.0'
339
+ version: '13.0'
313
340
  - !ruby/object:Gem::Dependency
314
341
  name: rspec
315
342
  requirement: !ruby/object:Gem::Requirement
@@ -372,14 +399,14 @@ dependencies:
372
399
  requirements:
373
400
  - - "~>"
374
401
  - !ruby/object:Gem::Version
375
- version: '4.0'
402
+ version: '5.0'
376
403
  type: :development
377
404
  prerelease: false
378
405
  version_requirements: !ruby/object:Gem::Requirement
379
406
  requirements:
380
407
  - - "~>"
381
408
  - !ruby/object:Gem::Version
382
- version: '4.0'
409
+ version: '5.0'
383
410
  - !ruby/object:Gem::Dependency
384
411
  name: webmock
385
412
  requirement: !ruby/object:Gem::Requirement
@@ -397,6 +424,7 @@ dependencies:
397
424
  description:
398
425
  email:
399
426
  - murnagha@ualberta.ca
427
+ - orodrigu@ualberta.ca
400
428
  executables:
401
429
  - pushmi_pullyu
402
430
  extensions: []
@@ -404,11 +432,15 @@ extra_rdoc_files: []
404
432
  files:
405
433
  - ".coveralls.yml"
406
434
  - ".editorconfig"
435
+ - ".github/CODEOWNERS"
436
+ - ".github/PULL_REQUEST_TEMPLATE"
437
+ - ".github/workflows/ruby.yml"
407
438
  - ".gitignore"
408
439
  - ".hound.yml"
409
440
  - ".rspec"
410
441
  - ".rubocop.yml"
411
442
  - ".travis.yml"
443
+ - CHANGELOG.md
412
444
  - Dangerfile
413
445
  - Gemfile
414
446
  - LICENSE.txt
@@ -425,10 +457,6 @@ files:
425
457
  - lib/pushmi_pullyu/aip.rb
426
458
  - lib/pushmi_pullyu/aip/creator.rb
427
459
  - lib/pushmi_pullyu/aip/downloader.rb
428
- - lib/pushmi_pullyu/aip/fedora_fetcher.rb
429
- - lib/pushmi_pullyu/aip/file_list_creator.rb
430
- - lib/pushmi_pullyu/aip/owner_email_editor.rb
431
- - lib/pushmi_pullyu/aip/user.rb
432
460
  - lib/pushmi_pullyu/cli.rb
433
461
  - lib/pushmi_pullyu/logging.rb
434
462
  - lib/pushmi_pullyu/preservation_queue.rb
@@ -450,16 +478,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
450
478
  requirements:
451
479
  - - ">="
452
480
  - !ruby/object:Gem::Version
453
- version: 2.3.1
481
+ version: '2.5'
454
482
  required_rubygems_version: !ruby/object:Gem::Requirement
455
483
  requirements:
456
484
  - - ">="
457
485
  - !ruby/object:Gem::Version
458
486
  version: '0'
459
487
  requirements: []
460
- rubyforge_project:
461
- rubygems_version: 2.6.11
488
+ rubygems_version: 3.0.3
462
489
  signing_key:
463
490
  specification_version: 4
464
- summary: Ruby application to manage flow of content from Fedora into Swift for preservation
491
+ summary: Ruby application to manage flow of content from Jupiter into Swift for preservation
465
492
  test_files: []