diff --git a/.gitignore b/.gitignore index ea8c4bf..b398468 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /target +.env +logs/* \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 87f9689..da5c71a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -216,9 +216,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cfg_aliases" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" @@ -308,6 +308,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-queue" version = "0.3.11" @@ -411,6 +420,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + [[package]] name = "dotenvy" version = "0.15.7" @@ -471,6 +486,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "etag" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b3d0661a2ccddc26cba0b834e9b717959ed6fdd76c7129ee159c170a875bf44" +dependencies = [ + "str-buf", + "xxhash-rust", +] + [[package]] name = "etcetera" version = "0.8.0" @@ -752,6 +777,7 @@ name = "hfnf_api" version = "0.1.0" dependencies = [ "chrono", + "dotenv", "once_cell", "salvo", "serde", @@ -760,6 +786,7 @@ dependencies = [ "sqlx", "tokio", "tracing", + "tracing-appender", "tracing-subscriber", ] @@ -1184,9 +1211,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.5.0", "cfg-if", @@ -1504,30 +1531,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" version = "1.0.84" @@ -1784,20 +1787,21 @@ checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "salvo" -version = "0.67.2" +version = "0.68.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9c3b8a19a979684f77dac4e4dd82422dde15a11f9e906a86f31ee6b6723a7c9" +checksum = "84cdee7d554e518e0537bc21f4369650b4e1c6977d75ed9b5f41b5df29287e00" dependencies = [ "salvo-jwt-auth", "salvo-proxy", "salvo_core", + "salvo_extra", ] [[package]] name = "salvo-jwt-auth" -version = "0.67.2" +version = "0.68.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da5f53c0f28a93ae3add52425748ebf42d5e073178d2dffceb48fec5ff7ef459" +checksum = "3cc0edb93d343444aca0cb89de4be1129090573f5d072631fb82b893e53bbc09" dependencies = [ "base64 0.22.1", "bytes", @@ -1815,9 +1819,9 @@ dependencies = [ [[package]] name = "salvo-proxy" -version = "0.67.2" +version = "0.68.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cda3586fa13135e1e1db40373c4b0f2b08fe171b152e0a4fdae003e05cf959" +checksum = "7a0ed558af2b82d978e0800bb9e3a4e67ecc65dce39ce487c177351f3fb95f6a" dependencies = [ "fastrand", "futures-util", @@ -1833,11 +1837,10 @@ dependencies = [ [[package]] name = "salvo-serde-util" -version = "0.67.2" +version = "0.68.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c209177b0fe85620dff6102d6ea8f8b1c2964560d053bb70c088b5f6c77610a0" +checksum = "c21c0e07fcf03e5515718437813e57e4868af5ad26a08e341be5cb52cfe71e3f" dependencies = [ - "proc-macro-error", "proc-macro2", "quote", "syn 2.0.66", @@ -1845,9 +1848,9 @@ dependencies = [ [[package]] name = "salvo_core" -version = "0.67.2" +version = "0.68.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05989a88a3d5a6a178aee40cd9439890bcccb5c78cdd127def079ab19c371ec" +checksum = "fa66d41e1a3bcfd0e554eb16a49d100130e2773ae7ec5bdf82ef4ebcdb06babb" dependencies = [ "async-trait", "base64 0.22.1", @@ -1889,10 +1892,30 @@ dependencies = [ ] [[package]] -name = "salvo_macros" -version = "0.67.2" +name = "salvo_extra" +version = "0.68.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899f4bcf047987eae63d497226c6b56473b53db827cccee3fb08f7bbc252aaa6" +checksum = "b0fe3f49052570e7407a94b59333d20f484fa942a3879df0d2155b004b7a3c71" +dependencies = [ + "base64 0.22.1", + "etag", + "futures-util", + "hyper", + "pin-project", + "salvo_core", + "serde", + "serde_json", + "tokio", + "tokio-tungstenite", + "tracing", + "ulid", +] + +[[package]] +name = "salvo_macros" +version = "0.68.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7930ba24f36bdd6f5e689a655f1686a6f82145cc89b62c36fd945ec8c08fdd01" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2338,6 +2361,12 @@ dependencies = [ "urlencoding", ] +[[package]] +name = "str-buf" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceb97b7225c713c2fd4db0153cb6b3cab244eb37900c3f634ed4d43310d8c34" + [[package]] name = "stringprep" version = "0.1.5" @@ -2564,6 +2593,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-tungstenite" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "becd34a233e7e31a3dbf7c7241b38320f57393dcae8e7324b0167d21b8e320b0" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + [[package]] name = "tokio-util" version = "0.7.11" @@ -2633,6 +2674,18 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.27" @@ -2685,12 +2738,37 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +dependencies = [ + "byteorder", + "bytes", + "log", + "rand", + "thiserror", + "utf-8", +] + [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "ulid" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34778c17965aa2a08913b57e1f34db9b4a63f5de31768b55bf20d2795f921259" +dependencies = [ + "getrandom", + "rand", + "web-time", +] + [[package]] name = "unicase" version = "2.7.0" @@ -2772,6 +2850,12 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "valuable" version = "0.1.0" @@ -2900,6 +2984,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "whoami" version = "1.5.1" @@ -3105,6 +3199,12 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" +[[package]] +name = "xxhash-rust" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927da81e25be1e1a2901d59b81b37dd2efd1fc9c9345a55007f09bf5a2d3ee03" + [[package]] name = "zerocopy" version = "0.7.34" diff --git a/Cargo.toml b/Cargo.toml index 29ab638..38367a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -salvo = "0.67" +salvo = { version = "0.68", features = ["logging"]} tokio = { version = "1", features = ["macros"] } tracing = "0.1" tracing-subscriber = "0.3" @@ -14,3 +14,5 @@ serde_json = "1.0.117" once_cell = "1.19.0" chrono = { version = "0.4", features = ["serde"] } serde_with = "3.8.1" +dotenv = "0.15.0" +tracing-appender = "0.2.3" diff --git a/src/main.rs b/src/main.rs index 027c3ee..b29b163 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,18 @@ use chrono::{DateTime, Utc, FixedOffset}; use once_cell::sync::OnceCell; +use salvo::logging::Logger; use salvo::prelude::*; use serde::{Deserialize, Serialize, Serializer}; use sqlx::{FromRow, PgPool}; +use std::env; +use dotenv::dotenv; +use tracing::level_filters::LevelFilter; +use tracing_subscriber::{ + fmt::{self}, + layer::SubscriberExt, + util::SubscriberInitExt, + Layer, +}; static POSTGRES: OnceCell = OnceCell::new(); @@ -44,13 +54,21 @@ async fn get_mplogx(req: &mut Request, res: &mut Response) { #[tokio::main] async fn main() { - tracing_subscriber::fmt().init(); + dotenv().ok(); + let console = fmt::Layer::new().with_ansi(false).pretty(); + + let file_appender = tracing_appender::rolling::daily("./logs", "api_log"); + let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender); + let file = fmt::Layer::new().with_ansi(false).pretty().with_writer(non_blocking).with_filter(LevelFilter::WARN); - let db_url = "postgresql+psycopg2://postgres:zcDsj2021@49.232.14.174:5432/hfnf"; - let pool = PgPool::connect(db_url).await.unwrap(); + tracing_subscriber::registry().with(console).with(file).init(); + + let db_url = env::var("DB_URL").expect("DB_URL must be set"); + let pool = PgPool::connect(&db_url).await.unwrap(); POSTGRES.set(pool).unwrap(); let router = Router::with_path("mplogx").post(get_mplogx); - let acceptor = TcpListener::new("127.0.0.1:5800").bind().await; - Server::new(acceptor).serve(router).await; + let service = Service::new(router).hoop(Logger::new()); + let acceptor = TcpListener::new("0.0.0.0:5800").bind().await; + Server::new(acceptor).serve(service).await; } \ No newline at end of file