Skip to content

Commit 8b9ef2b

Browse files
committed
feat(account-management): emit am_cross_tenant_denial_total on cross-tenant denial
Counter was registered but never incremented (dashboard read No data). Emit at the single DomainError->SDK error funnel so every CrossTenantDenied is counted once (REST 403 + inter-module), excluding the metadata visibility probe that maps to Ok(false). Signed-off-by: Diffora <ddiffora@gmail.com>
1 parent c3c96ac commit 8b9ef2b

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

modules/system/account-management/account-management/src/infra/sdk_error_mapping.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use modkit_canonical_errors::{CanonicalError, resource_error};
3434
use tracing::warn;
3535

3636
use crate::domain::error::DomainError;
37+
use crate::domain::metrics::{AM_CROSS_TENANT_DENIAL, MetricKind, emit_metric};
3738

3839
// ---------------------------------------------------------------------------
3940
// Resource markers — kept in sync with account_management_sdk::gts via
@@ -145,7 +146,15 @@ impl From<DomainError> for AccountManagementError {
145146
DomainError::FeatureDisabled { detail } => Self::FeatureDisabled { detail },
146147

147148
// ---- Authorization ----
148-
DomainError::CrossTenantDenied { cause: _ } => Self::CrossTenantDenied,
149+
// Single funnel for every cross-tenant denial (PDP enforcer + storage
150+
// scope-clamp); also reached on the REST path via the composed
151+
// From<DomainError> for CanonicalError. The metadata visibility probe
152+
// that swallows this into Ok(false) bypasses this mapping, so it is
153+
// correctly not counted.
154+
DomainError::CrossTenantDenied { cause: _ } => {
155+
emit_metric(AM_CROSS_TENANT_DENIAL, MetricKind::Counter, &[]);
156+
Self::CrossTenantDenied
157+
}
149158

150159
// ---- Transactional ----
151160
DomainError::Aborted { reason: _, detail } => Self::SerializationConflict { detail },

0 commit comments

Comments
 (0)