digitaltwin-core 0.13.3 → 0.14.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.
- package/package.json +101 -106
- package/dist/auth/apisix_parser.d.ts +0 -146
- package/dist/auth/apisix_parser.d.ts.map +0 -1
- package/dist/auth/apisix_parser.js +0 -185
- package/dist/auth/apisix_parser.js.map +0 -1
- package/dist/auth/auth_config.d.ts +0 -126
- package/dist/auth/auth_config.d.ts.map +0 -1
- package/dist/auth/auth_config.js +0 -169
- package/dist/auth/auth_config.js.map +0 -1
- package/dist/auth/index.d.ts +0 -5
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -4
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/types.d.ts +0 -100
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -2
- package/dist/auth/types.js.map +0 -1
- package/dist/auth/user_service.d.ts +0 -86
- package/dist/auth/user_service.d.ts.map +0 -1
- package/dist/auth/user_service.js +0 -237
- package/dist/auth/user_service.js.map +0 -1
- package/dist/components/assets_manager.d.ts +0 -662
- package/dist/components/assets_manager.d.ts.map +0 -1
- package/dist/components/assets_manager.js +0 -1529
- package/dist/components/assets_manager.js.map +0 -1
- package/dist/components/async_upload.d.ts +0 -20
- package/dist/components/async_upload.d.ts.map +0 -1
- package/dist/components/async_upload.js +0 -10
- package/dist/components/async_upload.js.map +0 -1
- package/dist/components/collector.d.ts +0 -203
- package/dist/components/collector.d.ts.map +0 -1
- package/dist/components/collector.js +0 -202
- package/dist/components/collector.js.map +0 -1
- package/dist/components/custom_table_manager.d.ts +0 -503
- package/dist/components/custom_table_manager.d.ts.map +0 -1
- package/dist/components/custom_table_manager.js +0 -1052
- package/dist/components/custom_table_manager.js.map +0 -1
- package/dist/components/global_assets_handler.d.ts +0 -63
- package/dist/components/global_assets_handler.d.ts.map +0 -1
- package/dist/components/global_assets_handler.js +0 -127
- package/dist/components/global_assets_handler.js.map +0 -1
- package/dist/components/handler.d.ts +0 -104
- package/dist/components/handler.d.ts.map +0 -1
- package/dist/components/handler.js +0 -110
- package/dist/components/handler.js.map +0 -1
- package/dist/components/harvester.d.ts +0 -182
- package/dist/components/harvester.d.ts.map +0 -1
- package/dist/components/harvester.js +0 -393
- package/dist/components/harvester.js.map +0 -1
- package/dist/components/index.d.ts +0 -11
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -9
- package/dist/components/index.js.map +0 -1
- package/dist/components/interfaces.d.ts +0 -126
- package/dist/components/interfaces.d.ts.map +0 -1
- package/dist/components/interfaces.js +0 -8
- package/dist/components/interfaces.js.map +0 -1
- package/dist/components/map_manager.d.ts +0 -61
- package/dist/components/map_manager.d.ts.map +0 -1
- package/dist/components/map_manager.js +0 -242
- package/dist/components/map_manager.js.map +0 -1
- package/dist/components/tileset_manager.d.ts +0 -125
- package/dist/components/tileset_manager.d.ts.map +0 -1
- package/dist/components/tileset_manager.js +0 -618
- package/dist/components/tileset_manager.js.map +0 -1
- package/dist/components/types.d.ts +0 -226
- package/dist/components/types.d.ts.map +0 -1
- package/dist/components/types.js +0 -8
- package/dist/components/types.js.map +0 -1
- package/dist/database/adapters/knex_database_adapter.d.ts +0 -92
- package/dist/database/adapters/knex_database_adapter.d.ts.map +0 -1
- package/dist/database/adapters/knex_database_adapter.js +0 -647
- package/dist/database/adapters/knex_database_adapter.js.map +0 -1
- package/dist/database/database_adapter.d.ts +0 -251
- package/dist/database/database_adapter.d.ts.map +0 -1
- package/dist/database/database_adapter.js +0 -46
- package/dist/database/database_adapter.js.map +0 -1
- package/dist/engine/digital_twin_engine.d.ts +0 -253
- package/dist/engine/digital_twin_engine.d.ts.map +0 -1
- package/dist/engine/digital_twin_engine.js +0 -790
- package/dist/engine/digital_twin_engine.js.map +0 -1
- package/dist/engine/endpoints.d.ts +0 -47
- package/dist/engine/endpoints.d.ts.map +0 -1
- package/dist/engine/endpoints.js +0 -56
- package/dist/engine/endpoints.js.map +0 -1
- package/dist/engine/events.d.ts +0 -93
- package/dist/engine/events.d.ts.map +0 -1
- package/dist/engine/events.js +0 -71
- package/dist/engine/events.js.map +0 -1
- package/dist/engine/initializer.d.ts +0 -62
- package/dist/engine/initializer.d.ts.map +0 -1
- package/dist/engine/initializer.js +0 -108
- package/dist/engine/initializer.js.map +0 -1
- package/dist/engine/queue_manager.d.ts +0 -87
- package/dist/engine/queue_manager.d.ts.map +0 -1
- package/dist/engine/queue_manager.js +0 -196
- package/dist/engine/queue_manager.js.map +0 -1
- package/dist/engine/scheduler.d.ts +0 -30
- package/dist/engine/scheduler.d.ts.map +0 -1
- package/dist/engine/scheduler.js +0 -370
- package/dist/engine/scheduler.js.map +0 -1
- package/dist/engine/upload_processor.d.ts +0 -36
- package/dist/engine/upload_processor.d.ts.map +0 -1
- package/dist/engine/upload_processor.js +0 -101
- package/dist/engine/upload_processor.js.map +0 -1
- package/dist/env/env.d.ts +0 -134
- package/dist/env/env.d.ts.map +0 -1
- package/dist/env/env.js +0 -177
- package/dist/env/env.js.map +0 -1
- package/dist/index.d.ts +0 -49
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -57
- package/dist/index.js.map +0 -1
- package/dist/openapi/generator.d.ts +0 -93
- package/dist/openapi/generator.d.ts.map +0 -1
- package/dist/openapi/generator.js +0 -293
- package/dist/openapi/generator.js.map +0 -1
- package/dist/openapi/index.d.ts +0 -9
- package/dist/openapi/index.d.ts.map +0 -1
- package/dist/openapi/index.js +0 -9
- package/dist/openapi/index.js.map +0 -1
- package/dist/openapi/types.d.ts +0 -182
- package/dist/openapi/types.d.ts.map +0 -1
- package/dist/openapi/types.js +0 -16
- package/dist/openapi/types.js.map +0 -1
- package/dist/storage/adapters/local_storage_service.d.ts +0 -51
- package/dist/storage/adapters/local_storage_service.d.ts.map +0 -1
- package/dist/storage/adapters/local_storage_service.js +0 -110
- package/dist/storage/adapters/local_storage_service.js.map +0 -1
- package/dist/storage/adapters/ovh_storage_service.d.ts +0 -61
- package/dist/storage/adapters/ovh_storage_service.d.ts.map +0 -1
- package/dist/storage/adapters/ovh_storage_service.js +0 -172
- package/dist/storage/adapters/ovh_storage_service.js.map +0 -1
- package/dist/storage/storage_factory.d.ts +0 -14
- package/dist/storage/storage_factory.d.ts.map +0 -1
- package/dist/storage/storage_factory.js +0 -36
- package/dist/storage/storage_factory.js.map +0 -1
- package/dist/storage/storage_service.d.ts +0 -163
- package/dist/storage/storage_service.d.ts.map +0 -1
- package/dist/storage/storage_service.js +0 -54
- package/dist/storage/storage_service.js.map +0 -1
- package/dist/types/data_record.d.ts +0 -123
- package/dist/types/data_record.d.ts.map +0 -1
- package/dist/types/data_record.js +0 -8
- package/dist/types/data_record.js.map +0 -1
- package/dist/utils/http_responses.d.ts +0 -155
- package/dist/utils/http_responses.d.ts.map +0 -1
- package/dist/utils/http_responses.js +0 -190
- package/dist/utils/http_responses.js.map +0 -1
- package/dist/utils/index.d.ts +0 -8
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -6
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -74
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -92
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/map_to_data_record.d.ts +0 -10
- package/dist/utils/map_to_data_record.d.ts.map +0 -1
- package/dist/utils/map_to_data_record.js +0 -36
- package/dist/utils/map_to_data_record.js.map +0 -1
- package/dist/utils/servable_endpoint.d.ts +0 -63
- package/dist/utils/servable_endpoint.d.ts.map +0 -1
- package/dist/utils/servable_endpoint.js +0 -67
- package/dist/utils/servable_endpoint.js.map +0 -1
- package/dist/utils/zip_utils.d.ts +0 -66
- package/dist/utils/zip_utils.d.ts.map +0 -1
- package/dist/utils/zip_utils.js +0 -169
- package/dist/utils/zip_utils.js.map +0 -1
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { Queue } from 'bullmq';
|
|
2
|
-
/**
|
|
3
|
-
* Queue configuration constants
|
|
4
|
-
*/
|
|
5
|
-
const QUEUE_DEFAULTS = {
|
|
6
|
-
REDIS: {
|
|
7
|
-
host: 'localhost',
|
|
8
|
-
port: 6379,
|
|
9
|
-
maxRetriesPerRequest: null,
|
|
10
|
-
enableReadyCheck: true,
|
|
11
|
-
retryStrategy: (times) => Math.min(times * 50, 2000)
|
|
12
|
-
},
|
|
13
|
-
COLLECTORS: {
|
|
14
|
-
name: 'dt-collectors',
|
|
15
|
-
attempts: 3,
|
|
16
|
-
backoffDelay: 2000,
|
|
17
|
-
keepCompleted: 100,
|
|
18
|
-
keepFailed: 50
|
|
19
|
-
},
|
|
20
|
-
HARVESTERS: {
|
|
21
|
-
name: 'dt-harvesters',
|
|
22
|
-
attempts: 5,
|
|
23
|
-
backoffDelay: 5000,
|
|
24
|
-
keepCompleted: 50,
|
|
25
|
-
keepFailed: 100
|
|
26
|
-
},
|
|
27
|
-
PRIORITY: {
|
|
28
|
-
name: 'dt-priority',
|
|
29
|
-
attempts: 2,
|
|
30
|
-
priority: 1
|
|
31
|
-
},
|
|
32
|
-
UPLOADS: {
|
|
33
|
-
name: 'dt-uploads',
|
|
34
|
-
attempts: 1, // No retries - temp file is deleted after first attempt
|
|
35
|
-
backoffDelay: 10000,
|
|
36
|
-
keepCompleted: 50,
|
|
37
|
-
keepFailed: 100
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Queue Manager - Manages BullMQ queues for different component types
|
|
42
|
-
*
|
|
43
|
-
* Handles three types of queues:
|
|
44
|
-
* - Collector queue: High priority, fast execution for data collection
|
|
45
|
-
* - Harvester queue: Medium priority, slower processing for data transformation
|
|
46
|
-
* - Priority queue: Urgent/manual jobs with highest priority
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* const queueManager = new QueueManager({
|
|
51
|
-
* redis: { host: 'localhost', port: 6379 },
|
|
52
|
-
* collectorWorkers: 3,
|
|
53
|
-
* harvesterWorkers: 2
|
|
54
|
-
* })
|
|
55
|
-
*
|
|
56
|
-
* await queueManager.close()
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
export class QueueManager {
|
|
60
|
-
/**
|
|
61
|
-
* Creates a new Queue Manager instance
|
|
62
|
-
* @param config - Queue configuration options
|
|
63
|
-
*/
|
|
64
|
-
constructor(config = {}) {
|
|
65
|
-
const baseConnection = config.redis || QUEUE_DEFAULTS.REDIS;
|
|
66
|
-
this.collectorQueue = this.#createCollectorQueue(baseConnection, config.queueOptions?.collectors);
|
|
67
|
-
this.harvesterQueue = this.#createHarvesterQueue(baseConnection, config.queueOptions?.harvesters);
|
|
68
|
-
this.priorityQueue = this.#createPriorityQueue(baseConnection, config.queueOptions?.priority);
|
|
69
|
-
this.uploadQueue = this.#createUploadQueue(baseConnection, config.queueOptions?.uploads);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Creates collector queue with optimized settings for data collection
|
|
73
|
-
* @private
|
|
74
|
-
*/
|
|
75
|
-
#createCollectorQueue(connection, options) {
|
|
76
|
-
return new Queue(QUEUE_DEFAULTS.COLLECTORS.name, {
|
|
77
|
-
connection,
|
|
78
|
-
defaultJobOptions: {
|
|
79
|
-
attempts: QUEUE_DEFAULTS.COLLECTORS.attempts,
|
|
80
|
-
backoff: { type: 'exponential', delay: QUEUE_DEFAULTS.COLLECTORS.backoffDelay },
|
|
81
|
-
removeOnComplete: { count: QUEUE_DEFAULTS.COLLECTORS.keepCompleted },
|
|
82
|
-
removeOnFail: { count: QUEUE_DEFAULTS.COLLECTORS.keepFailed }
|
|
83
|
-
},
|
|
84
|
-
...options
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Creates harvester queue with settings optimized for data processing
|
|
89
|
-
* @private
|
|
90
|
-
*/
|
|
91
|
-
#createHarvesterQueue(connection, options) {
|
|
92
|
-
return new Queue(QUEUE_DEFAULTS.HARVESTERS.name, {
|
|
93
|
-
connection,
|
|
94
|
-
defaultJobOptions: {
|
|
95
|
-
attempts: QUEUE_DEFAULTS.HARVESTERS.attempts,
|
|
96
|
-
backoff: { type: 'exponential', delay: QUEUE_DEFAULTS.HARVESTERS.backoffDelay },
|
|
97
|
-
removeOnComplete: { count: QUEUE_DEFAULTS.HARVESTERS.keepCompleted },
|
|
98
|
-
removeOnFail: { count: QUEUE_DEFAULTS.HARVESTERS.keepFailed }
|
|
99
|
-
},
|
|
100
|
-
...options
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Creates priority queue for urgent/manual jobs
|
|
105
|
-
* @private
|
|
106
|
-
*/
|
|
107
|
-
#createPriorityQueue(connection, options) {
|
|
108
|
-
return new Queue(QUEUE_DEFAULTS.PRIORITY.name, {
|
|
109
|
-
connection,
|
|
110
|
-
defaultJobOptions: {
|
|
111
|
-
priority: QUEUE_DEFAULTS.PRIORITY.priority,
|
|
112
|
-
attempts: QUEUE_DEFAULTS.PRIORITY.attempts,
|
|
113
|
-
removeOnComplete: true,
|
|
114
|
-
removeOnFail: false
|
|
115
|
-
},
|
|
116
|
-
...options
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Creates upload queue for async file processing (tileset extraction, large uploads)
|
|
121
|
-
* @private
|
|
122
|
-
*/
|
|
123
|
-
#createUploadQueue(connection, options) {
|
|
124
|
-
return new Queue(QUEUE_DEFAULTS.UPLOADS.name, {
|
|
125
|
-
connection,
|
|
126
|
-
defaultJobOptions: {
|
|
127
|
-
attempts: QUEUE_DEFAULTS.UPLOADS.attempts,
|
|
128
|
-
backoff: { type: 'exponential', delay: QUEUE_DEFAULTS.UPLOADS.backoffDelay },
|
|
129
|
-
removeOnComplete: { count: QUEUE_DEFAULTS.UPLOADS.keepCompleted },
|
|
130
|
-
removeOnFail: { count: QUEUE_DEFAULTS.UPLOADS.keepFailed }
|
|
131
|
-
},
|
|
132
|
-
...options
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Closes all queues gracefully
|
|
137
|
-
* @returns Promise that resolves when all queues are closed
|
|
138
|
-
*/
|
|
139
|
-
async close() {
|
|
140
|
-
const closePromises = [];
|
|
141
|
-
// Close all queues with timeout protection
|
|
142
|
-
const queues = [this.collectorQueue, this.harvesterQueue, this.priorityQueue, this.uploadQueue];
|
|
143
|
-
for (const queue of queues) {
|
|
144
|
-
closePromises.push(Promise.race([
|
|
145
|
-
queue.close(),
|
|
146
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error('Queue close timeout')), 3000))
|
|
147
|
-
]).catch(async () => {
|
|
148
|
-
// Force close if timeout - try to access Redis connection directly
|
|
149
|
-
try {
|
|
150
|
-
const redisConnection = queue.redisConnection;
|
|
151
|
-
if (redisConnection && typeof redisConnection.disconnect === 'function') {
|
|
152
|
-
await redisConnection.disconnect();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
// Ignore forced cleanup errors
|
|
157
|
-
}
|
|
158
|
-
}));
|
|
159
|
-
}
|
|
160
|
-
await Promise.all(closePromises);
|
|
161
|
-
// Wait for connections to fully close
|
|
162
|
-
await new Promise(resolve => setTimeout(resolve, 300));
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Gets statistics for all queues
|
|
166
|
-
* @returns Object containing stats for each queue type
|
|
167
|
-
*/
|
|
168
|
-
async getQueueStats() {
|
|
169
|
-
const [collectorStats, harvesterStats, priorityStats, uploadStats] = await Promise.all([
|
|
170
|
-
this.#getStats(this.collectorQueue),
|
|
171
|
-
this.#getStats(this.harvesterQueue),
|
|
172
|
-
this.#getStats(this.priorityQueue),
|
|
173
|
-
this.#getStats(this.uploadQueue)
|
|
174
|
-
]);
|
|
175
|
-
return {
|
|
176
|
-
collectors: collectorStats,
|
|
177
|
-
harvesters: harvesterStats,
|
|
178
|
-
priority: priorityStats,
|
|
179
|
-
uploads: uploadStats
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Gets statistics for a specific queue
|
|
184
|
-
* @private
|
|
185
|
-
*/
|
|
186
|
-
async #getStats(queue) {
|
|
187
|
-
const [waiting, active, completed, failed] = await Promise.all([
|
|
188
|
-
queue.getWaitingCount(),
|
|
189
|
-
queue.getActiveCount(),
|
|
190
|
-
queue.getCompletedCount(),
|
|
191
|
-
queue.getFailedCount()
|
|
192
|
-
]);
|
|
193
|
-
return { waiting, active, completed, failed };
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=queue_manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue_manager.js","sourceRoot":"","sources":["../../src/engine/queue_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Collector } from '../components/collector.js';
|
|
2
|
-
import { Harvester } from '../components/harvester.js';
|
|
3
|
-
import { Worker } from 'bullmq';
|
|
4
|
-
import type { QueueManager } from './queue_manager.js';
|
|
5
|
-
import { LogLevel } from '../utils/logger.js';
|
|
6
|
-
/**
|
|
7
|
-
* Schedules components for execution using the queue manager
|
|
8
|
-
*
|
|
9
|
-
* This function creates a scheduler instance and sets up:
|
|
10
|
-
* - Job scheduling based on component schedules
|
|
11
|
-
* - Event-driven harvester triggers
|
|
12
|
-
* - Workers for processing jobs
|
|
13
|
-
*
|
|
14
|
-
* @param components - Array of components to schedule
|
|
15
|
-
* @param queueManager - Queue manager instance
|
|
16
|
-
* @param multiQueue - Whether to use multi-queue mode (default: true)
|
|
17
|
-
* @param logLevel - Log level for the scheduler (optional)
|
|
18
|
-
* @returns Promise that resolves to array of created workers
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* const workers = await scheduleComponents(
|
|
23
|
-
* [collector1, harvester1],
|
|
24
|
-
* queueManager,
|
|
25
|
-
* true
|
|
26
|
-
* )
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export declare function scheduleComponents(components: Array<Collector | Harvester>, queueManager: QueueManager, multiQueue?: boolean, logLevel?: LogLevel): Promise<Worker[]>;
|
|
30
|
-
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/engine/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAU,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AA2ZrD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,kBAAkB,CACpC,UAAU,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,EACxC,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,OAAc,EAC1B,QAAQ,CAAC,EAAE,QAAQ,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB"}
|
package/dist/engine/scheduler.js
DELETED
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
// src/engine/scheduler.ts
|
|
2
|
-
import { Collector } from '../components/collector.js';
|
|
3
|
-
import { Harvester } from '../components/harvester.js';
|
|
4
|
-
import { Worker } from 'bullmq';
|
|
5
|
-
import { Logger, LogLevel } from '../utils/logger.js';
|
|
6
|
-
import { engineEventBus } from './events.js';
|
|
7
|
-
import debounce from 'lodash/debounce.js';
|
|
8
|
-
/**
|
|
9
|
-
* Worker configuration constants
|
|
10
|
-
*/
|
|
11
|
-
const WORKER_CONFIG = {
|
|
12
|
-
COLLECTOR: {
|
|
13
|
-
concurrency: 5,
|
|
14
|
-
limiter: { max: 10, duration: 60000 }
|
|
15
|
-
},
|
|
16
|
-
HARVESTER: {
|
|
17
|
-
concurrency: 3,
|
|
18
|
-
limiter: { max: 20, duration: 60000 }
|
|
19
|
-
},
|
|
20
|
-
PRIORITY: {
|
|
21
|
-
concurrency: 1 // One priority task at a time
|
|
22
|
-
},
|
|
23
|
-
SINGLE_QUEUE: {
|
|
24
|
-
concurrency: (componentCount) => Math.max(componentCount, 1)
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Default job options for event-triggered harvesters
|
|
29
|
-
*/
|
|
30
|
-
const EVENT_JOB_OPTIONS = {
|
|
31
|
-
removeOnComplete: true,
|
|
32
|
-
attempts: 3,
|
|
33
|
-
backoff: { type: 'exponential', delay: 1000 }
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Component Scheduler - Manages scheduling and execution of collectors and harvesters
|
|
37
|
-
*
|
|
38
|
-
* The scheduler supports two modes:
|
|
39
|
-
* - Multi-queue mode: Separate queues for collectors, harvesters, and priority jobs
|
|
40
|
-
* - Single-queue mode: All components share one queue (legacy mode)
|
|
41
|
-
*
|
|
42
|
-
* @class ComponentScheduler
|
|
43
|
-
*/
|
|
44
|
-
class ComponentScheduler {
|
|
45
|
-
/**
|
|
46
|
-
* Creates a new Component Scheduler instance
|
|
47
|
-
* @param components - Array of components to schedule
|
|
48
|
-
* @param queueManager - Queue manager instance
|
|
49
|
-
* @param multiQueue - Whether to use multi-queue mode
|
|
50
|
-
* @param logLevel - Log level for the scheduler (optional)
|
|
51
|
-
*/
|
|
52
|
-
constructor(components, queueManager, multiQueue = true, logLevel) {
|
|
53
|
-
this.componentMap = {};
|
|
54
|
-
this.debouncedTriggers = {};
|
|
55
|
-
this.components = components;
|
|
56
|
-
this.queueManager = queueManager;
|
|
57
|
-
this.multiQueue = multiQueue;
|
|
58
|
-
this.logger = new Logger('DigitalTwin', logLevel ?? (process.env.NODE_ENV === 'test' ? LogLevel.SILENT : LogLevel.INFO));
|
|
59
|
-
this.#buildComponentMap();
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Schedules all components and creates workers
|
|
63
|
-
* @returns Array of created workers
|
|
64
|
-
*/
|
|
65
|
-
async schedule() {
|
|
66
|
-
this.#setupEventListeners();
|
|
67
|
-
if (this.multiQueue) {
|
|
68
|
-
return this.#scheduleMultiQueue();
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
return this.#scheduleSingleQueue();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Builds a map of component names to component instances
|
|
76
|
-
* @private
|
|
77
|
-
*/
|
|
78
|
-
#buildComponentMap() {
|
|
79
|
-
for (const comp of this.components) {
|
|
80
|
-
const config = comp.getConfiguration();
|
|
81
|
-
this.componentMap[config.name] = comp;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Sets up event listeners for harvesters with on-source trigger
|
|
86
|
-
* @private
|
|
87
|
-
*/
|
|
88
|
-
#setupEventListeners() {
|
|
89
|
-
this.#setupHarvesterTriggers();
|
|
90
|
-
this.#setupCollectorEventListener();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Creates debounced trigger functions for event-driven harvesters
|
|
94
|
-
* @private
|
|
95
|
-
*/
|
|
96
|
-
#setupHarvesterTriggers() {
|
|
97
|
-
for (const comp of this.components) {
|
|
98
|
-
if (!(comp instanceof Harvester))
|
|
99
|
-
continue;
|
|
100
|
-
const config = comp.getConfiguration();
|
|
101
|
-
if (!this.#shouldSetupEventTrigger(config))
|
|
102
|
-
continue;
|
|
103
|
-
const triggerFunction = this.#createTriggerFunction(config);
|
|
104
|
-
const debounceMs = config.debounceMs || 1000;
|
|
105
|
-
this.debouncedTriggers[config.name] = debounce(triggerFunction, debounceMs);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Checks if a harvester should have event trigger setup
|
|
110
|
-
* @private
|
|
111
|
-
*/
|
|
112
|
-
#shouldSetupEventTrigger(config) {
|
|
113
|
-
return config.triggerMode === 'on-source' || config.triggerMode === 'both';
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Creates a trigger function for a harvester
|
|
117
|
-
* @private
|
|
118
|
-
*/
|
|
119
|
-
#createTriggerFunction(config) {
|
|
120
|
-
return async () => {
|
|
121
|
-
const queue = this.multiQueue ? this.queueManager.harvesterQueue : this.queueManager.collectorQueue;
|
|
122
|
-
await queue.add(config.name, {
|
|
123
|
-
type: 'harvester',
|
|
124
|
-
triggeredBy: 'source-event',
|
|
125
|
-
source: config.source
|
|
126
|
-
}, EVENT_JOB_OPTIONS);
|
|
127
|
-
this.logger.debug(`Triggered harvester ${config.name} from source event`);
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Sets up listener for collector completion events
|
|
132
|
-
* @private
|
|
133
|
-
*/
|
|
134
|
-
#setupCollectorEventListener() {
|
|
135
|
-
engineEventBus.on('component:event', async (event) => {
|
|
136
|
-
if (event.type !== 'collector:completed')
|
|
137
|
-
return;
|
|
138
|
-
this.logger.debug(`Received collector:completed event from ${event.componentName}`);
|
|
139
|
-
await this.#triggerDependentHarvesters(event.componentName);
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Triggers harvesters that depend on a completed collector
|
|
144
|
-
* @private
|
|
145
|
-
*/
|
|
146
|
-
async #triggerDependentHarvesters(collectorName) {
|
|
147
|
-
for (const comp of this.components) {
|
|
148
|
-
if (!(comp instanceof Harvester))
|
|
149
|
-
continue;
|
|
150
|
-
const config = comp.getConfiguration();
|
|
151
|
-
if (config.source === collectorName && this.debouncedTriggers[config.name]) {
|
|
152
|
-
this.logger.debug(`Triggering harvester "${config.name}" from "${collectorName}"`);
|
|
153
|
-
this.debouncedTriggers[config.name]();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Schedules components in multi-queue mode
|
|
159
|
-
* @private
|
|
160
|
-
*/
|
|
161
|
-
async #scheduleMultiQueue() {
|
|
162
|
-
await this.#scheduleCollectors();
|
|
163
|
-
await this.#scheduleHarvesters();
|
|
164
|
-
return [this.#createCollectorWorker(), this.#createHarvesterWorker(), this.#createPriorityWorker()];
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Schedules all collectors in multi-queue mode
|
|
168
|
-
* @private
|
|
169
|
-
*/
|
|
170
|
-
async #scheduleCollectors() {
|
|
171
|
-
const collectors = this.components.filter((comp) => comp instanceof Collector);
|
|
172
|
-
for (const collector of collectors) {
|
|
173
|
-
const config = collector.getConfiguration();
|
|
174
|
-
const schedule = collector.getSchedule();
|
|
175
|
-
await this.queueManager.collectorQueue.upsertJobScheduler(config.name, { pattern: schedule }, {
|
|
176
|
-
name: config.name,
|
|
177
|
-
data: { type: 'collector', triggeredBy: 'schedule' }
|
|
178
|
-
});
|
|
179
|
-
this.logger.info(`Collector "${config.name}" scheduled: ${schedule}`);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Schedules harvesters (only those not exclusively on-source) in multi-queue mode
|
|
184
|
-
* @private
|
|
185
|
-
*/
|
|
186
|
-
async #scheduleHarvesters() {
|
|
187
|
-
const harvesters = this.components.filter((comp) => comp instanceof Harvester);
|
|
188
|
-
for (const harvester of harvesters) {
|
|
189
|
-
const config = harvester.getConfiguration();
|
|
190
|
-
const schedule = harvester.getSchedule();
|
|
191
|
-
if (schedule && config.triggerMode !== 'on-source') {
|
|
192
|
-
await this.queueManager.harvesterQueue.upsertJobScheduler(config.name, { pattern: schedule }, {
|
|
193
|
-
name: config.name,
|
|
194
|
-
data: { type: 'harvester', triggeredBy: 'schedule' }
|
|
195
|
-
});
|
|
196
|
-
this.logger.info(`Harvester "${config.name}" scheduled: ${schedule}`);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Creates collector worker for multi-queue mode
|
|
202
|
-
* @private
|
|
203
|
-
*/
|
|
204
|
-
#createCollectorWorker() {
|
|
205
|
-
return new Worker('dt-collectors', async (job) => this.#processCollectorJob(job), {
|
|
206
|
-
connection: this.queueManager.collectorQueue.opts.connection,
|
|
207
|
-
concurrency: WORKER_CONFIG.COLLECTOR.concurrency,
|
|
208
|
-
limiter: WORKER_CONFIG.COLLECTOR.limiter
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Creates harvester worker for multi-queue mode
|
|
213
|
-
* @private
|
|
214
|
-
*/
|
|
215
|
-
#createHarvesterWorker() {
|
|
216
|
-
return new Worker('dt-harvesters', async (job) => this.#processHarvesterJob(job), {
|
|
217
|
-
connection: this.queueManager.harvesterQueue.opts.connection,
|
|
218
|
-
concurrency: WORKER_CONFIG.HARVESTER.concurrency,
|
|
219
|
-
limiter: WORKER_CONFIG.HARVESTER.limiter
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Creates priority worker for multi-queue mode
|
|
224
|
-
* @private
|
|
225
|
-
*/
|
|
226
|
-
#createPriorityWorker() {
|
|
227
|
-
return new Worker('dt-priority', async (job) => this.#processPriorityJob(job), {
|
|
228
|
-
connection: this.queueManager.priorityQueue.opts.connection,
|
|
229
|
-
concurrency: WORKER_CONFIG.PRIORITY.concurrency
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Processes a collector job
|
|
234
|
-
* @private
|
|
235
|
-
*/
|
|
236
|
-
async #processCollectorJob(job) {
|
|
237
|
-
const comp = this.componentMap[job.name];
|
|
238
|
-
if (!comp)
|
|
239
|
-
return;
|
|
240
|
-
this.logger.debug(`Running collector: ${job.name}`);
|
|
241
|
-
try {
|
|
242
|
-
const result = await comp.run();
|
|
243
|
-
return {
|
|
244
|
-
success: true,
|
|
245
|
-
bytes: result?.length || 0,
|
|
246
|
-
timestamp: new Date().toISOString()
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
this.logger.error(`Collector ${job.name} failed:`, error);
|
|
251
|
-
throw error;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Processes a harvester job
|
|
256
|
-
* @private
|
|
257
|
-
*/
|
|
258
|
-
async #processHarvesterJob(job) {
|
|
259
|
-
const comp = this.componentMap[job.name];
|
|
260
|
-
if (!comp)
|
|
261
|
-
return;
|
|
262
|
-
this.logger.debug(`Running harvester: ${job.name} (${job.data.triggeredBy})`);
|
|
263
|
-
try {
|
|
264
|
-
const result = await comp.run();
|
|
265
|
-
// Emit harvester completion event
|
|
266
|
-
engineEventBus.emit('component:event', {
|
|
267
|
-
type: 'harvester:completed',
|
|
268
|
-
componentName: comp.getConfiguration().name,
|
|
269
|
-
timestamp: new Date(),
|
|
270
|
-
data: { success: result }
|
|
271
|
-
});
|
|
272
|
-
return {
|
|
273
|
-
success: result,
|
|
274
|
-
timestamp: new Date().toISOString()
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
catch (error) {
|
|
278
|
-
this.logger.error(`Harvester ${job.name} failed:`, error);
|
|
279
|
-
throw error;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Processes a priority job
|
|
284
|
-
* @private
|
|
285
|
-
*/
|
|
286
|
-
async #processPriorityJob(job) {
|
|
287
|
-
const comp = this.componentMap[job.name];
|
|
288
|
-
if (!comp)
|
|
289
|
-
return;
|
|
290
|
-
this.logger.debug(`Running priority job: ${job.name}`);
|
|
291
|
-
const result = await comp.run();
|
|
292
|
-
return { success: true, result };
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Schedules components in single-queue mode (legacy)
|
|
296
|
-
* @private
|
|
297
|
-
*/
|
|
298
|
-
async #scheduleSingleQueue() {
|
|
299
|
-
this.logger.warn('Single-queue mode (not recommended for production)');
|
|
300
|
-
const singleQueue = this.queueManager.collectorQueue;
|
|
301
|
-
await this.#scheduleAllComponentsInSingleQueue(singleQueue);
|
|
302
|
-
const worker = new Worker(singleQueue.name, async (job) => this.#processSingleQueueJob(job), {
|
|
303
|
-
connection: singleQueue.opts.connection,
|
|
304
|
-
concurrency: WORKER_CONFIG.SINGLE_QUEUE.concurrency(this.components.length)
|
|
305
|
-
});
|
|
306
|
-
return [worker];
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Schedules all components in single queue
|
|
310
|
-
* @private
|
|
311
|
-
*/
|
|
312
|
-
async #scheduleAllComponentsInSingleQueue(singleQueue) {
|
|
313
|
-
for (const comp of this.components) {
|
|
314
|
-
const config = comp.getConfiguration();
|
|
315
|
-
const schedule = comp.getSchedule();
|
|
316
|
-
const shouldSchedule = comp instanceof Harvester
|
|
317
|
-
? schedule && comp.getConfiguration().triggerMode !== 'on-source'
|
|
318
|
-
: schedule !== null;
|
|
319
|
-
if (shouldSchedule) {
|
|
320
|
-
await singleQueue.upsertJobScheduler(config.name, { pattern: schedule }, {
|
|
321
|
-
name: config.name,
|
|
322
|
-
data: {
|
|
323
|
-
type: comp instanceof Collector ? 'collector' : 'harvester',
|
|
324
|
-
triggeredBy: 'schedule'
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Processes a job in single-queue mode
|
|
332
|
-
* @private
|
|
333
|
-
*/
|
|
334
|
-
async #processSingleQueueJob(job) {
|
|
335
|
-
const comp = this.componentMap[job.name];
|
|
336
|
-
if (!comp)
|
|
337
|
-
return;
|
|
338
|
-
this.logger.debug(`Running ${job.data.type}: ${job.name}`);
|
|
339
|
-
const result = await comp.run();
|
|
340
|
-
return { success: true, result };
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Schedules components for execution using the queue manager
|
|
345
|
-
*
|
|
346
|
-
* This function creates a scheduler instance and sets up:
|
|
347
|
-
* - Job scheduling based on component schedules
|
|
348
|
-
* - Event-driven harvester triggers
|
|
349
|
-
* - Workers for processing jobs
|
|
350
|
-
*
|
|
351
|
-
* @param components - Array of components to schedule
|
|
352
|
-
* @param queueManager - Queue manager instance
|
|
353
|
-
* @param multiQueue - Whether to use multi-queue mode (default: true)
|
|
354
|
-
* @param logLevel - Log level for the scheduler (optional)
|
|
355
|
-
* @returns Promise that resolves to array of created workers
|
|
356
|
-
*
|
|
357
|
-
* @example
|
|
358
|
-
* ```typescript
|
|
359
|
-
* const workers = await scheduleComponents(
|
|
360
|
-
* [collector1, harvester1],
|
|
361
|
-
* queueManager,
|
|
362
|
-
* true
|
|
363
|
-
* )
|
|
364
|
-
* ```
|
|
365
|
-
*/
|
|
366
|
-
export async function scheduleComponents(components, queueManager, multiQueue = true, logLevel) {
|
|
367
|
-
const scheduler = new ComponentScheduler(components, queueManager, multiQueue, logLevel);
|
|
368
|
-
return scheduler.schedule();
|
|
369
|
-
}
|
|
370
|
-
//# sourceMappingURL=scheduler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/engine/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { ConnectionOptions } from 'bullmq';
|
|
2
|
-
import type { StorageService } from '../storage/storage_service.js';
|
|
3
|
-
import type { DatabaseAdapter } from '../database/database_adapter.js';
|
|
4
|
-
export interface TilesetUploadJobData {
|
|
5
|
-
type: 'tileset';
|
|
6
|
-
recordId: number;
|
|
7
|
-
tempFilePath: string;
|
|
8
|
-
componentName: string;
|
|
9
|
-
userId: number;
|
|
10
|
-
filename: string;
|
|
11
|
-
description: string;
|
|
12
|
-
}
|
|
13
|
-
export type UploadJobData = TilesetUploadJobData;
|
|
14
|
-
export type UploadStatus = 'pending' | 'processing' | 'completed' | 'failed';
|
|
15
|
-
/**
|
|
16
|
-
* Background worker for processing large file uploads (tileset extraction).
|
|
17
|
-
* Prevents HTTP timeout by queuing jobs and processing asynchronously.
|
|
18
|
-
*
|
|
19
|
-
* Flow:
|
|
20
|
-
* 1. Read ZIP from temp file
|
|
21
|
-
* 2. Extract and upload all files to storage (OVH S3)
|
|
22
|
-
* 3. Update database with tileset_url and base_path
|
|
23
|
-
* 4. Clean up temp file
|
|
24
|
-
*/
|
|
25
|
-
export declare class UploadProcessor {
|
|
26
|
-
private worker;
|
|
27
|
-
private storage;
|
|
28
|
-
private db;
|
|
29
|
-
constructor(storage: StorageService, db: DatabaseAdapter);
|
|
30
|
-
start(connection: ConnectionOptions): void;
|
|
31
|
-
stop(): Promise<void>;
|
|
32
|
-
private processJob;
|
|
33
|
-
private processTilesetUpload;
|
|
34
|
-
private updateRecordStatus;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=upload_processor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload_processor.d.ts","sourceRoot":"","sources":["../../src/engine/upload_processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAItE,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,SAAS,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAA;AAChD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;AAE5E;;;;;;;;;GASG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,EAAE,CAAiB;gBAEf,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe;IAKxD,KAAK,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAWpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAOb,UAAU;YAQV,oBAAoB;YAiEpB,kBAAkB;CAGnC"}
|