diff options
author | rtkay123 <dev@kanjala.com> | 2025-08-09 11:01:09 +0200 |
---|---|---|
committer | rtkay123 <dev@kanjala.com> | 2025-08-09 11:01:09 +0200 |
commit | 0d4395a8f642312b1a7964ea8cdea1d43cf81c8b (patch) | |
tree | 0bb26862c1bcdd1c64d3dd6f2785272eef8d466c /crates | |
parent | affa986bf1f84b725bd23309986250ff04cf2c93 (diff) | |
download | warden-0d4395a8f642312b1a7964ea8cdea1d43cf81c8b.tar.bz2 warden-0d4395a8f642312b1a7964ea8cdea1d43cf81c8b.zip |
feat: tempo and loki
Diffstat (limited to 'crates')
-rw-r--r-- | crates/warden/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/warden/src/main.rs | 7 | ||||
-rw-r--r-- | crates/warden/src/server/routes/processor/pacs008.rs | 31 | ||||
-rw-r--r-- | crates/warden/warden.toml | 2 |
4 files changed, 39 insertions, 3 deletions
diff --git a/crates/warden/Cargo.toml b/crates/warden/Cargo.toml index 231ccae..cbe4656 100644 --- a/crates/warden/Cargo.toml +++ b/crates/warden/Cargo.toml @@ -37,4 +37,4 @@ tower = { workspace = true, features = ["util"] } [dependencies.stack-up] workspace = true -features = ["api", "tracing"] +features = ["api", "opentelemetry", "tracing-loki"] diff --git a/crates/warden/src/main.rs b/crates/warden/src/main.rs index 9fa6469..ab7c4cf 100644 --- a/crates/warden/src/main.rs +++ b/crates/warden/src/main.rs @@ -37,7 +37,12 @@ async fn main() -> Result<(), error::AppError> { config.application.name = env!("CARGO_CRATE_NAME").into(); config.application.version = env!("CARGO_PKG_VERSION").into(); - let _tracing = Tracing::builder().build(&config.monitoring); + let tracing = Tracing::builder() + .opentelemetry(&config.application, &config.monitoring)? + .loki(&config.application, &config.monitoring)? + .build(&config.monitoring); + + tokio::spawn(tracing.loki_task); let state = AppState::create(&config).await?; diff --git a/crates/warden/src/server/routes/processor/pacs008.rs b/crates/warden/src/server/routes/processor/pacs008.rs index 66df598..c0b2bb3 100644 --- a/crates/warden/src/server/routes/processor/pacs008.rs +++ b/crates/warden/src/server/routes/processor/pacs008.rs @@ -1,5 +1,5 @@ use axum::{extract::State, response::IntoResponse}; -use tracing::trace; +use tracing::{error, trace, warn}; use warden_core::{ iso20022::{TransactionType, pacs008::Pacs008Document}, message::DataCache, @@ -36,6 +36,35 @@ pub(super) async fn post_pacs008( axum::Json(transaction): axum::Json<Pacs008Document>, ) -> Result<impl IntoResponse, AppError> { let tx_tp = TransactionType::PACS008; + let data_cache = build_data_cache(&transaction)?; + + let tx_count = transaction.f_i_to_f_i_cstmr_cdt_trf.cdt_trf_tx_inf.len(); + let msg_id = &transaction.f_i_to_f_i_cstmr_cdt_trf.grp_hdr.msg_id; + + if transaction.f_i_to_f_i_cstmr_cdt_trf.cdt_trf_tx_inf.len() > 1 { + warn!( + msg_id, + tx_count, + "found more than 1 transaction for this message. Only the first will be evaluated" + ); + } + + // take the first + trace!("extracting first credit transfer transaction info"); + let cdt_trf_tx_inf = transaction.f_i_to_f_i_cstmr_cdt_trf.cdt_trf_tx_inf.first(); + + let amount = cdt_trf_tx_inf.and_then(|value| value.instd_amt.as_ref().map(|value| value.value)); + + let ccy = + cdt_trf_tx_inf.and_then(|value| value.instd_amt.as_ref().map(|value| value.ccy.as_str())); + + let end_to_end_id = cdt_trf_tx_inf + .as_ref() + .map(|value| value.pmt_id.end_to_end_id.as_str()) + .ok_or_else(|| { + anyhow::anyhow!("missing end_to_end_id id") + })?; + Ok(String::default()) } diff --git a/crates/warden/warden.toml b/crates/warden/warden.toml index 5222260..92ad599 100644 --- a/crates/warden/warden.toml +++ b/crates/warden/warden.toml @@ -7,5 +7,7 @@ cache-ttl = 1000 [monitoring] log-level = "warden=trace,info" +opentelemetry-endpoint = "http://localhost:4317" +loki-endpoint = "http://localhost:3100" # vim:ft=toml |