aboutsummaryrefslogtreecommitdiffstats
path: root/crates
diff options
context:
space:
mode:
authorrtkay123 <dev@kanjala.com>2025-08-09 11:01:09 +0200
committerrtkay123 <dev@kanjala.com>2025-08-09 11:01:09 +0200
commit0d4395a8f642312b1a7964ea8cdea1d43cf81c8b (patch)
tree0bb26862c1bcdd1c64d3dd6f2785272eef8d466c /crates
parentaffa986bf1f84b725bd23309986250ff04cf2c93 (diff)
downloadwarden-0d4395a8f642312b1a7964ea8cdea1d43cf81c8b.tar.bz2
warden-0d4395a8f642312b1a7964ea8cdea1d43cf81c8b.zip
feat: tempo and loki
Diffstat (limited to 'crates')
-rw-r--r--crates/warden/Cargo.toml2
-rw-r--r--crates/warden/src/main.rs7
-rw-r--r--crates/warden/src/server/routes/processor/pacs008.rs31
-rw-r--r--crates/warden/warden.toml2
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