init4_bin_base/
lib.rs

1//! Shared utilities for Signet services.
2
3#![warn(
4    missing_copy_implementations,
5    missing_debug_implementations,
6    missing_docs,
7    unreachable_pub,
8    clippy::missing_const_for_fn,
9    rustdoc::all
10)]
11#![cfg_attr(not(test), warn(unused_crate_dependencies))]
12#![deny(unused_must_use, rust_2018_idioms)]
13#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
14
15#[cfg(feature = "perms")]
16/// Permissioning and authorization utilities for Signet builders.
17pub mod perms;
18
19/// Signet utilities.
20pub mod utils {
21    /// Prometheus metrics utilities.
22    pub mod metrics;
23
24    /// OpenTelemetry utilities.
25    pub mod otlp;
26
27    /// [`FromEnv`], [`FromEnvVar`] traits and related utilities.
28    ///
29    /// [`FromEnv`]: from_env::FromEnv
30    /// [`FromEnvVar`]: from_env::FromEnvVar
31    pub mod from_env;
32
33    /// Tracing utilities.
34    pub mod tracing;
35
36    /// Slot calculator for determining the current slot and timepoint within a
37    /// slot.
38    pub mod calc;
39}
40
41/// Re-exports of common dependencies.
42pub mod deps {
43    pub use metrics;
44    pub use opentelemetry;
45    pub use opentelemetry_otlp;
46    pub use opentelemetry_sdk;
47    pub use tracing;
48    pub use tracing_core;
49    pub use tracing_opentelemetry;
50    pub use tracing_subscriber;
51}
52
53/// Init metrics and tracing, including OTLP if enabled.
54///
55/// This will perform the following:
56/// - Read environment configuration for tracing
57/// - Determine whether to enable OTLP
58/// - Install a global tracing subscriber, using the OTLP provider if enabled
59/// - Read environment configuration for metrics
60/// - Install a global metrics recorder and serve it over HTTP on 0.0.0.0
61///
62/// See [`init_tracing`] and [`init_metrics`] for more
63/// details on specific actions taken and env vars read.
64///
65/// # Returns
66///
67/// The OpenTelemetry guard, if OTLP is enabled. This guard should be kept alive
68/// for the lifetime of the program to ensure the exporter continues to send
69/// data to the remote API.
70///
71/// [`init_tracing`]: utils::tracing::init_tracing
72/// [`init_metrics`]: utils::metrics::init_metrics
73pub fn init4() -> Option<utils::otlp::OtelGuard> {
74    let guard = utils::tracing::init_tracing();
75    utils::metrics::init_metrics();
76    guard
77}