Class: RailsPulse::Routes::Charts::ErrorRate
- Inherits:
-
Charts::Base
- Object
- Charts::Base
- RailsPulse::Routes::Charts::ErrorRate
- Defined in:
- app/models/rails_pulse/routes/charts/error_rate.rb
Instance Method Summary collapse
-
#initialize(route: nil, **kwargs) ⇒ ErrorRate
constructor
A new instance of ErrorRate.
- #to_chart_data ⇒ Object
Constructor Details
#initialize(route: nil, **kwargs) ⇒ ErrorRate
Returns a new instance of ErrorRate.
5 6 7 |
# File 'app/models/rails_pulse/routes/charts/error_rate.rb', line 5 def initialize(route: nil, **kwargs) super(subject: route, **kwargs) end |
Instance Method Details
#to_chart_data ⇒ 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 |
# File 'app/models/rails_pulse/routes/charts/error_rate.rb', line 9 def to_chart_data summaries = base_summary_query .group(:period_start) .select( :period_start, "SUM(count) as total_count", "SUM(error_count) as total_errors", "SUM(status_4xx) as total_4xx" ) # Build raw_data hash from grouped results raw_data = {} summaries.each do |summary| = summary.period_start.to_i count = summary.total_count || 0 raw_data[] = { error_rate: count > 0 ? (summary.total_errors.to_f / count * 100).round(2) : nil, client_error_rate: count > 0 ? (summary.total_4xx.to_f / count * 100).round(2) : nil } end # Pad missing data with defaults default_value = { error_rate: nil, client_error_rate: nil } daily_data = {} (@start_time.to_i..@end_time.to_i).step(time_step) do || daily_data[] = raw_data[] || default_value end labels = daily_data.keys.map { || * 1000 } series = [ { name: "4xx Errors", data: daily_data.values.map { |d| d[:client_error_rate] }, type: "bar", stack: "error_rate", color: RailsPulse::ChartColors::P99, itemStyle: { borderRadius: [ 0, 0, 0, 0 ] } }, { name: "5xx Errors", data: daily_data.values.map { |d| d[:error_rate] }, type: "bar", stack: "error_rate", color: RailsPulse::ChartColors::P95, itemStyle: { borderRadius: [ 5, 5, 0, 0 ] } } ] { labels: labels, series: series } end |