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

pulibrary / bibdata / 38f1f4d0-27c1-49d4-b1d9-96c385ebb69d

22 Oct 2024 07:08PM UTC coverage: 91.26% (-0.6%) from 91.824%
38f1f4d0-27c1-49d4-b1d9-96c385ebb69d

Pull #2537

circleci

christinach
[#2536] Log stats in before_request callback
Pull Request #2537: [#2536] Log the aws sqs poller message body

2 of 6 new or added lines in 1 file covered. (33.33%)

17 existing lines in 1 file now uncovered.

3331 of 3650 relevant lines covered (91.26%)

370.23 hits per line

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

63.16
/app/services/aws_sqs_poller.rb
1
# This service is intended to be run by a daemon. It watches the AWS SQS poll
2
# for full dump events and kicks off a job to process them.
3
class AwsSqsPoller
1✔
4
  def self.poll
1✔
5
    queue_url = Rails.configuration.alma["sqs_queue_url"]
9✔
6
    poller = Aws::SQS::QueuePoller.new(queue_url)
9✔
7
    end_polling = false
9✔
8

9
    # End polling if the process is killed by restarting.
10
    Signal.trap("TERM") do
9✔
UNCOV
11
      end_polling = true
×
12
    end
13

14
    poller.before_request do |_stats|
9✔
15
      Rails.logger.info("AWS SQS Poller request_count: #{stats.request_count}")
9✔
NEW
16
      Rails.logger.info("AWS SQS Poller message_count: #{stats.received_message_count}")
×
NEW
17
      Rails.logger.info("AWS SQS Poller last_message_received_at: #{stats.last_message_received_at}")
×
UNCOV
18
      throw :stop_polling if end_polling
×
19
    end
20

21
    poller.poll do |msg|
9✔
NEW
22
      Rails.logger.info("Polls message")
×
UNCOV
23
      message_body = JSON.parse(msg[:body])
×
UNCOV
24
      job_name = message_body["job_instance"]["name"]
×
NEW
25
      Rails.logger.info("AWS SQS Poller message_body: #{message_body}")
×
UNCOV
26
      next unless Rails.configuration.alma[:jobs].keys.include?(job_name)
×
UNCOV
27
      dump = AlmaDumpFactory.bib_dump(message_body)
×
28
      # running dump creation in the background prevents the queue
29
      # event from timing out and requeuing
UNCOV
30
      AlmaDumpTransferJob.perform_later(
×
31
        dump:,
32
        job_id: message_body["job_instance"]["id"]
33
      )
34
    rescue AlmaDumpFactory::AlmaDuplicateEventError
UNCOV
35
      Rails.logger.error("Rescue from AlmaDuplicateEventError with alma_process_id: #{message_body['job_instance']['id']}")
×
36
    end
37
  end
38
end
39

40
class AlmaDumpFactory
1✔
41
  attr_reader :message
1✔
42
  class AlmaDumpError < StandardError
1✔
43
    attr_reader :alma_message
1✔
44
    def initialize(alma_message)
1✔
UNCOV
45
      super
×
UNCOV
46
      @alma_message = alma_message
×
47
    end
48

49
    def message
1✔
UNCOV
50
      status = alma_message["job_instance"]["status"]["value"]
×
UNCOV
51
      "Alma job completed with invalid status. Alma status: #{status}. Job id: #{alma_message['id']}"
×
52
    end
53
  end
54

55
  class AlmaDuplicateEventError < StandardError
1✔
56
  end
57

58
  def initialize(message)
1✔
59
    @message = message
1✔
60
  end
61

62
  def self.bib_dump(message)
1✔
63
    new(message).bib_dump
1✔
64
  end
65

66
  def bib_dump
1✔
67
    Dump.create(dump_type:,
1✔
68
                event: dump_event,
69
                generated_date: dump_event.start)
70
  end
71

72
  def dump_type
1✔
73
    @dump_type ||= Rails.configuration.alma[:jobs][job_name]["dump_type"]
1✔
74
  end
75

76
  def job_name
1✔
77
    message["job_instance"]["name"]
1✔
78
  end
79

80
  def alma_job_status
1✔
81
    status = message["job_instance"]["status"]["value"]
1✔
82
    raise AlmaDumpError, message unless status == 'COMPLETED_SUCCESS'
1✔
83
    status
1✔
84
  rescue => e
UNCOV
85
    Rails.logger.error(e.message)
×
UNCOV
86
    Honeybadger.notify(e)
×
UNCOV
87
    status
×
88
  end
89

90
  def dump_event
1✔
91
    @event ||= Event.create!(
2✔
92
      start: event_start,
93
      finish: event_finish,
94
      success: true,
95
      alma_job_status:,
96
      message_body: message.to_json
97
    )
98
  rescue ActiveRecord::RecordInvalid => e
UNCOV
99
    Rails.logger.error("#{e.message} message_body: #{message.to_json}")
×
UNCOV
100
    raise AlmaDuplicateEventError
×
101
  end
102

103
  def event_start
1✔
104
    message["job_instance"]["start_time"]
1✔
105
  end
106

107
  def event_finish
1✔
108
    message["job_instance"]["end_time"]
1✔
109
  end
110
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