31 lines
1.2 KiB
C#
31 lines
1.2 KiB
C#
namespace StellaOps.Evidence.Budgets;
|
|
|
|
public sealed partial class EvidenceBudgetService
|
|
{
|
|
public async Task<BudgetStatus> GetBudgetStatusAsync(Guid scanId, CancellationToken ct)
|
|
{
|
|
var budget = _options.CurrentValue;
|
|
var usage = await GetCurrentUsageAsync(scanId, ct).ConfigureAwait(false);
|
|
|
|
return new BudgetStatus
|
|
{
|
|
ScanId = scanId,
|
|
TotalBudgetBytes = budget.MaxScanSizeBytes,
|
|
UsedBytes = usage.TotalBytes,
|
|
RemainingBytes = Math.Max(0, budget.MaxScanSizeBytes - usage.TotalBytes),
|
|
UtilizationPercent = (decimal)usage.TotalBytes / budget.MaxScanSizeBytes * 100,
|
|
ByType = usage.ByType.ToDictionary(
|
|
kvp => kvp.Key,
|
|
kvp => new TypeBudgetStatus
|
|
{
|
|
Type = kvp.Key,
|
|
UsedBytes = kvp.Value,
|
|
LimitBytes = budget.MaxPerType.GetValueOrDefault(kvp.Key),
|
|
UtilizationPercent = budget.MaxPerType.TryGetValue(kvp.Key, out var limit)
|
|
? (decimal)kvp.Value / limit * 100
|
|
: 0
|
|
})
|
|
};
|
|
}
|
|
}
|