diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3566ace3..c3ec7ee9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,6 +10,7 @@ variables:
PROD_NAME_ESPP_ORDER_MANAGER: "parr/parr-espp-order-manager"
PROD_NAME_MASTER: "parr/parr-master"
PROD_NAME_NEXT_RUN: "parr/parr-next-run"
+ PROD_TEMPLATE_DISTRIBOTOR: "parr/parr-template-distributor"
stages:
- build
@@ -508,3 +509,52 @@ prod_next_run_deploy:
tags:
- ${RUNNER}
+
+
+### TEMPLATE DISTRIBUTOR PROD ###
+prod_template_distributor_build:
+ stage: build
+ only:
+ - /^td[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 td)
+ - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/td/v/g')
+ - docker build -t $REPO/$PROD_TEMPLATE_DISTRIBOTOR:$IMAGE_VERSION -t $REPO/$PROD_TEMPLATE_DISTRIBOTOR:latest -t $PROD_TEMPLATE_DISTRIBOTOR:$IMAGE_VERSION -t $PROD_TEMPLATE_DISTRIBOTOR:latest --build-arg app_version=$APP_VERSION -f PARR.TemplateDistributorWorker/Dockerfile .
+ - docker login -u $HARBOR_PUSH_USER -p $HARBOR_PUSH_PASS $REPO
+ - docker push --all-tags $REPO/$PROD_TEMPLATE_DISTRIBOTOR
+ tags:
+ - docker
+
+
+prod_template_distributor_deploy:
+ stage: deploy
+ environment:
+ name: parr-template-distributor
+ only:
+ - /^td[0-9]+\.[0-9]+\.[0-9]+$/
+ except:
+ - branches
+ script:
+ - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/td/v/g')
+ - docker login -u $HARBOR_PULL_USER -p $HARBOR_PULL_PASS $REPO
+ - tag=$IMAGE_VERSION docker stack deploy -c docker-compose.template-distributor.yml parr-template-distributor --with-registry-auth
+ parallel:
+ matrix:
+ - RUNNER: shell-api-swarm-01
+ tags:
+ - ${RUNNER}
+
diff --git a/PARR.API.sln b/PARR.API.sln
index cacc7524..e20e76d7 100644
--- a/PARR.API.sln
+++ b/PARR.API.sln
@@ -68,6 +68,10 @@ 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}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.TemplateDistributorWorker", "PARR.TemplateDistributorWorker\PARR.TemplateDistributorWorker.csproj", "{89155CAB-295D-4937-8B7A-05170587A2BC}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -184,6 +188,14 @@ Global
{47C6E193-257A-4001-84D7-11B640E3D1A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{47C6E193-257A-4001-84D7-11B640E3D1A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{47C6E193-257A-4001-84D7-11B640E3D1A0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9A8D1E97-1508-4A6E-9782-C7438224D435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9A8D1E97-1508-4A6E-9782-C7438224D435}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9A8D1E97-1508-4A6E-9782-C7438224D435}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9A8D1E97-1508-4A6E-9782-C7438224D435}.Release|Any CPU.Build.0 = Release|Any CPU
+ {89155CAB-295D-4937-8B7A-05170587A2BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/PARR.TemplateDistributor/PARR.TemplateDistributor.csproj b/PARR.TemplateDistributor/PARR.TemplateDistributor.csproj
new file mode 100644
index 00000000..4d002e29
--- /dev/null
+++ b/PARR.TemplateDistributor/PARR.TemplateDistributor.csproj
@@ -0,0 +1,15 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
diff --git a/PARR.TemplateDistributor/Settings/MqSettings.cs b/PARR.TemplateDistributor/Settings/MqSettings.cs
new file mode 100644
index 00000000..80c9a3b4
--- /dev/null
+++ b/PARR.TemplateDistributor/Settings/MqSettings.cs
@@ -0,0 +1,12 @@
+using PARR.BLL.Contracts.Interfaces;
+
+namespace PARR.TemplateDistributor.Settings
+{
+ 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.TemplateDistributor/TemplateDistributorInstaller.cs b/PARR.TemplateDistributor/TemplateDistributorInstaller.cs
new file mode 100644
index 00000000..9a6577ac
--- /dev/null
+++ b/PARR.TemplateDistributor/TemplateDistributorInstaller.cs
@@ -0,0 +1,23 @@
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using PARR.BLL;
+using PARR.DAL;
+using PARR.TemplateDistributor.Settings;
+
+namespace PARR.TemplateDistributor
+{
+ public static class TemplateDistributorInstaller
+ {
+ public static void InstallTemplateDistributorSerivces(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.InstallBllServices(configuration);
+ services.InstallDalServices(configuration);
+
+ var mqSettings = new MqSettings();
+ configuration.GetSection(nameof(MqSettings)).Bind(mqSettings);
+ services.AddSingleton(mqSettings);
+
+ //services.AddTransient();
+ }
+ }
+}
diff --git a/PARR.TemplateDistributorWorker/Dockerfile b/PARR.TemplateDistributorWorker/Dockerfile
new file mode 100644
index 00000000..92ed10e5
--- /dev/null
+++ b/PARR.TemplateDistributorWorker/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.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj", "PARR.TemplateDistributorWorker/"]
+COPY ["PARR.TemplateDistributor/PARR.TemplateDistributor.csproj", "PARR.TemplateDistributor/"]
+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.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj"
+COPY . .
+WORKDIR "/src/PARR.TemplateDistributorWorker"
+RUN dotnet build "./PARR.TemplateDistributorWorker.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.TemplateDistributorWorker.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.TemplateDistributorWorker.dll"]
\ No newline at end of file
diff --git a/PARR.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj b/PARR.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj
new file mode 100644
index 00000000..2f098384
--- /dev/null
+++ b/PARR.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj
@@ -0,0 +1,24 @@
+
+
+
+ net7.0
+ enable
+ enable
+ dotnet-PARR.TemplateDistributorWorker-ec6016b0-eb25-4847-b0cf-a0ca10a6f6e2
+ Linux
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PARR.TemplateDistributorWorker/Program.cs b/PARR.TemplateDistributorWorker/Program.cs
new file mode 100644
index 00000000..937eb77a
--- /dev/null
+++ b/PARR.TemplateDistributorWorker/Program.cs
@@ -0,0 +1,30 @@
+using PARR.TemplateDistributorWorker;
+using PARR.TemplateDistributor;
+using Serilog;
+using Elastic.CommonSchema.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.InstallTemplateDistributorSerivces(builder.Configuration);
+
+builder.Services.AddHostedService();
+
+var host = builder.Build();
+host.Run();
+
diff --git a/PARR.TemplateDistributorWorker/Properties/launchSettings.json b/PARR.TemplateDistributorWorker/Properties/launchSettings.json
new file mode 100644
index 00000000..798a1edc
--- /dev/null
+++ b/PARR.TemplateDistributorWorker/Properties/launchSettings.json
@@ -0,0 +1,14 @@
+{
+ "profiles": {
+ "PARR.TemplateDistributorWorker": {
+ "commandName": "Project",
+ "environmentVariables": {
+ "DOTNET_ENVIRONMENT": "Development"
+ },
+ "dotnetRunMessages": true
+ },
+ "Container (Dockerfile)": {
+ "commandName": "Docker"
+ }
+ }
+}
\ No newline at end of file
diff --git a/PARR.TemplateDistributorWorker/Worker.cs b/PARR.TemplateDistributorWorker/Worker.cs
new file mode 100644
index 00000000..c09abb44
--- /dev/null
+++ b/PARR.TemplateDistributorWorker/Worker.cs
@@ -0,0 +1,21 @@
+namespace PARR.TemplateDistributorWorker
+{
+ public class Worker : BackgroundService
+ {
+ private readonly ILogger _logger;
+
+ public Worker(ILogger logger)
+ {
+ _logger = logger;
+ }
+
+ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+ {
+ //while (!stoppingToken.IsCancellationRequested)
+ //{
+ // _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
+ // await Task.Delay(1000, stoppingToken);
+ //}
+ }
+ }
+}
diff --git a/PARR.TemplateDistributorWorker/appsettings.Development.json b/PARR.TemplateDistributorWorker/appsettings.Development.json
new file mode 100644
index 00000000..992d2719
--- /dev/null
+++ b/PARR.TemplateDistributorWorker/appsettings.Development.json
@@ -0,0 +1,11 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.Hosting.Lifetime": "Information"
+ }
+ },
+ "MqSettings": {
+ "HostName": "10.99.253.216"
+ }
+}
diff --git a/PARR.TemplateDistributorWorker/appsettings.json b/PARR.TemplateDistributorWorker/appsettings.json
new file mode 100644
index 00000000..81cc4cb2
--- /dev/null
+++ b/PARR.TemplateDistributorWorker/appsettings.json
@@ -0,0 +1,35 @@
+{
+ "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"
+ }
+ }
+ ]
+ },
+ "MqSettings": {
+ "HostName": "parr-rabbitmq",
+ "QueueName": "parr-template-distributor",
+ "User": "espp_template_distributor_reader",
+ "Password": "P@ss@3441gfgkjuyy"
+ }
+}
diff --git a/README.md b/README.md
index ca09c06b..c65969da 100644
--- a/README.md
+++ b/README.md
@@ -34,4 +34,6 @@
- PARR.MockData - загрузка тестовых данных
- PARR.NextRun - рассчет следующей даты генерации наряда/запуска агента
- PARR.NextRunWorker
+- PARR.TemplateDistributor - автораспределение РР
+- PARR.TemplateDistributorWorker
- PARR.Test - тестирование функций ПАРР
diff --git a/docker-compose.dcproj b/docker-compose.dcproj
index c4ac204d..bebd743d 100644
--- a/docker-compose.dcproj
+++ b/docker-compose.dcproj
@@ -18,6 +18,7 @@
+
diff --git a/docker-compose.template-distributor.yml b/docker-compose.template-distributor.yml
new file mode 100644
index 00000000..368c8297
--- /dev/null
+++ b/docker-compose.template-distributor.yml
@@ -0,0 +1,25 @@
+version: '3.4'
+
+#PARR TEMPLATE DISTRIBUTOR
+services:
+ parr-template-distributor:
+ image: harbor.dvgd.rzd/parr/parr-template-distributor:${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-distributor.serilog
+ deploy:
+ replicas: 2
+ networks:
+ parr-network:
+
+networks:
+ parr-network:
+ driver: overlay
+ external: true
\ No newline at end of file