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.
Files changed (169) hide show
  1. package/package.json +101 -106
  2. package/dist/auth/apisix_parser.d.ts +0 -146
  3. package/dist/auth/apisix_parser.d.ts.map +0 -1
  4. package/dist/auth/apisix_parser.js +0 -185
  5. package/dist/auth/apisix_parser.js.map +0 -1
  6. package/dist/auth/auth_config.d.ts +0 -126
  7. package/dist/auth/auth_config.d.ts.map +0 -1
  8. package/dist/auth/auth_config.js +0 -169
  9. package/dist/auth/auth_config.js.map +0 -1
  10. package/dist/auth/index.d.ts +0 -5
  11. package/dist/auth/index.d.ts.map +0 -1
  12. package/dist/auth/index.js +0 -4
  13. package/dist/auth/index.js.map +0 -1
  14. package/dist/auth/types.d.ts +0 -100
  15. package/dist/auth/types.d.ts.map +0 -1
  16. package/dist/auth/types.js +0 -2
  17. package/dist/auth/types.js.map +0 -1
  18. package/dist/auth/user_service.d.ts +0 -86
  19. package/dist/auth/user_service.d.ts.map +0 -1
  20. package/dist/auth/user_service.js +0 -237
  21. package/dist/auth/user_service.js.map +0 -1
  22. package/dist/components/assets_manager.d.ts +0 -662
  23. package/dist/components/assets_manager.d.ts.map +0 -1
  24. package/dist/components/assets_manager.js +0 -1529
  25. package/dist/components/assets_manager.js.map +0 -1
  26. package/dist/components/async_upload.d.ts +0 -20
  27. package/dist/components/async_upload.d.ts.map +0 -1
  28. package/dist/components/async_upload.js +0 -10
  29. package/dist/components/async_upload.js.map +0 -1
  30. package/dist/components/collector.d.ts +0 -203
  31. package/dist/components/collector.d.ts.map +0 -1
  32. package/dist/components/collector.js +0 -202
  33. package/dist/components/collector.js.map +0 -1
  34. package/dist/components/custom_table_manager.d.ts +0 -503
  35. package/dist/components/custom_table_manager.d.ts.map +0 -1
  36. package/dist/components/custom_table_manager.js +0 -1052
  37. package/dist/components/custom_table_manager.js.map +0 -1
  38. package/dist/components/global_assets_handler.d.ts +0 -63
  39. package/dist/components/global_assets_handler.d.ts.map +0 -1
  40. package/dist/components/global_assets_handler.js +0 -127
  41. package/dist/components/global_assets_handler.js.map +0 -1
  42. package/dist/components/handler.d.ts +0 -104
  43. package/dist/components/handler.d.ts.map +0 -1
  44. package/dist/components/handler.js +0 -110
  45. package/dist/components/handler.js.map +0 -1
  46. package/dist/components/harvester.d.ts +0 -182
  47. package/dist/components/harvester.d.ts.map +0 -1
  48. package/dist/components/harvester.js +0 -393
  49. package/dist/components/harvester.js.map +0 -1
  50. package/dist/components/index.d.ts +0 -11
  51. package/dist/components/index.d.ts.map +0 -1
  52. package/dist/components/index.js +0 -9
  53. package/dist/components/index.js.map +0 -1
  54. package/dist/components/interfaces.d.ts +0 -126
  55. package/dist/components/interfaces.d.ts.map +0 -1
  56. package/dist/components/interfaces.js +0 -8
  57. package/dist/components/interfaces.js.map +0 -1
  58. package/dist/components/map_manager.d.ts +0 -61
  59. package/dist/components/map_manager.d.ts.map +0 -1
  60. package/dist/components/map_manager.js +0 -242
  61. package/dist/components/map_manager.js.map +0 -1
  62. package/dist/components/tileset_manager.d.ts +0 -125
  63. package/dist/components/tileset_manager.d.ts.map +0 -1
  64. package/dist/components/tileset_manager.js +0 -618
  65. package/dist/components/tileset_manager.js.map +0 -1
  66. package/dist/components/types.d.ts +0 -226
  67. package/dist/components/types.d.ts.map +0 -1
  68. package/dist/components/types.js +0 -8
  69. package/dist/components/types.js.map +0 -1
  70. package/dist/database/adapters/knex_database_adapter.d.ts +0 -92
  71. package/dist/database/adapters/knex_database_adapter.d.ts.map +0 -1
  72. package/dist/database/adapters/knex_database_adapter.js +0 -647
  73. package/dist/database/adapters/knex_database_adapter.js.map +0 -1
  74. package/dist/database/database_adapter.d.ts +0 -251
  75. package/dist/database/database_adapter.d.ts.map +0 -1
  76. package/dist/database/database_adapter.js +0 -46
  77. package/dist/database/database_adapter.js.map +0 -1
  78. package/dist/engine/digital_twin_engine.d.ts +0 -253
  79. package/dist/engine/digital_twin_engine.d.ts.map +0 -1
  80. package/dist/engine/digital_twin_engine.js +0 -790
  81. package/dist/engine/digital_twin_engine.js.map +0 -1
  82. package/dist/engine/endpoints.d.ts +0 -47
  83. package/dist/engine/endpoints.d.ts.map +0 -1
  84. package/dist/engine/endpoints.js +0 -56
  85. package/dist/engine/endpoints.js.map +0 -1
  86. package/dist/engine/events.d.ts +0 -93
  87. package/dist/engine/events.d.ts.map +0 -1
  88. package/dist/engine/events.js +0 -71
  89. package/dist/engine/events.js.map +0 -1
  90. package/dist/engine/initializer.d.ts +0 -62
  91. package/dist/engine/initializer.d.ts.map +0 -1
  92. package/dist/engine/initializer.js +0 -108
  93. package/dist/engine/initializer.js.map +0 -1
  94. package/dist/engine/queue_manager.d.ts +0 -87
  95. package/dist/engine/queue_manager.d.ts.map +0 -1
  96. package/dist/engine/queue_manager.js +0 -196
  97. package/dist/engine/queue_manager.js.map +0 -1
  98. package/dist/engine/scheduler.d.ts +0 -30
  99. package/dist/engine/scheduler.d.ts.map +0 -1
  100. package/dist/engine/scheduler.js +0 -370
  101. package/dist/engine/scheduler.js.map +0 -1
  102. package/dist/engine/upload_processor.d.ts +0 -36
  103. package/dist/engine/upload_processor.d.ts.map +0 -1
  104. package/dist/engine/upload_processor.js +0 -101
  105. package/dist/engine/upload_processor.js.map +0 -1
  106. package/dist/env/env.d.ts +0 -134
  107. package/dist/env/env.d.ts.map +0 -1
  108. package/dist/env/env.js +0 -177
  109. package/dist/env/env.js.map +0 -1
  110. package/dist/index.d.ts +0 -49
  111. package/dist/index.d.ts.map +0 -1
  112. package/dist/index.js +0 -57
  113. package/dist/index.js.map +0 -1
  114. package/dist/openapi/generator.d.ts +0 -93
  115. package/dist/openapi/generator.d.ts.map +0 -1
  116. package/dist/openapi/generator.js +0 -293
  117. package/dist/openapi/generator.js.map +0 -1
  118. package/dist/openapi/index.d.ts +0 -9
  119. package/dist/openapi/index.d.ts.map +0 -1
  120. package/dist/openapi/index.js +0 -9
  121. package/dist/openapi/index.js.map +0 -1
  122. package/dist/openapi/types.d.ts +0 -182
  123. package/dist/openapi/types.d.ts.map +0 -1
  124. package/dist/openapi/types.js +0 -16
  125. package/dist/openapi/types.js.map +0 -1
  126. package/dist/storage/adapters/local_storage_service.d.ts +0 -51
  127. package/dist/storage/adapters/local_storage_service.d.ts.map +0 -1
  128. package/dist/storage/adapters/local_storage_service.js +0 -110
  129. package/dist/storage/adapters/local_storage_service.js.map +0 -1
  130. package/dist/storage/adapters/ovh_storage_service.d.ts +0 -61
  131. package/dist/storage/adapters/ovh_storage_service.d.ts.map +0 -1
  132. package/dist/storage/adapters/ovh_storage_service.js +0 -172
  133. package/dist/storage/adapters/ovh_storage_service.js.map +0 -1
  134. package/dist/storage/storage_factory.d.ts +0 -14
  135. package/dist/storage/storage_factory.d.ts.map +0 -1
  136. package/dist/storage/storage_factory.js +0 -36
  137. package/dist/storage/storage_factory.js.map +0 -1
  138. package/dist/storage/storage_service.d.ts +0 -163
  139. package/dist/storage/storage_service.d.ts.map +0 -1
  140. package/dist/storage/storage_service.js +0 -54
  141. package/dist/storage/storage_service.js.map +0 -1
  142. package/dist/types/data_record.d.ts +0 -123
  143. package/dist/types/data_record.d.ts.map +0 -1
  144. package/dist/types/data_record.js +0 -8
  145. package/dist/types/data_record.js.map +0 -1
  146. package/dist/utils/http_responses.d.ts +0 -155
  147. package/dist/utils/http_responses.d.ts.map +0 -1
  148. package/dist/utils/http_responses.js +0 -190
  149. package/dist/utils/http_responses.js.map +0 -1
  150. package/dist/utils/index.d.ts +0 -8
  151. package/dist/utils/index.d.ts.map +0 -1
  152. package/dist/utils/index.js +0 -6
  153. package/dist/utils/index.js.map +0 -1
  154. package/dist/utils/logger.d.ts +0 -74
  155. package/dist/utils/logger.d.ts.map +0 -1
  156. package/dist/utils/logger.js +0 -92
  157. package/dist/utils/logger.js.map +0 -1
  158. package/dist/utils/map_to_data_record.d.ts +0 -10
  159. package/dist/utils/map_to_data_record.d.ts.map +0 -1
  160. package/dist/utils/map_to_data_record.js +0 -36
  161. package/dist/utils/map_to_data_record.js.map +0 -1
  162. package/dist/utils/servable_endpoint.d.ts +0 -63
  163. package/dist/utils/servable_endpoint.d.ts.map +0 -1
  164. package/dist/utils/servable_endpoint.js +0 -67
  165. package/dist/utils/servable_endpoint.js.map +0 -1
  166. package/dist/utils/zip_utils.d.ts +0 -66
  167. package/dist/utils/zip_utils.d.ts.map +0 -1
  168. package/dist/utils/zip_utils.js +0 -169
  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":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAqB9B;;GAEG;AACH,MAAM,cAAc,GAAG;IACnB,KAAK,EAAE;QACH,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;QACV,oBAAoB,EAAE,IAAI;QAC1B,gBAAgB,EAAE,IAAI;QACtB,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC;KAC/D;IACD,UAAU,EAAE;QACR,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG;QAClB,UAAU,EAAE,EAAE;KACjB;IACD,UAAU,EAAE;QACR,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,GAAG;KAClB;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;KACd;IACD,OAAO,EAAE;QACL,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,CAAC,EAAE,wDAAwD;QACrE,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,GAAG;KAClB;CACK,CAAA;AAEV;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,YAAY;IAMrB;;;OAGG;IACH,YAAY,SAAsB,EAAE;QAChC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAA;QAE3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QACjG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QACjG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QAC7F,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC5F,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,UAA6B,EAAE,OAA+B;QAChF,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE;YAC7C,UAAU;YACV,iBAAiB,EAAE;gBACf,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ;gBAC5C,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,YAAY,EAAE;gBAC/E,gBAAgB,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,aAAa,EAAE;gBACpE,YAAY,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,EAAE;aAChE;YACD,GAAG,OAAO;SACb,CAAC,CAAA;IACN,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,UAA6B,EAAE,OAA+B;QAChF,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE;YAC7C,UAAU;YACV,iBAAiB,EAAE;gBACf,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ;gBAC5C,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,YAAY,EAAE;gBAC/E,gBAAgB,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,aAAa,EAAE;gBACpE,YAAY,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,EAAE;aAChE;YACD,GAAG,OAAO;SACb,CAAC,CAAA;IACN,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,UAA6B,EAAE,OAA+B;QAC/E,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC3C,UAAU;YACV,iBAAiB,EAAE;gBACf,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ;gBAC1C,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ;gBAC1C,gBAAgB,EAAE,IAAI;gBACtB,YAAY,EAAE,KAAK;aACtB;YACD,GAAG,OAAO;SACb,CAAC,CAAA;IACN,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,UAA6B,EAAE,OAA+B;QAC7E,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE;YAC1C,UAAU;YACV,iBAAiB,EAAE;gBACf,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ;gBACzC,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE;gBAC5E,gBAAgB,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE;gBACjE,YAAY,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE;aAC7D;YACD,GAAG,OAAO;SACb,CAAC,CAAA;IACN,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACP,MAAM,aAAa,GAAoB,EAAE,CAAA;QAEzC,2CAA2C;QAC3C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAE/F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CACd,OAAO,CAAC,IAAI,CAAC;gBACT,KAAK,CAAC,KAAK,EAAE;gBACb,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;aACrG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;gBAChB,mEAAmE;gBACnE,IAAI,CAAC;oBACD,MAAM,eAAe,GAAI,KAAa,CAAC,eAAe,CAAA;oBACtD,IAAI,eAAe,IAAI,OAAO,eAAe,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;wBACtE,MAAM,eAAe,CAAC,UAAU,EAAE,CAAA;oBACtC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACL,+BAA+B;gBACnC,CAAC;YACL,CAAC,CAAC,CACL,CAAA;QACL,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAEhC,sCAAsC;QACtC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACf,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;SACnC,CAAC,CAAA;QAEF,OAAO;YACH,UAAU,EAAE,cAAc;YAC1B,UAAU,EAAE,cAAc;YAC1B,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,WAAW;SACvB,CAAA;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,KAAY;QACxB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3D,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,iBAAiB,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;SACzB,CAAC,CAAA;QAEF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;IACjD,CAAC;CACJ"}
@@ -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"}
@@ -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"}