use lazy_static::lazy_static;
use serde::Serialize;
use std::sync::RwLock as StdRwLock;
mod metrics_exporter_file;
mod open_telemetry;
mod span_exporter_file;
pub use metrics_exporter_file::FileMetricExporter;
pub use open_telemetry::*;
pub use span_exporter_file::SpanExporterFile;
#[derive(Default, Serialize)]
#[allow(dead_code)]
pub struct Telemetry {
total_connections: usize,
total_clients: usize,
total_values_compressed: usize,
total_values_decompressed: usize,
total_original_bytes: usize,
total_bytes_compressed: usize,
total_bytes_decompressed: usize,
compression_skipped_count: usize,
subscription_out_of_sync_count: usize,
subscription_last_sync_timestamp: u64,
}
lazy_static! {
static ref TELEMETRY: StdRwLock<Telemetry> = StdRwLock::<Telemetry>::default();
}
const MUTEX_WRITE_ERR: &str = "Failed to obtain write lock for mutex. Poisoned mutex";
const MUTEX_READ_ERR: &str = "Failed to obtain read lock for mutex. Poisoned mutex";
impl Telemetry {
pub fn incr_total_connections(incr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_connections = t.total_connections.saturating_add(incr_by);
t.total_connections
}
pub fn decr_total_connections(decr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_connections = t.total_connections.saturating_sub(decr_by);
t.total_connections
}
pub fn incr_total_clients(incr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_clients = t.total_clients.saturating_add(incr_by);
t.total_clients
}
pub fn decr_total_clients(decr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_clients = t.total_clients.saturating_sub(decr_by);
t.total_clients
}
pub fn total_connections() -> usize {
TELEMETRY.read().expect(MUTEX_READ_ERR).total_connections
}
pub fn total_clients() -> usize {
TELEMETRY.read().expect(MUTEX_READ_ERR).total_clients
}
pub fn incr_total_values_compressed(incr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_values_compressed = t.total_values_compressed.saturating_add(incr_by);
t.total_values_compressed
}
pub fn total_values_compressed() -> usize {
TELEMETRY
.read()
.expect(MUTEX_READ_ERR)
.total_values_compressed
}
pub fn incr_total_values_decompressed(incr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_values_decompressed = t.total_values_decompressed.saturating_add(incr_by);
t.total_values_decompressed
}
pub fn total_values_decompressed() -> usize {
TELEMETRY
.read()
.expect(MUTEX_READ_ERR)
.total_values_decompressed
}
pub fn incr_total_original_bytes(incr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_original_bytes = t.total_original_bytes.saturating_add(incr_by);
t.total_original_bytes
}
pub fn total_original_bytes() -> usize {
TELEMETRY.read().expect(MUTEX_READ_ERR).total_original_bytes
}
pub fn incr_total_bytes_compressed(incr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_bytes_compressed = t.total_bytes_compressed.saturating_add(incr_by);
t.total_bytes_compressed
}
pub fn total_bytes_compressed() -> usize {
TELEMETRY
.read()
.expect(MUTEX_READ_ERR)
.total_bytes_compressed
}
pub fn incr_total_bytes_decompressed(incr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.total_bytes_decompressed = t.total_bytes_decompressed.saturating_add(incr_by);
t.total_bytes_decompressed
}
pub fn total_bytes_decompressed() -> usize {
TELEMETRY
.read()
.expect(MUTEX_READ_ERR)
.total_bytes_decompressed
}
pub fn incr_compression_skipped_count(incr_by: usize) -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.compression_skipped_count = t.compression_skipped_count.saturating_add(incr_by);
t.compression_skipped_count
}
pub fn compression_skipped_count() -> usize {
TELEMETRY
.read()
.expect(MUTEX_READ_ERR)
.compression_skipped_count
}
pub fn incr_subscription_out_of_sync() -> usize {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.subscription_out_of_sync_count = t.subscription_out_of_sync_count.saturating_add(1);
t.subscription_out_of_sync_count
}
pub fn subscription_out_of_sync_count() -> usize {
TELEMETRY
.read()
.expect(MUTEX_READ_ERR)
.subscription_out_of_sync_count
}
pub fn update_subscription_last_sync_timestamp(timestamp: u64) -> u64 {
let mut t = TELEMETRY.write().expect(MUTEX_WRITE_ERR);
t.subscription_last_sync_timestamp = timestamp;
t.subscription_last_sync_timestamp
}
pub fn subscription_last_sync_timestamp() -> u64 {
TELEMETRY
.read()
.expect(MUTEX_READ_ERR)
.subscription_last_sync_timestamp
}
pub fn reset() {
*TELEMETRY.write().expect(MUTEX_WRITE_ERR) = Telemetry::default();
}
}