cc-os/plugins/os-adr/eval-b/fixture/project/lib/relay/reports.rb

35 lines
1008 B
Ruby

require "json"
require_relative "result"
require_relative "delivery"
require_relative "formatter"
module Relay
# Summarizes delivery outcomes for the `relay report` command, including
# entries the Delivery dead-letter path wrote out.
class Reports
def initialize(dead_letter_path:, formatter: Formatter.new)
@dead_letter_path = dead_letter_path
@formatter = formatter
end
def failed_deliveries
return Result.ok([]) unless File.exist?(@dead_letter_path)
entries = File.readlines(@dead_letter_path).map { |line| JSON.parse(line) }
Result.ok(entries)
rescue JSON::ParserError => e
Result.err("dead-letter file corrupt: #{e.message}")
end
def render
failures = failed_deliveries
return failures if failures.err?
rows = failures.value.map do |entry|
[entry["url"], Delivery.attempt_budget, "dead-lettered"]
end
rows.empty? ? Result.ok("no failed deliveries") : @formatter.render(rows)
end
end
end