• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / tigerdata-app / 700664ce-9925-405e-8380-cada5d7c2e48

07 Nov 2025 06:12PM UTC coverage: 91.229% (-0.1%) from 91.357%
700664ce-9925-405e-8380-cada5d7c2e48

Pull #2168

circleci

bess
Refactoring to allow easier integration of the new LUX widget
The lux widget takes the name of the routine to call when the input changes.  Making the url integrated with the page will allow us to more easily call the lookup routine

refs #2083
Pull Request #2168: Refactoring to allow easier integration of the new LUX widget

2850 of 3124 relevant lines covered (91.23%)

538.43 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.83
/app/jobs/file_inventory_job.rb
1
# frozen_string_literal: true
2
class FileInventoryJob < ApplicationJob
4✔
3
  # Create the FileInventoryRequest as soon as the job is created, not when it is performed
4
  before_enqueue do |job|
4✔
5
    project = Project.find(job.arguments.first[:project_id])
4✔
6
    FileInventoryRequest.create(user_id: job.arguments.first[:user_id], project_id: job.arguments.first[:project_id], job_id: @job_id, state: UserRequest::PENDING,
4✔
7
                                request_details: { project_title: project.title })
8
  end
9

10
  # This is required because the before_enqueue does not get called when perform_now is run on a job
11
  # We include both before_perform and before_enqueue so perform_now and perform_later will work as desired
12
  before_perform do |job|
4✔
13
    project = Project.find(job.arguments.first[:project_id])
15✔
14
    inventory_request = FileInventoryRequest.find_by(user_id: job.arguments.first[:user_id], project_id: job.arguments.first[:project_id], job_id: @job_id)
15✔
15
    if inventory_request.blank?
15✔
16
      FileInventoryRequest.create(user_id: job.arguments.first[:user_id], project_id: job.arguments.first[:project_id], job_id: @job_id, state: UserRequest::PENDING,
14✔
17
                                  request_details: { project_title: project.title })
18
    end
19
  end
20

21
  def perform(user_id:, project_id:, mediaflux_session:)
4✔
22
    project = Project.find(project_id)
15✔
23
    raise "Invalid project id #{project_id} for job #{job_id}" if project.nil?
15✔
24
    user = User.find(user_id)
15✔
25
    raise "Invalid user id #{user_id} for job #{job_id}" if user.nil?
14✔
26
    Rails.logger.debug inspect
14✔
27

28
    # set the mediaflux session to the one the user created, do not just utilize the system one
29
    user.mediaflux_from_session({ mediaflux_session: })
14✔
30

31
    # Queries Mediaflux for the file list and saves it to a CSV file.
32
    filename = filename_for_export
14✔
33
    Rails.logger.info "Exporting file list to #{filename} for project #{project_id} (session: #{mediaflux_session})"
14✔
34
    project.file_list_to_file(session_id: mediaflux_session, filename: filename)
14✔
35
    Rails.logger.info "Export file generated #{filename} for project #{project_id} (session: #{mediaflux_session})"
12✔
36

37
    # Update the job record as completed
38
    update_inventory_request(user_id: user.id, project: project, job_id: @job_id, filename: filename)
12✔
39
  rescue Mediaflux::SessionExpired => e
40
    # do not retry we can not continue if the session is expired
41
    fail_inventory_request(user_id: user.id, project: project, job_id: @job_id)
2✔
42
  end
43

44
  private
4✔
45

46
    def mediaflux_session
4✔
47
      logon_request = Mediaflux::LogonRequest.new
×
48
      logon_request.session_token
×
49
    end
50

51
    def filename_for_export
4✔
52
      raise "Shared location is not configured" if Rails.configuration.mediaflux["shared_files_location"].blank?
14✔
53
      pathname = Pathname.new(Rails.configuration.mediaflux["shared_files_location"])
14✔
54
      pathname.join("#{job_id}.csv").to_s
14✔
55
    end
56

57
    def fail_inventory_request(user_id:, project:, job_id: )
4✔
58
      inventory_request = FileInventoryRequest.find_by(user_id: user_id, project_id: project.id, job_id: job_id)
3✔
59
      request_details = { project_title: project.title, error: "Mediaflux session expired" }
3✔
60
      inventory_request.update(state: UserRequest::FAILED, request_details: request_details,
3✔
61
                                completion_time: Time.current.in_time_zone("America/New_York"))
62
      inventory_request
2✔
63
    rescue ActiveRecord::StatementInvalid
64
      Rails.logger.info "Export - failing inventory request details for project #{project.id} job_id: #{job_id} failed, about to retry"
1✔
65
      ActiveRecord::Base.connection_pool.release_connection
1✔
66
      retry
1✔
67
    end
68

69
    def update_inventory_request(user_id:, project:, job_id:, filename: )
4✔
70
      Rails.logger.info "Export - updating inventory request details for project #{project.id}"
13✔
71
      inventory_request = FileInventoryRequest.find_by(user_id: user_id, project_id: project.id, job_id: job_id)
13✔
72
      request_details = { output_file: filename, project_title: project.title, file_size: File.size(filename) }
13✔
73
      inventory_request.update(state: UserRequest::COMPLETED, request_details: request_details,
13✔
74
                                completion_time: Time.current.in_time_zone("America/New_York"))
75
      Rails.logger.info "Export - updated inventory request details for project #{project.id}"
12✔
76
      inventory_request
12✔
77
    rescue ActiveRecord::StatementInvalid
78
      Rails.logger.info "Export - updating inventory request details for project #{project.id} failed, about to retry"
1✔
79
      ActiveRecord::Base.connection_pool.release_connection
1✔
80
      retry
1✔
81
    end
82
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc