Include time since start of process

This commit is contained in:
Douglas Creager
2025-02-06 14:01:23 -05:00
parent e73374c146
commit 5ec0cb32f8

View File

@@ -43,7 +43,12 @@ impl JsonRecorder {
.to_str()
.unwrap()
.to_string();
let storage = PrerenderedAtomicStorage { dest, executable };
let start = SystemTime::now();
let storage = PrerenderedAtomicStorage {
dest,
executable,
start,
};
let registry = Registry::new(storage);
JsonRecorder { registry }
}
@@ -74,6 +79,7 @@ impl Recorder for JsonRecorder {
struct PrerenderedAtomicStorage {
dest: Arc<Mutex<dyn Write + Send>>,
executable: String,
start: SystemTime,
}
impl Storage<Key> for PrerenderedAtomicStorage {
@@ -82,15 +88,30 @@ impl Storage<Key> for PrerenderedAtomicStorage {
type Histogram = Arc<Metric>;
fn counter(&self, key: &Key) -> Self::Counter {
Arc::new(Metric::new(self.executable.clone(), key, self.dest.clone()))
Arc::new(Metric::new(
self.executable.clone(),
self.start,
key,
self.dest.clone(),
))
}
fn gauge(&self, key: &Key) -> Self::Gauge {
Arc::new(Metric::new(self.executable.clone(), key, self.dest.clone()))
Arc::new(Metric::new(
self.executable.clone(),
self.start,
key,
self.dest.clone(),
))
}
fn histogram(&self, key: &Key) -> Self::Histogram {
Arc::new(Metric::new(self.executable.clone(), key, self.dest.clone()))
Arc::new(Metric::new(
self.executable.clone(),
self.start,
key,
self.dest.clone(),
))
}
}
@@ -100,11 +121,17 @@ struct Metric {
/// having to re-render the information about the metrics key.)
name_and_labels: String,
dest: Arc<Mutex<dyn Write + Send>>,
start: SystemTime,
value: AtomicU64,
}
impl Metric {
fn new(executable: String, key: &Key, dest: Arc<Mutex<dyn Write + Send>>) -> Metric {
fn new(
executable: String,
start: SystemTime,
key: &Key,
dest: Arc<Mutex<dyn Write + Send>>,
) -> Metric {
let mut json = Map::default();
json.insert("executable".to_string(), executable.into());
json.insert("key".to_string(), key.name().into());
@@ -118,6 +145,7 @@ impl Metric {
Metric {
name_and_labels,
dest,
start,
value: AtomicU64::default(),
}
}
@@ -138,6 +166,14 @@ impl Metric {
if let Ok(timestamp) = SystemTime::now().duration_since(UNIX_EPOCH) {
write!(&mut buffer, ",\"timestamp\":{}", timestamp.as_secs_f64()).unwrap();
}
if let Ok(since_start) = SystemTime::now().duration_since(self.start) {
write!(
&mut buffer,
",\"since_start\":{}",
since_start.as_secs_f64()
)
.unwrap();
}
f(&mut buffer);
buffer.push_str("}\n");
let _ = self.dest.lock().unwrap().write(buffer.as_bytes());