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

pulibrary / bibdata / c8326684-2dab-4611-84c7-9966675ebe5a

21 Aug 2024 06:16PM UTC coverage: 91.971% (-0.07%) from 92.045%
c8326684-2dab-4611-84c7-9966675ebe5a

Pull #2461

circleci

christinach
Add logging when event fails validation
Change ruby in the webhook/src to be 2.7

Co-authored-by: Max Kadel <maxkadel@users.noreply.github.com>
Pull Request #2461: Rescue message body error on ruby3.2

0 of 3 new or added lines in 1 file covered. (0.0%)

3425 of 3724 relevant lines covered (91.97%)

363.04 hits per line

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

94.12
/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"]
8✔
6
    poller = Aws::SQS::QueuePoller.new(queue_url)
8✔
7
    end_polling = false
8✔
8

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

14
    poller.before_request do |_stats|
8✔
15
      throw :stop_polling if end_polling
5,084✔
16
    end
17

18
    poller.poll do |msg|
8✔
19
      message_body = JSON.parse(msg[:body])
8✔
20
      job_name = message_body["job_instance"]["name"]
8✔
21
      next unless Rails.configuration.alma[:jobs].keys.include?(job_name)
8✔
22
      dump = AlmaDumpFactory.bib_dump(message_body)
7✔
23
      # running dump creation in the background prevents the queue
24
      # event from timing out and requeuing
25
      AlmaDumpTransferJob.perform_later(
7✔
26
        dump:,
27
        job_id: message_body["job_instance"]["id"]
28
      )
29
    end
30
  end
31
end
32

33
class AlmaDumpFactory
1✔
34
  attr_reader :message
1✔
35
  class AlmaDumpError < StandardError
1✔
36
    attr_reader :alma_message
1✔
37
    def initialize(alma_message)
1✔
38
      super
4✔
39
      @alma_message = alma_message
4✔
40
    end
41

42
    def message
1✔
43
      status = alma_message["job_instance"]["status"]["value"]
10✔
44
      "Alma job completed with invalid status. Alma status: #{status}. Job id: #{alma_message['id']}"
10✔
45
    end
46
  end
47

48
  def initialize(message)
1✔
49
    @message = message
8✔
50
  end
51

52
  def self.bib_dump(message)
1✔
53
    new(message).bib_dump
8✔
54
  end
55

56
  def bib_dump
1✔
57
    Dump.create(dump_type:,
8✔
58
                event: dump_event,
59
                generated_date: dump_event.start)
60
  end
61

62
  def dump_type
1✔
63
    @dump_type ||= Rails.configuration.alma[:jobs][job_name]["dump_type"]
8✔
64
  end
65

66
  def job_name
1✔
67
    message["job_instance"]["name"]
8✔
68
  end
69

70
  def alma_job_status
1✔
71
    status = message["job_instance"]["status"]["value"]
8✔
72
    raise AlmaDumpError, message unless status == 'COMPLETED_SUCCESS'
8✔
73
    status
4✔
74
  rescue => e
75
    Rails.logger.error(e.message)
4✔
76
    Honeybadger.notify(e)
4✔
77
    status
4✔
78
  end
79

80
  def dump_event
1✔
81
    @event ||= Event.create!(
16✔
82
      start: event_start,
83
      finish: event_finish,
84
      success: true,
85
      alma_job_status:,
86
      message_body: message.to_json
87
    )
88
  rescue ActiveRecord::RecordInvalid => e
NEW
89
    Rails.logger.error("#{e.message} message_body: #{message.to_json}")
×
NEW
90
    Honeybadger.notify("#{e.message} message_body: #{message.to_json}")
×
NEW
91
    raise e
×
92
  end
93

94
  def event_start
1✔
95
    message["job_instance"]["start_time"]
8✔
96
  end
97

98
  def event_finish
1✔
99
    message["job_instance"]["end_time"]
8✔
100
  end
101
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