Module: A2A::Monitoring

Defined in:
lib/a2a/modules.rb,
lib/a2a/monitoring.rb,
lib/a2a/monitoring/alerting.rb,
lib/a2a/monitoring/health_endpoints.rb,
lib/a2a/monitoring/metrics_collector.rb,
lib/a2a/monitoring/metrics_collector.rb,
lib/a2a/monitoring/distributed_tracing.rb,
lib/a2a/monitoring/distributed_tracing.rb

Defined Under Namespace

Modules: Instrumentation Classes: Alerting, DistributedTracing, HealthChecker, HealthEndpoints, HealthMiddleware, LoggingBackend, MetricsCollector, PrometheusBackend, SlackAlertChannel, StructuredLogger, WebhookAlertChannel

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerA2A::Monitoring::StructuredLogger

Get structured logger

Returns:



25
26
27
# File 'lib/a2a/monitoring.rb', line 25

def logger
  @logger
end

.metricsA2A::Monitoring::MetricsCollector

Get metrics collector

Returns:



21
22
23
# File 'lib/a2a/monitoring.rb', line 21

def metrics
  @metrics
end

Class Method Details

.health_checksA2A::Monitoring::HealthChecker

Get health checker

Returns:



50
51
52
# File 'lib/a2a/monitoring.rb', line 50

def health_checks
  @health_checks ||= HealthChecker.new(A2A.config)
end

.increment_counter(name, **labels) ⇒ Object

Increment a counter

Parameters:

  • Counter name

  • Counter labels



65
66
67
# File 'lib/a2a/monitoring.rb', line 65

def increment_counter(name, **labels)
  metrics.increment(name, **labels)
end

.initialize!(config = A2A.config) ⇒ Object

Initialize monitoring system

Parameters:

  • (defaults to: A2A.config)

    Configuration instance



29
30
31
32
33
34
# File 'lib/a2a/monitoring.rb', line 29

def initialize!(config = A2A.config)
  @config = config
  @metrics = MetricsCollector.new(config)
  @logger = StructuredLogger.new(config)
  @health_checks = HealthChecker.new(config)
end

.log(level, message, **context) ⇒ Object

Log with correlation ID

Parameters:

  • Log level

  • Log message

  • Additional context



98
99
100
# File 'lib/a2a/monitoring.rb', line 98

def log(level, message, **context)
  logger.log(level, message, **context)
end

.record_metric(name, value, **labels) ⇒ Object

Record a metric

Parameters:

  • Metric name

  • Metric value

  • Metric labels



58
59
60
# File 'lib/a2a/monitoring.rb', line 58

def record_metric(name, value, **labels)
  metrics.record(name, value, **labels)
end

.record_timing(name, duration, **labels) ⇒ Object

Record timing information

Parameters:

  • Timer name

  • Duration in seconds

  • Timer labels



73
74
75
# File 'lib/a2a/monitoring.rb', line 73

def record_timing(name, duration, **labels)
  metrics.timing(name, duration, **labels)
end

.time(name, **labels) { ... } ⇒ Object

Time a block of code

Parameters:

  • Timer name

  • Timer labels

Yields:

  • Block to time

Returns:

  • Block result



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/a2a/monitoring.rb', line 82

def time(name, **labels)
  start_time = Time.now
  result = yield
  duration = Time.now - start_time
  record_timing(name, duration, **labels)
  result
rescue StandardError
  duration = Time.now - start_time
  record_timing(name, duration, status: "error", **labels)
  raise
end