Class: SolidObserver::Services::CableStats

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_observer/services/cable_stats.rb

Overview

:reek:TooManyConstants

Defined Under Namespace

Classes: BacklogSnapshot, StabilityData, TrendData

Constant Summary collapse

RANGES =
{
  "15m" => 15.minutes,
  "30m" => 30.minutes,
  "1h" => 1.hour,
  "7h" => 7.hours,
  "1d" => 1.day,
  "7d" => 7.days,
  "14d" => 14.days
}.freeze
DEFAULT_RANGE =
"15m"
ACTIVITY_TREND_EMPTY =
{
  available: false,
  broadcasts: [],
  rejections: []
}.freeze
STABILITY_EMPTY =
{
  available: false,
  state: :stable,
  rejection_count: 0,
  error_count: 0,
  rejection_rate: 0.0,
  backlog_ratio: nil,
  backlog_available: false,
  latest_recorded_at: nil
}.freeze
STABILITY_DEGRADED =
{
  available: true,
  state: :degraded,
  rejection_count: 0,
  error_count: 0,
  rejection_rate: 0.0,
  backlog_ratio: nil,
  backlog_available: false,
  latest_recorded_at: nil
}.freeze
BUCKET_RULES =
[
  [2.hours.to_i, 1.minute.to_i],
  [1.day.to_i, 15.minutes.to_i],
  [7.days.to_i, 2.hours.to_i]
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.call(window:) ⇒ Object



260
261
262
# File 'lib/solid_observer/services/cable_stats.rb', line 260

def self.call(window:)
  new.call(window: window)
end

.parse_range(value, fallback: DEFAULT_RANGE) ⇒ Object



244
245
246
247
# File 'lib/solid_observer/services/cable_stats.rb', line 244

def parse_range(value, fallback: DEFAULT_RANGE)
  range_key = value.to_s
  RANGES.key?(range_key) ? range_key : fallback
end

.range_duration(value, fallback: DEFAULT_RANGE) ⇒ Object



249
250
251
# File 'lib/solid_observer/services/cable_stats.rb', line 249

def range_duration(value, fallback: DEFAULT_RANGE)
  RANGES.fetch(parse_range(value, fallback: fallback))
end

.ratio(numerator, denominator) ⇒ Object



253
254
255
256
257
# File 'lib/solid_observer/services/cable_stats.rb', line 253

def ratio(numerator, denominator)
  return 0.0 if denominator.to_i.zero?

  numerator.to_f / denominator.to_f
end

Instance Method Details

#call(window:) ⇒ Object



264
265
266
267
268
269
270
# File 'lib/solid_observer/services/cable_stats.rb', line 264

def call(window:)
  current_time = Time.current
  dashboard_response(window: window, current_time: current_time)
rescue => error
  Rails.logger&.error("[SolidObserver] CableStats call failed: #{error.class} #{error.message}") if defined?(Rails)
  error_response
end