commonware_runtime/
macros.rs

1//! Macros shared across runtime implementations.
2
3/// Prepare metrics for a spawned task.
4///
5/// This macro returns a tuple `(Label, Gauge)`:
6/// - `Label`: A label representing the task's metrics.
7/// - `Gauge`: A gauge tracking the number of running tasks with the given label.
8#[macro_export]
9macro_rules! spawn_metrics {
10    // Handle future tasks
11    ($ctx:ident, future) => {
12        $crate::spawn_metrics!(
13            $crate::telemetry::metrics::task::Label::future($ctx.name.clone()),
14            @make $ctx
15        )
16    };
17
18    // Handle blocking tasks
19    ($ctx:ident, blocking, $dedicated:expr) => {
20        $crate::spawn_metrics!(
21            if $dedicated {
22                $crate::telemetry::metrics::task::Label::blocking_dedicated($ctx.name.clone())
23            } else {
24                $crate::telemetry::metrics::task::Label::blocking_shared($ctx.name.clone())
25            },
26            @make $ctx
27        )
28    };
29
30    // Increment the number of spawned tasks and return a gauge for the number of running tasks
31    ($label:expr, @make $ctx:ident) => {{
32        let label = $label;
33        let metrics = &$ctx.executor.metrics;
34        metrics.tasks_spawned.get_or_create(&label).inc();
35        let gauge = metrics.tasks_running.get_or_create(&label).clone();
36        (label, gauge)
37    }};
38}