Compare commits
No commits in common. "784a6f751709f564a25332a0177cac6dec1ef6c0" and "3039a66a11c2af847a32e30f0809cb3319ce5132" have entirely different histories.
784a6f7517
...
3039a66a11
|
|
@ -1,17 +0,0 @@
|
||||||
FROM rust:1.75 AS builder
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
RUN cargo build --release
|
|
||||||
|
|
||||||
FROM debian:bullseye-slim
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
# RUN sudo apt update
|
|
||||||
# RUN sudo apt install libc6
|
|
||||||
COPY --from=builder /app/target/release/exporter /app/server
|
|
||||||
EXPOSE 9100
|
|
||||||
|
|
||||||
CMD ["/app/server"]
|
|
||||||
|
|
@ -1,31 +1,17 @@
|
||||||
use axum::{extract::State, routing::get, Router};
|
use axum::{extract::State, routing::get, Router};
|
||||||
use prometheus::{proto::{Histogram, Quantile, Summary}, Counter, Encoder, Opts, Registry, TextEncoder};
|
use prometheus::{Encoder, TextEncoder, Counter, Opts, Registry};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
|
|
||||||
struct AppState {
|
struct AppState {
|
||||||
registry: Registry,
|
registry: Registry,
|
||||||
counter: Mutex<Counter>,
|
counter: Mutex<Counter>,
|
||||||
sum : Mutex<Summary>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn metrics_handler(State(state): State<Arc<AppState>>) -> String {
|
async fn metrics_handler(State(state): State<Arc<AppState>>) -> String {
|
||||||
let encoder = TextEncoder::new();
|
let encoder = TextEncoder::new();
|
||||||
let mut buffer = Vec::new();
|
let mut buffer = Vec::new();
|
||||||
//
|
let metric_families = state.registry.gather();
|
||||||
let mut fm = prometheus::proto::MetricFamily::new();
|
|
||||||
// prometheus::Registry::
|
|
||||||
let mut met = prometheus::proto::Metric::new();
|
|
||||||
let mutex_guard = state.sum.lock().unwrap();
|
|
||||||
met.set_summary(mutex_guard.clone());
|
|
||||||
// let metric = met.take_label();
|
|
||||||
fm.set_metric(vec![met].into());
|
|
||||||
fm.set_help("example summary".to_string());
|
|
||||||
fm.set_name("example_summary".to_string());
|
|
||||||
fm.set_field_type(prometheus::proto::MetricType::SUMMARY);
|
|
||||||
|
|
||||||
let mut metric_families = state.registry.gather();
|
|
||||||
metric_families.push(fm);
|
|
||||||
encoder.encode(&metric_families, &mut buffer).unwrap();
|
encoder.encode(&metric_families, &mut buffer).unwrap();
|
||||||
String::from_utf8(buffer).unwrap()
|
String::from_utf8(buffer).unwrap()
|
||||||
}
|
}
|
||||||
|
|
@ -36,66 +22,25 @@ async fn increment_handler(State(state): State<Arc<AppState>>) -> &'static str {
|
||||||
"Counter incremented"
|
"Counter incremented"
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn summary_handler(State(state): State<Arc<AppState>>) -> &'static str {
|
|
||||||
let mut sum = state.sum.lock().unwrap();
|
|
||||||
let qs = sum.get_quantile();
|
|
||||||
let new_qs: Vec<Quantile> = qs
|
|
||||||
.into_iter()
|
|
||||||
.enumerate()
|
|
||||||
.map(|(idx, q)| {
|
|
||||||
let mut q = q.to_owned();
|
|
||||||
q.set_value(q.get_value() + idx as f64);
|
|
||||||
// q.set_quantile(q.get_quantile() * 2.0);
|
|
||||||
q
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
sum.set_quantile(new_qs.into());
|
|
||||||
"Summary changed"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let registry = Registry::new();
|
let registry = Registry::new();
|
||||||
let counter_opts = Opts::new("example_counter", "Пример счётчика");
|
let counter_opts = Opts::new("example_counter", "Пример счётчика");
|
||||||
// let histogram_opts = Opts::new("example_histogram", "Пример histogram");
|
|
||||||
|
|
||||||
use prometheus::proto::{Summary, Quantile};
|
|
||||||
// use prometheus::proto::
|
|
||||||
|
|
||||||
// let guage = prometheus::ProtobufEncoder::new();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let mut sunops = Summary::new();
|
|
||||||
let mut q1 = Quantile::new();
|
|
||||||
let mut q2 = Quantile::new();
|
|
||||||
|
|
||||||
q1.set_quantile(25.0);
|
|
||||||
q2.set_quantile(75.0);
|
|
||||||
// prometheus::proto::Metric::
|
|
||||||
|
|
||||||
let vq = vec![q1, q2];
|
|
||||||
sunops.set_quantile(vq.into());
|
|
||||||
|
|
||||||
let counter = Counter::with_opts(counter_opts).unwrap();
|
let counter = Counter::with_opts(counter_opts).unwrap();
|
||||||
registry.register(Box::new(counter.clone())).unwrap();
|
registry.register(Box::new(counter.clone())).unwrap();
|
||||||
// registry.register(Box::new(prometheus::proto::MetricFamily::));
|
|
||||||
// registry.register(Box::new(sunops.clone())).unwrap();
|
|
||||||
|
|
||||||
|
|
||||||
let state = Arc::new(AppState {
|
let state = Arc::new(AppState {
|
||||||
registry,
|
registry,
|
||||||
counter: Mutex::new(counter),
|
counter: Mutex::new(counter),
|
||||||
sum : Mutex::new(sunops)
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route("/metrics", get(metrics_handler))
|
.route("/metrics", get(metrics_handler))
|
||||||
.route("/increment", get(increment_handler))
|
.route("/increment", get(increment_handler))
|
||||||
.route("/sum", get(summary_handler))
|
|
||||||
.with_state(state.clone());
|
.with_state(state.clone());
|
||||||
|
|
||||||
let listener = TcpListener::bind("0.0.0.0:9100").await.unwrap();
|
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();
|
axum::serve(listener, app).await.unwrap();
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue