mock exporter added
parent
90588b27d5
commit
3039a66a11
|
|
@ -1,7 +1,7 @@
|
|||
[workspace]
|
||||
resolver = "2"
|
||||
members = [
|
||||
"crates/api-grub", "crates/config-delivery", "crates/integr-structs", "crates/preproc",
|
||||
"crates/api-grub", "crates/config-delivery", "crates/exporter", "crates/integr-structs", "crates/preproc",
|
||||
]
|
||||
|
||||
[profile.dev]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
[package]
|
||||
name = "exporter"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
axum = "0.8.1"
|
||||
prometheus = "0.13.4"
|
||||
tokio = { version = "1.43.0", features = ["full"] }
|
||||
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
use axum::{extract::State, routing::get, Router};
|
||||
use prometheus::{Encoder, TextEncoder, Counter, Opts, Registry};
|
||||
use std::sync::{Arc, Mutex};
|
||||
use tokio::net::TcpListener;
|
||||
|
||||
struct AppState {
|
||||
registry: Registry,
|
||||
counter: Mutex<Counter>,
|
||||
}
|
||||
|
||||
async fn metrics_handler(State(state): State<Arc<AppState>>) -> String {
|
||||
let encoder = TextEncoder::new();
|
||||
let mut buffer = Vec::new();
|
||||
let metric_families = state.registry.gather();
|
||||
encoder.encode(&metric_families, &mut buffer).unwrap();
|
||||
String::from_utf8(buffer).unwrap()
|
||||
}
|
||||
|
||||
async fn increment_handler(State(state): State<Arc<AppState>>) -> &'static str {
|
||||
let mut counter = state.counter.lock().unwrap();
|
||||
counter.inc();
|
||||
"Counter incremented"
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let registry = Registry::new();
|
||||
let counter_opts = Opts::new("example_counter", "Пример счётчика");
|
||||
let counter = Counter::with_opts(counter_opts).unwrap();
|
||||
registry.register(Box::new(counter.clone())).unwrap();
|
||||
|
||||
let state = Arc::new(AppState {
|
||||
registry,
|
||||
counter: Mutex::new(counter),
|
||||
});
|
||||
|
||||
let app = Router::new()
|
||||
.route("/metrics", get(metrics_handler))
|
||||
.route("/increment", get(increment_handler))
|
||||
.with_state(state.clone());
|
||||
|
||||
let listener = TcpListener::bind("0.0.0.0:8080").await.unwrap();
|
||||
// axum::Server::from_tcp(listener).unwrap().serve(app.into_make_service()).await.unwrap();
|
||||
// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
}
|
||||
Loading…
Reference in New Issue