Class: RailsPulse::Routes::Tables::Index
- Inherits:
-
Object
- Object
- RailsPulse::Routes::Tables::Index
- Defined in:
- app/models/rails_pulse/routes/tables/index.rb
Instance Method Summary collapse
-
#initialize(ransack_query:, start_time:, params:) ⇒ Index
constructor
A new instance of Index.
- #to_table ⇒ Object
Constructor Details
#initialize(ransack_query:, start_time:, params:) ⇒ Index
Returns a new instance of Index.
5 6 7 8 9 |
# File 'app/models/rails_pulse/routes/tables/index.rb', line 5 def initialize(ransack_query:, start_time:, params:) @ransack_query = ransack_query @start_time = start_time @params = params end |
Instance Method Details
#to_table ⇒ Object
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 |
# File 'app/models/rails_pulse/routes/tables/index.rb', line 11 def to_table # Pre-calculate values to avoid SQL injection and improve readability minutes_elapsed = calculate_minutes_elapsed # Get thresholds with safe defaults to avoid nil access errors config = RailsPulse.configuration rescue nil thresholds = config&.route_thresholds || { slow: 500, very_slow: 1500, critical: 3000 } requests_per_minute_divisor = minutes_elapsed > 0 ? minutes_elapsed : 1 status_sql = build_status_sql(thresholds) @ransack_query.result(distinct: false) .left_joins(:requests) .group("rails_pulse_routes.id") .select( "rails_pulse_routes.*", "COALESCE(AVG(rails_pulse_requests.duration), 0) AS average_response_time_ms", "COUNT(rails_pulse_requests.id) AS request_count", "COALESCE(COUNT(rails_pulse_requests.id) / #{requests_per_minute_divisor}, 0) AS requests_per_minute", "COALESCE(SUM(CASE WHEN rails_pulse_requests.is_error = true THEN 1 ELSE 0 END), 0) AS error_count", "CASE WHEN COUNT(rails_pulse_requests.id) > 0 THEN ROUND((COALESCE(SUM(CASE WHEN rails_pulse_requests.is_error = true THEN 1 ELSE 0 END), 0) * 100.0) / COUNT(rails_pulse_requests.id), 2) ELSE 0 END AS error_rate_percentage", "COALESCE(MAX(rails_pulse_requests.duration), 0) AS max_response_time_ms", "#{status_sql} AS status_indicator" ) end |