use std::collections::HashMap;
use substreams::prelude::*;
use substreams::errors::Error;
use substreams_sink_prometheus::{PrometheusOperations, Counter, Gauge};
#[substreams::handlers::map]
fn prom_out(
... some stores ...
) -> Result<PrometheusOperations, Error> {
// Initialize Prometheus Operations container
let mut prom_ops: PrometheusOperations = Default::default();
// Counter Metric
// ==============
// Initialize Gauge with a name & labels
let mut counter = Counter::from("counter_name");
// Increments the Counter by 1.
prom_ops.push(counter.inc());
// Adds an arbitrary value to a Counter. (Returns an error if the value is < 0.)
prom_ops.push(counter.add(123.456));
// Labels
// ======
// Create a HashMap of labels
// Labels represents a collection of label name -> value mappings.
let labels1 = HashMap::from([("label1".to_string(), "value1".to_string())]);
let mut labels2 = HashMap::new();
labels2.insert("label2".to_string(), "value2".to_string());
// Gauge Metric
// ============
// Initialize Gauge
let mut gauge = Gauge::from("gauge_name").with(labels1);
// Sets the Gauge to an arbitrary value.
prom_ops.push(gauge.set(88.8));
// Increments the Gauge by 1.
prom_ops.push(gauge.inc());
// Decrements the Gauge by 1.
prom_ops.push(gauge.dec());
// Adds an arbitrary value to a Gauge. (The value can be negative, resulting in a rease of the Gauge.)
prom_ops.push(gauge.add(50.0));
prom_ops.push(gauge.add(-10.0));
// Subtracts arbitrary value from the Gauge. (The value can be negative, resulting in an rease of the Gauge.)
prom_ops.push(gauge.sub(25.0));
prom_ops.push(gauge.sub(-5.0));
// Set Gauge to the current Unix time in seconds.
prom_ops.push(gauge.set_to_current_time());
// Remove metrics for the given label values
prom_ops.push(gauge.remove(labels2));
// Reset gauge values
prom_ops.push(gauge.reset());
Ok(prom_ops)
}