mirror of
https://github.com/neondatabase/neon.git
synced 2026-05-18 21:50:37 +00:00
Implement proxy metrics collection. Only collect metric for outbound traffic. Add proxy CLI parameters: - metric-collection-endpoint - metric-collection-interval. Add test_proxy_metric_collection test. Move shared consumption metrics code to libs/consumption_metrics. Refactor the code.
51 lines
1.1 KiB
Rust
51 lines
1.1 KiB
Rust
//!
|
|
//! Shared code for consumption metics collection
|
|
//!
|
|
use chrono::{DateTime, Utc};
|
|
use rand::Rng;
|
|
use serde::Serialize;
|
|
|
|
#[derive(Serialize, Debug, Clone, Eq, PartialEq, Ord, PartialOrd)]
|
|
#[serde(tag = "type")]
|
|
pub enum EventType {
|
|
#[serde(rename = "absolute")]
|
|
Absolute { time: DateTime<Utc> },
|
|
#[serde(rename = "incremental")]
|
|
Incremental {
|
|
start_time: DateTime<Utc>,
|
|
stop_time: DateTime<Utc>,
|
|
},
|
|
}
|
|
|
|
#[derive(Serialize, Debug, Clone, Eq, PartialEq, Ord, PartialOrd)]
|
|
pub struct Event<Extra> {
|
|
#[serde(flatten)]
|
|
#[serde(rename = "type")]
|
|
pub kind: EventType,
|
|
|
|
pub metric: &'static str,
|
|
pub idempotency_key: String,
|
|
pub value: u64,
|
|
|
|
#[serde(flatten)]
|
|
pub extra: Extra,
|
|
}
|
|
|
|
pub fn idempotency_key(node_id: String) -> String {
|
|
format!(
|
|
"{}-{}-{:04}",
|
|
Utc::now(),
|
|
node_id,
|
|
rand::thread_rng().gen_range(0..=9999)
|
|
)
|
|
}
|
|
|
|
pub const CHUNK_SIZE: usize = 1000;
|
|
|
|
// Just a wrapper around a slice of events
|
|
// to serialize it as `{"events" : [ ] }
|
|
#[derive(serde::Serialize)]
|
|
pub struct EventChunk<'a, T> {
|
|
pub events: &'a [T],
|
|
}
|