Skip to main content

Monitoring

Performance Monitoring

Metrics Collection

rust

use std::time::Instant;
use opencv::core::Mat;
struct PerformanceMetrics {
processing_time: f64,
memory_usage: usize,
frames_processed: u64,
}
impl PerformanceMetrics {
fn measure_operation<F, R>(&mut self, operation: F) -> opencv::Result<R>
where
F: FnOnce() -> opencv::Result<R>,
{
let start = Instant::now();
let result = operation()?;
self.processing_time += start.elapsed().as_secs_f64();
self.frames_processed += 1;
Ok(result)
}
}

Memory Monitoring

rust

use opencv::core;
fn monitor_memory_usage() -> opencv::Result<()> {
let memory_info = core::get_memory_usage()?;
println!("Current memory usage: {} bytes", memory_info.current);
println!("Peak memory usage: {} bytes", memory_info.peak);
if memory_info.current > 1024 * 1024 * 1024 { // 1GB
println!("Warning: High memory usage detected");
}
Ok(())
}

Health Checks

Application Health Check

rust

use axum::{response::Json, routing::get, Router};
use serde_json::json;
async fn health_check() -> Json<serde_json::Value> {
let opencv_version = opencv::core::get_version_string();
let build_info = opencv::core::get_build_information();
Json(json!({
"status": "healthy",
"opencv_version": opencv_version,
"timestamp": chrono::Utc::now(),
"build_info": build_info.lines().take(5).collect::<Vec<_>>()
}))
}

Kubernetes Health Check

yaml

livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5

Logging and Tracing

Structured Logging

rust

use tracing::{info, warn, error, instrument};
use opencv::Result;
#[instrument]
fn process_image_with_logging(image_path: &str) -> Result<()> {
info!("Starting image processing", image_path = image_path);
let img = opencv::imgcodecs::imread(image_path, opencv::imgcodecs::IMREAD_COLOR)?;
if img.empty() {
error!("Failed to load image", image_path = image_path);
return Err(opencv::Error::new(opencv::core::StsError, "Empty image"));
}
info!("Image loaded successfully",
width = img.cols(),
height = img.rows());
Ok(())
}

Error Tracking

rust
use sentry;
fn setup_error_tracking() {
let _guard = sentry::init(("YOUR_SENTRY_DSN", sentry::ClientOptions {
release: sentry::release_name!(),
..Default::default()
}));
}
fn handle_opencv_error(error: opencv::Error) {
sentry::capture_error(&error);
error!("OpenCV error: {}", error);
}