add request size counters
This commit is contained in:
@@ -28,4 +28,6 @@ public class MetricsAPI
|
|||||||
public const string GaugeFilesUniquePastDaySize = "mare_files_unique_past_day_size";
|
public const string GaugeFilesUniquePastDaySize = "mare_files_unique_past_day_size";
|
||||||
public const string GaugeCurrentDownloads = "mare_current_downloads";
|
public const string GaugeCurrentDownloads = "mare_current_downloads";
|
||||||
public const string GaugeDownloadQueue = "mare_download_queue";
|
public const string GaugeDownloadQueue = "mare_download_queue";
|
||||||
|
public const string CounterFileRequests = "mare_files_requests";
|
||||||
|
public const string CounterFileRequestSize = "mare_files_request_size";
|
||||||
}
|
}
|
||||||
@@ -13,13 +13,15 @@ public class CacheController : ControllerBase
|
|||||||
private readonly RequestFileStreamResultFactory _requestFileStreamResultFactory;
|
private readonly RequestFileStreamResultFactory _requestFileStreamResultFactory;
|
||||||
private readonly CachedFileProvider _cachedFileProvider;
|
private readonly CachedFileProvider _cachedFileProvider;
|
||||||
private readonly RequestQueueService _requestQueue;
|
private readonly RequestQueueService _requestQueue;
|
||||||
|
private readonly FileStatisticsService _fileStatisticsService;
|
||||||
|
|
||||||
public CacheController(ILogger<CacheController> logger, RequestFileStreamResultFactory requestFileStreamResultFactory,
|
public CacheController(ILogger<CacheController> logger, RequestFileStreamResultFactory requestFileStreamResultFactory,
|
||||||
CachedFileProvider cachedFileProvider, RequestQueueService requestQueue) : base(logger)
|
CachedFileProvider cachedFileProvider, RequestQueueService requestQueue, FileStatisticsService fileStatisticsService) : base(logger)
|
||||||
{
|
{
|
||||||
_requestFileStreamResultFactory = requestFileStreamResultFactory;
|
_requestFileStreamResultFactory = requestFileStreamResultFactory;
|
||||||
_cachedFileProvider = cachedFileProvider;
|
_cachedFileProvider = cachedFileProvider;
|
||||||
_requestQueue = requestQueue;
|
_requestQueue = requestQueue;
|
||||||
|
_fileStatisticsService = fileStatisticsService;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet(MareFiles.Cache_Get)]
|
[HttpGet(MareFiles.Cache_Get)]
|
||||||
@@ -35,6 +37,8 @@ public class CacheController : ControllerBase
|
|||||||
var memoryStream = new MemoryStream();
|
var memoryStream = new MemoryStream();
|
||||||
var streamWriter = new BinaryWriter(memoryStream);
|
var streamWriter = new BinaryWriter(memoryStream);
|
||||||
|
|
||||||
|
long requestSize = 0;
|
||||||
|
|
||||||
foreach (var file in request.FileIds)
|
foreach (var file in request.FileIds)
|
||||||
{
|
{
|
||||||
var fs = await _cachedFileProvider.GetAndDownloadFileStream(file);
|
var fs = await _cachedFileProvider.GetAndDownloadFileStream(file);
|
||||||
@@ -43,11 +47,14 @@ public class CacheController : ControllerBase
|
|||||||
byte[] buffer = new byte[fs.Length];
|
byte[] buffer = new byte[fs.Length];
|
||||||
_ = await fs.ReadAsync(buffer, HttpContext.RequestAborted);
|
_ = await fs.ReadAsync(buffer, HttpContext.RequestAborted);
|
||||||
streamWriter.Write(buffer);
|
streamWriter.Write(buffer);
|
||||||
|
requestSize += fs.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
streamWriter.Flush();
|
streamWriter.Flush();
|
||||||
memoryStream.Position = 0;
|
memoryStream.Position = 0;
|
||||||
|
|
||||||
|
_fileStatisticsService.LogRequest(requestSize);
|
||||||
|
|
||||||
return _requestFileStreamResultFactory.Create(requestId, memoryStream);
|
return _requestFileStreamResultFactory.Create(requestId, memoryStream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,12 @@ public class FileStatisticsService : IHostedService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LogRequest(long requestSize)
|
||||||
|
{
|
||||||
|
_metrics.IncCounter(MetricsAPI.CounterFileRequests);
|
||||||
|
_metrics.IncCounter(MetricsAPI.CounterFileRequestSize);
|
||||||
|
}
|
||||||
|
|
||||||
public Task StartAsync(CancellationToken cancellationToken)
|
public Task StartAsync(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Starting FileStatisticsService");
|
_logger.LogInformation("Starting FileStatisticsService");
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ public class Startup
|
|||||||
MetricsAPI.GaugeFilesUniquePastHourSize,
|
MetricsAPI.GaugeFilesUniquePastHourSize,
|
||||||
MetricsAPI.GaugeCurrentDownloads,
|
MetricsAPI.GaugeCurrentDownloads,
|
||||||
MetricsAPI.GaugeDownloadQueue,
|
MetricsAPI.GaugeDownloadQueue,
|
||||||
|
MetricsAPI.CounterFileRequests,
|
||||||
|
MetricsAPI.CounterFileRequestSize
|
||||||
}));
|
}));
|
||||||
services.AddSingleton<CachedFileProvider>();
|
services.AddSingleton<CachedFileProvider>();
|
||||||
services.AddSingleton<FileStatisticsService>();
|
services.AddSingleton<FileStatisticsService>();
|
||||||
|
|||||||
Reference in New Issue
Block a user