#[macro_export]
macro_rules! spawn_metrics {
($ctx:ident, future) => {
$crate::spawn_metrics!(
$crate::telemetry::metrics::task::Label::future($ctx.name.clone()),
@make $ctx
)
};
($ctx:ident, blocking, $dedicated:expr) => {
$crate::spawn_metrics!(
if $dedicated {
$crate::telemetry::metrics::task::Label::blocking_dedicated($ctx.name.clone())
} else {
$crate::telemetry::metrics::task::Label::blocking_shared($ctx.name.clone())
},
@make $ctx
)
};
($label:expr, @make $ctx:ident) => {{
let label = $label;
let metrics = &$ctx.executor.metrics;
metrics.tasks_spawned.get_or_create(&label).inc();
let gauge = metrics.tasks_running.get_or_create(&label).clone();
(label, gauge)
}};
}