Class: RailsErrorDashboard::Queries::BaselineStats
- Inherits:
-
Object
- Object
- RailsErrorDashboard::Queries::BaselineStats
- Defined in:
- lib/rails_error_dashboard/queries/baseline_stats.rb
Overview
Calculate and retrieve baseline statistics for error types
Provides methods to get hourly, daily, and weekly baselines for error types. Baselines help establish “normal” error behavior for anomaly detection.
Class Method Summary collapse
- .daily_baseline(error_type, platform) ⇒ Object
- .hourly_baseline(error_type, platform) ⇒ Object
- .weekly_baseline(error_type, platform) ⇒ Object
Instance Method Summary collapse
-
#all_baselines ⇒ Hash
Get all baselines for an error type and platform.
-
#check_anomaly(current_count, sensitivity: 2) ⇒ Hash
Check if current count is anomalous based on best available baseline Uses hourly baseline if available, falls back to daily, then weekly.
-
#daily_baseline ⇒ ErrorBaseline?
Get the most recent daily baseline Covers last 12 weeks of data, aggregated by day of week.
-
#hourly_baseline ⇒ ErrorBaseline?
Get the most recent hourly baseline Covers last 4 weeks of data, aggregated by hour of day.
-
#initialize(error_type, platform) ⇒ BaselineStats
constructor
A new instance of BaselineStats.
-
#weekly_baseline ⇒ ErrorBaseline?
Get the most recent weekly baseline Covers last 1 year of data, aggregated by week.
Constructor Details
#initialize(error_type, platform) ⇒ BaselineStats
Returns a new instance of BaselineStats.
26 27 28 29 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 26 def initialize(error_type, platform) @error_type = error_type @platform = platform end |
Class Method Details
.daily_baseline(error_type, platform) ⇒ Object
18 19 20 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 18 def self.daily_baseline(error_type, platform) new(error_type, platform).daily_baseline end |
.hourly_baseline(error_type, platform) ⇒ Object
14 15 16 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 14 def self.hourly_baseline(error_type, platform) new(error_type, platform).hourly_baseline end |
.weekly_baseline(error_type, platform) ⇒ Object
22 23 24 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 22 def self.weekly_baseline(error_type, platform) new(error_type, platform).weekly_baseline end |
Instance Method Details
#all_baselines ⇒ Hash
Get all baselines for an error type and platform
75 76 77 78 79 80 81 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 75 def all_baselines { hourly: hourly_baseline, daily: daily_baseline, weekly: weekly_baseline } end |
#check_anomaly(current_count, sensitivity: 2) ⇒ Hash
Check if current count is anomalous based on best available baseline Uses hourly baseline if available, falls back to daily, then weekly
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 88 def check_anomaly(current_count, sensitivity: 2) baseline = hourly_baseline || daily_baseline || weekly_baseline if baseline.nil? return { anomaly: false, level: nil, baseline_type: nil, message: "No baseline available" } end level = baseline.anomaly_level(current_count, sensitivity: sensitivity) { anomaly: level.present?, level: level, baseline_type: baseline.baseline_type, threshold: baseline.threshold(sensitivity: sensitivity), std_devs_above: baseline.std_devs_above_mean(current_count) } end |
#daily_baseline ⇒ ErrorBaseline?
Get the most recent daily baseline Covers last 12 weeks of data, aggregated by day of week
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 48 def daily_baseline return nil unless defined?(ErrorBaseline) && ErrorBaseline.table_exists? ErrorBaseline .for_error_type(@error_type) .for_platform(@platform) .daily .recent .first end |
#hourly_baseline ⇒ ErrorBaseline?
Get the most recent hourly baseline Covers last 4 weeks of data, aggregated by hour of day
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 34 def hourly_baseline return nil unless defined?(ErrorBaseline) && ErrorBaseline.table_exists? ErrorBaseline .for_error_type(@error_type) .for_platform(@platform) .hourly .recent .first end |
#weekly_baseline ⇒ ErrorBaseline?
Get the most recent weekly baseline Covers last 1 year of data, aggregated by week
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rails_error_dashboard/queries/baseline_stats.rb', line 62 def weekly_baseline return nil unless defined?(ErrorBaseline) && ErrorBaseline.table_exists? ErrorBaseline .for_error_type(@error_type) .for_platform(@platform) .weekly .recent .first end |