@docker-digital/dockernet-agent 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -0
  3. package/dist/agent/agent.module.d.ts +2 -0
  4. package/dist/agent/agent.module.js +47 -0
  5. package/dist/agent/agent.module.js.map +1 -0
  6. package/dist/agent/commands/agent.command.d.ts +58 -0
  7. package/dist/agent/commands/agent.command.js +417 -0
  8. package/dist/agent/commands/agent.command.js.map +1 -0
  9. package/dist/agent/services/api.service.d.ts +13 -0
  10. package/dist/agent/services/api.service.js +116 -0
  11. package/dist/agent/services/api.service.js.map +1 -0
  12. package/dist/agent/services/config.service.d.ts +28 -0
  13. package/dist/agent/services/config.service.js +100 -0
  14. package/dist/agent/services/config.service.js.map +1 -0
  15. package/dist/agent/services/docker-event.service.d.ts +44 -0
  16. package/dist/agent/services/docker-event.service.js +141 -0
  17. package/dist/agent/services/docker-event.service.js.map +1 -0
  18. package/dist/agent/services/docker.service.d.ts +16 -0
  19. package/dist/agent/services/docker.service.js +170 -0
  20. package/dist/agent/services/docker.service.js.map +1 -0
  21. package/dist/agent/services/event-websocket-client.service.d.ts +49 -0
  22. package/dist/agent/services/event-websocket-client.service.js +248 -0
  23. package/dist/agent/services/event-websocket-client.service.js.map +1 -0
  24. package/dist/agent/services/event.service.d.ts +27 -0
  25. package/dist/agent/services/event.service.js +242 -0
  26. package/dist/agent/services/event.service.js.map +1 -0
  27. package/dist/agent/services/log.service.d.ts +19 -0
  28. package/dist/agent/services/log.service.js +176 -0
  29. package/dist/agent/services/log.service.js.map +1 -0
  30. package/dist/agent/services/machine.service.d.ts +15 -0
  31. package/dist/agent/services/machine.service.js +148 -0
  32. package/dist/agent/services/machine.service.js.map +1 -0
  33. package/dist/agent/services/profile.service.d.ts +33 -0
  34. package/dist/agent/services/profile.service.js +438 -0
  35. package/dist/agent/services/profile.service.js.map +1 -0
  36. package/dist/agent/services/volume-sync.service.d.ts +9 -0
  37. package/dist/agent/services/volume-sync.service.js +87 -0
  38. package/dist/agent/services/volume-sync.service.js.map +1 -0
  39. package/dist/agent/services/websocket-client.service.d.ts +48 -0
  40. package/dist/agent/services/websocket-client.service.js +278 -0
  41. package/dist/agent/services/websocket-client.service.js.map +1 -0
  42. package/dist/app.module.d.ts +2 -0
  43. package/dist/app.module.js +31 -0
  44. package/dist/app.module.js.map +1 -0
  45. package/dist/index.d.ts +2 -0
  46. package/dist/index.js +19 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/main.d.ts +2 -0
  49. package/dist/main.js +12 -0
  50. package/dist/main.js.map +1 -0
  51. package/dist/tsconfig.tsbuildinfo +1 -0
  52. package/package.json +103 -0
@@ -0,0 +1,33 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { ApiService } from './api.service';
3
+ import { ConfigService } from './config.service';
4
+ import { DockerService } from './docker.service';
5
+ import { DockerEventService } from './docker-event.service';
6
+ import { LogService } from './log.service';
7
+ import { WebSocketClientService } from './websocket-client.service';
8
+ export declare class ProfileService implements OnModuleInit {
9
+ private apiService;
10
+ private configService;
11
+ private dockerService;
12
+ private dockerEventService;
13
+ private logService;
14
+ private websocketClientService;
15
+ private readonly logger;
16
+ private useEventDrivenUpdates;
17
+ constructor(apiService: ApiService, configService: ConfigService, dockerService: DockerService, dockerEventService: DockerEventService, logService: LogService, websocketClientService: WebSocketClientService);
18
+ onModuleInit(): Promise<void>;
19
+ getProfileDetails(profileId: string, workspaceId?: string): Promise<any>;
20
+ startProfile(eventKey: string, profileId: string, workspaceId: string): Promise<void>;
21
+ stopProfile(eventKey: string, profileId: string, workspaceId?: string): Promise<void>;
22
+ restartService(eventKey: string, profileId: string, workspaceId: string, serviceName: string): Promise<void>;
23
+ updateProfileStatus(profileId: string, workspaceId: string, isActive: boolean): Promise<void>;
24
+ updateProfileServicesStatus(profileId: string, workspaceId: string): Promise<void>;
25
+ private handlePrivateRegistries;
26
+ private markEventRunning;
27
+ private markEventExecuted;
28
+ private markEventFailed;
29
+ private handleContainerStateChanged;
30
+ private getWorkspaceId;
31
+ private updateProfileStatusFromDocker;
32
+ updateAllProfilesStatus(): Promise<void>;
33
+ }
@@ -0,0 +1,438 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var ProfileService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ProfileService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const fs = require("fs-extra");
16
+ const path = require("path");
17
+ const child_process_1 = require("child_process");
18
+ const util_1 = require("util");
19
+ const api_service_1 = require("./api.service");
20
+ const config_service_1 = require("./config.service");
21
+ const docker_service_1 = require("./docker.service");
22
+ const docker_event_service_1 = require("./docker-event.service");
23
+ const log_service_1 = require("./log.service");
24
+ const websocket_client_service_1 = require("./websocket-client.service");
25
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
26
+ let ProfileService = ProfileService_1 = class ProfileService {
27
+ constructor(apiService, configService, dockerService, dockerEventService, logService, websocketClientService) {
28
+ this.apiService = apiService;
29
+ this.configService = configService;
30
+ this.dockerService = dockerService;
31
+ this.dockerEventService = dockerEventService;
32
+ this.logService = logService;
33
+ this.websocketClientService = websocketClientService;
34
+ this.logger = new common_1.Logger(ProfileService_1.name);
35
+ this.useEventDrivenUpdates = false;
36
+ }
37
+ async onModuleInit() {
38
+ this.dockerEventService.onContainerStateChangedCallback((event) => this.handleContainerStateChanged(event));
39
+ try {
40
+ await this.websocketClientService.connect();
41
+ if (this.websocketClientService.isWebSocketConnected()) {
42
+ this.useEventDrivenUpdates = true;
43
+ this.logger.log('Event-driven status updates enabled (WebSocket connected)');
44
+ }
45
+ else {
46
+ this.logger.warn('WebSocket not available, falling back to polling');
47
+ }
48
+ }
49
+ catch (error) {
50
+ this.logger.warn(`Failed to connect WebSocket: ${error.message}, using polling fallback`);
51
+ }
52
+ }
53
+ async getProfileDetails(profileId, workspaceId) {
54
+ let endpoint = `/docker-profiles/${profileId}`;
55
+ if (workspaceId) {
56
+ endpoint += `?workspace_id=${workspaceId}`;
57
+ }
58
+ this.logger.debug(`Calling API: GET ${endpoint}`);
59
+ const maxRetries = 24;
60
+ const response = (await this.apiService.callApi('GET', endpoint, undefined, maxRetries, 5000));
61
+ this.logger.debug(`API response received: ${response ? 'success' : 'null'}`);
62
+ if (!response) {
63
+ this.logger.warn(`No response from API for profile ${profileId}`);
64
+ return null;
65
+ }
66
+ const responseData = response.data || response;
67
+ if (!responseData) {
68
+ this.logger.warn(`No data in API response for profile ${profileId}`);
69
+ return null;
70
+ }
71
+ if (responseData.profile) {
72
+ const profile = responseData.profile;
73
+ if (responseData.docker_compose_content) {
74
+ profile.docker_compose_content = responseData.docker_compose_content;
75
+ profile.dockerComposeContent = responseData.docker_compose_content;
76
+ }
77
+ if (responseData.services) {
78
+ profile.services = responseData.services;
79
+ }
80
+ this.logger.debug(`Profile parsed with docker_compose_content: ${profile ? 'success' : 'null'}`);
81
+ return profile;
82
+ }
83
+ this.logger.debug(`Profile parsed: ${responseData ? 'success' : 'null'}`);
84
+ return responseData;
85
+ }
86
+ async startProfile(eventKey, profileId, workspaceId) {
87
+ if (!profileId) {
88
+ await this.markEventFailed(eventKey, 'Profile ID is required');
89
+ return;
90
+ }
91
+ if (!workspaceId || workspaceId === 'null' || workspaceId === 'undefined') {
92
+ await this.markEventFailed(eventKey, 'Workspace ID is required to get profile details');
93
+ return;
94
+ }
95
+ this.logger.log(`Starting profile: ${profileId}, workspace: ${workspaceId}`);
96
+ this.logger.log(`[DEBUG] After Starting profile log, about to fetch profile details`);
97
+ this.logger.log(`[DEBUG] Calling getProfileDetails for ${profileId}`);
98
+ const profile = await this.getProfileDetails(profileId, workspaceId);
99
+ this.logger.log(`[DEBUG] getProfileDetails returned for ${profileId}`);
100
+ this.logger.warn(`Profile details received: ${profile ? 'success' : 'null'}`);
101
+ if (!profile) {
102
+ this.logger.error(`Cannot get profile details from server for ${profileId}`);
103
+ await this.markEventFailed(eventKey, 'Cannot get profile details from server');
104
+ return;
105
+ }
106
+ this.logger.debug(`Profile details retrieved successfully for ${profileId}`);
107
+ const machineKey = await this.configService.getMachineKey();
108
+ const profileMachineKey = profile.machine_key;
109
+ if (profileMachineKey && profileMachineKey !== machineKey) {
110
+ this.logger.warn(`Skipping profile ${profileId} - machine_key mismatch (profile: ${profileMachineKey}, agent: ${machineKey})`);
111
+ return;
112
+ }
113
+ await this.markEventRunning(eventKey);
114
+ const profileDir = path.join(this.configService.workDirPath, profileId);
115
+ this.logger.log(`[DEBUG] Creating profile directory: ${profileDir}`);
116
+ await fs.ensureDir(profileDir);
117
+ this.logger.log(`[DEBUG] Profile directory created: ${profileDir}`);
118
+ const envContent = profile.env_content || profile.envContent;
119
+ if (envContent) {
120
+ const envFile = path.join(profileDir, `.env_${profileId}`);
121
+ await fs.writeFile(envFile, envContent);
122
+ this.logger.log(`Created .env file: ${envFile}`);
123
+ }
124
+ this.logger.log(`[DEBUG] Env content length: ${envContent?.length}`);
125
+ const dockerComposeContent = profile.docker_compose_content ||
126
+ profile.dockerComposeContent ||
127
+ profile.data?.docker_compose_content ||
128
+ profile.data?.dockerComposeContent;
129
+ if (!dockerComposeContent) {
130
+ await this.markEventFailed(eventKey, 'Profile does not have docker-compose content');
131
+ return;
132
+ }
133
+ await this.handlePrivateRegistries(profile);
134
+ const composeFile = path.join(profileDir, `docker-compose_${profileId}.yaml`);
135
+ await fs.writeFile(composeFile, dockerComposeContent);
136
+ this.logger.log(`Created docker-compose file: ${composeFile}`);
137
+ try {
138
+ const { stdout, stderr } = await execAsync(`docker compose -f "${composeFile}" up -d`, { cwd: profileDir });
139
+ if (stderr && !stderr.includes('Creating')) {
140
+ this.logger.warn(`Docker compose warnings: ${stderr}`);
141
+ }
142
+ }
143
+ catch (error) {
144
+ await this.markEventFailed(eventKey, `docker compose up failed: ${error.message}`);
145
+ return;
146
+ }
147
+ await this.logService.startLogStreamsForProfile(profileId, workspaceId);
148
+ const metadataFile = path.join(profileDir, '.profile_metadata');
149
+ await fs.writeFile(metadataFile, `workspace_id=${workspaceId}\nprofile_id=${profileId}\n`);
150
+ await this.updateProfileStatus(profileId, workspaceId, true);
151
+ await this.markEventExecuted(eventKey);
152
+ this.logger.log(`Profile ${profileId} started successfully`);
153
+ }
154
+ async stopProfile(eventKey, profileId, workspaceId) {
155
+ if (!profileId) {
156
+ await this.markEventFailed(eventKey, 'Profile ID is required');
157
+ return;
158
+ }
159
+ this.logger.log(`Stopping profile: ${profileId}`);
160
+ if (workspaceId && workspaceId !== 'null' && workspaceId !== 'undefined') {
161
+ const profile = await this.getProfileDetails(profileId, workspaceId);
162
+ if (profile) {
163
+ const machineKey = await this.configService.getMachineKey();
164
+ const profileMachineKey = profile.machine_key;
165
+ if (profileMachineKey && profileMachineKey !== machineKey) {
166
+ this.logger.warn(`Skipping profile ${profileId} - machine_key mismatch`);
167
+ return;
168
+ }
169
+ }
170
+ }
171
+ await this.markEventRunning(eventKey);
172
+ const profileDir = path.join(this.configService.workDirPath, profileId);
173
+ const composeFile = path.join(profileDir, `docker-compose_${profileId}.yaml`);
174
+ if (!fs.existsSync(composeFile)) {
175
+ await this.markEventFailed(eventKey, `Docker-compose file not found: ${composeFile}`);
176
+ return;
177
+ }
178
+ await this.logService.stopLogStreamsForProfile(profileId);
179
+ try {
180
+ await execAsync(`docker compose -f "${composeFile}" down`, {
181
+ cwd: profileDir,
182
+ });
183
+ }
184
+ catch (error) {
185
+ await this.markEventFailed(eventKey, `docker compose down failed: ${error.message}`);
186
+ return;
187
+ }
188
+ const metadataFile = path.join(profileDir, '.profile_metadata');
189
+ await fs.remove(metadataFile).catch(() => { });
190
+ if (workspaceId && workspaceId !== 'null' && workspaceId !== 'undefined') {
191
+ await this.updateProfileStatus(profileId, workspaceId, false);
192
+ }
193
+ await this.markEventExecuted(eventKey);
194
+ this.logger.log(`Profile ${profileId} stopped successfully`);
195
+ }
196
+ async restartService(eventKey, profileId, workspaceId, serviceName) {
197
+ this.logger.log(`Restarting service: ${serviceName} in profile: ${profileId}`);
198
+ const profileDir = path.join(this.configService.workDirPath, profileId);
199
+ const composeFile = path.join(profileDir, `docker-compose_${profileId}.yaml`);
200
+ if (!fs.existsSync(composeFile)) {
201
+ await this.markEventFailed(eventKey, `Docker-compose file not found: ${composeFile}`);
202
+ return;
203
+ }
204
+ try {
205
+ await execAsync(`docker compose -f "${composeFile}" restart ${serviceName}`, { cwd: profileDir });
206
+ await this.markEventExecuted(eventKey);
207
+ this.logger.log(`Service ${serviceName} restarted successfully`);
208
+ }
209
+ catch (error) {
210
+ await this.markEventFailed(eventKey, `docker compose restart failed: ${error.message}`);
211
+ }
212
+ }
213
+ async updateProfileStatus(profileId, workspaceId, isActive) {
214
+ const payload = {
215
+ workspace_id: workspaceId,
216
+ is_active: isActive,
217
+ };
218
+ await this.apiService.callApi('PUT', `/docker-profiles/${profileId}/status`, payload, -1, 10000);
219
+ }
220
+ async updateProfileServicesStatus(profileId, workspaceId) {
221
+ const servicesResponse = await this.apiService.callApi('GET', `/docker-profiles/${profileId}/services?workspace_id=${workspaceId}`, undefined, -1, 5000);
222
+ if (!servicesResponse) {
223
+ return;
224
+ }
225
+ const services = servicesResponse.data?.rows || servicesResponse.rows || [];
226
+ if (!services || services.length === 0) {
227
+ return;
228
+ }
229
+ const profileDir = path.join(this.configService.workDirPath, profileId);
230
+ const servicesStatus = [];
231
+ for (const service of services) {
232
+ const serviceKey = service.key;
233
+ const serviceName = service.name;
234
+ if (!serviceKey || !serviceName) {
235
+ continue;
236
+ }
237
+ const status = await this.dockerService.getServiceStatus(serviceName, profileDir, profileId);
238
+ if (status && status !== 'unknown') {
239
+ servicesStatus.push({
240
+ service_key: serviceKey,
241
+ service_name: serviceName,
242
+ status,
243
+ });
244
+ }
245
+ }
246
+ if (servicesStatus.length > 0) {
247
+ const payload = {
248
+ profile_key: profileId,
249
+ workspace_id: workspaceId,
250
+ services: servicesStatus,
251
+ };
252
+ await this.apiService.callApi('PUT', `/docker-profiles/${profileId}/services/status`, payload, -1, 5000);
253
+ const hasRunning = servicesStatus.some((s) => /^(running|up)/i.test(s.status));
254
+ await this.updateProfileStatus(profileId, workspaceId, hasRunning);
255
+ }
256
+ else {
257
+ const composeFile = path.join(profileDir, `docker-compose_${profileId}.yaml`);
258
+ if (fs.existsSync(composeFile)) {
259
+ const containers = await this.dockerService.getProfileContainers(profileId);
260
+ const runningContainers = containers.filter((c) => c.State === 'running' || (c.Status && /^Up/i.test(c.Status)));
261
+ const hasRunning = runningContainers.length > 0;
262
+ await this.updateProfileStatus(profileId, workspaceId, hasRunning);
263
+ }
264
+ else {
265
+ await this.updateProfileStatus(profileId, workspaceId, false);
266
+ }
267
+ }
268
+ }
269
+ async handlePrivateRegistries(profile) {
270
+ const services = profile.services || [];
271
+ const registries = new Map();
272
+ for (const service of services) {
273
+ const config = service.config || {};
274
+ const isPrivate = config.is_private_registry || config.isPrivateRegistry;
275
+ if (isPrivate) {
276
+ const url = config.registry_url || config.registryUrl;
277
+ const username = config.registry_username || config.registryUsername;
278
+ const password = config.registry_password || config.registryPassword;
279
+ if (url && username && password) {
280
+ if (!registries.has(url)) {
281
+ registries.set(url, { url, username, password });
282
+ }
283
+ }
284
+ }
285
+ }
286
+ for (const registry of registries.values()) {
287
+ const success = await this.dockerService.dockerLogin(registry.url, registry.username, registry.password);
288
+ if (success) {
289
+ this.logger.log(`Docker login successful for registry: ${registry.url}`);
290
+ }
291
+ else {
292
+ this.logger.warn(`Docker login failed for registry: ${registry.url}`);
293
+ }
294
+ }
295
+ }
296
+ async markEventRunning(eventKey) {
297
+ await this.apiService.callApi('PUT', `/events/${eventKey}`, {
298
+ status: 'running',
299
+ }, -1, 5000);
300
+ }
301
+ async markEventExecuted(eventKey) {
302
+ await this.apiService.callApi('PUT', `/events/${eventKey}`, {
303
+ status: 'executed',
304
+ is_executed: true,
305
+ }, -1, 5000);
306
+ }
307
+ async markEventFailed(eventKey, error) {
308
+ await this.apiService.callApi('PUT', `/events/${eventKey}`, {
309
+ status: 'failed',
310
+ is_executed: true,
311
+ error,
312
+ }, -1, 5000);
313
+ }
314
+ async handleContainerStateChanged(event) {
315
+ if (!this.useEventDrivenUpdates) {
316
+ this.logger.debug('Event-driven updates disabled, skipping Docker event');
317
+ return;
318
+ }
319
+ this.logger.log(`Container state changed: ${event.action} for ${event.serviceName} in profile ${event.profileId}`);
320
+ const workspaceId = await this.getWorkspaceId(event.profileId);
321
+ if (!workspaceId) {
322
+ this.logger.warn(`No workspace_id found for profile ${event.profileId}`);
323
+ return;
324
+ }
325
+ const profileDir = path.join(this.configService.workDirPath, event.profileId);
326
+ const status = await this.dockerService.getServiceStatus(event.serviceName, profileDir, event.profileId);
327
+ await this.websocketClientService.sendStatusUpdate({
328
+ type: 'service_status',
329
+ workspace_id: workspaceId,
330
+ profile_key: event.profileId,
331
+ service_key: event.serviceName,
332
+ service_name: event.serviceName,
333
+ status: status,
334
+ container_id: event.containerId,
335
+ timestamp: Date.now(),
336
+ });
337
+ await this.updateProfileStatusFromDocker(event.profileId, workspaceId);
338
+ }
339
+ async getWorkspaceId(profileId) {
340
+ const profileDir = path.join(this.configService.workDirPath, profileId);
341
+ const metadataFile = path.join(profileDir, '.profile_metadata');
342
+ if (!fs.existsSync(metadataFile)) {
343
+ return null;
344
+ }
345
+ try {
346
+ const metadata = await fs.readFile(metadataFile, 'utf-8');
347
+ const workspaceIdMatch = metadata.match(/^workspace_id=(.+)$/m);
348
+ const workspaceId = workspaceIdMatch?.[1]?.trim();
349
+ if (!workspaceId ||
350
+ workspaceId === 'null' ||
351
+ workspaceId === 'undefined') {
352
+ return null;
353
+ }
354
+ return workspaceId;
355
+ }
356
+ catch (error) {
357
+ this.logger.error(`Error reading metadata for ${profileId}: ${error.message}`);
358
+ return null;
359
+ }
360
+ }
361
+ async updateProfileStatusFromDocker(profileId, workspaceId) {
362
+ const profileDir = path.join(this.configService.workDirPath, profileId);
363
+ const containers = await this.dockerService.getProfileContainers(profileId);
364
+ const runningContainers = containers.filter((c) => c.State === 'running' || (c.Status && /^Up/i.test(c.Status)));
365
+ const hasRunning = runningContainers.length > 0;
366
+ await this.websocketClientService.sendStatusUpdate({
367
+ type: 'profile_status',
368
+ workspace_id: workspaceId,
369
+ profile_key: profileId,
370
+ is_active: hasRunning,
371
+ timestamp: Date.now(),
372
+ });
373
+ }
374
+ async updateAllProfilesStatus() {
375
+ const workDir = this.configService.workDirPath;
376
+ if (!fs.existsSync(workDir)) {
377
+ return;
378
+ }
379
+ let profiles;
380
+ try {
381
+ profiles = await fs.readdir(workDir);
382
+ }
383
+ catch (error) {
384
+ this.logger.error(`Error reading work directory: ${error.message}`);
385
+ return;
386
+ }
387
+ if (profiles.length === 0) {
388
+ return;
389
+ }
390
+ let updatedCount = 0;
391
+ for (const profileId of profiles) {
392
+ try {
393
+ const profileDir = path.join(workDir, profileId);
394
+ const stat = await fs.stat(profileDir);
395
+ if (!stat.isDirectory()) {
396
+ continue;
397
+ }
398
+ const metadataFile = path.join(profileDir, '.profile_metadata');
399
+ const composeFile = path.join(profileDir, `docker-compose_${profileId}.yaml`);
400
+ if (!fs.existsSync(metadataFile) || !fs.existsSync(composeFile)) {
401
+ continue;
402
+ }
403
+ const metadata = await fs.readFile(metadataFile, 'utf-8');
404
+ const workspaceIdMatch = metadata.match(/^workspace_id=(.+)$/m);
405
+ const workspaceId = workspaceIdMatch?.[1]?.trim();
406
+ if (!workspaceId ||
407
+ workspaceId === 'null' ||
408
+ workspaceId === 'undefined') {
409
+ continue;
410
+ }
411
+ const profile = await this.getProfileDetails(profileId, workspaceId);
412
+ if (profile) {
413
+ const machineKey = await this.configService.getMachineKey();
414
+ const profileMachineKey = profile.machine_key;
415
+ if (profileMachineKey && profileMachineKey !== machineKey) {
416
+ continue;
417
+ }
418
+ }
419
+ await this.updateProfileServicesStatus(profileId, workspaceId);
420
+ updatedCount++;
421
+ }
422
+ catch (error) {
423
+ this.logger.error(`Error updating profile ${profileId}: ${error.message}`);
424
+ }
425
+ }
426
+ }
427
+ };
428
+ exports.ProfileService = ProfileService;
429
+ exports.ProfileService = ProfileService = ProfileService_1 = __decorate([
430
+ (0, common_1.Injectable)(),
431
+ __metadata("design:paramtypes", [api_service_1.ApiService,
432
+ config_service_1.ConfigService,
433
+ docker_service_1.DockerService,
434
+ docker_event_service_1.DockerEventService,
435
+ log_service_1.LogService,
436
+ websocket_client_service_1.WebSocketClientService])
437
+ ], ProfileService);
438
+ //# sourceMappingURL=profile.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.service.js","sourceRoot":"","sources":["../../../src/agent/services/profile.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ApiService } from './api.service';
2
+ import { ConfigService } from './config.service';
3
+ export declare class VolumeSyncService {
4
+ private apiService;
5
+ private configService;
6
+ private readonly logger;
7
+ constructor(apiService: ApiService, configService: ConfigService);
8
+ processVolumeSyncJobs(): Promise<void>;
9
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var VolumeSyncService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.VolumeSyncService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const schedule_1 = require("@nestjs/schedule");
16
+ const fs = require("fs-extra");
17
+ const child_process_1 = require("child_process");
18
+ const util_1 = require("util");
19
+ const api_service_1 = require("./api.service");
20
+ const config_service_1 = require("./config.service");
21
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
22
+ let VolumeSyncService = VolumeSyncService_1 = class VolumeSyncService {
23
+ constructor(apiService, configService) {
24
+ this.apiService = apiService;
25
+ this.configService = configService;
26
+ this.logger = new common_1.Logger(VolumeSyncService_1.name);
27
+ }
28
+ async processVolumeSyncJobs() {
29
+ const machineKey = await this.configService.getMachineKey();
30
+ if (!machineKey) {
31
+ return;
32
+ }
33
+ const jobJson = await this.apiService.callApi('GET', `/volume-sync/jobs?machine_key=${machineKey}`, undefined, -1, 5000);
34
+ if (!jobJson || !jobJson.id) {
35
+ return;
36
+ }
37
+ const jobId = jobJson.id;
38
+ const sourceHostPath = jobJson.source_host_path;
39
+ const targetContainerPath = jobJson.target_container_path;
40
+ if (!jobId || !sourceHostPath || !targetContainerPath) {
41
+ return;
42
+ }
43
+ this.logger.log(`Volume sync job ${jobId}: ${sourceHostPath} -> ${targetContainerPath}`);
44
+ let status = 'completed';
45
+ let message = '';
46
+ try {
47
+ if (!(await fs.pathExists(sourceHostPath))) {
48
+ status = 'failed';
49
+ message = `Source path not found: ${sourceHostPath}`;
50
+ }
51
+ else {
52
+ await fs.ensureDir(targetContainerPath);
53
+ try {
54
+ await execAsync(`rsync -a "${sourceHostPath}/" "${targetContainerPath}/"`);
55
+ }
56
+ catch (error) {
57
+ await execAsync(`cp -a "${sourceHostPath}/." "${targetContainerPath}/"`);
58
+ }
59
+ }
60
+ }
61
+ catch (error) {
62
+ status = 'failed';
63
+ message = error.message || 'Sync failed';
64
+ }
65
+ const payload = { status, message };
66
+ await this.apiService.callApi('POST', `/volume-sync/jobs/${jobId}/complete`, payload);
67
+ if (status === 'completed') {
68
+ this.logger.log(`Volume sync job ${jobId} completed`);
69
+ }
70
+ else {
71
+ this.logger.error(`Volume sync job ${jobId} failed: ${message}`);
72
+ }
73
+ }
74
+ };
75
+ exports.VolumeSyncService = VolumeSyncService;
76
+ __decorate([
77
+ (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_5_SECONDS),
78
+ __metadata("design:type", Function),
79
+ __metadata("design:paramtypes", []),
80
+ __metadata("design:returntype", Promise)
81
+ ], VolumeSyncService.prototype, "processVolumeSyncJobs", null);
82
+ exports.VolumeSyncService = VolumeSyncService = VolumeSyncService_1 = __decorate([
83
+ (0, common_1.Injectable)(),
84
+ __metadata("design:paramtypes", [api_service_1.ApiService,
85
+ config_service_1.ConfigService])
86
+ ], VolumeSyncService);
87
+ //# sourceMappingURL=volume-sync.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volume-sync.service.js","sourceRoot":"","sources":["../../../src/agent/services/volume-sync.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { ConfigService } from './config.service';
3
+ export interface ServiceStatusUpdate {
4
+ type: 'service_status';
5
+ workspace_id: string;
6
+ profile_key: string;
7
+ service_key: string;
8
+ service_name: string;
9
+ status: string;
10
+ container_id?: string;
11
+ timestamp: number;
12
+ }
13
+ export interface ProfileStatusUpdate {
14
+ type: 'profile_status';
15
+ workspace_id: string;
16
+ profile_key: string;
17
+ is_active: boolean;
18
+ timestamp: number;
19
+ }
20
+ export type StatusUpdate = ServiceStatusUpdate | ProfileStatusUpdate;
21
+ export declare class WebSocketClientService implements OnModuleInit, OnModuleDestroy {
22
+ private configService;
23
+ private readonly logger;
24
+ private socket;
25
+ private isConnected;
26
+ private reconnectAttempts;
27
+ private messageQueue;
28
+ private readonly maxReconnectAttempts;
29
+ private readonly baseReconnectDelay;
30
+ private readonly maxReconnectDelay;
31
+ private httpFallbackEnabled;
32
+ private connectionPromise;
33
+ private pendingConnectionPromise;
34
+ constructor(configService: ConfigService);
35
+ onModuleInit(): Promise<void>;
36
+ connect(): Promise<void>;
37
+ private setupSocketHandlers;
38
+ sendStatusUpdate(update: StatusUpdate): Promise<boolean>;
39
+ private sendViaWebSocket;
40
+ private sendViaHttp;
41
+ private queueMessage;
42
+ private flushMessageQueue;
43
+ private getWebSocketUrl;
44
+ disconnect(): void;
45
+ onModuleDestroy(): void;
46
+ isWebSocketConnected(): boolean;
47
+ setHttpFallback(enabled: boolean): void;
48
+ }