Skip to content

Commit f22ae12

Browse files
committed
Quartz scheduler
1 parent ec4e90d commit f22ae12

18 files changed

+583
-0
lines changed

KeeperData.Bridge.sln

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,48 +30,162 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeeperData.Bridge.Tests.Int
3030
EndProject
3131
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{81DDED9D-158B-E303-5F62-77A2896D2A5A}"
3232
EndProject
33+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeeperData.Bridge.Worker", "src\KeeperData.Bridge.Worker\KeeperData.Bridge.Worker.csproj", "{C20E1970-BB6F-46BC-886E-7E856DAA763E}"
34+
EndProject
35+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeeperData.Bridge.Worker.Tests.Unit", "tests\KeeperData.Bridge.Worker.Tests.Unit\KeeperData.Bridge.Worker.Tests.Unit.csproj", "{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}"
36+
EndProject
37+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeeperData.Bridge.Worker.Tests.Component", "tests\KeeperData.Bridge.Worker.Tests.Component\KeeperData.Bridge.Worker.Tests.Component.csproj", "{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}"
38+
EndProject
3339
Global
3440
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3541
Debug|Any CPU = Debug|Any CPU
42+
Debug|x64 = Debug|x64
43+
Debug|x86 = Debug|x86
3644
Release|Any CPU = Release|Any CPU
45+
Release|x64 = Release|x64
46+
Release|x86 = Release|x86
3747
EndGlobalSection
3848
GlobalSection(ProjectConfigurationPlatforms) = postSolution
3949
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4050
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Debug|Any CPU.Build.0 = Debug|Any CPU
51+
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Debug|x64.ActiveCfg = Debug|Any CPU
52+
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Debug|x64.Build.0 = Debug|Any CPU
53+
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Debug|x86.ActiveCfg = Debug|Any CPU
54+
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Debug|x86.Build.0 = Debug|Any CPU
4155
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Release|Any CPU.ActiveCfg = Release|Any CPU
4256
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Release|Any CPU.Build.0 = Release|Any CPU
57+
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Release|x64.ActiveCfg = Release|Any CPU
58+
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Release|x64.Build.0 = Release|Any CPU
59+
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Release|x86.ActiveCfg = Release|Any CPU
60+
{7D935959-D3BE-4EDC-BAEC-541C72741633}.Release|x86.Build.0 = Release|Any CPU
4361
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4462
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Debug|Any CPU.Build.0 = Debug|Any CPU
63+
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Debug|x64.ActiveCfg = Debug|Any CPU
64+
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Debug|x64.Build.0 = Debug|Any CPU
65+
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Debug|x86.ActiveCfg = Debug|Any CPU
66+
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Debug|x86.Build.0 = Debug|Any CPU
4567
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Release|Any CPU.ActiveCfg = Release|Any CPU
4668
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Release|Any CPU.Build.0 = Release|Any CPU
69+
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Release|x64.ActiveCfg = Release|Any CPU
70+
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Release|x64.Build.0 = Release|Any CPU
71+
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Release|x86.ActiveCfg = Release|Any CPU
72+
{4E96024E-0BCB-4C41-8EB2-876499B07311}.Release|x86.Build.0 = Release|Any CPU
4773
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4874
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Debug|Any CPU.Build.0 = Debug|Any CPU
75+
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Debug|x64.ActiveCfg = Debug|Any CPU
76+
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Debug|x64.Build.0 = Debug|Any CPU
77+
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Debug|x86.ActiveCfg = Debug|Any CPU
78+
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Debug|x86.Build.0 = Debug|Any CPU
4979
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Release|Any CPU.ActiveCfg = Release|Any CPU
5080
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Release|Any CPU.Build.0 = Release|Any CPU
81+
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Release|x64.ActiveCfg = Release|Any CPU
82+
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Release|x64.Build.0 = Release|Any CPU
83+
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Release|x86.ActiveCfg = Release|Any CPU
84+
{D5BA4CDF-AABC-4FE6-B41A-D32381CDFB32}.Release|x86.Build.0 = Release|Any CPU
5185
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
5286
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
87+
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Debug|x64.ActiveCfg = Debug|Any CPU
88+
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Debug|x64.Build.0 = Debug|Any CPU
89+
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Debug|x86.ActiveCfg = Debug|Any CPU
90+
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Debug|x86.Build.0 = Debug|Any CPU
5391
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
5492
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Release|Any CPU.Build.0 = Release|Any CPU
93+
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Release|x64.ActiveCfg = Release|Any CPU
94+
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Release|x64.Build.0 = Release|Any CPU
95+
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Release|x86.ActiveCfg = Release|Any CPU
96+
{45E67021-5132-416B-92F0-AA2C1C7E65AD}.Release|x86.Build.0 = Release|Any CPU
5597
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
5698
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
99+
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Debug|x64.ActiveCfg = Debug|Any CPU
100+
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Debug|x64.Build.0 = Debug|Any CPU
101+
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Debug|x86.ActiveCfg = Debug|Any CPU
102+
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Debug|x86.Build.0 = Debug|Any CPU
57103
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
58104
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Release|Any CPU.Build.0 = Release|Any CPU
105+
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Release|x64.ActiveCfg = Release|Any CPU
106+
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Release|x64.Build.0 = Release|Any CPU
107+
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Release|x86.ActiveCfg = Release|Any CPU
108+
{28DA1EFD-BB2E-4AF5-B9BD-AD3B6A139DBE}.Release|x86.Build.0 = Release|Any CPU
59109
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
60110
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Debug|Any CPU.Build.0 = Debug|Any CPU
111+
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Debug|x64.ActiveCfg = Debug|Any CPU
112+
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Debug|x64.Build.0 = Debug|Any CPU
113+
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Debug|x86.ActiveCfg = Debug|Any CPU
114+
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Debug|x86.Build.0 = Debug|Any CPU
61115
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Release|Any CPU.ActiveCfg = Release|Any CPU
62116
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Release|Any CPU.Build.0 = Release|Any CPU
117+
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Release|x64.ActiveCfg = Release|Any CPU
118+
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Release|x64.Build.0 = Release|Any CPU
119+
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Release|x86.ActiveCfg = Release|Any CPU
120+
{324F5874-B7B9-4B87-9FAB-BDB970971919}.Release|x86.Build.0 = Release|Any CPU
63121
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
64122
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Debug|Any CPU.Build.0 = Debug|Any CPU
123+
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Debug|x64.ActiveCfg = Debug|Any CPU
124+
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Debug|x64.Build.0 = Debug|Any CPU
125+
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Debug|x86.ActiveCfg = Debug|Any CPU
126+
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Debug|x86.Build.0 = Debug|Any CPU
65127
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Release|Any CPU.ActiveCfg = Release|Any CPU
66128
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Release|Any CPU.Build.0 = Release|Any CPU
129+
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Release|x64.ActiveCfg = Release|Any CPU
130+
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Release|x64.Build.0 = Release|Any CPU
131+
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Release|x86.ActiveCfg = Release|Any CPU
132+
{E2B6D37D-2D17-4B43-83DC-36F1C4961526}.Release|x86.Build.0 = Release|Any CPU
67133
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
68134
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
135+
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Debug|x64.ActiveCfg = Debug|Any CPU
136+
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Debug|x64.Build.0 = Debug|Any CPU
137+
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Debug|x86.ActiveCfg = Debug|Any CPU
138+
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Debug|x86.Build.0 = Debug|Any CPU
69139
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
70140
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Release|Any CPU.Build.0 = Release|Any CPU
141+
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Release|x64.ActiveCfg = Release|Any CPU
142+
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Release|x64.Build.0 = Release|Any CPU
143+
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Release|x86.ActiveCfg = Release|Any CPU
144+
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A}.Release|x86.Build.0 = Release|Any CPU
71145
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
72146
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
147+
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Debug|x64.ActiveCfg = Debug|x64
148+
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Debug|x86.ActiveCfg = Debug|x86
73149
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
74150
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Release|Any CPU.Build.0 = Release|Any CPU
151+
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Release|x64.ActiveCfg = Release|x64
152+
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Release|x86.ActiveCfg = Release|x86
153+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
154+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Debug|Any CPU.Build.0 = Debug|Any CPU
155+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Debug|x64.ActiveCfg = Debug|Any CPU
156+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Debug|x64.Build.0 = Debug|Any CPU
157+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Debug|x86.ActiveCfg = Debug|Any CPU
158+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Debug|x86.Build.0 = Debug|Any CPU
159+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Release|Any CPU.ActiveCfg = Release|Any CPU
160+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Release|Any CPU.Build.0 = Release|Any CPU
161+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Release|x64.ActiveCfg = Release|Any CPU
162+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Release|x64.Build.0 = Release|Any CPU
163+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Release|x86.ActiveCfg = Release|Any CPU
164+
{C20E1970-BB6F-46BC-886E-7E856DAA763E}.Release|x86.Build.0 = Release|Any CPU
165+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
166+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
167+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Debug|x64.ActiveCfg = Debug|Any CPU
168+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Debug|x64.Build.0 = Debug|Any CPU
169+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Debug|x86.ActiveCfg = Debug|Any CPU
170+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Debug|x86.Build.0 = Debug|Any CPU
171+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
172+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Release|Any CPU.Build.0 = Release|Any CPU
173+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Release|x64.ActiveCfg = Release|Any CPU
174+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Release|x64.Build.0 = Release|Any CPU
175+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Release|x86.ActiveCfg = Release|Any CPU
176+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5}.Release|x86.Build.0 = Release|Any CPU
177+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
178+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Debug|Any CPU.Build.0 = Debug|Any CPU
179+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Debug|x64.ActiveCfg = Debug|Any CPU
180+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Debug|x64.Build.0 = Debug|Any CPU
181+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Debug|x86.ActiveCfg = Debug|Any CPU
182+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Debug|x86.Build.0 = Debug|Any CPU
183+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Release|Any CPU.ActiveCfg = Release|Any CPU
184+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Release|Any CPU.Build.0 = Release|Any CPU
185+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Release|x64.ActiveCfg = Release|Any CPU
186+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Release|x64.Build.0 = Release|Any CPU
187+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Release|x86.ActiveCfg = Release|Any CPU
188+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E}.Release|x86.Build.0 = Release|Any CPU
75189
EndGlobalSection
76190
GlobalSection(SolutionProperties) = preSolution
77191
HideSolutionNode = FALSE
@@ -81,6 +195,8 @@ Global
81195
{324F5874-B7B9-4B87-9FAB-BDB970971919} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
82196
{E2B6D37D-2D17-4B43-83DC-36F1C4961526} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
83197
{16AA106D-B4F1-46C9-92F3-548AE89FDA3A} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
198+
{8830A129-0A8B-49AD-AB5A-BBCE8197C2A5} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
199+
{DBCDA320-A044-43BD-BE05-0B0FAF1ED80E} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
84200
EndGlobalSection
85201
GlobalSection(ExtensibilityGlobals) = postSolution
86202
SolutionGuid = {235917AE-9AF5-49A5-AB06-472A5E5DB30D}

docker-compose.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,17 @@ services:
6666
networks:
6767
- cdp-tenant
6868

69+
keeperdata_bridge_worker:
70+
container_name: "keeperdata_bridge_worker"
71+
build:
72+
context: .
73+
dockerfile: src/KeeperData.Bridge.Worker/Dockerfile
74+
depends_on:
75+
- mongodb
76+
- localstack
77+
networks:
78+
- cdp-tenant
79+
6980
volumes:
7081
mongodb-data:
7182

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
2+
USER $APP_UID
3+
WORKDIR /app
4+
5+
6+
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
7+
ARG BUILD_CONFIGURATION=Release
8+
WORKDIR /src
9+
COPY ["src/KeeperData.Bridge.Worker/KeeperData.Bridge.Worker.csproj", "src/KeeperData.Bridge.Worker/"]
10+
RUN dotnet restore "./src/KeeperData.Bridge.Worker/KeeperData.Bridge.Worker.csproj"
11+
COPY . .
12+
WORKDIR "/src/src/KeeperData.Bridge.Worker"
13+
RUN dotnet build "./KeeperData.Bridge.Worker.csproj" -c $BUILD_CONFIGURATION -o /app/build
14+
15+
FROM build AS publish
16+
ARG BUILD_CONFIGURATION=Release
17+
RUN dotnet publish "./KeeperData.Bridge.Worker.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
18+
19+
FROM base AS final
20+
WORKDIR /app
21+
COPY --from=publish /app/publish .
22+
ENTRYPOINT ["dotnet", "KeeperData.Bridge.Worker.dll"]
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using KeeperData.Bridge.Worker.Tasks;
2+
using Quartz;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace KeeperData.Bridge.Worker.Jobs
10+
{
11+
//Prevents Quartz from starting a new job instance if the previous one is still running
12+
[DisallowConcurrentExecution]
13+
public class DataProcessingOrchestratorJob(
14+
ILogger<DataProcessingOrchestratorJob> logger,
15+
ITaskDownload taskDownload,
16+
ITaskProcess taskProcess) : IJob
17+
{
18+
public async Task Execute(IJobExecutionContext context)
19+
{
20+
logger.LogInformation("Orchestration Job started at {startTime}", DateTime.UtcNow);
21+
22+
try
23+
{
24+
await taskDownload.RunAsync(context.CancellationToken);
25+
await taskProcess.RunAsync(context.CancellationToken);
26+
27+
logger.LogInformation("Orchestration Job finished successfully at {endTime}", DateTime.UtcNow);
28+
}
29+
catch (Exception ex)
30+
{
31+
logger.LogError(ex, "Orchestration Job failed.");
32+
// Optionally, rethrow the exception to have Quartz mark the job as failed
33+
throw;
34+
}
35+
}
36+
}
37+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Worker">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<Nullable>enable</Nullable>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<UserSecretsId>dotnet-KeeperData.Bridge.Worker-9c9ceddd-667d-4132-9837-ed22f2601850</UserSecretsId>
8+
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
9+
<DockerfileContext>..\..</DockerfileContext>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<PackageReference Include="Elastic.CommonSchema.Serilog" Version="9.0.0" />
14+
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
15+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
16+
<PackageReference Include="Quartz.Extensions.Hosting" Version="3.15.0" />
17+
<PackageReference Include="Serilog.Extensions.Hosting" Version="9.0.0" />
18+
<PackageReference Include="Serilog.Settings.Configuration" Version="9.0.0" />
19+
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
20+
</ItemGroup>
21+
</Project>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using KeeperData.Bridge.Worker.Jobs;
2+
using KeeperData.Bridge.Worker.Tasks;
3+
using Quartz;
4+
using Serilog;
5+
6+
var host = Host.CreateDefaultBuilder(args)
7+
.UseSerilog((context, config) => config.ReadFrom.Configuration(context.Configuration))
8+
.ConfigureServices((hostContext, services) =>
9+
{
10+
services.AddScoped<ITaskDownload, TaskDownload>();
11+
services.AddScoped<ITaskProcess, TaskProcess>();
12+
services.AddScoped<DataProcessingOrchestratorJob>();
13+
14+
services.AddQuartz(q =>
15+
{
16+
var jobKey = new JobKey("DataProcessingOrchestratorJob");
17+
var cronSchedule = hostContext.Configuration["Quartz:Jobs:DataProcessingOrchestrator:CronSchedule"];
18+
19+
if (string.IsNullOrWhiteSpace(cronSchedule))
20+
{
21+
throw new ApplicationException("Cron schedule for the orchestrator job is not configured.");
22+
}
23+
24+
q.AddJob<DataProcessingOrchestratorJob>(opts => opts.WithIdentity(jobKey));
25+
26+
// trigger that runs on the schedule from appsettings.json
27+
q.AddTrigger(opts => opts
28+
.ForJob(jobKey)
29+
.WithIdentity($"{jobKey.Name}-trigger")
30+
.WithCronSchedule(cronSchedule));
31+
});
32+
33+
services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);
34+
})
35+
.Build();
36+
37+
await host.RunAsync();
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"profiles": {
3+
"KeeperData.Bridge.Worker": {
4+
"commandName": "Project",
5+
"environmentVariables": {
6+
"DOTNET_ENVIRONMENT": "Development"
7+
},
8+
"dotnetRunMessages": true
9+
},
10+
"Container (Dockerfile)": {
11+
"commandName": "Docker"
12+
}
13+
},
14+
"$schema": "http://json.schemastore.org/launchsettings.json"
15+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace KeeperData.Bridge.Worker.Tasks
8+
{
9+
public interface ITask
10+
{
11+
Task RunAsync(CancellationToken cancellationToken);
12+
}
13+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace KeeperData.Bridge.Worker.Tasks
8+
{
9+
public interface ITaskDownload : ITask { }
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace KeeperData.Bridge.Worker.Tasks
8+
{
9+
public interface ITaskProcess : ITask { }
10+
}

0 commit comments

Comments
 (0)