diff --git a/PARR.AIHIT/AIHIT/PARR.AIHIT.csproj b/PARR.AIHIT/AIHIT/PARR.AIHIT.csproj
index 37b4e1d0..fdfd5289 100644
--- a/PARR.AIHIT/AIHIT/PARR.AIHIT.csproj
+++ b/PARR.AIHIT/AIHIT/PARR.AIHIT.csproj
@@ -13,6 +13,7 @@
+
diff --git a/PARR.BLL/Services/Implementations/IntervalService.cs b/PARR.BLL/Services/Implementations/IntervalService.cs
index 130e8710..a39f8ef5 100644
--- a/PARR.BLL/Services/Implementations/IntervalService.cs
+++ b/PARR.BLL/Services/Implementations/IntervalService.cs
@@ -14,15 +14,29 @@ namespace PARR.BLL.Services.Implementations
public async Task IntervalInitAsync(IntervalHandlerDelegate intervalHandler, TimeSpan interval)
{
+ var nextStart = DateTimeOffset.UtcNow;
+
while (true)
{
- logger.LogInformation($"Запуск по расписанию. Интервал: {interval}");
+ nextStart = DateTimeOffset.UtcNow;
+
+ logger.LogInformation($"Запуск по расписанию. Интервал: {interval}, дата: {nextStart}");
await intervalHandler.Invoke();
- logger.LogInformation($"Следующая дата запуска: {DateTimeOffset.Now.Add(interval)}");
+ nextStart = nextStart.Add(interval);
- await Task.Delay(interval);
+ logger.LogInformation($"Следующая дата запуска: {nextStart}");
+
+ var intervalOffset = nextStart - DateTimeOffset.UtcNow;
+ if (intervalOffset < TimeSpan.Zero)
+ {
+ intervalOffset = TimeSpan.Zero;
+ logger.LogWarning($"Время следующего запуска изменено на сейчас. Так как рассчитанное время запуска меньше чем сейчас, {nextStart}<{DateTimeOffset.UtcNow}. " +
+ $"Это произошло потому что время выполнения основного метода больше чем заданный интервал повторений.");
+ }
+
+ await Task.Delay(intervalOffset);
}
}
}
diff --git a/PARR.Test/PARR.Test.csproj b/PARR.Test/PARR.Test.csproj
index b041f721..9e2e7411 100644
--- a/PARR.Test/PARR.Test.csproj
+++ b/PARR.Test/PARR.Test.csproj
@@ -16,6 +16,7 @@
+
diff --git a/PARR.Test/Program.cs b/PARR.Test/Program.cs
index 78fca86f..44f93843 100644
--- a/PARR.Test/Program.cs
+++ b/PARR.Test/Program.cs
@@ -1,3 +1,4 @@
+using PARR.BLL;
using PARR.EsppApi;
using PARR.Test;
using Serilog;
@@ -6,6 +7,7 @@ IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.InstallEsppApiServices(hostContext.Configuration);
+ services.InstallBllServices(hostContext.Configuration);
services.AddHostedService();
})
diff --git a/PARR.Test/Worker.cs b/PARR.Test/Worker.cs
index 479dda86..10d977e5 100644
--- a/PARR.Test/Worker.cs
+++ b/PARR.Test/Worker.cs
@@ -1,3 +1,4 @@
+using PARR.BLL.Services.Interfaces;
using PARR.EsppApi;
using PARR.EsppApi.Constants;
using PARR.EsppApi.Models.Query;
@@ -8,15 +9,26 @@ namespace PARR.Test
{
private readonly ILogger _logger;
private readonly IEsppApiService esppApiService;
+ private readonly IIntervalService intervalService;
- public Worker(ILogger logger, IEsppApiService esppApiService)
+ public Worker(ILogger logger, IEsppApiService esppApiService, IIntervalService intervalService)
{
_logger = logger;
this.esppApiService = esppApiService;
+ this.intervalService = intervalService;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
+ ////test interval
+ //await intervalService.IntervalInitAsync(async () =>
+ //{
+ // _logger.LogInformation("---Выполняю метод---");
+ // await Task.Delay(29*1000);
+ // _logger.LogInformation("===Выполнил метод===");
+ //}, new TimeSpan(0, 0, 30));
+
+
await TestEsppApi();
}
diff --git a/PARR.Worker/PARR.Worker/PARR.AIHITWorker.csproj b/PARR.Worker/PARR.Worker/PARR.AIHITWorker.csproj
index 9b6347fb..6ec0d9c6 100644
--- a/PARR.Worker/PARR.Worker/PARR.AIHITWorker.csproj
+++ b/PARR.Worker/PARR.Worker/PARR.AIHITWorker.csproj
@@ -22,7 +22,5 @@
-
-
diff --git a/PARR.Worker/PARR.Worker/Worker.cs b/PARR.Worker/PARR.Worker/Worker.cs
index 53b4cf95..bc6c9ad5 100644
--- a/PARR.Worker/PARR.Worker/Worker.cs
+++ b/PARR.Worker/PARR.Worker/Worker.cs
@@ -1,4 +1,5 @@
using PARR.AIHIT;
+using PARR.BLL.Services.Interfaces;
using PARR.Worker.Settings;
namespace PARR.Worker
@@ -8,42 +9,64 @@ namespace PARR.Worker
private readonly ILogger logger;
private readonly IServiceProvider serviceProvider;
private readonly WorkerSettings workerSettings;
+ private readonly IIntervalService intervalService;
- public Worker(ILogger logger,
+ public Worker(
+ ILogger logger,
IServiceProvider serviceProvider,
- WorkerSettings workerSettings
+ WorkerSettings workerSettings,
+ IIntervalService intervalService
)
{
this.logger = logger;
this.serviceProvider = serviceProvider;
this.workerSettings = workerSettings;
+ this.intervalService = intervalService;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
logger.LogInformation("--- Сервис запущен! ---");
- while (!stoppingToken.IsCancellationRequested)
- {
- logger.LogInformation("--- --- --- --- Начало синхронизации --- --- --- ---");
- using var scope = serviceProvider.CreateScope();
- var services = scope.ServiceProvider;
- var syncer = services.GetService();
- if (syncer != null) await syncer.InvokeFromDatabase();
+ await intervalService.IntervalInitAsync(RunAihitSyncAsync, workerSettings.OccursEvery);
- //var hosts = await hostService.Get().ToListAsync();
- //foreach ( var host in hosts ) { logger.LogInformation($"{host.HostName}"); }
+ //while (!stoppingToken.IsCancellationRequested)
+ //{
+ // logger.LogInformation("--- --- --- --- Начало синхронизации --- --- --- ---");
+ // using var scope = serviceProvider.CreateScope();
+ // var services = scope.ServiceProvider;
+ // var syncer = services.GetService();
+
+ // if (syncer != null) await syncer.InvokeFromDatabase();
+
+ // //var hosts = await hostService.Get().ToListAsync();
+ // //foreach ( var host in hosts ) { logger.LogInformation($"{host.HostName}"); }
- //await attachmentUploader.UploadAsync();
- //logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
- logger.LogInformation("=== === === === Конец синхронизации === === === ===");
+ // //await attachmentUploader.UploadAsync();
+ // //logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
+ // logger.LogInformation("=== === === === Конец синхронизации === === === ===");
- var mills = (int?) workerSettings?.OccursEvery.TotalMilliseconds ?? 60*1000;
- await Task.Delay(mills, stoppingToken);
+ // var mills = (int?) workerSettings?.OccursEvery.TotalMilliseconds ?? 60*1000;
+ // await Task.Delay(mills, stoppingToken);
- }
+ //}
+ }
+
+
+ private async Task RunAihitSyncAsync()
+ {
+ logger.LogInformation("--- --- --- --- Начало синхронизации --- --- --- ---");
+
+ using var scope = serviceProvider.CreateScope();
+ var services = scope.ServiceProvider;
+ var syncer = services.GetService();
+
+ if (syncer != null)
+ await syncer.InvokeFromDatabase();
+
+ logger.LogInformation("=== === === === Конец синхронизации === === === ===");
}
}
}
\ No newline at end of file