Class: Dor::CleanupService

Inherits:
Object
  • Object
show all
Defined in:
lib/dor/services/cleanup_service.rb

Overview

Remove all traces of the object’s data files from the workspace and export areas

Class Method Summary collapse

Class Method Details

.cleanup(dor_item) ⇒ void

This method returns an undefined value.

Returns Delete all workspace and export entities for the druid.

Parameters:

  • dor_item (LyberCore::Robots::WorkItem)

    The DOR work item whose workspace should be cleaned up



10
11
12
13
# File 'lib/dor/services/cleanup_service.rb', line 10

def self.cleanup(dor_item)
  druid = dor_item.respond_to?(:druid) ? dor_item.druid : dor_item.id
  cleanup_by_druid druid
end

.cleanup_by_druid(druid) ⇒ Object



15
16
17
18
19
# File 'lib/dor/services/cleanup_service.rb', line 15

def self.cleanup_by_druid(druid)
  cleanup_workspace_content(druid, Config.cleanup.local_workspace_root)
  cleanup_workspace_content(druid, Config.cleanup.local_assembly_root)
  cleanup_export(druid)
end

.cleanup_export(druid) ⇒ void

This method returns an undefined value.

Returns remove copy of the data that was exported to preservation core.

Parameters:

  • druid (String)

    The identifier for the object whose data is to be removed



30
31
32
33
34
35
36
# File 'lib/dor/services/cleanup_service.rb', line 30

def self.cleanup_export(druid)
  id = druid.split(':').last
  bag_dir = File.join(Config.cleanup.local_export_home, id)
  remove_branch(bag_dir)
  tarfile = "#{bag_dir}.tar"
  remove_branch(tarfile)
end

.cleanup_purl_doc_cache(druid) ⇒ Object



67
68
69
# File 'lib/dor/services/cleanup_service.rb', line 67

def self.cleanup_purl_doc_cache(druid)
  DruidTools::PurlDruid.new(druid, Config.stacks.local_document_cache_root).prune!
end

.cleanup_stacks(druid) ⇒ Object



63
64
65
# File 'lib/dor/services/cleanup_service.rb', line 63

def self.cleanup_stacks(druid)
  DruidTools::StacksDruid.new(druid, Config.stacks.local_stacks_root).prune!
end

.cleanup_workspace_content(druid, base) ⇒ void

This method returns an undefined value.

Returns remove the object’s data files from the workspace area.

Parameters:

  • druid (String)

    The identifier for the object whose data is to be removed

  • base (String)

    The base directory to delete from



24
25
26
# File 'lib/dor/services/cleanup_service.rb', line 24

def self.cleanup_workspace_content(druid, base)
  DruidTools::Druid.new(druid, base).prune!
end

.delete_from_dor(pid) ⇒ Object

Delete an object from DOR.

Parameters:

  • pid (string)

    the druid



81
82
83
84
85
# File 'lib/dor/services/cleanup_service.rb', line 81

def self.delete_from_dor(pid)
  Dor::Config.fedora.client["objects/#{pid}"].delete
  Dor::SearchService.solr.delete_by_id(pid)
  Dor::SearchService.solr.commit
end

.nuke!(druid) ⇒ Object

Tries to remove any exsitence of the object in our systems

Does the following:
- Removes item from Dor/Fedora/Solr
- Removes content from dor workspace
- Removes content from assembly workspace
- Removes content from sdr export area
- Removes content from stacks
- Removes content from purl
- Removes active workflows

Parameters:

  • druid (String)

    id of the object you wish to remove



55
56
57
58
59
60
61
# File 'lib/dor/services/cleanup_service.rb', line 55

def self.nuke!(druid)
  cleanup_by_druid druid
  cleanup_stacks druid
  cleanup_purl_doc_cache druid
  remove_active_workflows druid
  delete_from_dor druid
end

.remove_active_workflows(druid) ⇒ Object



71
72
73
74
75
76
# File 'lib/dor/services/cleanup_service.rb', line 71

def self.remove_active_workflows(druid)
  %w(dor sdr).each do |repo|
    dor_wfs = Dor::Config.workflow.client.get_workflows(druid, repo)
    dor_wfs.each { |wf| Dor::Config.workflow.client.delete_workflow(repo, druid, wf) }
  end
end

.remove_branch(pathname) ⇒ void

This method returns an undefined value.

Returns Remove the specified directory and all its children.

Parameters:

  • pathname (Pathname, String)

    The full path of the branch to be removed



40
41
42
43
# File 'lib/dor/services/cleanup_service.rb', line 40

def self.remove_branch(pathname)
  pathname = Pathname(pathname) if pathname.instance_of? String
  pathname.rmtree if pathname.exist?
end