Expand description
Oculus - Unified Telemetry Library
This crate provides the core functionality for the Oculus monitoring system.
It can be used as a library by other Rust projects, or run as a standalone
binary with the oculus executable.
§Architecture
- Collectors: Data collection from various sources (network, crypto, stock, prediction markets)
- Storage: SQLite-based persistence layer with async read/write separation
- Rule Engine: Simple (YAML) and complex (SQL) rule evaluation
- Presentation: Web UI and REST API
- Notification: Multi-channel alert delivery
§Quick Start
use oculus::{StorageBuilder, MetricSeries, MetricValue, MetricCategory, StaticTags};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Build storage layer
let handles = StorageBuilder::new("sqlite:oculus.db?mode=rwc").build().await?;
// Create and insert a metric
let series = MetricSeries::new(
MetricCategory::NetworkTcp,
"latency",
"127.0.0.1:6379",
StaticTags::new(),
Some("Redis latency".to_string()),
);
let value = MetricValue::new(series.series_id, 42.0, true);
handles.writer.upsert_metric_series(series)?;
handles.writer.insert_metric_value(value)?;
// Query metrics
let results = handles.metric_reader.query(Default::default()).await?;
println!("Found {} metrics", results.len());
handles.shutdown().await?;
Ok(())
}Re-exports§
pub use storage::DynamicTags;pub use storage::Event;pub use storage::EventKind;pub use storage::EventPayload;pub use storage::EventQuery;pub use storage::EventReader;pub use storage::EventSeverity;pub use storage::EventSource;pub use storage::MetricCategory;pub use storage::MetricQuery;pub use storage::MetricReader;pub use storage::MetricResult;pub use storage::MetricSeries;pub use storage::MetricValue;pub use storage::SortOrder;pub use storage::StaticTags;pub use storage::StorageAdmin;pub use storage::StorageBuilder;pub use storage::StorageError;pub use storage::StorageHandles;pub use storage::StorageWriter;pub use collector::Collector;pub use collector::CollectorError;pub use collector::CollectorRegistry;pub use collector::IpValidationError;pub use collector::JobInfo;pub use collector::Schedule;pub use collector::ping::PingCollector;pub use collector::ping::PingConfig;pub use collector::tcp::TcpCollector;pub use collector::tcp::TcpConfig;