mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-07-09 03:04:19 -04:00
Stat upload will now schedule itself between midnight and 6am in server time for upload. (#688)
This commit is contained in:
parent
7bfc3ebdab
commit
0666f87b4b
@ -10,6 +10,7 @@ using API.DTOs.Stats;
|
|||||||
using API.Interfaces;
|
using API.Interfaces;
|
||||||
using API.Interfaces.Services;
|
using API.Interfaces.Services;
|
||||||
using API.Services.Clients;
|
using API.Services.Clients;
|
||||||
|
using Hangfire;
|
||||||
using Kavita.Common;
|
using Kavita.Common;
|
||||||
using Kavita.Common.EnvironmentInfo;
|
using Kavita.Common.EnvironmentInfo;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@ -67,14 +68,8 @@ namespace API.Services.Tasks
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_logger.LogDebug("Finalizing Stats collection flow");
|
|
||||||
|
|
||||||
var data = await GetExistingData<UsageStatisticsDto>();
|
var data = await GetExistingData<UsageStatisticsDto>();
|
||||||
|
|
||||||
_logger.LogDebug("Sending data to the Stats server");
|
|
||||||
await _client.SendDataToStatsServer(data);
|
await _client.SendDataToStatsServer(data);
|
||||||
|
|
||||||
_logger.LogDebug("Deleting the file from disk");
|
|
||||||
if (FileExists) File.Delete(FinalPath);
|
if (FileExists) File.Delete(FinalPath);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -84,6 +79,10 @@ namespace API.Services.Tasks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Due to all instances firing this at the same time, we can DDOS our server. This task when fired will schedule the task to be run
|
||||||
|
/// randomly over a 6 hour spread
|
||||||
|
/// </summary>
|
||||||
public async Task CollectAndSendStatsData()
|
public async Task CollectAndSendStatsData()
|
||||||
{
|
{
|
||||||
var allowStatCollection = (await _unitOfWork.SettingsRepository.GetSettingsDtoAsync()).AllowStatCollection;
|
var allowStatCollection = (await _unitOfWork.SettingsRepository.GetSettingsDtoAsync()).AllowStatCollection;
|
||||||
@ -92,6 +91,27 @@ namespace API.Services.Tasks
|
|||||||
_logger.LogDebug("User has opted out of stat collection, not registering tasks");
|
_logger.LogDebug("User has opted out of stat collection, not registering tasks");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var rnd = new Random();
|
||||||
|
var offset = rnd.Next(0, 6);
|
||||||
|
if (offset == 0)
|
||||||
|
{
|
||||||
|
await SendData();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_logger.LogInformation("KavitaStats upload has been schedule to run in {Offset} hours", offset);
|
||||||
|
BackgroundJob.Schedule(() => SendData(), DateTimeOffset.Now.AddHours(offset));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This must be public for Hangfire. Do not call this directly.
|
||||||
|
/// </summary>
|
||||||
|
// ReSharper disable once MemberCanBePrivate.Global
|
||||||
|
public async Task SendData()
|
||||||
|
{
|
||||||
|
_logger.LogDebug("Sending data to the Stats server");
|
||||||
await CollectRelevantData();
|
await CollectRelevantData();
|
||||||
await FinalizeStats();
|
await FinalizeStats();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user