✨ Adds logging
This commit is contained in:
11
Cargo.lock
generated
11
Cargo.lock
generated
@@ -364,6 +364,15 @@ version = "2.3.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fern"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4316185f709b23713e41e3195f90edef7fb00c3ed4adc79769cf09cc762a3b29"
|
||||||
|
dependencies = [
|
||||||
|
"log",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "figment"
|
name = "figment"
|
||||||
version = "0.10.19"
|
version = "0.10.19"
|
||||||
@@ -1245,6 +1254,8 @@ dependencies = [
|
|||||||
"chrono",
|
"chrono",
|
||||||
"diesel",
|
"diesel",
|
||||||
"dotenv",
|
"dotenv",
|
||||||
|
"fern",
|
||||||
|
"log",
|
||||||
"rocket",
|
"rocket",
|
||||||
"serde",
|
"serde",
|
||||||
"uuid",
|
"uuid",
|
||||||
|
|||||||
@@ -10,3 +10,5 @@ dotenv = "0.15.0"
|
|||||||
uuid = { version = "1.18.1", features = ["v4", "serde"] }
|
uuid = { version = "1.18.1", features = ["v4", "serde"] }
|
||||||
diesel = { version = "2.3.2", features = ["postgres", "uuid", "chrono"] }
|
diesel = { version = "2.3.2", features = ["postgres", "uuid", "chrono"] }
|
||||||
chrono = "0.4.42"
|
chrono = "0.4.42"
|
||||||
|
log = "0.4.28"
|
||||||
|
fern = "0.7.1"
|
||||||
|
|||||||
@@ -35,10 +35,10 @@ pub fn index(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[get("/<id>")]
|
#[get("/<id>")]
|
||||||
pub fn get(id: String, state: &State<AppState>) -> Result<Json<HitDTO>, Status> {
|
pub fn get(id: &str, state: &State<AppState>) -> Result<Json<HitDTO>, Status> {
|
||||||
let mut db = state.db.lock().unwrap();
|
let mut db = state.db.lock().unwrap();
|
||||||
|
|
||||||
let id = match Uuid::parse_str(id.as_str()).ok() {
|
let id = match Uuid::parse_str(id).ok() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => return Err(Status::BadRequest),
|
None => return Err(Status::BadRequest),
|
||||||
};
|
};
|
||||||
@@ -55,10 +55,10 @@ pub fn get(id: String, state: &State<AppState>) -> Result<Json<HitDTO>, Status>
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[delete("/<id>")]
|
#[delete("/<id>")]
|
||||||
pub fn delete(id: String, state: &State<AppState>) -> Result<Status, Status> {
|
pub fn delete(id: &str, state: &State<AppState>) -> Result<Status, Status> {
|
||||||
let mut db = state.db.lock().unwrap();
|
let mut db = state.db.lock().unwrap();
|
||||||
|
|
||||||
let id = match Uuid::parse_str(id.as_str()).ok() {
|
let id = match Uuid::parse_str(id).ok() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => return Err(Status::BadRequest),
|
None => return Err(Status::BadRequest),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ impl<'r> FromRequest<'r> for ReqMeta {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[get("/<id>")]
|
#[get("/<id>")]
|
||||||
pub async fn get(id: String, meta: ReqMeta, state: &State<AppState>) -> Result<NamedFile, Status> {
|
pub async fn get(id: &str, meta: ReqMeta, state: &State<AppState>) -> Result<NamedFile, Status> {
|
||||||
let id = match Uuid::parse_str(id.as_str()).ok() {
|
let id = match Uuid::parse_str(id).ok() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => return Err(Status::BadRequest),
|
None => return Err(Status::BadRequest),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -35,10 +35,10 @@ pub fn index(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[get("/<id>")]
|
#[get("/<id>")]
|
||||||
pub fn get(id: String, state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
|
pub fn get(id: &str, state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
|
||||||
let mut db = state.db.lock().unwrap();
|
let mut db = state.db.lock().unwrap();
|
||||||
|
|
||||||
let id = match Uuid::parse_str(id.as_str()).ok() {
|
let id = match Uuid::parse_str(id).ok() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => return Err(Status::BadRequest),
|
None => return Err(Status::BadRequest),
|
||||||
};
|
};
|
||||||
@@ -75,10 +75,10 @@ pub fn create(state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[delete("/<id>")]
|
#[delete("/<id>")]
|
||||||
pub fn delete(id: String, state: &State<AppState>) -> Result<Status, Status> {
|
pub fn delete(id: &str, state: &State<AppState>) -> Result<Status, Status> {
|
||||||
let mut db = state.db.lock().unwrap();
|
let mut db = state.db.lock().unwrap();
|
||||||
|
|
||||||
let id = match Uuid::parse_str(id.as_str()).ok() {
|
let id = match Uuid::parse_str(id).ok() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => return Err(Status::BadRequest),
|
None => return Err(Status::BadRequest),
|
||||||
};
|
};
|
||||||
|
|||||||
25
src/main.rs
25
src/main.rs
@@ -6,8 +6,10 @@ mod schema;
|
|||||||
use crate::api::hit;
|
use crate::api::hit;
|
||||||
use crate::api::image;
|
use crate::api::image;
|
||||||
use crate::api::tracker;
|
use crate::api::tracker;
|
||||||
|
use chrono::Local;
|
||||||
use diesel::{Connection, PgConnection};
|
use diesel::{Connection, PgConnection};
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rocket;
|
extern crate rocket;
|
||||||
@@ -17,12 +19,33 @@ fn index() -> &'static str {
|
|||||||
"Hello world!"
|
"Hello world!"
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: add logging
|
|
||||||
// TODO: add auth
|
// TODO: add auth
|
||||||
|
|
||||||
|
fn setup_logging() -> Result<(), fern::InitError> {
|
||||||
|
let level_raw = env::var("LOG_LEVEL").unwrap_or("INFO".to_string());
|
||||||
|
let level = log::LevelFilter::from_str(&level_raw).expect("LOG_LEVEL invalid");
|
||||||
|
|
||||||
|
fern::Dispatch::new()
|
||||||
|
.format(|out, message, record| {
|
||||||
|
out.finish(format_args!(
|
||||||
|
"{} {} [{}] {}",
|
||||||
|
Local::now().format("%Y-%m-%d %H:%M:%S"),
|
||||||
|
record.level(),
|
||||||
|
record.target(),
|
||||||
|
message
|
||||||
|
))
|
||||||
|
})
|
||||||
|
.level(level)
|
||||||
|
.chain(std::io::stdout())
|
||||||
|
.apply()?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[launch]
|
#[launch]
|
||||||
fn rocket() -> _ {
|
fn rocket() -> _ {
|
||||||
dotenv::dotenv().ok();
|
dotenv::dotenv().ok();
|
||||||
|
setup_logging().expect("Failed to setup logging");
|
||||||
|
|
||||||
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
||||||
let image_path = env::var("IMAGE_PATH").expect("IMAGE_PATH must be set");
|
let image_path = env::var("IMAGE_PATH").expect("IMAGE_PATH must be set");
|
||||||
|
|||||||
Reference in New Issue
Block a user