Class: RailsPulse::Routes::Charts::AverageResponseTimes

Inherits:
Object
  • Object
show all
Defined in:
app/models/rails_pulse/routes/charts/average_response_times.rb

Instance Method Summary collapse

Constructor Details

#initialize(ransack_query:, group_by: :group_by_day, route: nil) ⇒ AverageResponseTimes

Returns a new instance of AverageResponseTimes.



5
6
7
8
9
# File 'app/models/rails_pulse/routes/charts/average_response_times.rb', line 5

def initialize(ransack_query:, group_by: :group_by_day, route: nil)
  @ransack_query = ransack_query
  @group_by = group_by
  @route = route
end

Instance Method Details

#to_rails_chartObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/models/rails_pulse/routes/charts/average_response_times.rb', line 11

def to_rails_chart
  # Get actual data using existing logic
  actual_data = if @route
    # These are the requests for the specific route so it will just be a collection of Requests that we can
    # filter and sort using the attributes on each Request
    @ransack_query.result(distinct: false)
      .public_send(@group_by, "occurred_at", series: true, time_zone: "UTC")
      .average(:duration)
  else
    # Use the existing query structure with left_joins from ransack
    @ransack_query.result(distinct: false)
      .left_joins(:requests)
      .public_send(
        @group_by,
        "rails_pulse_requests.occurred_at",
        series: true,
        time_zone: "UTC"
      )
      .average("rails_pulse_requests.duration")
  end

  # Create full time range and fill in missing periods
  fill_missing_periods(actual_data)
end