1
pub use {
2
    metrics::{counter, gauge, histogram, Unit},
3
    std::time::Instant,
4
    tracing::{info, instrument},
5
};
6

            
7
#[derive(strum_macros::Display)]
8
pub enum MetricEvents {
9
    ProofExpired,
10
    ProvingFailed,
11
    ProvingSucceeded,
12
    ClaimAttempt,
13
    ClaimMissed,
14
    ClaimReceived,
15
    ImageDeployment,
16
    ImageDownload,
17
    ImageCompressed,
18
    ImageLoaded,
19
    ImageComputeEstimate,
20
    ExecutionRequest,
21
    ProofGeneration,
22
    ProofCompression,
23
    ProofConversion,
24
    InputDownload,
25
    ProofCycles,
26
    ProofSegments,
27
    BonsolStartup,
28
    SignaturesInFlight,
29
    IncompatibleProverVersion,
30
    ProofSubmissionError,
31
    TransactionExpired,
32
}
33

            
34
macro_rules! emit_event {
35
  ($event:expr, $($field_name:ident => $field_value:expr),* $(,)?) => {
36
      info!(event = $event.to_string(), $($field_name = $field_value),*, "Event: {}", $event);
37
      let c = counter!("events", "event" => $event.to_string());
38
      c.increment(1);
39
  };
40
}
41

            
42
macro_rules! emit_event_with_duration {
43
    ($event:expr, $op:block, $($field_name:ident => $field_value:expr),*) => {{
44
        let start = Instant::now();
45
        let result = $op;
46
        let duration_ms = start.elapsed().as_millis();
47
        info!(
48
            event = $event.to_string(),
49
            $($field_name = $field_value),*,
50
            "Duration: {} = {} ms", $event, duration_ms
51
        );
52
        let h = histogram!("durations", "duration" => $event.to_string());
53
        h.record(duration_ms as f64);
54
        result
55
    }};
56
}
57

            
58
macro_rules! emit_counter {
59
    ($event:expr, $value:expr, $($field_name:expr => $field_value:expr)*) => {
60
      info!(event = $event.to_string(), $($field_name = $field_value),*, "{} = {}", $event, $value);
61
      let c = counter!("counters", "counter" => $event.to_string());
62
      c.increment($value);
63
    };
64
}
65

            
66
macro_rules! emit_gauge {
67
    ($event:expr, $value:expr, $($field_name:expr => $field_value:expr)*) => {
68
        info!(event = $event.to_string(), $($field_name = $field_value),* "{} = {}", $event, $value);
69
        let g = gauge!("gauges", "gauge" => $event.to_string());
70
        g.set($value);
71
    };
72
}
73

            
74
macro_rules! emit_histogram {
75
    ($event:expr, $value:expr, $($field_name:ident => $field_value:expr),*) => {{
76
        info!(event = $event.to_string(), $($field_name = $field_value),*, "{} = {}", $event, $value);
77
        let h = histogram!("histograms", "histogram" => $event.to_string());
78
        h.record($value);
79
    }};
80
}