mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-20 15:05:40 +00:00
e75ad88ae8
* Add runtime metrics provider Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Runner changes Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Some sample metrics in paras_inherent Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * update cargo toml Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fmt Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * bug Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * more fmt after merge Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Refactor metric prefix override Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fmt Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * remove bug comment Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Add runtime metric primitives Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Impl trace event parsing Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Update metrics Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * cargo lock Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fmt Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Fix target check Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Runtime metrics primitives Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Review feedback Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Runtime metrics crate Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Node side runtime metric changes Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * use runtime CounterVec instead of macro Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fmt nice Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * remove dead code Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * base58 decoding Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * base58 encoding Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fix warn Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * typo Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Review feedback Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Finish label support Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fmt Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * please compile Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * add feature gate Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fmt Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Comment cargo toml Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Fix cargo toml description Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Update doc. Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * switch to `runtime-metrics` feature Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fmt Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * cargo toml Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fix tests Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fixes Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * better ux Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * from_utf8_unchecked is safe Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fmt Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Add Counter and refactor Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Fixes Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * review fixes Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * more fixes Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * add integration test Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * dev deps Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * gitlab script update Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * review fixes Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fix merge damage Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Run tests twice Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * small fix Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * typo Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * cargo lock Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * tests Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * spellcheck happy ? Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * more fixes Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Guard tracing init Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * missing copyright Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * update lockfile for substrate Co-authored-by: parity-processbot <>
127 lines
3.7 KiB
Rust
127 lines
3.7 KiB
Rust
// Copyright 2021 Parity Technologies (UK) Ltd.
|
|
// This file is part of Polkadot.
|
|
|
|
// Polkadot is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Polkadot is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! This module provides an implementation for the runtime metrics types: `Counter`
|
|
//! and `CounterVec`. These types expose a Prometheus like interface and same functionality.
|
|
//! Each instance of a runtime metric is mapped to a Prometheus metric on the node side.
|
|
|
|
const TRACING_TARGET: &'static str = "metrics";
|
|
|
|
use parity_scale_codec::Encode;
|
|
use primitives::v1::{
|
|
RuntimeMetricLabelValues, RuntimeMetricOp, RuntimeMetricRegisterParams, RuntimeMetricUpdate,
|
|
};
|
|
use sp_std::prelude::*;
|
|
|
|
/// Holds a set of counters that have different values for their labels,
|
|
/// like Prometheus CounterVec.
|
|
pub struct CounterVec {
|
|
name: &'static str,
|
|
label_values: Option<RuntimeMetricLabelValues>,
|
|
}
|
|
|
|
/// A counter metric.
|
|
pub struct Counter {
|
|
name: &'static str,
|
|
}
|
|
|
|
/// Convenience trait implemented for all metric types.
|
|
trait MetricEmitter {
|
|
fn emit(metric_op: &RuntimeMetricUpdate) {
|
|
sp_tracing::event!(
|
|
target: TRACING_TARGET,
|
|
sp_tracing::Level::TRACE,
|
|
update_op = bs58::encode(&metric_op.encode()).into_string().as_str()
|
|
);
|
|
}
|
|
}
|
|
|
|
impl MetricEmitter for CounterVec {}
|
|
impl MetricEmitter for Counter {}
|
|
|
|
impl CounterVec {
|
|
/// Create a new metric with specified `name`, `description` and `labels`.
|
|
pub fn new(name: &'static str, description: &'static str, labels: &[&'static str]) -> Self {
|
|
// Send a register metric operation to node side.
|
|
let metric_update = RuntimeMetricUpdate {
|
|
metric_name: Vec::from(name),
|
|
op: RuntimeMetricOp::Register(RuntimeMetricRegisterParams::new(
|
|
Vec::from(description),
|
|
Some(labels.into()),
|
|
)),
|
|
};
|
|
|
|
Self::emit(&metric_update);
|
|
|
|
CounterVec { name, label_values: None }
|
|
}
|
|
|
|
/// Set the label values. Must be called before each increment operation.
|
|
pub fn with_label_values(&mut self, label_values: &[&'static str]) -> &mut Self {
|
|
self.label_values = Some(label_values.into());
|
|
self
|
|
}
|
|
|
|
/// Increment the counter by `value`.
|
|
pub fn inc_by(&mut self, value: u64) {
|
|
self.label_values.take().map(|label_values| {
|
|
let metric_update = RuntimeMetricUpdate {
|
|
metric_name: Vec::from(self.name),
|
|
op: RuntimeMetricOp::IncrementCounterVec(value, label_values),
|
|
};
|
|
|
|
Self::emit(&metric_update);
|
|
});
|
|
}
|
|
|
|
/// Increment the counter value.
|
|
pub fn inc(&mut self) {
|
|
self.inc_by(1);
|
|
}
|
|
}
|
|
|
|
impl Counter {
|
|
/// Create a new counter metric with specified `name`, `description`.
|
|
pub fn new(name: &'static str, description: &'static str) -> Self {
|
|
// Send a register metric operation to node side.
|
|
let metric_update = RuntimeMetricUpdate {
|
|
metric_name: Vec::from(name),
|
|
op: RuntimeMetricOp::Register(RuntimeMetricRegisterParams::new(
|
|
Vec::from(description),
|
|
None,
|
|
)),
|
|
};
|
|
|
|
Self::emit(&metric_update);
|
|
Counter { name }
|
|
}
|
|
|
|
/// Increment counter by `value`.
|
|
pub fn inc_by(&mut self, value: u64) {
|
|
let metric_update = RuntimeMetricUpdate {
|
|
metric_name: Vec::from(self.name),
|
|
op: RuntimeMetricOp::IncrementCounter(value),
|
|
};
|
|
|
|
Self::emit(&metric_update);
|
|
}
|
|
|
|
/// Increment counter.
|
|
pub fn inc(&mut self) {
|
|
self.inc_by(1);
|
|
}
|
|
}
|