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 prometheus::{proto::{Histogram, Quantile, Summary}, Counter, Encoder, Opts, Registry, TextEncoder};
|
||||
use prometheus::{Encoder, TextEncoder, Counter, Opts, Registry};
|
||||
use std::sync::{Arc, Mutex};
|
||||
use tokio::net::TcpListener;
|
||||
|
||||
struct AppState {
|
||||
registry: Registry,
|
||||
counter: Mutex<Counter>,
|
||||
sum : Mutex<Summary>,
|
||||
}
|
||||
|
||||
async fn metrics_handler(State(state): State<Arc<AppState>>) -> String {
|
||||
let encoder = TextEncoder::new();
|
||||
let mut buffer = Vec::new();
|
||||
//
|
||||
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);
|
||||
let metric_families = state.registry.gather();
|
||||
encoder.encode(&metric_families, &mut buffer).unwrap();
|
||||
String::from_utf8(buffer).unwrap()
|
||||
}
|
||||
|
|
@ -36,66 +22,25 @@ async fn increment_handler(State(state): State<Arc<AppState>>) -> &'static str {
|
|||
"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]
|
||||
async fn main() {
|
||||
let registry = Registry::new();
|
||||
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();
|
||||
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 {
|
||||
registry,
|
||||
counter: Mutex::new(counter),
|
||||
sum : Mutex::new(sunops)
|
||||
});
|
||||
|
||||
let app = Router::new()
|
||||
.route("/metrics", get(metrics_handler))
|
||||
.route("/increment", get(increment_handler))
|
||||
.route("/sum", get(summary_handler))
|
||||
.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();
|
||||
}
|
||||
Loading…
Reference in New Issue