Implement Exception Effect Registry and Evaluation Service

- Added IExceptionEffectRegistry interface and its implementation ExceptionEffectRegistry to manage exception effects based on type and reason.
- Created ExceptionAwareEvaluationService for evaluating policies with automatic exception loading from the repository.
- Developed unit tests for ExceptionAdapter and ExceptionEffectRegistry to ensure correct behavior and mappings of exceptions and effects.
- Enhanced exception loading logic to filter expired and non-active exceptions, and to respect maximum exceptions limit.
- Implemented caching mechanism in ExceptionAdapter to optimize repeated exception loading.
This commit is contained in:
StellaOps Bot
2025-12-21 08:29:51 +02:00
parent b9c288782b
commit ba2f015184
37 changed files with 2825 additions and 1240 deletions

View File

@@ -469,6 +469,20 @@ public static class PolicyEngineTelemetry
unit: "events",
description: "Lifecycle events for exceptions (activated, expired, revoked).");
// Counter: policy_exception_loaded_total{tenant}
private static readonly Counter<long> ExceptionLoadedCounter =
Meter.CreateCounter<long>(
"policy_exception_loaded_total",
unit: "exceptions",
description: "Total exceptions loaded from repository for evaluation.");
// Histogram: policy_exception_load_latency_seconds{tenant}
private static readonly Histogram<double> ExceptionLoadLatencyHistogram =
Meter.CreateHistogram<double>(
"policy_exception_load_latency_seconds",
unit: "s",
description: "Latency of loading exceptions from repository.");
/// <summary>
/// Counter for exception cache operations.
/// </summary>
@@ -879,6 +893,23 @@ public static class PolicyEngineTelemetry
ExceptionLifecycleCounter.Add(1, tags);
}
/// <summary>
/// Records exceptions loaded from repository for evaluation.
/// </summary>
/// <param name="tenant">Tenant identifier.</param>
/// <param name="count">Number of exceptions loaded.</param>
/// <param name="latencySeconds">Time taken to load exceptions in seconds.</param>
public static void RecordExceptionLoaded(string tenant, int count, double latencySeconds)
{
var tags = new TagList
{
{ "tenant", NormalizeTenant(tenant) },
};
ExceptionLoadedCounter.Add(count, tags);
ExceptionLoadLatencyHistogram.Record(latencySeconds, tags);
}
#region Golden Signals - Recording Methods
/// <summary>