This commit is contained in:
2023-07-23 23:41:26 +02:00
parent 1843da8d3f
commit 15353e789b
3 changed files with 142 additions and 14 deletions

138
Cargo.lock generated
View File

@@ -190,6 +190,29 @@ dependencies = [
"tower-service",
]
[[package]]
name = "axum-prometheus"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ab3e59a8cf89cddb1c8272c7849d6d22b056d7ed4c125422b5d012983d2aa9e"
dependencies = [
"axum",
"axum-core",
"bytes",
"futures",
"futures-core",
"http",
"http-body",
"matchit",
"metrics 0.21.1",
"metrics-exporter-prometheus 0.12.1",
"once_cell",
"pin-project",
"tokio",
"tower",
"tower-http",
]
[[package]]
name = "backtrace"
version = "0.3.68"
@@ -344,7 +367,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b"
dependencies = [
"borsh-derive",
"hashbrown 0.13.2",
"hashbrown 0.12.3",
]
[[package]]
@@ -1385,9 +1408,9 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.13.2"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038"
dependencies = [
"ahash 0.8.3",
]
@@ -1917,6 +1940,15 @@ dependencies = [
"libc",
]
[[package]]
name = "mach2"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8"
dependencies = [
"libc",
]
[[package]]
name = "match_cfg"
version = "0.1.0"
@@ -1981,7 +2013,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e52eb6380b6d2a10eb3434aec0885374490f5b82c8aaf5cd487a183c98be834"
dependencies = [
"ahash 0.7.6",
"metrics-macros",
"metrics-macros 0.5.1",
]
[[package]]
@@ -1991,7 +2023,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "142c53885123b68d94108295a09d4afe1a1388ed95b54d5dacd9a454753030f2"
dependencies = [
"ahash 0.7.6",
"metrics-macros",
"metrics-macros 0.5.1",
]
[[package]]
name = "metrics"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5"
dependencies = [
"ahash 0.8.3",
"metrics-macros 0.7.0",
"portable-atomic",
]
[[package]]
@@ -2006,7 +2049,25 @@ dependencies = [
"metrics 0.19.0",
"metrics-util 0.13.0",
"parking_lot 0.11.2",
"quanta",
"quanta 0.9.3",
"thiserror",
"tokio",
"tracing",
]
[[package]]
name = "metrics-exporter-prometheus"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a4964177ddfdab1e3a2b37aec7cf320e14169abb0ed73999f558136409178d5"
dependencies = [
"base64 0.21.2",
"hyper",
"indexmap 1.9.3",
"ipnet",
"metrics 0.21.1",
"metrics-util 0.15.1",
"quanta 0.11.1",
"thiserror",
"tokio",
"tracing",
@@ -2023,6 +2084,17 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "metrics-macros"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddece26afd34c31585c74a4db0630c376df271c285d682d1e55012197830b6df"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.27",
]
[[package]]
name = "metrics-util"
version = "0.12.1"
@@ -2039,9 +2111,9 @@ dependencies = [
"num_cpus",
"ordered-float",
"parking_lot 0.11.2",
"quanta",
"quanta 0.9.3",
"radix_trie",
"sketches-ddsketch",
"sketches-ddsketch 0.1.3",
]
[[package]]
@@ -2057,8 +2129,23 @@ dependencies = [
"metrics 0.19.0",
"num_cpus",
"parking_lot 0.11.2",
"quanta",
"sketches-ddsketch",
"quanta 0.9.3",
"sketches-ddsketch 0.1.3",
]
[[package]]
name = "metrics-util"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4de2ed6e491ed114b40b732e4d1659a9d53992ebd87490c44a6ffe23739d973e"
dependencies = [
"crossbeam-epoch",
"crossbeam-utils",
"hashbrown 0.13.1",
"metrics 0.21.1",
"num_cpus",
"quanta 0.11.1",
"sketches-ddsketch 0.2.1",
]
[[package]]
@@ -2842,6 +2929,12 @@ version = "0.3.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "portable-atomic"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edc55135a600d700580e406b4de0d59cb9ad25e344a3a091a97ded2622ec4ec6"
[[package]]
name = "postgres-native-tls"
version = "0.5.0"
@@ -3163,6 +3256,22 @@ dependencies = [
"winapi",
]
[[package]]
name = "quanta"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab"
dependencies = [
"crossbeam-utils",
"libc",
"mach2",
"once_cell",
"raw-cpuid",
"wasi 0.11.0+wasi-snapshot-preview1",
"web-sys",
"winapi",
]
[[package]]
name = "query-connector"
version = "0.1.0"
@@ -3235,7 +3344,7 @@ version = "0.1.0"
source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
dependencies = [
"metrics 0.18.1",
"metrics-exporter-prometheus",
"metrics-exporter-prometheus 0.10.0",
"metrics-util 0.12.1",
"once_cell",
"parking_lot 0.12.1",
@@ -4118,6 +4227,12 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04d2ecae5fcf33b122e2e6bd520a57ccf152d2dde3b38c71039df1a6867264ee"
[[package]]
name = "sketches-ddsketch"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68a406c1882ed7f29cd5e248c9848a80e7cb6ae0fea82346d2746f2f941c07e1"
[[package]]
name = "slab"
version = "0.4.8"
@@ -4969,6 +5084,7 @@ name = "users_settings_server"
version = "0.1.0"
dependencies = [
"axum",
"axum-prometheus",
"chrono",
"once_cell",
"prisma-client-rust",

View File

@@ -19,6 +19,7 @@ serde = { version = "1.0.163", features = ["derive"] }
tokio = { version = "1.28.2", features = ["full"] }
axum = { version = "0.6.18", features = ["json"] }
axum-prometheus = "0.3.4"
chrono = "0.4.26"
sentry = "0.31.5"

View File

@@ -1,4 +1,5 @@
use axum::{Router, response::Response, http::{StatusCode, self, Request}, middleware::{Next, self}, Extension};
use axum::{Router, response::Response, http::{StatusCode, self, Request}, middleware::{Next, self}, Extension, routing::get};
use axum_prometheus::PrometheusMetricLayer;
use tower_http::trace::{TraceLayer, self};
use tracing::Level;
use std::sync::Arc;
@@ -36,11 +37,22 @@ async fn auth<B>(req: Request<B>, next: Next<B>) -> Result<Response, StatusCode>
pub async fn get_router() -> Router {
let client = Arc::new(get_prisma_client().await);
Router::new()
let (prometheus_layer, metric_handle) = PrometheusMetricLayer::pair();
let app_router = Router::new()
.nest("/users/", users::get_router())
.nest("/languages/", languages::get_router())
.nest("/donate_notifications/", donate_notifications::get_router())
.layer(middleware::from_fn(auth))
.layer(Extension(client))
.layer(prometheus_layer);
let metric_router = Router::new()
.route("/metrics", get(|| async move { metric_handle.render() }));
Router::new()
.nest("/", app_router)
.nest("/", metric_router)
.layer(
TraceLayer::new_for_http()
.make_span_with(trace::DefaultMakeSpan::new()
@@ -48,5 +60,4 @@ pub async fn get_router() -> Router {
.on_response(trace::DefaultOnResponse::new()
.level(Level::INFO)),
)
.layer(Extension(client))
}