void.cat/VoidCat/Controllers/StatsController.cs
2022-02-16 23:19:31 +00:00

45 lines
1.2 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Prometheus;
using VoidCat.Model;
using VoidCat.Services;
using VoidCat.Services.Abstractions;
namespace VoidCat.Controllers
{
[Route("stats")]
public class StatsController : Controller
{
private readonly IStatsReporter _statsReporter;
private readonly IFileStore _fileStore;
public StatsController(IStatsReporter statsReporter, IFileStore fileStore)
{
_statsReporter = statsReporter;
_fileStore = fileStore;
}
[HttpGet]
public async Task<GlobalStats> GetGlobalStats()
{
var bw = await _statsReporter.GetBandwidth();
var bytes = 0UL;
await foreach (var vf in _fileStore.ListFiles())
{
bytes += vf.Size;
}
return new(bw, bytes);
}
[HttpGet]
[Route("{id}")]
public async Task<FileStats> GetFileStats([FromRoute] string id)
{
var bw = await _statsReporter.GetBandwidth(id.FromBase58Guid());
return new(bw);
}
}
public sealed record GlobalStats(Bandwidth Bandwidth, ulong TotalBytes);
public sealed record FileStats(Bandwidth Bandwidth);
}