Telemetry utilities.
Calling init_telemetry
registers a global slog
logger using slog_scope::set_global_logger
.
After that, calling slog_scope::with_logger
will return a logger that sends information to
the telemetry endpoints. The telemetry!
macro is a short-cut for calling
slog_scope::with_logger
followed with slog_log!
.
Note that you are supposed to only ever use telemetry!
and not slog_scope::with_logger
at
the moment. Substrate may eventually be reworked to get proper slog
support, including sending
information to the telemetry.
The [Telemetry
] struct implements Stream
and must be polled regularly (or sent to a
background thread/task) in order for the telemetry to properly function. Dropping the object
will also deregister the global logger and replace it with a logger that discards messages.
The Stream
generates [TelemetryEvent
]s.
Note: Cloning the [
Telemetry
] and polling from multiple clones has an unspecified behaviour.
```rust use futures::prelude::*;
let telemetry = sctelemetry::inittelemetry(sctelemetry::TelemetryConfig {
endpoints: sctelemetry::TelemetryEndpoints::new(vec![
// The 0
is the maximum verbosity level of messages to send to this endpoint.
("wss://example.com".into(), 0)
]).expect("Invalid URL or multiaddr provided"),
// Can be used to pass an external implementation of WebSockets.
wasmexternaltransport: None,
});
// The telemetry
object implements Stream
and must be processed.
std::thread::spawn(move || {
futures::executor::blockon(telemetry.foreach(|_| future::ready(())));
});
// Sends a message on the telemetry. sctelemetry::telemetry!(sctelemetry::SUBSTRATE_INFO; "test"; "foo" => "bar", ) ```
License: GPL-3.0-or-later WITH Classpath-exception-2.0