Class: RailsPulse::Jobs::Cards::TotalRuns

Inherits:
Base
  • Object
show all
Defined in:
app/models/rails_pulse/jobs/cards/total_runs.rb

Constant Summary

Constants inherited from Base

Base::RANGE_DAYS, Base::WINDOW_DAYS

Instance Method Summary collapse

Constructor Details

#initialize(job: nil) ⇒ TotalRuns

Returns a new instance of TotalRuns.



5
6
7
# File 'app/models/rails_pulse/jobs/cards/total_runs.rb', line 5

def initialize(job: nil)
  @job = job
end

Instance Method Details

#to_metric_cardObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/models/rails_pulse/jobs/cards/total_runs.rb', line 9

def to_metric_card
  base_query = RailsPulse::Summary
    .where(
      summarizable_type: "RailsPulse::Job",
      period_type: "day",
      period_start: range_start..now
    )
  base_query = base_query.where(summarizable_id: @job.id) if @job

  metrics = base_query.select(
    "SUM(count) AS total_count",
    "SUM(CASE WHEN period_start >= #{quote(current_window_start)} THEN count ELSE 0 END) AS current_count",
    "SUM(CASE WHEN period_start >= #{quote(range_start)} AND period_start < #{quote(current_window_start)} THEN count ELSE 0 END) AS previous_count"
  ).take

  total_runs = metrics&.total_count.to_i
  current_runs = metrics&.current_count.to_i
  previous_runs = metrics&.previous_count.to_i

  trend_icon, trend_amount = trend_for(current_runs, previous_runs)

  grouped_runs = base_query
    .group_by_date(:period_start)
    .sum(:count)

  {
    id: "jobs_total_runs",
    context: "jobs",
    title: "Job Runs",
    summary: "#{format_number(total_runs)} runs",
    chart_data: sparkline_from(grouped_runs),
    trend_icon: trend_icon,
    trend_amount: trend_amount,
    trend_text: "Compared to previous week"
  }
end