mirror of
https://github.com/moghtech/komodo.git
synced 2026-03-11 17:44:19 -05:00
implement serror for core and periphery errors
This commit is contained in:
23
Cargo.lock
generated
23
Cargo.lock
generated
@@ -1982,6 +1982,7 @@ dependencies = [
|
||||
"resolver_api",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serror",
|
||||
"sha2",
|
||||
"simple_logger",
|
||||
"slack_client_rs",
|
||||
@@ -2025,6 +2026,7 @@ dependencies = [
|
||||
"run_command",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serror",
|
||||
"simple_logger",
|
||||
"svi",
|
||||
"sysinfo",
|
||||
@@ -2730,6 +2732,15 @@ dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde-error"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e988182713aeed6a619a88bca186f6d6407483485ffe44c869ee264f8eabd13f"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_bytes"
|
||||
version = "0.11.9"
|
||||
@@ -2840,6 +2851,18 @@ dependencies = [
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serror"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "64ace3cd0543abaa9a05a1c4b5219c832aebf2a011ae31da4cf2b0d9808d6aea"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"serde",
|
||||
"serde-error",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha-1"
|
||||
version = "0.10.1"
|
||||
|
||||
@@ -27,6 +27,7 @@ make_option = "0.1.7"
|
||||
resolver_api = "0.1.6"
|
||||
parse_csl = "0.1.0"
|
||||
mungos = "0.4.19"
|
||||
serror = "0.1.1"
|
||||
svi = "0.1.4"
|
||||
# external
|
||||
tokio = { version = "1.32.0", features = ["full"] }
|
||||
|
||||
@@ -24,6 +24,7 @@ termination_signal.workspace = true
|
||||
resolver_api.workspace = true
|
||||
mungos.workspace = true
|
||||
slack.workspace = true
|
||||
serror.workspace = true
|
||||
# external
|
||||
tokio.workspace = true
|
||||
tokio-util.workspace = true
|
||||
|
||||
@@ -7,6 +7,7 @@ use axum::{
|
||||
use rand::{distributions::Alphanumeric, thread_rng, Rng};
|
||||
use reqwest::StatusCode;
|
||||
use resolver_api::Resolver;
|
||||
use serror::serialize_error;
|
||||
use uuid::Uuid;
|
||||
|
||||
mod github;
|
||||
@@ -48,14 +49,12 @@ pub fn router(state: &State) -> Router {
|
||||
let timer = Instant::now();
|
||||
let req_id = Uuid::new_v4();
|
||||
info!("/auth request {req_id} | METHOD: {}", request.req_type());
|
||||
let res = state
|
||||
.resolve_request(request, ())
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:?}")));
|
||||
let res = state.resolve_request(request, ()).await;
|
||||
if let Err(e) = &res {
|
||||
info!("/auth request {req_id} | ERROR: {e:?}");
|
||||
}
|
||||
let res = res?;
|
||||
let res =
|
||||
res.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, serialize_error(e)))?;
|
||||
let elapsed = timer.elapsed();
|
||||
info!("/auth request {req_id} | resolve time: {elapsed:?}");
|
||||
debug!("/auth request {req_id} | RESPONSE: {res}");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use std::time::Instant;
|
||||
|
||||
use anyhow::Context;
|
||||
use axum::{
|
||||
headers::ContentType, http::StatusCode, middleware, routing::post, Extension, Json, Router,
|
||||
TypedHeader,
|
||||
@@ -7,6 +8,7 @@ use axum::{
|
||||
use monitor_types::requests::execute::*;
|
||||
use resolver_api::{derive::Resolver, Resolve, Resolver};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serror::serialize_error;
|
||||
use typeshare::typeshare;
|
||||
use uuid::Uuid;
|
||||
|
||||
@@ -59,22 +61,20 @@ pub fn router() -> Router {
|
||||
"/execute request {req_id} | user: {} ({}) | {request:?}",
|
||||
user.username, user.id
|
||||
);
|
||||
let res = tokio::spawn(async move {
|
||||
state
|
||||
.resolve_request(request, user)
|
||||
let res =
|
||||
tokio::spawn(async move { state.resolve_request(request, user).await })
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:#?}")))
|
||||
})
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:#?}")));
|
||||
.context("failure in spawned execute task");
|
||||
if let Err(e) = &res {
|
||||
info!("/execute request {req_id} SPAWN ERROR: {e:#?}");
|
||||
}
|
||||
let res = res?;
|
||||
let res =
|
||||
res.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, serialize_error(e)))?;
|
||||
if let Err(e) = &res {
|
||||
info!("/execute request {req_id} ERROR: {e:#?}");
|
||||
}
|
||||
let res = res?;
|
||||
let res =
|
||||
res.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, serialize_error(e)))?;
|
||||
let elapsed = timer.elapsed();
|
||||
info!("/execute request {req_id} | resolve time: {elapsed:?}");
|
||||
Result::<_, (StatusCode, String)>::Ok((TypedHeader(ContentType::json()), res))
|
||||
|
||||
@@ -8,6 +8,7 @@ use axum::{
|
||||
use monitor_types::requests::read::*;
|
||||
use resolver_api::{derive::Resolver, Resolve, ResolveToString, Resolver};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serror::serialize_error;
|
||||
use typeshare::typeshare;
|
||||
use uuid::Uuid;
|
||||
|
||||
@@ -136,12 +137,11 @@ pub fn router() -> Router {
|
||||
);
|
||||
let res = state
|
||||
.resolve_request(request, user)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:#?}")));
|
||||
.await;
|
||||
if let Err(e) = &res {
|
||||
warn!("/read request {req_id} ERROR: {e:#?}");
|
||||
}
|
||||
let res = res?;
|
||||
let res = res.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, serialize_error(e)))?;
|
||||
let elapsed = timer.elapsed();
|
||||
debug!("/read request {req_id} | resolve time: {elapsed:?}");
|
||||
Result::<_, (StatusCode, String)>::Ok((TypedHeader(ContentType::json()), res))
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use std::time::Instant;
|
||||
|
||||
use anyhow::Context;
|
||||
use axum::{
|
||||
headers::ContentType, http::StatusCode, middleware, routing::post, Extension, Json, Router,
|
||||
TypedHeader,
|
||||
@@ -7,6 +8,7 @@ use axum::{
|
||||
use monitor_types::requests::write::*;
|
||||
use resolver_api::{derive::Resolver, Resolve, Resolver};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serror::serialize_error;
|
||||
use typeshare::typeshare;
|
||||
use uuid::Uuid;
|
||||
|
||||
@@ -109,22 +111,20 @@ pub fn router() -> Router {
|
||||
"/write request {req_id} | user: {} ({}) | {request:?}",
|
||||
user.username, user.id
|
||||
);
|
||||
let res = tokio::spawn(async move {
|
||||
state
|
||||
.resolve_request(request, user)
|
||||
let res =
|
||||
tokio::spawn(async move { state.resolve_request(request, user).await })
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:#?}")))
|
||||
})
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:#?}")));
|
||||
.context("failure in spawned write task");
|
||||
if let Err(e) = &res {
|
||||
info!("/write request {req_id} SPAWN ERROR: {e:#?}");
|
||||
}
|
||||
let res = res?;
|
||||
let res =
|
||||
res.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, serialize_error(e)))?;
|
||||
if let Err(e) = &res {
|
||||
info!("/write request {req_id} ERROR: {e:#?}");
|
||||
}
|
||||
let res = res?;
|
||||
let res =
|
||||
res.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, serialize_error(e)))?;
|
||||
let elapsed = timer.elapsed();
|
||||
info!("/write request {req_id} | resolve time: {elapsed:?}");
|
||||
Result::<_, (StatusCode, String)>::Ok((TypedHeader(ContentType::json()), res))
|
||||
|
||||
@@ -19,6 +19,15 @@ path = "src/main.rs"
|
||||
# local
|
||||
monitor_types.workspace = true
|
||||
logger.workspace = true
|
||||
# mogh
|
||||
async_timing_util.workspace = true
|
||||
merge_config_files.workspace = true
|
||||
parse_csl.workspace = true
|
||||
termination_signal.workspace = true
|
||||
run_command.workspace = true
|
||||
svi.workspace = true
|
||||
resolver_api.workspace = true
|
||||
serror.workspace = true
|
||||
# external
|
||||
tokio.workspace = true
|
||||
axum.workspace = true
|
||||
@@ -34,11 +43,3 @@ simple_logger.workspace = true
|
||||
uuid.workspace = true
|
||||
sysinfo.workspace = true
|
||||
async-trait.workspace = true
|
||||
# mogh
|
||||
async_timing_util.workspace = true
|
||||
merge_config_files.workspace = true
|
||||
parse_csl.workspace = true
|
||||
termination_signal.workspace = true
|
||||
run_command.workspace = true
|
||||
svi.workspace = true
|
||||
resolver_api.workspace = true
|
||||
|
||||
@@ -10,6 +10,7 @@ use axum::{
|
||||
};
|
||||
|
||||
use resolver_api::Resolver;
|
||||
use serror::serialize_error;
|
||||
use termination_signal::tokio::immediate_term_handle;
|
||||
use uuid::Uuid;
|
||||
|
||||
@@ -37,23 +38,19 @@ async fn app() -> anyhow::Result<()> {
|
||||
let timer = Instant::now();
|
||||
let req_id = Uuid::new_v4();
|
||||
info!("request {req_id} | {request:?}");
|
||||
let res = tokio::spawn(async move {
|
||||
state
|
||||
.resolve_request(request, ())
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:#?}")))
|
||||
})
|
||||
.await
|
||||
.context("failed in spawned request handler")
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:#?}")));
|
||||
let res = tokio::spawn(async move { state.resolve_request(request, ()).await })
|
||||
.await
|
||||
.context("failed in spawned request handler");
|
||||
if let Err(e) = &res {
|
||||
debug!("request {req_id} SPAWN ERROR: {e:?}");
|
||||
debug!("request {req_id} SPAWN ERROR: {e:#?}");
|
||||
}
|
||||
let res = res?;
|
||||
let res =
|
||||
res.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, serialize_error(e)))?;
|
||||
if let Err(e) = &res {
|
||||
debug!("request {req_id} ERROR: {e:?}");
|
||||
debug!("request {req_id} ERROR: {e:#?}");
|
||||
}
|
||||
let res = res?;
|
||||
let res =
|
||||
res.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, serialize_error(e)))?;
|
||||
let elapsed = timer.elapsed();
|
||||
info!("request {req_id} | resolve time: {elapsed:?}");
|
||||
debug!("request {req_id} RESPONSE: {res}");
|
||||
|
||||
Reference in New Issue
Block a user