Class: Aidp::Harness::ProviderMetrics
- Inherits:
-
Object
- Object
- Aidp::Harness::ProviderMetrics
- Includes:
- RescueLogging
- Defined in:
- lib/aidp/harness/provider_metrics.rb
Overview
Persists provider metrics and rate limit information to disk Enables the provider dashboard to display real-time state
Instance Attribute Summary collapse
-
#metrics_file ⇒ Object
readonly
Returns the value of attribute metrics_file.
-
#project_dir ⇒ Object
readonly
Returns the value of attribute project_dir.
-
#rate_limit_file ⇒ Object
readonly
Returns the value of attribute rate_limit_file.
Instance Method Summary collapse
-
#clear ⇒ Object
Clear all persisted metrics.
-
#initialize(project_dir) ⇒ ProviderMetrics
constructor
A new instance of ProviderMetrics.
-
#load_metrics ⇒ Object
Load provider metrics from disk.
-
#load_rate_limits ⇒ Object
Load rate limit information from disk.
-
#save_metrics(metrics_hash) ⇒ Object
Save provider metrics to disk.
-
#save_rate_limits(rate_limit_hash) ⇒ Object
Save rate limit information to disk.
Methods included from RescueLogging
__log_rescue_impl, log_rescue, #log_rescue
Constructor Details
#initialize(project_dir) ⇒ ProviderMetrics
Returns a new instance of ProviderMetrics.
16 17 18 19 20 21 |
# File 'lib/aidp/harness/provider_metrics.rb', line 16 def initialize(project_dir) @project_dir = project_dir @metrics_file = File.join(project_dir, ".aidp", "provider_metrics.yml") @rate_limit_file = File.join(project_dir, ".aidp", "provider_rate_limits.yml") ensure_directory end |
Instance Attribute Details
#metrics_file ⇒ Object (readonly)
Returns the value of attribute metrics_file.
14 15 16 |
# File 'lib/aidp/harness/provider_metrics.rb', line 14 def metrics_file @metrics_file end |
#project_dir ⇒ Object (readonly)
Returns the value of attribute project_dir.
14 15 16 |
# File 'lib/aidp/harness/provider_metrics.rb', line 14 def project_dir @project_dir end |
#rate_limit_file ⇒ Object (readonly)
Returns the value of attribute rate_limit_file.
14 15 16 |
# File 'lib/aidp/harness/provider_metrics.rb', line 14 def rate_limit_file @rate_limit_file end |
Instance Method Details
#clear ⇒ Object
Clear all persisted metrics
76 77 78 79 |
# File 'lib/aidp/harness/provider_metrics.rb', line 76 def clear File.delete(@metrics_file) if File.exist?(@metrics_file) File.delete(@rate_limit_file) if File.exist?(@rate_limit_file) end |
#load_metrics ⇒ Object
Load provider metrics from disk
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/aidp/harness/provider_metrics.rb', line 36 def load_metrics return {} unless File.exist?(@metrics_file) data = YAML.safe_load_file(@metrics_file, permitted_classes: [Time, Date, Symbol], aliases: true) return {} unless data.is_a?(Hash) # Convert ISO8601 strings back to Time objects deserialize_metrics(data) rescue => e log_rescue(e, component: "provider_metrics", action: "load_metrics", fallback: {}) {} end |
#load_rate_limits ⇒ Object
Load rate limit information from disk
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/aidp/harness/provider_metrics.rb', line 62 def load_rate_limits return {} unless File.exist?(@rate_limit_file) data = YAML.safe_load_file(@rate_limit_file, permitted_classes: [Time, Date, Symbol], aliases: true) return {} unless data.is_a?(Hash) # Convert ISO8601 strings back to Time objects deserialize_rate_limits(data) rescue => e log_rescue(e, component: "provider_metrics", action: "load_rate_limits", fallback: {}) {} end |
#save_metrics(metrics_hash) ⇒ Object
Save provider metrics to disk
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/aidp/harness/provider_metrics.rb', line 24 def save_metrics(metrics_hash) return if metrics_hash.nil? || metrics_hash.empty? # Convert Time objects to ISO8601 strings for YAML serialization serializable_metrics = serialize_metrics(metrics_hash) File.write(@metrics_file, YAML.dump(serializable_metrics)) rescue => e log_rescue(e, component: "provider_metrics", action: "save_metrics", fallback: nil) end |
#save_rate_limits(rate_limit_hash) ⇒ Object
Save rate limit information to disk
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/aidp/harness/provider_metrics.rb', line 50 def save_rate_limits(rate_limit_hash) return if rate_limit_hash.nil? || rate_limit_hash.empty? # Convert Time objects to ISO8601 strings for YAML serialization serializable_rate_limits = serialize_rate_limits(rate_limit_hash) File.write(@rate_limit_file, YAML.dump(serializable_rate_limits)) rescue => e log_rescue(e, component: "provider_metrics", action: "save_rate_limits", fallback: nil) end |