From b2f150890cf0c6b44b71d2424ee4a8ba47e2bfd9 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Wed, 22 Nov 2023 16:34:16 +1000 Subject: [PATCH] =?UTF-8?q?feat(esppScheduleSync):=20=D1=81=D0=BE=D0=B7?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82.=20?= =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE?= =?UTF-8?q?=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D0=B0=D1=8F=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8.=20Docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 49 ++++++++++ PARR.API.sln | 12 +++ PARR.API/Dockerfile | 1 + PARR.EsppOrderLoaderWorker/Dockerfile | 1 + PARR.EsppOrderManagerWorker/Dockerfile | 1 + .../Domain/EsppObjectSchedule.cs | 14 +++ .../EsppScheduleSyncInstaller.cs | 37 ++++++++ PARR.EsppScheduleSync/IScheduleSyncher.cs | 8 ++ .../PARR.EsppScheduleSync.csproj | 15 +++ PARR.EsppScheduleSync/ScheduleSyncher.cs | 91 +++++++++++++++++++ .../Settings/GlobalSettings.cs | 18 ++++ PARR.EsppScheduleSyncWorker/Dockerfile | 28 ++++++ .../PARR.EsppScheduleSyncWorker.csproj | 24 +++++ PARR.EsppScheduleSyncWorker/Program.cs | 32 +++++++ .../Properties/launchSettings.json | 14 +++ PARR.EsppScheduleSyncWorker/Worker.cs | 29 ++++++ .../appsettings.Development.json | 13 +++ PARR.EsppScheduleSyncWorker/appsettings.json | 38 ++++++++ .../Domain/EsppObjectTemplate.cs | 2 +- .../Settings/GlobalSettings.cs | 2 +- PARR.EsppTemplateSync/TemplateMQSyncer.cs | 1 + PARR.EsppTemplateSyncWorker/Dockerfile | 1 + PARR.EsppTemplateSyncWorker/appsettings.json | 1 - PARR.GeneratorTemplatesWorker/Dockerfile | 1 + PARR.MasterWorker/Dockerfile | 1 + README.md | 4 +- docker-compose.espp-schedule-sync.yml | 23 +++++ 27 files changed, 457 insertions(+), 4 deletions(-) create mode 100644 PARR.EsppScheduleSync/Domain/EsppObjectSchedule.cs create mode 100644 PARR.EsppScheduleSync/EsppScheduleSyncInstaller.cs create mode 100644 PARR.EsppScheduleSync/IScheduleSyncher.cs create mode 100644 PARR.EsppScheduleSync/PARR.EsppScheduleSync.csproj create mode 100644 PARR.EsppScheduleSync/ScheduleSyncher.cs create mode 100644 PARR.EsppScheduleSync/Settings/GlobalSettings.cs create mode 100644 PARR.EsppScheduleSyncWorker/Dockerfile create mode 100644 PARR.EsppScheduleSyncWorker/PARR.EsppScheduleSyncWorker.csproj create mode 100644 PARR.EsppScheduleSyncWorker/Program.cs create mode 100644 PARR.EsppScheduleSyncWorker/Properties/launchSettings.json create mode 100644 PARR.EsppScheduleSyncWorker/Worker.cs create mode 100644 PARR.EsppScheduleSyncWorker/appsettings.Development.json create mode 100644 PARR.EsppScheduleSyncWorker/appsettings.json create mode 100644 docker-compose.espp-schedule-sync.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d2da2c29..e3757bc7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,7 @@ variables: PROD_NAME_API: "parr/parr-api" PROD_NAME_AIHIT: "parr/parr-aihit-syncher" PROD_NAME_ESPP_TEMPLATE: "parr/parr-espp-template-sync" + PROD_NAME_ESPP_SCHEDULE: "parr/parr-espp-schedule-sync" PROD_NAME_GENERATOR_TEMPLATES: "parr/parr-generator-templates" PROD_NAME_ESPP_ORDER_LOADER: "parr/parr-espp-order-loader" PROD_NAME_ESPP_ORDER_MANAGER: "parr/parr-espp-order-manager" @@ -358,3 +359,51 @@ prod_master_deploy: - RUNNER: shell-api-swarm-01 tags: - ${RUNNER} + + +### ESPP SCHEDULE SYNC PROD ### +prod_espp_schedule_build: + stage: build + only: + - /^es[0-9]+\.[0-9]+\.[0-9]+$/ + except: + - branches + services: + - name: docker:20.10.21-dind + command: [ + "--insecure-registry=10.99.253.167:8090", + "--registry-mirror=http://10.99.253.167:8090", + "--insecure-registry=harbor.dvgd.rzd", + "--tls=false" + ] + variables: + DOCKER_HOST: tcp://docker:2375 + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + script: + - APP_VERSION=$(echo $CI_COMMIT_TAG | tr -d es) + - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/es/v/g') + - docker build -t $REPO/$PROD_NAME_ESPP_SCHEDULE:$IMAGE_VERSION -t $REPO/$PROD_NAME_ESPP_SCHEDULE:latest -t $PROD_NAME_ESPP_SCHEDULE:$IMAGE_VERSION -t $PROD_NAME_ESPP_SCHEDULE:latest --build-arg app_version=$APP_VERSION -f PARR.EsppScheduleSyncWorker/Dockerfile . + - docker login -u $HARBOR_PUSH_USER -p $HARBOR_PUSH_PASS $REPO + - docker push --all-tags $REPO/$PROD_NAME_ESPP_SCHEDULE + tags: + - docker + + +prod_espp_schedule_deploy: + stage: deploy + environment: + name: parr-espp-schedule-sync + only: + - /^es[0-9]+\.[0-9]+\.[0-9]+$/ + except: + - branches + script: + - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/es/v/g') + - docker login -u $HARBOR_PULL_USER -p $HARBOR_PULL_PASS $REPO + - tag=$IMAGE_VERSION docker stack deploy -c docker-compose.espp-schedule-sync.yml parr-espp-schedule-sync --with-registry-auth + parallel: + matrix: + - RUNNER: shell-api-swarm-01 + tags: + - ${RUNNER} \ No newline at end of file diff --git a/PARR.API.sln b/PARR.API.sln index 2abc5c3e..f118a72d 100644 --- a/PARR.API.sln +++ b/PARR.API.sln @@ -55,6 +55,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.Constants", "PARR.Cons EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.EsppSync", "PARR.EsppSync\PARR.EsppSync.csproj", "{71121EF7-D4C1-43A4-9243-EF5C4C82030F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.EsppScheduleSync", "PARR.EsppScheduleSync\PARR.EsppScheduleSync.csproj", "{1E7F0EFE-784E-42E1-96BA-1FF743998619}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.EsppScheduleSyncWorker", "PARR.EsppScheduleSyncWorker\PARR.EsppScheduleSyncWorker.csproj", "{C597A1D7-1BC5-493B-BC29-03EC830FB090}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -147,6 +151,14 @@ Global {71121EF7-D4C1-43A4-9243-EF5C4C82030F}.Debug|Any CPU.Build.0 = Debug|Any CPU {71121EF7-D4C1-43A4-9243-EF5C4C82030F}.Release|Any CPU.ActiveCfg = Release|Any CPU {71121EF7-D4C1-43A4-9243-EF5C4C82030F}.Release|Any CPU.Build.0 = Release|Any CPU + {1E7F0EFE-784E-42E1-96BA-1FF743998619}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E7F0EFE-784E-42E1-96BA-1FF743998619}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E7F0EFE-784E-42E1-96BA-1FF743998619}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E7F0EFE-784E-42E1-96BA-1FF743998619}.Release|Any CPU.Build.0 = Release|Any CPU + {C597A1D7-1BC5-493B-BC29-03EC830FB090}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C597A1D7-1BC5-493B-BC29-03EC830FB090}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C597A1D7-1BC5-493B-BC29-03EC830FB090}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C597A1D7-1BC5-493B-BC29-03EC830FB090}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PARR.API/Dockerfile b/PARR.API/Dockerfile index 0385d801..41f81a92 100644 --- a/PARR.API/Dockerfile +++ b/PARR.API/Dockerfile @@ -10,6 +10,7 @@ COPY ["NuGet.config", "."] COPY ["PARR.API/PARR.API.csproj", "PARR.API/"] COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] RUN dotnet restore "PARR.API/PARR.API.csproj" COPY . . WORKDIR "/src/PARR.API" diff --git a/PARR.EsppOrderLoaderWorker/Dockerfile b/PARR.EsppOrderLoaderWorker/Dockerfile index 32eab145..30091746 100644 --- a/PARR.EsppOrderLoaderWorker/Dockerfile +++ b/PARR.EsppOrderLoaderWorker/Dockerfile @@ -11,6 +11,7 @@ COPY ["PARR.EsppOrderLoader/PARR.EsppOrderLoader.csproj", "PARR.EsppOrderLoader/ COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] COPY ["PARR.EsppApi/PARR.EsppApi.csproj", "PARR.EsppApi/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] RUN dotnet restore "PARR.EsppOrderLoaderWorker/PARR.EsppOrderLoaderWorker.csproj" COPY . . WORKDIR "/src/PARR.EsppOrderLoaderWorker" diff --git a/PARR.EsppOrderManagerWorker/Dockerfile b/PARR.EsppOrderManagerWorker/Dockerfile index 6fc09ca3..3d66bc41 100644 --- a/PARR.EsppOrderManagerWorker/Dockerfile +++ b/PARR.EsppOrderManagerWorker/Dockerfile @@ -11,6 +11,7 @@ COPY ["PARR.EsppOrderManager/PARR.EsppOrderManager.csproj", "PARR.EsppOrderManag COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] COPY ["PARR.EsppApi/PARR.EsppApi.csproj", "PARR.EsppApi/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] RUN dotnet restore "PARR.EsppOrderManagerWorker/PARR.EsppOrderManagerWorker.csproj" COPY . . WORKDIR "/src/PARR.EsppOrderManagerWorker" diff --git a/PARR.EsppScheduleSync/Domain/EsppObjectSchedule.cs b/PARR.EsppScheduleSync/Domain/EsppObjectSchedule.cs new file mode 100644 index 00000000..6bad89ae --- /dev/null +++ b/PARR.EsppScheduleSync/Domain/EsppObjectSchedule.cs @@ -0,0 +1,14 @@ +using PARR.Constants; +using PARR.EsppSync; + +namespace PARR.EsppScheduleSync.Domain +{ + internal class EsppObjectSchedule : IEsppObject + { + public required string TemplateName { get; set; } + + public RobotsEnum Robot => RobotsEnum.ScheduleOrder; + + //todo: + } +} diff --git a/PARR.EsppScheduleSync/EsppScheduleSyncInstaller.cs b/PARR.EsppScheduleSync/EsppScheduleSyncInstaller.cs new file mode 100644 index 00000000..4cbebe01 --- /dev/null +++ b/PARR.EsppScheduleSync/EsppScheduleSyncInstaller.cs @@ -0,0 +1,37 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using PARR.BLL; +using PARR.DAL; +using PARR.EsppSync; +using PARR.EsppScheduleSync.Domain; +using PARR.EsppScheduleSync.Settings; + +namespace PARR.EsppScheduleSync +{ + public static class EsppScheduleSyncInstaller + { + public static void InstallEsppScheduleSyncServices(this IServiceCollection services, IConfiguration configuration) + { + services.InstallBllServices(configuration); + services.InstallEsppSyncServices(configuration); + + var globalSettings = new GlobalSettings(); + configuration.GetSection(nameof(GlobalSettings)).Bind(globalSettings); + services.AddSingleton(globalSettings); + + services.AddTransient(); + } + + public static IConfigurationBuilder AddEsppScheduleConfigurations(this IConfigurationBuilder builder, IServiceCollection services) + { + builder.AddDalConfigurations(services); + + return builder; + } + + public static void AddEsppScheduleSettings(this IServiceCollection services, IConfiguration configuration) + { + services.AddDallSettings(configuration); + } + } +} diff --git a/PARR.EsppScheduleSync/IScheduleSyncher.cs b/PARR.EsppScheduleSync/IScheduleSyncher.cs new file mode 100644 index 00000000..23ef722d --- /dev/null +++ b/PARR.EsppScheduleSync/IScheduleSyncher.cs @@ -0,0 +1,8 @@ +namespace PARR.EsppScheduleSync +{ + public interface IScheduleSyncher + { + void Start(); + void Stop(); + } +} diff --git a/PARR.EsppScheduleSync/PARR.EsppScheduleSync.csproj b/PARR.EsppScheduleSync/PARR.EsppScheduleSync.csproj new file mode 100644 index 00000000..81c8506a --- /dev/null +++ b/PARR.EsppScheduleSync/PARR.EsppScheduleSync.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + enable + enable + + + + + + + + + diff --git a/PARR.EsppScheduleSync/ScheduleSyncher.cs b/PARR.EsppScheduleSync/ScheduleSyncher.cs new file mode 100644 index 00000000..b0c53ca0 --- /dev/null +++ b/PARR.EsppScheduleSync/ScheduleSyncher.cs @@ -0,0 +1,91 @@ +using Microsoft.Extensions.Logging; +using PARR.BLL.Services.Interfaces; +using PARR.DAL.Contracts; +using PARR.DAL.Models; +using PARR.EsppScheduleSync.Domain; +using PARR.EsppScheduleSync.Settings; +using PARR.EsppSync; + +namespace PARR.EsppScheduleSync +{ + internal class ScheduleSyncher : IScheduleSyncher + { + private readonly ILogger logger; + private readonly GlobalSettings globalSettings; + private readonly IMqService mqService; + private readonly ISyncService syncService; + private readonly SettingsFromDb settingsFromDb; + + public ScheduleSyncher( + ILogger logger, + GlobalSettings globalSettings, + IMqService mqService, + ISyncService syncService, + SettingsFromDb settingsFromDb + ) + { + this.logger = logger; + this.globalSettings = globalSettings; + this.mqService = mqService; + this.syncService = syncService; + this.settingsFromDb = settingsFromDb; + + if (globalSettings.MqSettings == null) + { + logger.LogError("Нет секции настроек хранилища. MqSettings, EsppTemplates"); + throw new Exception("Нет секции настроек хранилища. MqSettings, EsppTemplates"); + } + } + + + public void Start() + { + var isConnected = mqService.InitConsumer(globalSettings!.MqSettings!, SyncScheduleAsync); + + if (!isConnected) + throw new Exception("Ошибка при подключении к RabbitMq"); + + logger.LogInformation($"Запущена проверка очереди {globalSettings.MqSettings!.QueueName}."); + } + + + public void Stop() + { + mqService.Dispose(); + + logger.LogInformation($"=== === === Соединение с очередью {globalSettings.MqSettings!.QueueName} закрыто === === ==="); + } + + + private async Task SyncScheduleAsync(string str) + { + await syncService.SyncEsppObjectAsync(str, ParseStrToEsppObject, ConvertDbObjToEsppObj); + } + + + /// + /// Преобразование модели БД в модель для сравнения + /// + /// + /// + /// + private EsppObjectSchedule ConvertDbObjToEsppObj(Template template) + { + //todo: + throw new NotImplementedException(); + } + + + /// + /// Парсинг из строки в модель для сравнения + /// + /// + /// + /// + private EsppObjectSchedule? ParseStrToEsppObject(string str) + { + //todo: + throw new NotImplementedException(); + } + } +} diff --git a/PARR.EsppScheduleSync/Settings/GlobalSettings.cs b/PARR.EsppScheduleSync/Settings/GlobalSettings.cs new file mode 100644 index 00000000..a22e87a5 --- /dev/null +++ b/PARR.EsppScheduleSync/Settings/GlobalSettings.cs @@ -0,0 +1,18 @@ +using PARR.BLL.Contracts.Interfaces; + +namespace PARR.EsppScheduleSync.Settings +{ + internal class GlobalSettings + { + public MqSettings? MqSettings { get; set; } + public string ParsingSeparator { get; set; } = "<|>"; + } + + internal class MqSettings : IMqSettings + { + public string HostName { get; set; } = string.Empty; + public string QueueName { get; set; } = string.Empty; + public string User { get; set; } = string.Empty; + public string Password { get; set; } = string.Empty; + } +} diff --git a/PARR.EsppScheduleSyncWorker/Dockerfile b/PARR.EsppScheduleSyncWorker/Dockerfile new file mode 100644 index 00000000..3b390db8 --- /dev/null +++ b/PARR.EsppScheduleSyncWorker/Dockerfile @@ -0,0 +1,28 @@ +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM 10.99.253.167:8090/dotnet/runtime:7.0 AS base +WORKDIR /app + +FROM 10.99.253.167:8090/dotnet/sdk:7.0 AS build +WORKDIR /src +COPY ["NuGet.config", "."] +COPY ["PARR.EsppScheduleSyncWorker/PARR.EsppScheduleSyncWorker.csproj", "PARR.EsppScheduleSyncWorker/"] +COPY ["PARR.EsppScheduleSync/PARR.EsppScheduleSync.csproj", "PARR.EsppScheduleSync/"] +COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] +COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] +COPY ["PARR.EsppSync/PARR.EsppSync.csproj", "PARR.EsppSync/"] +RUN dotnet restore "PARR.EsppScheduleSyncWorker/PARR.EsppScheduleSyncWorker.csproj" +COPY . . +WORKDIR "/src/PARR.EsppScheduleSyncWorker" +RUN dotnet build "PARR.EsppScheduleSyncWorker.csproj" -c Release -o /app/build + +FROM build AS publish +ARG app_version=0.0.0-default +RUN dotnet publish "PARR.EsppScheduleSyncWorker.csproj" -c Release -o /app/publish /p:UseAppHost=false /p:Version=$app_version + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . + +ENTRYPOINT ["dotnet", "PARR.EsppScheduleSyncWorker.dll"] \ No newline at end of file diff --git a/PARR.EsppScheduleSyncWorker/PARR.EsppScheduleSyncWorker.csproj b/PARR.EsppScheduleSyncWorker/PARR.EsppScheduleSyncWorker.csproj new file mode 100644 index 00000000..2d1c2ff5 --- /dev/null +++ b/PARR.EsppScheduleSyncWorker/PARR.EsppScheduleSyncWorker.csproj @@ -0,0 +1,24 @@ + + + + net7.0 + enable + enable + dotnet-PARR.EsppScheduleSyncWorker-30fab400-2a4f-412e-ad4d-ec19f45d7c50 + Linux + + + + + + + + + + + + + + + + diff --git a/PARR.EsppScheduleSyncWorker/Program.cs b/PARR.EsppScheduleSyncWorker/Program.cs new file mode 100644 index 00000000..862412a5 --- /dev/null +++ b/PARR.EsppScheduleSyncWorker/Program.cs @@ -0,0 +1,32 @@ +using Elastic.CommonSchema.Serilog; +using PARR.EsppScheduleSync; +using PARR.EsppScheduleSyncWorker; +using Serilog; + +var builder = Host.CreateApplicationBuilder(); + +builder.Services.AddLogging(config => +{ + config.ClearProviders(); + + var logger = new LoggerConfiguration(); + + if (builder.Environment.IsProduction()) + logger.WriteTo.Console(new EcsTextFormatter()); + else + logger.WriteTo.Console(); + + logger.ReadFrom.Configuration(builder.Configuration); + + config.AddSerilog(logger.CreateLogger()); +}); + +builder.Services.InstallEsppScheduleSyncServices(builder.Configuration); +builder.Configuration.AddEsppScheduleConfigurations(builder.Services); +builder.Services.AddEsppScheduleSettings(builder.Configuration); + +builder.Services.AddHostedService(); + +var host = builder.Build(); +host.Run(); + diff --git a/PARR.EsppScheduleSyncWorker/Properties/launchSettings.json b/PARR.EsppScheduleSyncWorker/Properties/launchSettings.json new file mode 100644 index 00000000..4c56f28f --- /dev/null +++ b/PARR.EsppScheduleSyncWorker/Properties/launchSettings.json @@ -0,0 +1,14 @@ +{ + "profiles": { + "PARR.EsppScheduleSyncWorker": { + "commandName": "Project", + "environmentVariables": { + "DOTNET_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true + }, + "Docker": { + "commandName": "Docker" + } + } +} \ No newline at end of file diff --git a/PARR.EsppScheduleSyncWorker/Worker.cs b/PARR.EsppScheduleSyncWorker/Worker.cs new file mode 100644 index 00000000..28e88dfb --- /dev/null +++ b/PARR.EsppScheduleSyncWorker/Worker.cs @@ -0,0 +1,29 @@ +using PARR.DAL.TransformServices; +using PARR.EsppScheduleSync; + +namespace PARR.EsppScheduleSyncWorker +{ + public class Worker : BackgroundService + { + private readonly ILogger _logger; + private readonly IScheduleSyncher scheduleSyncher; + + public Worker(ILogger logger, IScheduleSyncher scheduleSyncher) + { + _logger = logger; + this.scheduleSyncher = scheduleSyncher; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + scheduleSyncher.Start(); + } + + public override Task StopAsync(CancellationToken cancellationToken) + { + scheduleSyncher.Stop(); + + return base.StopAsync(cancellationToken); + } + } +} \ No newline at end of file diff --git a/PARR.EsppScheduleSyncWorker/appsettings.Development.json b/PARR.EsppScheduleSyncWorker/appsettings.Development.json new file mode 100644 index 00000000..8fe710ee --- /dev/null +++ b/PARR.EsppScheduleSyncWorker/appsettings.Development.json @@ -0,0 +1,13 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "GlobalSettings": { + "MqSettings": { + "HostName": "10.99.253.216" + } + } +} diff --git a/PARR.EsppScheduleSyncWorker/appsettings.json b/PARR.EsppScheduleSyncWorker/appsettings.json new file mode 100644 index 00000000..7ab20277 --- /dev/null +++ b/PARR.EsppScheduleSyncWorker/appsettings.json @@ -0,0 +1,38 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "Server=10.99.253.184;Database=parr;User Id=app_parr; Password=PosdfkhT&)%sdfligL&%5546;" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "Serilog": { + "MinimumLevel": { + "Default": "Debug", + "Override": { + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Debug" + } + }, + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "log/log-.txt", + "rollingInterval": "Day" + } + } + ] + }, + "GlobalSettings": { + "MqSettings": { + "HostName": "parr-rabbitmq", + "QueueName": "parr-espp-schedulers", + "User": "espp_schedulers_reader", + "Password": "KjdhGLJDshgd&^%84S2" + }, + "ParsingSeparator": "<|>" + } +} diff --git a/PARR.EsppTemplateSync/Domain/EsppObjectTemplate.cs b/PARR.EsppTemplateSync/Domain/EsppObjectTemplate.cs index 21c2f4ff..4a2afe64 100644 --- a/PARR.EsppTemplateSync/Domain/EsppObjectTemplate.cs +++ b/PARR.EsppTemplateSync/Domain/EsppObjectTemplate.cs @@ -8,7 +8,7 @@ namespace PARR.EsppTemplateSync.Domain public required string TemplateName { get; set; } public RobotsEnum Robot => RobotsEnum.TemplateOrder; - + public bool IsActive { get; set; } public required string WorkGroup { get; set; } public required string ShortDescription { get; set; } diff --git a/PARR.EsppTemplateSync/Settings/GlobalSettings.cs b/PARR.EsppTemplateSync/Settings/GlobalSettings.cs index 7a6fd582..1fbb53f1 100644 --- a/PARR.EsppTemplateSync/Settings/GlobalSettings.cs +++ b/PARR.EsppTemplateSync/Settings/GlobalSettings.cs @@ -7,7 +7,7 @@ namespace PARR.EsppTemplateSync.Settings public MqSettings? MqSettings { get; set; } public StorageSettings? StorageSettings { get; set; } - public List? IgnoreTemplateFields { get; set; } + //public List? IgnoreTemplateFields { get; set; } public string ParsingSeparator { get; set; } = "<|>"; } diff --git a/PARR.EsppTemplateSync/TemplateMQSyncer.cs b/PARR.EsppTemplateSync/TemplateMQSyncer.cs index a077f5d0..ec251bd4 100644 --- a/PARR.EsppTemplateSync/TemplateMQSyncer.cs +++ b/PARR.EsppTemplateSync/TemplateMQSyncer.cs @@ -29,6 +29,7 @@ namespace PARR.EsppTemplateSync this.mqService = mqService; this.syncService = syncService; this.settingsFromDb = settingsFromDb; + if (globalSettings.MqSettings == null) { logger.LogError("Нет секции настроек хранилища. MqSettings, EsppTemplates"); diff --git a/PARR.EsppTemplateSyncWorker/Dockerfile b/PARR.EsppTemplateSyncWorker/Dockerfile index cde978df..ec3a584c 100644 --- a/PARR.EsppTemplateSyncWorker/Dockerfile +++ b/PARR.EsppTemplateSyncWorker/Dockerfile @@ -10,6 +10,7 @@ COPY ["PARR.EsppTemplateSyncWorker/PARR.EsppTemplateSyncWorker.csproj", "PARR.Es COPY ["PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj", "PARR.EsppTemplateSync/"] COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] RUN dotnet restore "PARR.EsppTemplateSyncWorker/PARR.EsppTemplateSyncWorker.csproj" COPY . . WORKDIR "/src/PARR.EsppTemplateSyncWorker" diff --git a/PARR.EsppTemplateSyncWorker/appsettings.json b/PARR.EsppTemplateSyncWorker/appsettings.json index 7acdc92c..06ca9eaf 100644 --- a/PARR.EsppTemplateSyncWorker/appsettings.json +++ b/PARR.EsppTemplateSyncWorker/appsettings.json @@ -43,7 +43,6 @@ "StorageSettings": { "CheckIntervalSeconds": 30 }, - "IgnoreTemplateFields": [ "Id", "Status", "Name", "DateCreated", "DateModified", "StatusCode" ], "ParsingSeparator": "<|>" } } diff --git a/PARR.GeneratorTemplatesWorker/Dockerfile b/PARR.GeneratorTemplatesWorker/Dockerfile index 1933f127..e3eed96b 100644 --- a/PARR.GeneratorTemplatesWorker/Dockerfile +++ b/PARR.GeneratorTemplatesWorker/Dockerfile @@ -10,6 +10,7 @@ COPY ["PARR.GeneratorTemplatesWorker/PARR.GeneratorTemplatesWorker.csproj", "PAR COPY ["PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj", "PARR.GeneratorTemplates/"] COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] RUN dotnet restore "PARR.GeneratorTemplatesWorker/PARR.GeneratorTemplatesWorker.csproj" COPY . . WORKDIR "/src/PARR.GeneratorTemplatesWorker" diff --git a/PARR.MasterWorker/Dockerfile b/PARR.MasterWorker/Dockerfile index 62f9d055..c829b00b 100644 --- a/PARR.MasterWorker/Dockerfile +++ b/PARR.MasterWorker/Dockerfile @@ -10,6 +10,7 @@ COPY ["PARR.MasterWorker/PARR.MasterWorker.csproj", "PARR.MasterWorker/"] COPY ["PARR.Master/PARR.Master.csproj", "PARR.Master/"] COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] RUN dotnet restore "PARR.MasterWorker/PARR.MasterWorker.csproj" COPY . . WORKDIR "/src/PARR.MasterWorker" diff --git a/README.md b/README.md index 90a2cca7..f7759631 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,10 @@ - PARR.EsppOrderLoaderWorker - PARR.EsppOrderManager - управление нарядами в ЕСПП (в работу, выполнить, и т.п.) - PARR.EsppOrderManagerWorker +- PARR.EsppScheduleSync - логика синхронизации расписаний ЕСПП с БД PARR +- PARR.EsppScheduleSyncWorker - worker для PARR.EsppScheduleSync - PARR.EsppSync - общая логика синхронизации шаблонов и расписаний ЕСПП с БД PARR -- PARR.EsppTemplateSync - логика синхронизации шаблонов ESPP с БД PARR +- PARR.EsppTemplateSync - логика синхронизации шаблонов ЕСПП с БД PARR - PARR.EsppTemplateSyncWorker - worker для PARR.EsppTemplateSync - PARR.GeneratorTemplates - логика генерации шаблонов в ПАРР - PARR.GeneratorTemplatesWorker - Worker для PARR.GeneratorTemplates diff --git a/docker-compose.espp-schedule-sync.yml b/docker-compose.espp-schedule-sync.yml new file mode 100644 index 00000000..464e10ea --- /dev/null +++ b/docker-compose.espp-schedule-sync.yml @@ -0,0 +1,23 @@ +version: '3.4' + +#ESPP SCHEDULE SYNC +services: + parr-espp-schedule-sync: + image: harbor.dvgd.rzd/parr/parr-espp-schedule-sync:${tag:-latest} + environment: + - ASPNETCORE_ENVIRONMENT=Production + - TZ=Europe/Moscow + logging: + driver: fluentd + options: + fluentd-address: dvgd-mng-02.dvgd.oao.rzd:24224 + tag: parr.espp-schedule-sync.serilog + deploy: + replicas: 4 + networks: + - parr-network + +networks: + parr-network: + driver: overlay + external: true \ No newline at end of file