Skip to content

Commit

Permalink
Implemented abstracted logging methods for requests elapsed time and …
Browse files Browse the repository at this point in the history
…for rejected api tokens
  • Loading branch information
danielsanchezq committed Aug 3, 2020
1 parent 62d219f commit 0819356
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 15 deletions.
1 change: 1 addition & 0 deletions vit-servicing-station-lib/src/lib.rs
Expand Up @@ -7,6 +7,7 @@ extern crate structopt;
extern crate diesel_migrations;

pub mod db;
mod logging;
pub mod server;
pub mod utils;
pub mod v0;
27 changes: 27 additions & 0 deletions vit-servicing-station-lib/src/logging/mod.rs
@@ -0,0 +1,27 @@
use logging_lib::messages::{DefaultLogMessageBuilder, DefaultMetadata, LogMessageId};
use std::time::Duration;

pub fn log_request_elapsed_time(elapsed_time: Duration) {
let elapsed = elapsed_time.as_nanos().to_string();
let mut metadata = DefaultMetadata::new();
metadata.insert("elapsed_nano_seconds".into(), elapsed.clone());
DefaultLogMessageBuilder::new()
.with_level(log::Level::Info)
.with_tags(vec!["request", "elapsed"])
.with_message(format!("Request elapsed time: {}ns", elapsed))
.with_id(LogMessageId::Other("request_elapsed_time".into()))
.build()
.log();
}

pub fn log_rejected_api_key(api_key: String) {
let mut metadata = DefaultMetadata::new();
metadata.insert("api_key".into(), api_key.clone());
DefaultLogMessageBuilder::new()
.with_level(log::Level::Info)
.with_tags(vec!["api_key", "reject"])
.with_message(format!("Rejected API-Token: {}", api_key))
.with_id(LogMessageId::Other("RejectedAPIToken".into()))
.build()
.log();
}
7 changes: 5 additions & 2 deletions vit-servicing-station-lib/src/v0/api_token.rs
Expand Up @@ -61,7 +61,7 @@ async fn authorize_token(token: String, context: SharedContext) -> Result<(), Re
let manager = APITokenManager::new(context.read().await.db_connection_pool.clone());

let mut token_vec: Vec<u8> = Vec::new();
base64::decode_config_buf(token, base64::URL_SAFE, &mut token_vec).map_err(|_err| {
base64::decode_config_buf(token.clone(), base64::URL_SAFE, &mut token_vec).map_err(|_err| {
warp::reject::custom(HandleError::InvalidHeader(
API_TOKEN_HEADER,
"header should be base64 url safe decodable",
Expand All @@ -72,7 +72,10 @@ async fn authorize_token(token: String, context: SharedContext) -> Result<(), Re

match manager.is_token_valid(api_token).await {
Ok(true) => Ok(()),
Ok(false) => Err(warp::reject::custom(HandleError::UnauthorizedToken)),
Ok(false) => {
crate::logging::log_rejected_api_key(token);
Err(warp::reject::custom(HandleError::UnauthorizedToken))
}
Err(e) => Err(warp::reject::custom(e)),
}
}
Expand Down
14 changes: 1 addition & 13 deletions vit-servicing-station-lib/src/v0/mod.rs
Expand Up @@ -4,7 +4,6 @@ pub mod endpoints;
pub mod errors;
pub mod result;

use logging_lib::messages::LogMessageId;
use warp::{Filter, Rejection, Reply};

pub async fn filter(
Expand All @@ -13,18 +12,7 @@ pub async fn filter(
let root = warp::path!("api" / "v0" / ..);

// log request statistics
let log = warp::log::custom(|info| {
let elapsed = info.elapsed().as_nanos().to_string();
let mut metadata = logging_lib::messages::DefaultMetadata::new();
metadata.insert("elapsed_nano_seconds".into(), elapsed.clone());
logging_lib::messages::DefaultLogMessageBuilder::new()
.with_level(log::Level::Info)
.with_tags(vec!["request", "elapsed"])
.with_message(elapsed)
.with_id(LogMessageId::Other("request_average".into()))
.build()
.log();
});
let log = warp::log::custom(|info| crate::logging::log_request_elapsed_time(info.elapsed()));

endpoints::filter(root.boxed(), ctx)
.await
Expand Down

0 comments on commit 0819356

Please sign in to comment.