mirror of
				https://github.com/Kareadita/Kavita.git
				synced 2025-11-03 19:17:05 -05: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