| | | 1 | | using Intentum.Core.Intents; |
| | | 2 | | using Intentum.Runtime.Engine; |
| | | 3 | | using Intentum.Runtime.Policy; |
| | | 4 | | using Microsoft.Extensions.Diagnostics.HealthChecks; |
| | | 5 | | |
| | | 6 | | namespace Intentum.AspNetCore.HealthChecks; |
| | | 7 | | |
| | | 8 | | /// <summary> |
| | | 9 | | /// Health check for policy engine. |
| | | 10 | | /// </summary> |
| | | 11 | | public sealed class PolicyEngineHealthCheck : IHealthCheck |
| | | 12 | | { |
| | | 13 | | public Task<HealthCheckResult> CheckHealthAsync( |
| | | 14 | | HealthCheckContext context, |
| | | 15 | | CancellationToken cancellationToken = default) |
| | 1 | 16 | | { |
| | | 17 | | try |
| | 1 | 18 | | { |
| | 1 | 19 | | var testIntent = new Intent( |
| | 1 | 20 | | Name: "HealthCheckIntent", |
| | 1 | 21 | | Signals: new List<IntentSignal>(), |
| | 1 | 22 | | Confidence: IntentConfidence.FromScore(0.9)); |
| | | 23 | | |
| | 1 | 24 | | var testPolicy = new IntentPolicy() |
| | 1 | 25 | | .AddRule(new PolicyRule( |
| | 1 | 26 | | "TestRule", |
| | 1 | 27 | | i => i.Confidence.Level == "Certain", |
| | 1 | 28 | | PolicyDecision.Allow)); |
| | | 29 | | |
| | 1 | 30 | | var decision = IntentPolicyEngine.Evaluate(testIntent, testPolicy); |
| | 1 | 31 | | if (decision == PolicyDecision.Allow) |
| | 1 | 32 | | return Task.FromResult(HealthCheckResult.Healthy("Policy engine is healthy")); |
| | 0 | 33 | | return Task.FromResult(HealthCheckResult.Degraded( |
| | 0 | 34 | | $"Policy engine returned unexpected decision: {decision}")); |
| | | 35 | | } |
| | 0 | 36 | | catch (Exception ex) |
| | 0 | 37 | | { |
| | 0 | 38 | | return Task.FromResult(HealthCheckResult.Unhealthy( |
| | 0 | 39 | | "Policy engine health check failed", |
| | 0 | 40 | | ex)); |
| | | 41 | | } |
| | 1 | 42 | | } |
| | | 43 | | } |