Class: RailsPulse::Jobs::Cards::FailureRate
- Defined in:
- app/models/rails_pulse/jobs/cards/failure_rate.rb
Constant Summary
Constants inherited from Base
Base::RANGE_DAYS, Base::WINDOW_DAYS
Instance Method Summary collapse
-
#initialize(job: nil) ⇒ FailureRate
constructor
A new instance of FailureRate.
- #to_metric_card ⇒ Object
Constructor Details
#initialize(job: nil) ⇒ FailureRate
Returns a new instance of FailureRate.
5 6 7 |
# File 'app/models/rails_pulse/jobs/cards/failure_rate.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/failure_rate.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(error_count) AS total_errors", "SUM(CASE WHEN period_start >= #{quote(current_window_start)} THEN count ELSE 0 END) AS current_count", "SUM(CASE WHEN period_start >= #{quote(current_window_start)} THEN error_count ELSE 0 END) AS current_errors", "SUM(CASE WHEN period_start >= #{quote(range_start)} AND period_start < #{quote(current_window_start)} THEN count ELSE 0 END) AS previous_count", "SUM(CASE WHEN period_start >= #{quote(range_start)} AND period_start < #{quote(current_window_start)} THEN error_count ELSE 0 END) AS previous_errors" ).take total_runs = metrics&.total_count.to_i total_errors = metrics&.total_errors.to_i current_runs = metrics&.current_count.to_i current_errors = metrics&.current_errors.to_i previous_runs = metrics&.previous_count.to_i previous_errors = metrics&.previous_errors.to_i failure_rate = rate_for(total_errors, total_runs) current_rate = rate_for(current_errors, current_runs) previous_rate = rate_for(previous_errors, previous_runs) trend_icon, trend_amount = trend_for(current_rate, previous_rate) grouped_errors = base_query .group_by_date(:period_start) .sum(:error_count) grouped_counts = base_query .group_by_date(:period_start) .sum(:count) sparkline_data = sparkline_from_failure_rates(grouped_errors, grouped_counts) { id: "jobs_failure_rate", context: "jobs", title: "Failure Rate", summary: "#{format_percentage(failure_rate, 1)}", chart_data: sparkline_data, trend_icon: trend_icon, trend_amount: trend_amount, trend_text: "Compared to previous week" } end |