void.cat/VoidCat/Controllers/StatsController.cs

48 lines
1.4 KiB
C#
Raw Normal View History

2022-01-28 00:18:27 +00:00
using Microsoft.AspNetCore.Mvc;
2022-02-16 23:19:31 +00:00
using Prometheus;
2022-01-28 00:18:27 +00:00
using VoidCat.Model;
using VoidCat.Services;
2022-02-16 16:33:00 +00:00
using VoidCat.Services.Abstractions;
2022-01-28 00:18:27 +00:00
namespace VoidCat.Controllers
{
[Route("stats")]
public class StatsController : Controller
{
2022-02-16 23:19:31 +00:00
private readonly IStatsReporter _statsReporter;
2022-02-16 16:33:00 +00:00
private readonly IFileStore _fileStore;
2022-01-28 00:18:27 +00:00
2022-02-16 23:19:31 +00:00
public StatsController(IStatsReporter statsReporter, IFileStore fileStore)
2022-01-28 00:18:27 +00:00
{
2022-02-16 23:19:31 +00:00
_statsReporter = statsReporter;
2022-02-16 16:33:00 +00:00
_fileStore = fileStore;
2022-01-28 00:18:27 +00:00
}
[HttpGet]
public async Task<GlobalStats> GetGlobalStats()
{
2022-02-16 23:19:31 +00:00
var bw = await _statsReporter.GetBandwidth();
2022-02-16 16:33:00 +00:00
var bytes = 0UL;
2022-02-17 15:52:49 +00:00
var count = 0;
2022-02-24 12:00:28 +00:00
var files = await _fileStore.ListFiles(new(0, Int32.MaxValue));
await foreach (var vf in files.Results)
2022-02-16 16:33:00 +00:00
{
2022-02-17 15:52:49 +00:00
bytes += vf.Metadata?.Size ?? 0;
count++;
2022-02-16 16:33:00 +00:00
}
2022-02-17 15:52:49 +00:00
return new(bw, bytes, count);
2022-01-28 00:18:27 +00:00
}
[HttpGet]
[Route("{id}")]
public async Task<FileStats> GetFileStats([FromRoute] string id)
{
2022-02-16 23:19:31 +00:00
var bw = await _statsReporter.GetBandwidth(id.FromBase58Guid());
2022-01-28 00:18:27 +00:00
return new(bw);
}
}
2022-02-17 15:52:49 +00:00
public sealed record GlobalStats(Bandwidth Bandwidth, ulong TotalBytes, int Count);
2022-01-28 00:18:27 +00:00
public sealed record FileStats(Bandwidth Bandwidth);
}