Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEEPBLUE-397 - Shift Globus to DataDen #1588

Merged
merged 1 commit into from
Feb 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions app/controllers/globus_dashboard_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ def globus_copy_complete?( concern_id )
::Deepblue::GlobusService.globus_copy_complete?( concern_id )
end

def self.globus_data_den_files_available?( concern_id )
::Deepblue::GlobusService.globus_data_den_files_available?( concern_id )
end

def globus_copy_job( concern_id, user_email: nil )
::GlobusCopyJob.perform_later( concern_id: concern_id,
user_email: user_email,
Expand Down Expand Up @@ -146,6 +150,14 @@ def globus_enabled?
::Deepblue::GlobusIntegrationService.globus_enabled
end

def globus_use_data_den?
::Deepblue::GlobusIntegrationService.globus_use_data_den
end

def globus_always_available?
::Deepblue::GlobusIntegrationService.globus_always_available
end

def globus_error_file_exists?( concern_id )
::Deepblue::GlobusService.globus_error_file_exists? concern_id
end
Expand Down
12 changes: 12 additions & 0 deletions app/controllers/hyrax/data_sets_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,18 @@ def globus_enabled?
::Deepblue::GlobusIntegrationService.globus_enabled
end

def globus_export?
::Deepblue::GlobusIntegrationService.globus_export
end

def globus_use_data_den?
::Deepblue::GlobusIntegrationService.globus_use_data_den
end

def globus_always_available?
::Deepblue::GlobusIntegrationService.globus_always_available
end

def globus_last_error_msg
::Deepblue::GlobusService.globus_error_file_contents curation_concern.id
end
Expand Down
1 change: 1 addition & 0 deletions app/helpers/deepblue/system_monitor_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ def self.space_dbd

def self.space_globus
return "N/A" unless ::Deepblue::GlobusIntegrationService.globus_enabled
return "N/A" unless ::Deepblue::GlobusIntegrationService.globus_export
return "N/A" if ::Deepblue::GlobusIntegrationService.globus_dir.blank?
return "N/A" unless Dir.exist? ::Deepblue::GlobusIntegrationService.globus_dir
space( dir: ::Deepblue::GlobusIntegrationService.globus_dir )
Expand Down
2 changes: 1 addition & 1 deletion app/jobs/doi_pending_report_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class DoiPendingReportJob < ::Deepblue::DeepblueJob

def perform( *args )
initialize_options_from( args: args, debug_verbose: ::Deepblue::JobTaskHelper.doi_pending_report_job_debug_verbose )
log( event: "globus errors report job", hostname_allowed: hostname_allowed? )
log( event: "doi pending report job", hostname_allowed: hostname_allowed? )
return job_finished unless by_request_only? && from_dashboard.present?
return job_finished unless hostname_allowed?
reporter = ::Deepblue::DoiPendingReporter.new( msg_handler: msg_handler,
Expand Down
1 change: 1 addition & 0 deletions app/jobs/globus_clean_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class GlobusCleanJob < GlobusJob
# @param [boolean, false] clean_download
# @param [boolean, false] start_globus_copy_after_clean
def perform( concern_id, log_prefix: "Globus: ", clean_download: false, start_globus_copy_after_clean: false )
return unless globus_export_enabled?
@globus_concern_id = concern_id
@globus_log_prefix = log_prefix
@globus_lock_file = nil
Expand Down
1 change: 1 addition & 0 deletions app/jobs/globus_copy_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ def perform( concern_id:,
delay_per_file_seconds: ::Deepblue::GlobusIntegrationService.globus_default_delay_per_file_seconds_on_copy,
user_email: nil )

return unless globus_export_enabled?
globus_job_perform( concern_id: concern_id, email: user_email, log_prefix: "#{log_prefix}globus_copy_job" ) do
::Deepblue::LoggingHelper.debug "#{@globus_log_prefix} begin copy" unless @globus_job_quiet
GlobusJob.error_file_delete @globus_concern_id
Expand Down
2 changes: 1 addition & 1 deletion app/jobs/globus_era.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def self.initialize_class_vars
@@c_era_begin_timestamp = Time.now.to_s
@@c_era_file_base = ".globus_era.#{Socket.gethostname}"
# log "hostname=#{Socket.gethostname}" if @@c_era_verbose
if ::Deepblue::GlobusIntegrationService.globus_enabled
if ::Deepblue::GlobusIntegrationService.globus_export
log "GlobusEra initializing at #{@@c_era_begin_timestamp}" if @@c_era_verbose
@@c_era_file = ::Deepblue::GlobusIntegrationService.globus_prep_dir.join @@c_era_file_base
log "GlobusEra era file: #{@@c_era_file} -- #{@@c_era_file.class}" if @@c_era_verbose
Expand Down
1 change: 1 addition & 0 deletions app/jobs/globus_errors_report_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class GlobusErrorsReportJob < ::Deepblue::DeepblueJob
queue_as :scheduler

def perform( *args )
return unless ::Deepblue::GlobusService.globus_export?
initialize_options_from( args: args, debug_verbose: ::Deepblue::JobTaskHelper.globus_errors_report_job_debug_verbose )
log( event: "globus errors report job", hostname_allowed: hostname_allowed? )
return job_finished unless by_request_only? && from_dashboard.present?
Expand Down
7 changes: 6 additions & 1 deletion app/jobs/globus_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,14 @@ def self.era_token_time
Time.parse( timestamp )
end

def globus_export_enabled?
::Deepblue::GlobusIntegrationService.globus_export
end

# @param [String] concern_id
# @param [String, "Globus: "] log_prefix
def perform( concern_id, log_prefix: "Globus: ", globus_job_quiet: true )
return unless globus_export_enabled?
@globus_concern_id = concern_id
@globus_log_prefix = log_prefix
@globus_lock_file = GlobusJob.lock_file concern_id
Expand Down Expand Up @@ -215,11 +220,11 @@ def globus_file_lock( file, mode: File::LOCK_EX )
end

def globus_job_perform( concern_id: '', email: nil, log_prefix: 'Globus: ', quiet: false ) # , &globus_block )
return unless ::Deepblue::GlobusIntegrationService.globus_enabled
@globus_concern_id = concern_id
@globus_log_prefix = log_prefix
@globus_lock_file = nil
@globus_job_quiet = quiet
return unless ::Deepblue::GlobusIntegrationService.globus_enabled
begin
if globus_job_complete?
globus_job_perform_already_complete( email: email )
Expand Down
1 change: 1 addition & 0 deletions app/jobs/globus_restart_all_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ class GlobusRestartAllJob < GlobusJob

# @param [String, "Globus: "] log_prefix
def perform( log_prefix: "Globus: ", quiet: false )
return unless globus_export_enabled?
::Deepblue::LoggingHelper.debug "#{log_prefix}globus_restart_all_job starting..." unless quiet
globus_job_perform( concern_id: "Restart_All", log_prefix: "#{log_prefix}globus_restart_all_job", quiet: quiet ) do
::Deepblue::LoggingHelper.debug "#{@globus_log_prefix} begin restart all" unless @globus_job_quiet
Expand Down
1 change: 1 addition & 0 deletions app/jobs/globus_restart_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class GlobusRestartJob < GlobusJob
# @param [String, "Globus: "] log_prefix
# @param [boolean, false] force_restart
def perform( concern_id, log_prefix: "Globus: ", force_restart: false, user_email: nil )
return unless globus_export_enabled?
if force_restart
@globus_log_prefix = "#{log_prefix}globus_restart_job"
@globus_lock_file = GlobusJob.lock_file concern_id
Expand Down
1 change: 1 addition & 0 deletions app/jobs/globus_status_report_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class GlobusStatusReportJob < ::Deepblue::DeepblueJob
queue_as :scheduler

def perform( *args )
return unless ::Deepblue::GlobusService.globus_export?
msg_handler.debug_verbose = ::Deepblue::JobTaskHelper.globus_status_report_job_debug_verbose
initialize_options_from( args: args, debug_verbose: ::Deepblue::JobTaskHelper.globus_status_report_job_debug_verbose )
log( event: "globus status report job", hostname_allowed: hostname_allowed? )
Expand Down
4 changes: 3 additions & 1 deletion app/presenters/globus_dashboard_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ class GlobusDashboardPresenter
delegate :globus_prep_dir_du, to: :controller
delegate :globus_prep_tmp_dir_du, to: :controller
delegate :globus_enabled?, to: :controller
delegate :globus_use_data_den?, to: :controller
delegate :globus_always_available?, to: :controller
delegate :globus_error_file_exists?, to: :controller
delegate :globus_external_url, to: :controller
delegate :globus_files_available?, to: :controller
Expand Down Expand Up @@ -57,4 +59,4 @@ def work( id: nil, work: nil )
return work
end

end
end
9 changes: 5 additions & 4 deletions app/presenters/hyrax/data_set_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@ class DataSetPresenter < DeepbluePresenter
:work_url,
:zip_download_enabled?, to: :controller

delegate :globus_enabled?, to: :controller
delegate :globus_export?, to: :controller
delegate :globus_use_data_den?, to: :controller
delegate :globus_always_available?, to: :controller

# def initialize( solr_document, current_ability, request = nil )
# ::Deepblue::LoggingHelper.bold_debug [ Deepblue::LoggingHelper.here,
# Deepblue::LoggingHelper.called_from,
Expand Down Expand Up @@ -214,10 +219,6 @@ def globus_download_enabled?
::Deepblue::GlobusIntegrationService.globus_enabled
end

def globus_enabled?
::Deepblue::GlobusIntegrationService.globus_enabled
end

def globus_external_url
concern_id = @solr_document.id
::Deepblue::GlobusService.globus_external_url concern_id
Expand Down
6 changes: 5 additions & 1 deletion app/services/deepblue/globus_integration_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ def self.setup
mattr_accessor :globus_dashboard_controller_debug_verbose, default: false
mattr_accessor :globus_dashboard_presenter_debug_verbose, default: false

mattr_accessor :globus_use_data_den, default: true # the new globus world as of 2025
mattr_accessor :globus_enabled, default: false
mattr_accessor :globus_always_available, default: true # set to true to force globus to show in ui
mattr_accessor :globus_export, default: false # old globus export mechanism

mattr_accessor :globus_after_copy_job_ui_delay_seconds, default: 3
mattr_accessor :globus_base_file_name, default: "DeepBlueData_"
mattr_accessor :globus_base_url,
Expand All @@ -46,7 +51,6 @@ def self.setup
mattr_accessor :globus_dir_modifier, default: ''
mattr_accessor :globus_download_dir,
default: File.join( globus_dir, ::Deepblue::InitializationConstants::DOWNLOAD )
mattr_accessor :globus_enabled, default: false
mattr_accessor :globus_era_timestamp
mattr_accessor :globus_era_token
mattr_accessor :globus_prep_dir,
Expand Down
28 changes: 25 additions & 3 deletions app/services/deepblue/globus_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,19 @@ def self.get_du2( paths: )
end

def self.globus_copy_complete?( id )
return false unless ::Deepblue::GlobusIntegrationService.globus_enabled
return false unless globus_enabled?
return true unless globus_export?
dir = ::Deepblue::GlobusIntegrationService.globus_download_dir
dir = dir.join globus_files_target_file_name( id )
Dir.exist? dir
end

def self.globus_data_den_files_available?( id )
return false unless ::Deepblue::GlobusIntegrationService.globus_use_data_den
# TODO: use id to figure out path, and check for existence
return false
end

def self.globus_download_dir_du( concern_id: )
dir = globus_target_download_dir( concern_id )
rv = get_du( path: dir ).first
Expand All @@ -49,6 +56,7 @@ def self.globus_error_file_contents( id )
end

def self.globus_error_file_exists?( id, write_error_to_log: false, log_prefix: '', quiet: true )
return false if globus_use_data_den?
error_file = globus_error_file( id )
error_file_exists = false
if File.exist? error_file
Expand All @@ -70,12 +78,26 @@ def self.globus_external_url( id )
"#{globus_base_url}#{globus_files_target_file_name(id)}%2F"
end

def self.globus_enabled?
return ::Deepblue::GlobusIntegrationService.globus_enabled
end

def self.globus_export?
return ::Deepblue::GlobusIntegrationService.globus_export
end

def self.globus_use_data_den?
return ::Deepblue::GlobusIntegrationService.globus_use_data_den
end

def self.globus_files_available?( concern_id )
return false unless ::Deepblue::GlobusIntegrationService.globus_enabled
globus_copy_complete? concern_id
return false unless globus_enabled?
return globus_copy_complete?( concern_id ) if globus_export?
return globus_data_den_files_available?( concern_id )
end

def self.globus_files_prepping?( id )
return false unless globus_export?
rv = !globus_copy_complete?( id ) && globus_locked?( id )
rv
end
Expand Down
4 changes: 4 additions & 0 deletions app/views/hyrax/base/_show_actions.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,12 @@
</a>
</p>
<% elsif !@presenter.globus_files_prepping? %>
<% if @presenter.globus_export? %>
<br/>
<%= submit_tag(t('simple_form.actions.data_set.globus_download'),
class: 'btn btn-primary', disabled: @presenter.does_work_have_no_files) %>
<br/>
<% end %>
<%= t('simple_form.hints.data_set.globus_is_for_large_datasets', larger_than: ::Deepblue::GlobusIntegrationService.globus_best_used_gt_size_str ) %> &nbsp;
<a href="<%= main_app.static_path( doc: 'globus-help' ) %>" target="_blank">
<%= t('simple_form.hints.data_set.globus_help') %>
Expand All @@ -104,6 +106,7 @@
<% end %>
<% end %>
<% if @presenter.globus_files_prepping? %>
<% if @presenter.globus_export? %>
<%= form_tag( main_app.globus_download_add_email_hyrax_data_set_path(@presenter.id), method: 'post' ) do %>
<br/>
<%= hidden_field_tag('data_set[nop]') %>
Expand All @@ -115,6 +118,7 @@
<%= t('simple_form.hints.data_set.globus_help') %>
</a>
<% end %>
<% end %>
<% end %>
<% end %>
<% end %>
Expand Down
4 changes: 3 additions & 1 deletion app/views/hyrax/dashboard/show_globus_dashboard.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
<h2 class="title-header"><%= t('hyrax.dashboard.globus.heading.status') %></h2>
<ul>
<li>Globus enabled: <%= ::Deepblue::GlobusIntegrationService.globus_enabled %></li>
<li>Globus use data den: <%= ::Deepblue::GlobusIntegrationService.globus_use_data_den %></li>
<li>Globus export: <%= ::Deepblue::GlobusIntegrationService.globus_export %></li>
<li>Globus dir: <code><%= ::Deepblue::GlobusIntegrationService.globus_dir %></code></li>
<li>Globus dowload dir: <code><%= ::Deepblue::GlobusIntegrationService.globus_download_dir %></code></li>
<li>Globus prep dir: <code><%= ::Deepblue::GlobusIntegrationService.globus_prep_dir %></code></li>
Expand Down Expand Up @@ -107,4 +109,4 @@
<% end %>
</div>

<br/><br/>
<br/><br/>
4 changes: 4 additions & 0 deletions app/views/hyrax/file_sets/_actions.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -103,18 +103,22 @@
<% end %>
<br/>
<% elsif !@presenter.globus_files_prepping? %>
<% if @presenter.globus_export? %>
<br/>
<%= submit_tag(t('simple_form.actions.data_set.globus_download'), class: 'btn btn-primary') %>
<br/>
<% end %>
<% end %>
<% end %>
<% if @presenter.globus_files_prepping? %>
<% if @presenter.globus_export? %>
<%= form_tag( main_app.globus_download_add_email_hyrax_data_set_path(@presenter.id), method: 'post' ) do %>
<br/>
<%= hidden_field_tag('data_set[nop]') %>
<%= submit_tag(t('simple_form.actions.data_set.globus_download_add_email'), class: 'btn btn-primary') %>
<br/>
<% end %>
<% end %>
<% end %>
<% end %>

Expand Down
Loading