Files
embeddingsearch/src/Indexer/Worker.cs

48 lines
1.6 KiB
C#

using Microsoft.Extensions.Diagnostics.HealthChecks;
using Indexer.Models;
public class Worker
{
public string Name { get; set; }
public WorkerConfig Config { get; set; }
public IScriptContainer ScriptContainer { get; set; }
public CancellationTokenSource CancellationTokenSource { get; }
public List<ICall> Calls { get; set; }
public bool IsExecuting { get; set; }
public DateTime? LastExecution { get; set; }
public DateTime? LastSuccessfulExecution { get; set; }
public Worker(string name, WorkerConfig workerConfig, IScriptContainer scriptable, CancellationTokenSource cancellationTokenSource)
{
Name = name;
Config = workerConfig;
ScriptContainer = scriptable;
CancellationTokenSource = cancellationTokenSource;
IsExecuting = false;
Calls = [];
}
public HealthCheckResult HealthCheck()
{
bool hasDegraded = false;
bool hasUnhealthy = false;
foreach (ICall call in Calls)
{
HealthCheckResult callHealth = call.HealthCheck();
if (callHealth.Status != HealthStatus.Healthy)
{
hasDegraded |= callHealth.Status == HealthStatus.Degraded;
hasUnhealthy |= callHealth.Status == HealthStatus.Unhealthy;
}
}
if (hasUnhealthy)
{
return HealthCheckResult.Unhealthy(); // TODO: Retrieve and forward the error message for each call
}
else if (hasDegraded)
{
return HealthCheckResult.Degraded();
}
return HealthCheckResult.Healthy();
}
}