This commit is contained in:
2023-08-29 21:34:01 +02:00
parent 55d540a347
commit 1d0aa50263
5 changed files with 140 additions and 3 deletions

106
rust/Cargo.lock generated
View File

@@ -29,6 +29,15 @@ dependencies = [
"version_check", "version_check",
] ]
[[package]]
name = "aho-corasick"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "allocator-api2" name = "allocator-api2"
version = "0.2.16" version = "0.2.16"
@@ -746,6 +755,12 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "http-range-header"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
[[package]] [[package]]
name = "httparse" name = "httparse"
version = "1.8.0" version = "1.8.0"
@@ -901,6 +916,15 @@ version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "matchers"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
dependencies = [
"regex-automata 0.1.10",
]
[[package]] [[package]]
name = "matchit" name = "matchit"
version = "0.7.2" version = "0.7.2"
@@ -1085,6 +1109,7 @@ dependencies = [
"clap", "clap",
"futures", "futures",
"hyper", "hyper",
"log",
"maud", "maud",
"serde", "serde",
"serde_variant", "serde_variant",
@@ -1092,6 +1117,7 @@ dependencies = [
"time", "time",
"tokio", "tokio",
"tower", "tower",
"tower-http",
"tracing", "tracing",
"tracing-subscriber", "tracing-subscriber",
"uuid", "uuid",
@@ -1287,6 +1313,50 @@ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
] ]
[[package]]
name = "regex"
version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata 0.3.6",
"regex-syntax 0.7.4",
]
[[package]]
name = "regex-automata"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
dependencies = [
"regex-syntax 0.6.29",
]
[[package]]
name = "regex-automata"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax 0.7.4",
]
[[package]]
name = "regex-syntax"
version = "0.6.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
[[package]] [[package]]
name = "ring" name = "ring"
version = "0.16.20" version = "0.16.20"
@@ -1982,6 +2052,25 @@ dependencies = [
"tracing", "tracing",
] ]
[[package]]
name = "tower-http"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82"
dependencies = [
"bitflags 2.4.0",
"bytes",
"futures-core",
"futures-util",
"http",
"http-body",
"http-range-header",
"pin-project-lite",
"tower-layer",
"tower-service",
"tracing",
]
[[package]] [[package]]
name = "tower-layer" name = "tower-layer"
version = "0.3.2" version = "0.3.2"
@@ -2039,18 +2128,35 @@ dependencies = [
"tracing-core", "tracing-core",
] ]
[[package]]
name = "tracing-serde"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
dependencies = [
"serde",
"tracing-core",
]
[[package]] [[package]]
name = "tracing-subscriber" name = "tracing-subscriber"
version = "0.3.17" version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
dependencies = [ dependencies = [
"matchers",
"nu-ansi-term", "nu-ansi-term",
"once_cell",
"regex",
"serde",
"serde_json",
"sharded-slab", "sharded-slab",
"smallvec", "smallvec",
"thread_local", "thread_local",
"tracing",
"tracing-core", "tracing-core",
"tracing-log", "tracing-log",
"tracing-serde",
] ]
[[package]] [[package]]

View File

@@ -11,6 +11,9 @@ path = "src/main.rs"
opt-level = 0 opt-level = 0
lto = "off" lto = "off"
[dependencies.log]
version = "0.4"
[dependencies.clap] [dependencies.clap]
version = "4" version = "4"
features = ["derive"] features = ["derive"]
@@ -30,11 +33,16 @@ features = ["full"]
[dependencies.tower] [dependencies.tower]
version = "0.4" version = "0.4"
[dependencies.tower-http]
version = "0.4"
features = ["trace"]
[dependencies.tracing] [dependencies.tracing]
version = "0.1" version = "0.1"
[dependencies.tracing-subscriber] [dependencies.tracing-subscriber]
version = "0.3" version = "0.3"
features = ["json", "env-filter"]
[dependencies.maud] [dependencies.maud]
version = "0.25" version = "0.25"

View File

@@ -79,7 +79,10 @@ async fn main() -> MainResult {
match args.command { match args.command {
Command::Serve(serve_args) => { Command::Serve(serve_args) => {
tracing_subscriber::fmt() tracing_subscriber::fmt()
.with_max_level(tracing::Level::DEBUG) // .with_max_level(tracing::Level::DEBUG)
// .with_target(false)
.with_env_filter("none,packager=debug,request=debug,sqlx=debug")
.compact()
.init(); .init();
if let Err(e) = sqlite::migrate(&args.database_url).await { if let Err(e) = sqlite::migrate(&args.database_url).await {

View File

@@ -5,6 +5,9 @@ use axum::{
Router, Router,
}; };
use tower_http::trace;
use tracing::Level;
use crate::{AppState, Error, RequestError, TopLevelPage}; use crate::{AppState, Error, RequestError, TopLevelPage};
use super::auth; use super::auth;
@@ -123,4 +126,9 @@ pub fn router(state: AppState) -> Router {
}) })
}) })
.with_state(state) .with_state(state)
.layer(
trace::TraceLayer::new_for_http()
.make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO))
.on_response(trace::DefaultOnResponse::new().level(Level::INFO)),
)
} }

View File

@@ -1,4 +1,7 @@
use std::time;
use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions};
use sqlx::ConnectOptions;
pub use sqlx::{Pool, Sqlite}; pub use sqlx::{Pool, Sqlite};
use std::str::FromStr as _; use std::str::FromStr as _;
@@ -8,14 +11,23 @@ use crate::StartError;
pub async fn init_database_pool(url: &str) -> Result<Pool<Sqlite>, StartError> { pub async fn init_database_pool(url: &str) -> Result<Pool<Sqlite>, StartError> {
Ok(SqlitePoolOptions::new() Ok(SqlitePoolOptions::new()
.max_connections(5) .max_connections(5)
.connect_with(SqliteConnectOptions::from_str(url)?.pragma("foreign_keys", "1")) .connect_with(
SqliteConnectOptions::from_str(url)?
.log_statements(log::LevelFilter::Off)
.log_slow_statements(log::LevelFilter::Warn, time::Duration::from_millis(100))
.pragma("foreign_keys", "1"),
)
.await?) .await?)
} }
pub async fn migrate(url: &str) -> Result<(), StartError> { pub async fn migrate(url: &str) -> Result<(), StartError> {
let pool = SqlitePoolOptions::new() let pool = SqlitePoolOptions::new()
.max_connections(5) .max_connections(5)
.connect_with(SqliteConnectOptions::from_str(url)?.pragma("foreign_keys", "0")) .connect_with(
SqliteConnectOptions::from_str(url)?
.pragma("foreign_keys", "0")
.log_statements(log::LevelFilter::Off),
)
.await?; .await?;
sqlx::migrate!().run(&pool).await?; sqlx::migrate!().run(&pool).await?;