Class: Anomonitor::Jobs::Browser

Inherits:
Object
  • Object
show all
Defined in:
lib/anomonitor/jobs/browser.rb

Overview

Fetches live job rows from every enabled job collector backend.

Constant Summary collapse

DEFAULT_LIMIT =
100
STATUSES =
%w[all pending failed locked].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filters = {}) ⇒ Browser

Returns a new instance of Browser.



28
29
30
# File 'lib/anomonitor/jobs/browser.rb', line 28

def initialize(filters = {})
  @filters = normalize(filters)
end

Class Method Details

.enabled_sourcesObject



14
15
16
# File 'lib/anomonitor/jobs/browser.rb', line 14

def self.enabled_sources
  new.enabled_sources
end

.fetch(filters = {}) ⇒ Object



10
11
12
# File 'lib/anomonitor/jobs/browser.rb', line 10

def self.fetch(filters = {})
  new(filters).fetch
end

.status_options(source = nil) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/anomonitor/jobs/browser.rb', line 18

def self.status_options(source = nil)
  if source.to_s.start_with?("table:")
    name = source.to_s.delete_prefix("table:")
    table = Anomonitor.config.tables.find { |t| t.name.to_s == name }
    return %w[all pending failed] if table && !table.delayed_job_style?
  end

  STATUSES
end

Instance Method Details

#enabled_sourcesObject



46
47
48
# File 'lib/anomonitor/jobs/browser.rb', line 46

def enabled_sources
  adapters.map(&:source_key)
end

#fetchObject



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/anomonitor/jobs/browser.rb', line 32

def fetch
  rows = []
  adapters.each do |adapter|
    next if @filters[:source] && adapter.source_key != @filters[:source]

    rows.concat(Array(adapter.fetch(@filters)))
  rescue StandardError => e
    Anomonitor.logger.warn("[Anomonitor] Jobs browser (#{adapter.source_key}) error: #{e.message}")
  end

  rows = filter_query(rows)
  rows.sort_by { |r| r.sort_at }.reverse.first(@filters[:limit])
end