Include time since start of process
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user