11# service containing business logic for managing Study registrations as datasets in DUOS
22class DuosRegistrationService
3+ extend Loggable
34
45 # pointer to DUOS UI for auto-completing URLs
56 #
@@ -14,7 +15,11 @@ def self.duos_ui_url
1415 # * *returns*
1516 # - (DuosClient)
1617 def self . client
17- @client ||= DuosClient . new
18+ duos_client = @client ||= DuosClient . new
19+ if duos_client . access_token_expired?
20+ duos_client . refresh_access_token!
21+ end
22+ duos_client
1823 end
1924
2025 # determine if study is eligible for registering as a dataset in DUOS
@@ -80,13 +85,16 @@ def self.register_study(study)
8085 dataset = client . create_dataset ( study )
8186 ids = client . identifiers_from_dataset ( dataset )
8287 study . update ( **ids )
83- Rails . logger . info "Registered #{ study . accession } in DUOS as #{ ids } "
88+ log_message "Registered #{ study . accession } in DUOS as #{ ids } "
8489 dataset
8590 rescue ArgumentError => e
86- Rails . logger . error "Cannot validate #{ study . accession } for DUOS: #{ e . message } "
91+ log_message "Cannot validate #{ study . accession } for DUOS: #{ e . message } " , level : :error
92+ nil
8793 rescue Faraday ::Error => e
88- Rails . logger . error "Unable to register #{ study . accession } in DUOS: #{ e . message } (#{ e . try ( :response_body ) } )"
94+ log_message "Unable to register #{ study . accession } in DUOS: #{ e . message } (#{ e . try ( :response_body ) } )" ,
95+ level : :error
8996 ErrorTracker . report_exception ( e , client . issuer , { study : } )
97+ SingleCellMailer . duos_error ( study , e , 'register' ) . deliver_now
9098 nil
9199 end
92100 end
@@ -107,11 +115,12 @@ def self.redact_study(study)
107115 study . update ( duos_dataset_id : nil , duos_study_id : nil )
108116 end
109117
110- Rails . logger . info "Redacted #{ study . accession } in DUOS"
118+ log_message "Redacted #{ study . accession } in DUOS"
111119 true
112120 rescue Faraday ::Error => e
113- Rails . logger . error "Unable to redact #{ study . accession } in DUOS: (#{ e . message } ) #{ e . try ( :response_body ) } "
121+ log_message "Unable to redact #{ study . accession } in DUOS: (#{ e . message } ) #{ e . try ( :response_body ) } " , level : :error
114122 ErrorTracker . report_exception ( e , client . issuer , { study : } )
123+ SingleCellMailer . duos_error ( study , e , 'redact' ) . deliver_now
115124 false
116125 end
117126end
0 commit comments