Class: RailsPulse::Jobs::Cards::AverageDuration
- Defined in:
- app/models/rails_pulse/jobs/cards/average_duration.rb
Constant Summary
Constants inherited from Base
Base::RANGE_DAYS, Base::WINDOW_DAYS
Instance Method Summary collapse
-
#initialize(job: nil) ⇒ AverageDuration
constructor
A new instance of AverageDuration.
- #to_metric_card ⇒ Object
Constructor Details
#initialize(job: nil) ⇒ AverageDuration
Returns a new instance of AverageDuration.
5 6 7 |
# File 'app/models/rails_pulse/jobs/cards/average_duration.rb', line 5 def initialize(job: nil) @job = job end |
Instance Method Details
#to_metric_card ⇒ Object
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'app/models/rails_pulse/jobs/cards/average_duration.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(avg_duration * count) AS total_weighted_duration", "SUM(count) AS total_runs", "SUM(CASE WHEN period_start >= #{quote(current_window_start)} THEN avg_duration * count ELSE 0 END) AS current_weighted_duration", "SUM(CASE WHEN period_start >= #{quote(current_window_start)} THEN count ELSE 0 END) AS current_runs", "SUM(CASE WHEN period_start >= #{quote(range_start)} AND period_start < #{quote(current_window_start)} THEN avg_duration * count ELSE 0 END) AS previous_weighted_duration", "SUM(CASE WHEN period_start >= #{quote(range_start)} AND period_start < #{quote(current_window_start)} THEN count ELSE 0 END) AS previous_runs" ).take total_runs = metrics&.total_runs.to_i total_weighted_duration = metrics&.total_weighted_duration.to_f current_runs = metrics&.current_runs.to_i current_weighted_duration = metrics&.current_weighted_duration.to_f previous_runs = metrics&.previous_runs.to_i previous_weighted_duration = metrics&.previous_weighted_duration.to_f average_duration = average_for(total_weighted_duration, total_runs) current_average = average_for(current_weighted_duration, current_runs) previous_average = average_for(previous_weighted_duration, previous_runs) trend_icon, trend_amount = trend_for(current_average, previous_average) grouped_weighted = base_query .group_by_date(:period_start) .sum(Arel.sql("avg_duration * count")) grouped_counts = base_query .group_by_date(:period_start) .sum(:count) sparkline_data = sparkline_from_averages(grouped_weighted, grouped_counts) { id: "jobs_average_duration", context: "jobs", title: "Average Duration", summary: format_duration(average_duration), chart_data: sparkline_data, trend_icon: trend_icon, trend_amount: trend_amount, trend_text: "Compared to previous week" } end |