Class: PerformanceMetric
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- PerformanceMetric
- Defined in:
- lib/generators/decision_agent/install/templates/performance_metric.rb
Class Method Summary collapse
-
.average_duration(time_range: 3600) ⇒ Object
Performance statistics.
-
.average_duration_by_time(bucket_size: 60, time_range: 3600) ⇒ Object
Time series aggregation.
- .count_by_operation(time_range: 3600) ⇒ Object
- .max_duration(time_range: 3600) ⇒ Object
- .min_duration(time_range: 3600) ⇒ Object
- .p50(time_range: 3600) ⇒ Object
- .p95(time_range: 3600) ⇒ Object
- .p99(time_range: 3600) ⇒ Object
- .percentile(pct, time_range: 3600) ⇒ Object
- .success_rate(time_range: 3600) ⇒ Object
Instance Method Summary collapse
-
#parsed_metadata ⇒ Object
Parse JSON metadata field.
Class Method Details
.average_duration(time_range: 3600) ⇒ Object
Performance statistics
16 17 18 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 16 def self.average_duration(time_range: 3600) recent(time_range).where.not(duration_ms: nil).average(:duration_ms).to_f end |
.average_duration_by_time(bucket_size: 60, time_range: 3600) ⇒ Object
Time series aggregation
61 62 63 64 65 66 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 61 def self.average_duration_by_time(bucket_size: 60, time_range: 3600) recent(time_range) .where.not(duration_ms: nil) .group("(EXTRACT(EPOCH FROM created_at)::bigint / #{bucket_size}) * #{bucket_size}") .average(:duration_ms) end |
.count_by_operation(time_range: 3600) ⇒ Object
56 57 58 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 56 def self.count_by_operation(time_range: 3600) recent(time_range).group(:operation).count end |
.max_duration(time_range: 3600) ⇒ Object
40 41 42 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 40 def self.max_duration(time_range: 3600) recent(time_range).maximum(:duration_ms).to_f end |
.min_duration(time_range: 3600) ⇒ Object
44 45 46 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 44 def self.min_duration(time_range: 3600) recent(time_range).minimum(:duration_ms).to_f end |
.p50(time_range: 3600) ⇒ Object
28 29 30 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 28 def self.p50(time_range: 3600) percentile(0.50, time_range: time_range) end |
.p95(time_range: 3600) ⇒ Object
32 33 34 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 32 def self.p95(time_range: 3600) percentile(0.95, time_range: time_range) end |
.p99(time_range: 3600) ⇒ Object
36 37 38 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 36 def self.p99(time_range: 3600) percentile(0.99, time_range: time_range) end |
.percentile(pct, time_range: 3600) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 20 def self.percentile(pct, time_range: 3600) durations = recent(time_range).where.not(duration_ms: nil).order(:duration_ms).pluck(:duration_ms) return 0.0 if durations.empty? index = ((durations.length - 1) * pct).ceil durations[index].to_f end |
.success_rate(time_range: 3600) ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 48 def self.success_rate(time_range: 3600) total = recent(time_range).where.not(status: nil).count return 0.0 if total.zero? successful_count = recent(time_range).successful.count successful_count.to_f / total end |
Instance Method Details
#parsed_metadata ⇒ Object
Parse JSON metadata field
69 70 71 72 73 74 75 |
# File 'lib/generators/decision_agent/install/templates/performance_metric.rb', line 69 def return {} if .nil? JSON.parse(, symbolize_names: true) rescue JSON::ParserError {} end |