From 9ae4903527254132bc8ad149fe87588efde640a9 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Thu, 25 Jul 2024 10:30:17 +1000 Subject: [PATCH] =?UTF-8?q?feat(constants,=20bll,=20templateActivator):=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20templateActivator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 50 +++++++++++++++++ PARR.API.sln | 16 +++++- PARR.BLL/Domain/Mq/TemplateActivatorMq.cs | 20 +++++++ .../TemplateActivatorActionsEnum.cs | 55 +++++++++++++++++++ .../PARR.TemplateActivator.csproj | 15 +++++ PARR.TemplateActivatorWorker/Dockerfile | 28 ++++++++++ .../PARR.TemplateActivatorWorker.csproj | 24 ++++++++ PARR.TemplateActivatorWorker/Program.cs | 10 ++++ .../Properties/launchSettings.json | 14 +++++ PARR.TemplateActivatorWorker/Worker.cs | 23 ++++++++ .../appsettings.Development.json | 8 +++ PARR.TemplateActivatorWorker/appsettings.json | 8 +++ .../MqTemplateDistributor.cs | 2 +- README.md | 2 + docker-compose.dcproj | 1 + docker-compose.template-activator.yml | 25 +++++++++ 16 files changed, 298 insertions(+), 3 deletions(-) create mode 100644 PARR.BLL/Domain/Mq/TemplateActivatorMq.cs create mode 100644 PARR.Constants/TemplateActivatorActionsEnum.cs create mode 100644 PARR.TemplateActivator/PARR.TemplateActivator.csproj create mode 100644 PARR.TemplateActivatorWorker/Dockerfile create mode 100644 PARR.TemplateActivatorWorker/PARR.TemplateActivatorWorker.csproj create mode 100644 PARR.TemplateActivatorWorker/Program.cs create mode 100644 PARR.TemplateActivatorWorker/Properties/launchSettings.json create mode 100644 PARR.TemplateActivatorWorker/Worker.cs create mode 100644 PARR.TemplateActivatorWorker/appsettings.Development.json create mode 100644 PARR.TemplateActivatorWorker/appsettings.json create mode 100644 docker-compose.template-activator.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c3ec7ee9..a7b17450 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,6 +11,7 @@ variables: PROD_NAME_MASTER: "parr/parr-master" PROD_NAME_NEXT_RUN: "parr/parr-next-run" PROD_TEMPLATE_DISTRIBOTOR: "parr/parr-template-distributor" + PROD_TEMPLATE_ACTIVATOR: "parr/parr-template-activator" stages: - build @@ -558,3 +559,52 @@ prod_template_distributor_deploy: tags: - ${RUNNER} + +### TEMPLATE ACTIVATOR PROD ### + +# PROD_TEMPLATE_ACTIVATOR +prod_template_activator_build: + stage: build + only: + - /^ta[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 ta) + - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/ta/v/g') + - docker build -t $REPO/$PROD_TEMPLATE_ACTIVATOR:$IMAGE_VERSION -t $REPO/$PROD_TEMPLATE_ACTIVATOR:latest -t $PROD_TEMPLATE_ACTIVATOR:$IMAGE_VERSION -t $PROD_TEMPLATE_ACTIVATOR:latest --build-arg app_version=$APP_VERSION -f PARR.TemplateActivatorWorker/Dockerfile . + - docker login -u $HARBOR_PUSH_USER -p $HARBOR_PUSH_PASS $REPO + - docker push --all-tags $REPO/$PROD_TEMPLATE_ACTIVATOR + tags: + - docker + + +prod_template_activator_deploy: + stage: deploy + environment: + name: parr-template-activator + only: + - /^ta[0-9]+\.[0-9]+\.[0-9]+$/ + except: + - branches + script: + - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/ta/v/g') + - docker login -u $HARBOR_PULL_USER -p $HARBOR_PULL_PASS $REPO + - tag=$IMAGE_VERSION docker stack deploy -c docker-compose.template-activator.yml parr-template-activator --with-registry-auth + parallel: + matrix: + - RUNNER: shell-api-swarm-01 + tags: + - ${RUNNER} diff --git a/PARR.API.sln b/PARR.API.sln index e20e76d7..d650c031 100644 --- a/PARR.API.sln +++ b/PARR.API.sln @@ -68,9 +68,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.NextRun", "PARR.NextRu EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.NextRunWorker", "PARR.NextRunWorker\PARR.NextRunWorker.csproj", "{47C6E193-257A-4001-84D7-11B640E3D1A0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.TemplateDistributor", "PARR.TemplateDistributor\PARR.TemplateDistributor.csproj", "{9A8D1E97-1508-4A6E-9782-C7438224D435}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.TemplateDistributor", "PARR.TemplateDistributor\PARR.TemplateDistributor.csproj", "{9A8D1E97-1508-4A6E-9782-C7438224D435}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.TemplateDistributorWorker", "PARR.TemplateDistributorWorker\PARR.TemplateDistributorWorker.csproj", "{89155CAB-295D-4937-8B7A-05170587A2BC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.TemplateDistributorWorker", "PARR.TemplateDistributorWorker\PARR.TemplateDistributorWorker.csproj", "{89155CAB-295D-4937-8B7A-05170587A2BC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.TemplateActivator", "PARR.TemplateActivator\PARR.TemplateActivator.csproj", "{C92621CD-EC6A-4788-94CF-D03C0A386F12}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.TemplateActivatorWorker", "PARR.TemplateActivatorWorker\PARR.TemplateActivatorWorker.csproj", "{97E096AA-26F3-417A-A969-381464F4EF43}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -196,6 +200,14 @@ Global {89155CAB-295D-4937-8B7A-05170587A2BC}.Debug|Any CPU.Build.0 = Debug|Any CPU {89155CAB-295D-4937-8B7A-05170587A2BC}.Release|Any CPU.ActiveCfg = Release|Any CPU {89155CAB-295D-4937-8B7A-05170587A2BC}.Release|Any CPU.Build.0 = Release|Any CPU + {C92621CD-EC6A-4788-94CF-D03C0A386F12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C92621CD-EC6A-4788-94CF-D03C0A386F12}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C92621CD-EC6A-4788-94CF-D03C0A386F12}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C92621CD-EC6A-4788-94CF-D03C0A386F12}.Release|Any CPU.Build.0 = Release|Any CPU + {97E096AA-26F3-417A-A969-381464F4EF43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97E096AA-26F3-417A-A969-381464F4EF43}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97E096AA-26F3-417A-A969-381464F4EF43}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97E096AA-26F3-417A-A969-381464F4EF43}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PARR.BLL/Domain/Mq/TemplateActivatorMq.cs b/PARR.BLL/Domain/Mq/TemplateActivatorMq.cs new file mode 100644 index 00000000..be406735 --- /dev/null +++ b/PARR.BLL/Domain/Mq/TemplateActivatorMq.cs @@ -0,0 +1,20 @@ +using PARR.Constants; + +namespace PARR.BLL.Domain.Mq +{ + /// + /// Модель в MQ, активация/деактивация шаблонов/расписаний + /// + public class TemplateActivatorMq + { + /// + /// Id регламентной работы + /// + public Guid ApplicationInWorkId { get; set; } + + /// + /// Действие по активации/деактивации + /// + public TemplateActivatorActionsEnum Action { get; set; } + } +} diff --git a/PARR.Constants/TemplateActivatorActionsEnum.cs b/PARR.Constants/TemplateActivatorActionsEnum.cs new file mode 100644 index 00000000..0f5c070c --- /dev/null +++ b/PARR.Constants/TemplateActivatorActionsEnum.cs @@ -0,0 +1,55 @@ +namespace PARR.Constants +{ + /// + /// Действия с шаблонами/расписаниями для TemplateActivator + /// + public enum TemplateActivatorActionsEnum + { + /// + /// Активировать все шаблоны + /// + ActivateAllTemplates, + + /// + /// Активировать шаблоны у которых активировано расписание + /// + ActivateTemplatesWithActiveSchedules, + + /// + /// Деактивировать все шаблоны + /// + DeactivateAllTemplates, + + /// + /// Деактивировать шаблоны у которынх деактивировано расписание + /// + DeactivateTemplatesWithDeactivationSchedules, + + /// + /// Активировать все расписания + /// + ActivateAllSchedules, + + /// + /// Деактивировать все расписания + /// + DeactivateAllSchedules, + + /// + /// Активировать все расписания у которых активированы шаблоны + /// + ActivateSchedulesWithActiveTemplates, + + /// + /// Деактивировать все расписания у которых деактивированы шаблоны + /// + DeactivateSchedulesWithDeactivationTemplates + + + + //только в интерфейсе: + //активировать все шаблоны и расписания (отправлю 2 запроса) + //деактивировать все шаблоны и расписания (отправлю 2 запроса) + + } +} diff --git a/PARR.TemplateActivator/PARR.TemplateActivator.csproj b/PARR.TemplateActivator/PARR.TemplateActivator.csproj new file mode 100644 index 00000000..4d002e29 --- /dev/null +++ b/PARR.TemplateActivator/PARR.TemplateActivator.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + enable + enable + + + + + + + + + diff --git a/PARR.TemplateActivatorWorker/Dockerfile b/PARR.TemplateActivatorWorker/Dockerfile new file mode 100644 index 00000000..b13b2fa7 --- /dev/null +++ b/PARR.TemplateActivatorWorker/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 +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["NuGet.config", "."] +COPY ["PARR.TemplateActivatorWorker/PARR.TemplateActivatorWorker.csproj", "PARR.TemplateActivatorWorker/"] +COPY ["PARR.TemplateActivator/PARR.TemplateActivator.csproj", "PARR.TemplateActivator/"] +COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] +COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] +RUN dotnet restore "./PARR.TemplateActivatorWorker/PARR.TemplateActivatorWorker.csproj" +COPY . . +WORKDIR "/src/PARR.TemplateActivatorWorker" +RUN dotnet build "./PARR.TemplateActivatorWorker.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG app_version=0.0.0-default +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./PARR.TemplateActivatorWorker.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false /p:Version=$app_version + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "PARR.TemplateActivatorWorker.dll"] \ No newline at end of file diff --git a/PARR.TemplateActivatorWorker/PARR.TemplateActivatorWorker.csproj b/PARR.TemplateActivatorWorker/PARR.TemplateActivatorWorker.csproj new file mode 100644 index 00000000..df984141 --- /dev/null +++ b/PARR.TemplateActivatorWorker/PARR.TemplateActivatorWorker.csproj @@ -0,0 +1,24 @@ + + + + net7.0 + enable + enable + dotnet-PARR.TemplateActivatorWorker-99abde53-965d-477c-abdc-38f4544cfd05 + Linux + + + + + + + + + + + + + + + + diff --git a/PARR.TemplateActivatorWorker/Program.cs b/PARR.TemplateActivatorWorker/Program.cs new file mode 100644 index 00000000..e341b76f --- /dev/null +++ b/PARR.TemplateActivatorWorker/Program.cs @@ -0,0 +1,10 @@ +using PARR.TemplateActivatorWorker; + +IHost host = Host.CreateDefaultBuilder(args) + .ConfigureServices(services => + { + services.AddHostedService(); + }) + .Build(); + +host.Run(); diff --git a/PARR.TemplateActivatorWorker/Properties/launchSettings.json b/PARR.TemplateActivatorWorker/Properties/launchSettings.json new file mode 100644 index 00000000..c92cb808 --- /dev/null +++ b/PARR.TemplateActivatorWorker/Properties/launchSettings.json @@ -0,0 +1,14 @@ +{ + "profiles": { + "PARR.TemplateActivatorWorker": { + "commandName": "Project", + "environmentVariables": { + "DOTNET_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true + }, + "Container (Dockerfile)": { + "commandName": "Docker" + } + } +} \ No newline at end of file diff --git a/PARR.TemplateActivatorWorker/Worker.cs b/PARR.TemplateActivatorWorker/Worker.cs new file mode 100644 index 00000000..354417ad --- /dev/null +++ b/PARR.TemplateActivatorWorker/Worker.cs @@ -0,0 +1,23 @@ +namespace PARR.TemplateActivatorWorker +{ + public class Worker : BackgroundService + { + private readonly ILogger _logger; + + public Worker(ILogger logger) + { + _logger = logger; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + // : TemplateActivatorMq + + //while (!stoppingToken.IsCancellationRequested) + //{ + // _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); + // await Task.Delay(1000, stoppingToken); + //} + } + } +} diff --git a/PARR.TemplateActivatorWorker/appsettings.Development.json b/PARR.TemplateActivatorWorker/appsettings.Development.json new file mode 100644 index 00000000..b2dcdb67 --- /dev/null +++ b/PARR.TemplateActivatorWorker/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/PARR.TemplateActivatorWorker/appsettings.json b/PARR.TemplateActivatorWorker/appsettings.json new file mode 100644 index 00000000..b2dcdb67 --- /dev/null +++ b/PARR.TemplateActivatorWorker/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/PARR.TemplateDistributor/MqTemplateDistributor.cs b/PARR.TemplateDistributor/MqTemplateDistributor.cs index 499faf85..5d55d238 100644 --- a/PARR.TemplateDistributor/MqTemplateDistributor.cs +++ b/PARR.TemplateDistributor/MqTemplateDistributor.cs @@ -55,7 +55,7 @@ namespace PARR.TemplateDistributor if (!await validatorService.IsValidApplicationAndWorksAsync(query.ApplicationInWorkId)) { - logger.LogError($"Некорректные параметры регалментной работы {nameof(query.ApplicationInWorkId)}: {query.ApplicationInWorkId}"); + logger.LogError($"Некорректные параметры регламентной работы {nameof(query.ApplicationInWorkId)}: {query.ApplicationInWorkId}"); return; } diff --git a/README.md b/README.md index c65969da..33820594 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ - PARR.MockData - загрузка тестовых данных - PARR.NextRun - рассчет следующей даты генерации наряда/запуска агента - PARR.NextRunWorker +- PARR.TemplateActivator - активатор/деактиватор шаблонов/расписаний +- PARR.TemplateActivatorWorker - PARR.TemplateDistributor - автораспределение РР - PARR.TemplateDistributorWorker - PARR.Test - тестирование функций ПАРР diff --git a/docker-compose.dcproj b/docker-compose.dcproj index bebd743d..65e28ef3 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -18,6 +18,7 @@ + diff --git a/docker-compose.template-activator.yml b/docker-compose.template-activator.yml new file mode 100644 index 00000000..c8835037 --- /dev/null +++ b/docker-compose.template-activator.yml @@ -0,0 +1,25 @@ +version: '3.4' + +#PARR TEMPLATE ACTIVATOR +services: + parr-template-activator: + image: harbor.dvgd.rzd/parr/parr-template-activator:${tag-latest} + environment: + - ASPNETCORE_ENVIRONMENT=Production + - TZ=Europe/Moscow + logging: + driver: fluentd + options: + fluentd-address: dvgd-efk-01.dvgd.oao.rzd:24224 + fluentd-retry-wait: '30s' + fluentd-max-retries: '30' + tag: parr.template-activator.serilog + deploy: + replicas: 2 + networks: + parr-network: + +networks: + parr-network: + driver: overlay + external: true \ No newline at end of file