HeliosDB Observability API Reference
HeliosDB Observability API Reference
Complete API documentation for HeliosDB Observability v1.0.
Table of Contents
Auto-Instrumentation
AutoInstrumenter
Global automatic instrumentation manager.
Methods
global() -> &'static AutoInstrumenter
Get the global auto-instrumenter instance (singleton).
let instrumenter = AutoInstrumenter::global();enable()
Enable automatic instrumentation.
AutoInstrumenter::global().enable();disable()
Disable automatic instrumentation.
AutoInstrumenter::global().disable();is_enabled() -> bool
Check if auto-instrumentation is enabled.
if AutoInstrumenter::global().is_enabled() { println!("Tracing active");}trace_db_operation(&self, operation: &str, statement: &str) -> Option<Span>
Trace a database operation.
Parameters:
operation: Type of operation (SELECT, INSERT, UPDATE, DELETE, etc.)statement: SQL statement or query
Returns: Option<Span> - Span guard if tracing is enabled
let _span = AutoInstrumenter::global() .trace_db_operation("SELECT", "SELECT * FROM users");trace_network_operation(&self, method: &str, url: &str, protocol: &str) -> Option<Span>
Trace a network operation.
Parameters:
method: HTTP method or RPC methodurl: Request URL or endpointprotocol: Protocol (HTTP, gRPC, etc.)
let _span = AutoInstrumenter::global() .trace_network_operation("POST", "/api/users", "HTTP/1.1");trace_storage_operation(&self, operation: &str, path: &str) -> Option<Span>
Trace a storage operation.
Parameters:
operation: Type of operation (read, write, delete, etc.)path: File path or storage key
let _span = AutoInstrumenter::global() .trace_storage_operation("write", "/data/users.db");add_db_hook(&self, hook: Box<DbOperationHook>)
Add a custom database operation hook.
let hook: Box<DbOperationHook> = Box::new(|op, stmt| { Some(span!(Level::DEBUG, "custom.db", op = op, stmt = stmt))});AutoInstrumenter::global().add_db_hook(hook);add_network_hook(&self, hook: Box<NetworkOperationHook>)
Add a custom network operation hook.
add_storage_hook(&self, hook: Box<StorageOperationHook>)
Add a custom storage operation hook.
clear_hooks()
Clear all custom hooks.
AutoInstrumenter::global().clear_hooks();Tracing Macros
trace_db_op!(operation, statement)
Convenience macro for database operation tracing.
let _span = trace_db_op!("SELECT", "SELECT * FROM users WHERE id = 1");// Query execution happens within traced spantrace_network_op!(method, url, protocol)
Convenience macro for network operation tracing.
let _span = trace_network_op!("POST", "http://api.example.com", "HTTP/1.1");// Network request happens within traced spantrace_storage_op!(operation, path)
Convenience macro for storage operation tracing.
let _span = trace_storage_op!("write", "/tmp/data.bin");// File I/O happens within traced spanExporters
OtlpExporter
OpenTelemetry Protocol (OTLP) exporter.
Builder
use heliosdb_observability::exporters::OtlpExporter;
let exporter = OtlpExporter::builder() .endpoint("http://localhost:4317") .service_name("heliosdb") .timeout(std::time::Duration::from_secs(30)) .build()?;
exporter.install().await?;Methods
builder() -> OtlpExporterBuilder
Create a new builder.
install(self) -> Result<()>
Install the exporter as the global tracer provider.
JaegerExporter
Jaeger exporter for distributed tracing.
Builder
use heliosdb_observability::exporters::JaegerExporter;
let exporter = JaegerExporter::builder() .agent_endpoint("localhost:6831") .service_name("heliosdb") .build()?;
exporter.install().await?;Methods
builder() -> JaegerExporterBuilder
Create a new builder.
install(self) -> Result<()>
Install the exporter.
PrometheusExporter
Prometheus metrics exporter.
use heliosdb_observability::metrics::PrometheusExporter;
let exporter = PrometheusExporter::new("0.0.0.0:9091")?;exporter.start().await?;
// Metrics available at: http://localhost:9091/metricsMetrics
Counter
Monotonically increasing counter.
use heliosdb_observability::metrics::Counter;
let counter = Counter::new( "db.queries.total", "Total number of queries executed")?;
counter.increment(1);counter.increment_by(5);Methods
new(name: &str, description: &str) -> Result<Counter>
Create a new counter.
increment(&self, value: u64)
Increment the counter by a value.
Histogram
Records distribution of values.
use heliosdb_observability::metrics::Histogram;
let histogram = Histogram::new( "db.query.latency", "Query execution latency in milliseconds")?;
histogram.record(123.45);Methods
new(name: &str, description: &str) -> Result<Histogram>
Create a new histogram.
record(&self, value: f64)
Record a value.
Gauge
Current value metric.
use heliosdb_observability::metrics::Gauge;
let gauge = Gauge::new( "db.connections.active", "Number of active database connections")?;
gauge.set(42);gauge.increment(1);gauge.decrement(1);Dashboard
DashboardServer
Real-time observability dashboard web server.
use heliosdb_observability::dashboard::DashboardServer;
let dashboard = DashboardServer::new("0.0.0.0:9090").await?;dashboard.start().await?;Methods
new(bind_address: &str) -> Result<DashboardServer>
Create a new dashboard server.
Parameters:
bind_address: Address to bind to (e.g., “0.0.0.0:9090”)
start(self) -> Result<()>
Start the dashboard server.
stop(&self) -> Result<()>
Stop the dashboard server.
Dashboard API Endpoints
GET /api/metrics
Get current metrics snapshot.
Response:
{ "timestamp": 1699876543, "metrics": { "query_count": 1234, "avg_latency_ms": 45.2, "error_rate": 0.02 }}GET /api/traces
Query traces.
Query Parameters:
start_time: Start timestamp (Unix seconds)end_time: End timestamp (Unix seconds)service: Filter by service namelimit: Max number of traces (default: 100)
Response:
{ "traces": [ { "trace_id": "abc123", "spans": [...], "duration_ms": 123 } ]}GET /api/health
Health check endpoint.
Response:
{ "status": "healthy", "uptime_seconds": 3600, "version": "1.0.0"}WebSocket /api/stream
Real-time metrics stream.
Message Format:
{ "type": "metric_update", "metric": "query_latency_p95", "value": 123.45, "timestamp": 1699876543}Alerting
AlertManager
Manages alerts and notifications.
use heliosdb_observability::dashboard::alerts::*;
let config = AlertConfig { email: Some(EmailConfig { ... }), slack: Some(SlackConfig { ... }), rules: vec![...],};
let manager = AlertManager::new(config)?;manager.start().await?;Methods
new(config: AlertConfig) -> Result<AlertManager>
Create a new alert manager.
start(&self) -> Result<()>
Start the alert manager.
add_rule(&self, rule: AlertRule) -> Result<()>
Add an alert rule.
remove_rule(&self, name: &str) -> Result<()>
Remove an alert rule.
AlertConfig
Alert configuration.
pub struct AlertConfig { pub email: Option<EmailConfig>, pub slack: Option<SlackConfig>, pub rules: Vec<AlertRule>,}AlertRule
Individual alert rule.
pub struct AlertRule { pub name: String, pub condition: AlertCondition, pub severity: Severity, pub enabled: bool,}Alert Conditions
pub enum AlertCondition { Threshold { metric: String, operator: ComparisonOperator, value: f64, }, RateChange { metric: String, window_seconds: u64, threshold_percentage: f64, }, Composite { conditions: Vec<AlertCondition>, operator: LogicalOperator, },}Severities
pub enum Severity { Info, Warning, Error, Critical,}Configuration
ObservabilityConfig
Main configuration structure.
use heliosdb_observability::config::ObservabilityConfig;
let config = ObservabilityConfig::from_file("observability.toml")?;config.apply().await?;Methods
from_file(path: &str) -> Result<ObservabilityConfig>
Load configuration from TOML file.
from_env() -> Result<ObservabilityConfig>
Load configuration from environment variables.
default() -> ObservabilityConfig
Get default configuration.
apply(self) -> Result<()>
Apply the configuration globally.
Configuration Schema
[observability]enabled = trueservice_name = "heliosdb"
[observability.sampling]rate = 1.0 # 0.0 to 1.0
[observability.exporters.otlp]enabled = trueendpoint = "http://localhost:4317"timeout_seconds = 30
[observability.exporters.jaeger]enabled = falseagent_host = "localhost"agent_port = 6831
[observability.exporters.prometheus]enabled = truebind_address = "0.0.0.0:9091"
[observability.dashboard]enabled = truehost = "0.0.0.0"port = 9090
[observability.alerts]enabled = trueemail_smtp = "smtp.gmail.com:587"slack_webhook = "https://hooks.slack.com/..."Context Propagation
TraceContext
Trace context for distributed tracing.
use heliosdb_observability::context::TraceContext;
// Get current contextlet context = TraceContext::current();
// Serialize for HTTP headerlet traceparent = context.to_w3c_traceparent();
// Deserialize from HTTP headerlet context = TraceContext::from_w3c_traceparent(&header)?;
// Attach contextcontext.attach();Methods
current() -> TraceContext
Get the current trace context.
to_w3c_traceparent(&self) -> String
Serialize to W3C Trace Context format.
Format: 00-<trace-id>-<span-id>-<flags>
from_w3c_traceparent(value: &str) -> Result<TraceContext>
Deserialize from W3C Trace Context format.
attach(&self)
Attach this context as the current context.
Span Builder
SpanBuilder
Build custom spans with attributes.
use heliosdb_observability::span_builder::SpanBuilder;
let span = SpanBuilder::new("db.query") .attribute("db.operation", "SELECT") .attribute("db.table", "users") .attribute("db.rows", 42) .start();
// Do work within spanlet _guard = span.enter();Methods
new(name: &str) -> SpanBuilder
Create a new span builder.
attribute(&mut self, key: &str, value: impl Into<Value>) -> &mut Self
Add an attribute to the span.
start(self) -> Span
Create and start the span.
Error Types
ObservabilityError
Main error type.
pub enum ObservabilityError { Configuration(String), Exporter(String), Network(String), Serialization(String),}Implements std::error::Error and Display.
Performance Characteristics
- Auto-instrumentation overhead: <5µs per operation
- Memory overhead: ~200 bytes per active span
- CPU overhead: <1% at 10,000 QPS
- Network latency: Async batching (configurable)
Thread Safety
All types are thread-safe (Send + Sync):
AutoInstrumenter: Global singletonCounter,Histogram,Gauge: Atomic operationsDashboardServer: Multi-threaded HTTP serverAlertManager: Concurrent rule evaluation
Version History
v1.0.0 (Current)
- Zero-configuration auto-instrumentation
- <5µs overhead
- OpenTelemetry compatibility
- Real-time dashboard
- Smart alerting
Examples
See /home/claude/HeliosDB/heliosdb-observability/examples/ for complete working examples.
License
MIT OR Apache-2.0