@hotmeshio/hotmesh 0.3.6 → 0.3.8

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 (124) hide show
  1. package/README.md +13 -1
  2. package/build/index.d.ts +3 -1
  3. package/build/index.js +10 -1
  4. package/build/modules/key.js +1 -62
  5. package/build/modules/utils.js +1 -267
  6. package/build/package.json +12 -8
  7. package/build/services/activities/activity.js +1 -495
  8. package/build/services/activities/await.js +1 -109
  9. package/build/services/activities/cycle.js +1 -96
  10. package/build/services/activities/hook.js +1 -154
  11. package/build/services/activities/index.js +1 -20
  12. package/build/services/activities/interrupt.js +1 -149
  13. package/build/services/activities/signal.js +1 -118
  14. package/build/services/activities/trigger.js +1 -237
  15. package/build/services/activities/worker.js +1 -101
  16. package/build/services/collator/index.js +1 -197
  17. package/build/services/compiler/deployer.d.ts +3 -1
  18. package/build/services/compiler/deployer.js +1 -455
  19. package/build/services/compiler/index.d.ts +3 -1
  20. package/build/services/compiler/index.js +1 -91
  21. package/build/services/compiler/validator.js +1 -122
  22. package/build/services/engine/index.d.ts +5 -2
  23. package/build/services/engine/index.js +1 -562
  24. package/build/services/exporter/index.js +1 -93
  25. package/build/services/mapper/index.js +1 -67
  26. package/build/services/meshdata/index.d.ts +0 -1
  27. package/build/services/meshdata/index.js +16 -24
  28. package/build/services/meshflow/client.js +4 -8
  29. package/build/services/meshflow/exporter.js +1 -186
  30. package/build/services/meshflow/index.d.ts +2 -0
  31. package/build/services/meshflow/index.js +2 -0
  32. package/build/services/meshflow/search.d.ts +4 -5
  33. package/build/services/meshflow/search.js +45 -35
  34. package/build/services/meshflow/workflow.d.ts +1 -1
  35. package/build/services/meshflow/workflow.js +3 -28
  36. package/build/services/pipe/functions/array.js +1 -74
  37. package/build/services/pipe/functions/bitwise.js +1 -24
  38. package/build/services/pipe/functions/conditional.js +1 -36
  39. package/build/services/pipe/functions/cron.js +1 -32
  40. package/build/services/pipe/functions/date.js +1 -164
  41. package/build/services/pipe/functions/index.js +1 -30
  42. package/build/services/pipe/functions/json.js +1 -12
  43. package/build/services/pipe/functions/logical.js +1 -12
  44. package/build/services/pipe/functions/math.js +1 -182
  45. package/build/services/pipe/functions/number.js +1 -60
  46. package/build/services/pipe/functions/object.js +1 -81
  47. package/build/services/pipe/functions/string.js +1 -69
  48. package/build/services/pipe/functions/symbol.js +1 -33
  49. package/build/services/pipe/functions/unary.js +1 -18
  50. package/build/services/pipe/index.js +1 -221
  51. package/build/services/quorum/index.d.ts +1 -1
  52. package/build/services/quorum/index.js +1 -219
  53. package/build/services/reporter/index.js +1 -331
  54. package/build/services/router/index.js +1 -420
  55. package/build/services/search/factory.d.ts +7 -0
  56. package/build/services/search/factory.js +20 -0
  57. package/build/services/search/index.d.ts +21 -0
  58. package/build/services/search/index.js +10 -0
  59. package/build/services/search/providers/redis/ioredis.d.ts +18 -0
  60. package/build/services/search/providers/redis/ioredis.js +1 -0
  61. package/build/services/search/providers/redis/redis.d.ts +18 -0
  62. package/build/services/search/providers/redis/redis.js +1 -0
  63. package/build/services/serializer/index.js +1 -265
  64. package/build/services/store/factory.d.ts +2 -1
  65. package/build/services/store/factory.js +2 -2
  66. package/build/services/store/index.d.ts +71 -97
  67. package/build/services/store/index.js +2 -939
  68. package/build/services/store/providers/postgres/postgres.d.ts +0 -0
  69. package/build/services/store/providers/postgres/postgres.js +0 -0
  70. package/build/services/store/providers/postgres/types/hash.d.ts +0 -0
  71. package/build/services/store/providers/postgres/types/hash.js +0 -0
  72. package/build/services/store/providers/postgres/types/list.d.ts +0 -0
  73. package/build/services/store/providers/postgres/types/list.js +0 -0
  74. package/build/services/store/providers/postgres/types/string.d.ts +0 -0
  75. package/build/services/store/providers/postgres/types/string.js +0 -0
  76. package/build/services/store/providers/postgres/types/zset.d.ts +0 -0
  77. package/build/services/store/providers/postgres/types/zset.js +0 -0
  78. package/build/services/store/providers/redis/_base.d.ts +98 -0
  79. package/build/services/store/providers/redis/_base.js +1 -0
  80. package/build/services/store/providers/redis/ioredis.d.ts +12 -0
  81. package/build/services/store/providers/redis/ioredis.js +1 -0
  82. package/build/services/store/providers/redis/redis.d.ts +13 -0
  83. package/build/services/store/providers/redis/redis.js +1 -0
  84. package/build/services/store/providers/store-initializable.d.ts +5 -0
  85. package/build/services/store/providers/store-initializable.js +1 -0
  86. package/build/services/stream/factory.d.ts +2 -1
  87. package/build/services/stream/factory.js +5 -5
  88. package/build/services/stream/index.d.ts +13 -14
  89. package/build/services/stream/index.js +3 -2
  90. package/build/services/stream/providers/postgres/_deploy.d.ts +4 -0
  91. package/build/services/stream/providers/postgres/_deploy.js +1 -0
  92. package/build/services/stream/providers/redis/ioredis.d.ts +21 -0
  93. package/build/services/stream/providers/redis/ioredis.js +1 -0
  94. package/build/services/stream/providers/redis/redis.d.ts +21 -0
  95. package/build/services/stream/providers/redis/redis.js +1 -0
  96. package/build/services/stream/providers/stream-initializable.d.ts +5 -0
  97. package/build/services/stream/providers/stream-initializable.js +1 -0
  98. package/build/services/sub/factory.d.ts +1 -1
  99. package/build/services/sub/factory.js +5 -5
  100. package/build/services/sub/index.d.ts +9 -7
  101. package/build/services/sub/index.js +3 -2
  102. package/build/services/sub/{clients → providers/redis}/ioredis.d.ts +7 -10
  103. package/build/services/sub/providers/redis/ioredis.js +1 -0
  104. package/build/services/sub/{clients → providers/redis}/redis.d.ts +7 -10
  105. package/build/services/sub/providers/redis/redis.js +1 -0
  106. package/build/services/task/index.js +1 -171
  107. package/build/services/telemetry/index.js +1 -225
  108. package/build/services/worker/index.d.ts +2 -2
  109. package/build/services/worker/index.js +1 -158
  110. package/build/types/redis.d.ts +5 -5
  111. package/index.ts +18 -1
  112. package/package.json +12 -8
  113. package/typedoc.json +2 -1
  114. package/types/redis.ts +5 -5
  115. package/build/services/store/clients/ioredis.d.ts +0 -30
  116. package/build/services/store/clients/ioredis.js +0 -220
  117. package/build/services/store/clients/redis.d.ts +0 -32
  118. package/build/services/store/clients/redis.js +0 -319
  119. package/build/services/stream/clients/ioredis.d.ts +0 -24
  120. package/build/services/stream/clients/ioredis.js +0 -121
  121. package/build/services/stream/clients/redis.d.ts +0 -24
  122. package/build/services/stream/clients/redis.js +0 -161
  123. package/build/services/sub/clients/ioredis.js +0 -72
  124. package/build/services/sub/clients/redis.js +0 -63
@@ -1,331 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ReporterService = void 0;
4
- const pipe_1 = require("../pipe");
5
- class ReporterService {
6
- constructor(appVersion, store, logger) {
7
- this.appVersion = appVersion;
8
- this.logger = logger;
9
- this.store = store;
10
- }
11
- async getStats(options) {
12
- this.logger.debug('reporter-getstats-started', options);
13
- const { key, granularity, range, end, start } = options;
14
- this.validateOptions(options);
15
- const dateTimeSets = this.generateDateTimeSets(granularity, range, end, start);
16
- const redisKeys = dateTimeSets.map((dateTime) => this.buildRedisKey(key, dateTime));
17
- const rawData = await this.store.getJobStats(redisKeys);
18
- const [count, aggregatedData] = this.aggregateData(rawData);
19
- const statsResponse = this.buildStatsResponse(rawData, redisKeys, aggregatedData, count, options);
20
- return statsResponse;
21
- }
22
- validateOptions(options) {
23
- const { start, end, range, granularity } = options;
24
- if (granularity !== 'infinity' &&
25
- (start && end && range || !start && !end && !range)) {
26
- throw new Error('Invalid combination of start, end, and range values. Provide either start+end, end+range, or start+range.');
27
- }
28
- }
29
- generateDateTimeSets(granularity, range, end, start) {
30
- if (granularity === 'infinity') {
31
- return ['0'];
32
- }
33
- if (!range) {
34
- range = '0m';
35
- }
36
- const granularitiesInMinutes = {
37
- '5m': 5,
38
- '10m': 10,
39
- '15m': 15,
40
- '30m': 30,
41
- '1h': 60,
42
- };
43
- const granularityMinutes = granularitiesInMinutes[granularity];
44
- if (!granularityMinutes) {
45
- throw new Error('Invalid granularity value.');
46
- }
47
- const rangeMinutes = this.convertRangeToMinutes(range);
48
- if (rangeMinutes === null) {
49
- throw new Error('Invalid range value.');
50
- }
51
- let startTime;
52
- let endTime;
53
- if (start) {
54
- startTime = new Date(start);
55
- endTime = new Date(startTime.getTime() + rangeMinutes * 60 * 1000);
56
- }
57
- else {
58
- endTime = end === 'NOW' ? new Date() : new Date(end);
59
- startTime = new Date(endTime.getTime() - rangeMinutes * 60 * 1000);
60
- }
61
- startTime.setUTCMinutes(Math.floor(startTime.getUTCMinutes() / granularityMinutes) *
62
- granularityMinutes);
63
- const dateTimeSets = [];
64
- for (let time = startTime; time <= endTime; time.setUTCMinutes(time.getUTCMinutes() + granularityMinutes)) {
65
- const formattedTime = [
66
- time.getUTCFullYear(),
67
- String(time.getUTCMonth() + 1).padStart(2, '0'),
68
- String(time.getUTCDate()).padStart(2, '0'),
69
- String(time.getUTCHours()).padStart(2, '0'),
70
- String(time.getUTCMinutes()).padStart(2, '0'),
71
- ].join('');
72
- dateTimeSets.push(formattedTime);
73
- }
74
- return dateTimeSets;
75
- }
76
- convertRangeToMinutes(range) {
77
- const timeUnit = range.slice(-1);
78
- const value = parseInt(range.slice(0, -1), 10);
79
- if (isNaN(value)) {
80
- return null;
81
- }
82
- switch (timeUnit) {
83
- case 'm':
84
- return value;
85
- case 'h':
86
- return value * 60;
87
- case 'd':
88
- return value * 60 * 24;
89
- default:
90
- return null;
91
- }
92
- }
93
- buildRedisKey(key, dateTime, subTarget = '') {
94
- return `hmsh:${this.appVersion.id}:s:${key}:${dateTime}${subTarget ? ':' + subTarget : ''}`;
95
- }
96
- aggregateData(rawData) {
97
- const aggregatedData = {};
98
- let count = 0;
99
- Object.entries(rawData).forEach(([_, data]) => {
100
- for (const key in data) {
101
- if (key.startsWith('count:')) {
102
- const target = key.slice('count:'.length);
103
- if (!aggregatedData[target]) {
104
- aggregatedData[target] = 0;
105
- }
106
- aggregatedData[target] += data[key];
107
- }
108
- else if (key === 'count') {
109
- count += data[key];
110
- }
111
- }
112
- });
113
- return [count, aggregatedData];
114
- }
115
- buildStatsResponse(rawData, redisKeys, aggregatedData, count, options) {
116
- const measures = [];
117
- const measureKeys = Object.keys(aggregatedData).filter((key) => key !== 'count');
118
- let segments = undefined;
119
- if (options.sparse !== true) {
120
- segments = this.handleSegments(rawData, redisKeys);
121
- }
122
- measureKeys.forEach((key) => {
123
- const measure = {
124
- target: key,
125
- type: 'count',
126
- value: aggregatedData[key],
127
- };
128
- measures.push(measure);
129
- });
130
- const response = {
131
- key: options.key,
132
- granularity: options.granularity,
133
- range: options.range,
134
- end: options.end,
135
- count,
136
- measures: measures,
137
- };
138
- if (segments) {
139
- response.segments = segments;
140
- }
141
- return response;
142
- }
143
- handleSegments(data, hashKeys) {
144
- const segments = [];
145
- hashKeys.forEach((hashKey, index) => {
146
- const segmentData = [];
147
- data[hashKey] &&
148
- Object.entries(data[hashKey]).forEach(([key, value]) => {
149
- if (key.startsWith('count:')) {
150
- const target = key.slice('count:'.length);
151
- segmentData.push({ target, type: 'count', value });
152
- }
153
- });
154
- const isoTimestamp = this.isoTimestampFromKeyTimestamp(hashKey);
155
- const count = data[hashKey] ? data[hashKey].count : 0;
156
- segments.push({ count, time: isoTimestamp, measures: segmentData });
157
- });
158
- return segments;
159
- }
160
- isoTimestampFromKeyTimestamp(hashKey) {
161
- if (hashKey.endsWith(':')) {
162
- return '0';
163
- }
164
- const keyTimestamp = hashKey.slice(-12);
165
- const year = keyTimestamp.slice(0, 4);
166
- const month = keyTimestamp.slice(4, 6);
167
- const day = keyTimestamp.slice(6, 8);
168
- const hour = keyTimestamp.slice(8, 10);
169
- const minute = keyTimestamp.slice(10, 12);
170
- return `${year}-${month}-${day}T${hour}:${minute}Z`;
171
- }
172
- async getIds(options, facets, idRange = [0, -1]) {
173
- if (!facets.length) {
174
- const stats = await this.getStats(options);
175
- facets = this.getUniqueFacets(stats);
176
- }
177
- const { key, granularity, range, end, start } = options;
178
- this.validateOptions(options);
179
- let redisKeys = [];
180
- facets.forEach((facet) => {
181
- const dateTimeSets = this.generateDateTimeSets(granularity, range, end, start);
182
- redisKeys = redisKeys.concat(dateTimeSets.map((dateTime) => this.buildRedisKey(key, dateTime, `index:${facet}`)));
183
- });
184
- const idsData = await this.store.getJobIds(redisKeys, idRange);
185
- const idsResponse = this.buildIdsResponse(idsData, options, facets);
186
- return idsResponse;
187
- }
188
- buildIdsResponse(idsData, options, facets) {
189
- const countsByFacet = {};
190
- const measureKeys = Object.keys(idsData);
191
- measureKeys.forEach((key) => {
192
- const target = this.getTargetForKey(key);
193
- const count = idsData[key].length;
194
- if (countsByFacet[target]) {
195
- countsByFacet[target] += count;
196
- }
197
- else {
198
- countsByFacet[target] = count;
199
- }
200
- });
201
- const counts = Object.entries(countsByFacet).map(([facet, count]) => ({ facet, count }));
202
- const response = {
203
- key: options.key,
204
- facets,
205
- granularity: options.granularity,
206
- range: options.range,
207
- start: options.start,
208
- counts,
209
- segments: this.buildTimeSegments(idsData),
210
- };
211
- return response;
212
- }
213
- buildTimeSegments(idsData) {
214
- const measureKeys = Object.keys(idsData);
215
- const timeSegments = {};
216
- measureKeys.forEach((key) => {
217
- const measure = {
218
- type: 'ids',
219
- target: this.getTargetForKey(key),
220
- time: this.isoTimestampFromKeyTimestamp(this.getTargetForTime(key)),
221
- count: idsData[key].length,
222
- ids: idsData[key],
223
- };
224
- if (timeSegments[measure.time]) {
225
- timeSegments[measure.time].push(measure);
226
- }
227
- else {
228
- timeSegments[measure.time] = [measure];
229
- }
230
- });
231
- const segments = Object.entries(timeSegments).map(([time, measures]) => ({
232
- time,
233
- measures,
234
- }));
235
- return segments;
236
- }
237
- getUniqueFacets(data) {
238
- const targets = data.measures.map((measure) => measure.target);
239
- return Array.from(new Set(targets));
240
- }
241
- getTargetForKey(key) {
242
- return key.split(':index:')[1];
243
- }
244
- getTargetForTime(key) {
245
- return key.split(':index:')[0];
246
- }
247
- async getWorkItems(options, facets) {
248
- if (!facets.length) {
249
- const stats = await this.getStats(options);
250
- facets = this.getUniqueFacets(stats);
251
- }
252
- const { key, granularity, range, end, start } = options;
253
- this.validateOptions(options);
254
- let redisKeys = [];
255
- facets.forEach((facet) => {
256
- const dateTimeSets = this.generateDateTimeSets(granularity, range, end, start);
257
- redisKeys = redisKeys.concat(dateTimeSets.map((dateTime) => this.buildRedisKey(key, dateTime, `index:${facet}`)));
258
- });
259
- const idsData = await this.store.getJobIds(redisKeys, [0, 1]);
260
- const workerLists = this.buildWorkerLists(idsData);
261
- return workerLists;
262
- }
263
- buildWorkerLists(idsData) {
264
- const workerLists = [];
265
- for (const key in idsData) {
266
- if (idsData[key].length) {
267
- workerLists.push(key);
268
- }
269
- }
270
- return workerLists;
271
- }
272
- resolveTriggerStatistics({ stats: statsConfig }, context) {
273
- const stats = {
274
- general: [],
275
- index: [],
276
- median: [],
277
- };
278
- stats.general.push({ metric: 'count', target: 'count', value: 1 });
279
- for (const measure of statsConfig.measures) {
280
- const metric = this.resolveMetric({ metric: measure.measure, target: measure.target }, context);
281
- if (this.isGeneralMetric(measure.measure)) {
282
- stats.general.push(metric);
283
- }
284
- else if (this.isMedianMetric(measure.measure)) {
285
- stats.median.push(metric);
286
- }
287
- else if (this.isIndexMetric(measure.measure)) {
288
- stats.index.push(metric);
289
- }
290
- }
291
- return stats;
292
- }
293
- isGeneralMetric(metric) {
294
- return metric === 'sum' || metric === 'avg' || metric === 'count';
295
- }
296
- isMedianMetric(metric) {
297
- return metric === 'mdn';
298
- }
299
- isIndexMetric(metric) {
300
- return metric === 'index';
301
- }
302
- resolveMetric({ metric, target }, context) {
303
- const pipe = new pipe_1.Pipe([[target]], context);
304
- const resolvedValue = pipe.process().toString();
305
- const resolvedTarget = this.resolveTarget(metric, target, resolvedValue);
306
- if (metric === 'index') {
307
- return { metric, target: resolvedTarget, value: context.metadata.jid };
308
- }
309
- else if (metric === 'count') {
310
- return { metric, target: resolvedTarget, value: 1 };
311
- }
312
- return { metric, target: resolvedTarget, value: resolvedValue };
313
- }
314
- isCardinalMetric(metric) {
315
- return metric === 'index' || metric === 'count';
316
- }
317
- resolveTarget(metric, target, resolvedValue) {
318
- const trimmed = target.substring(1, target.length - 1);
319
- const trimmedTarget = trimmed.split('.').slice(3).join('/');
320
- let resolvedTarget;
321
- if (this.isCardinalMetric(metric)) {
322
- resolvedTarget = `${metric}:${trimmedTarget}:${resolvedValue}`;
323
- }
324
- else {
325
- resolvedTarget = `${metric}:${trimmedTarget}`;
326
- }
327
- return resolvedTarget;
328
- }
329
- }
330
- exports.ReporterService = ReporterService;
331
- ReporterService.DEFAULT_GRANULARITY = '5m';
1
+ 'use strict';(function(_0x1e9b72,_0x229f05){const _0x2cc01b=_0x31db,_0x310145=_0x1e9b72();while(!![]){try{const _0x449852=-parseInt(_0x2cc01b(0x126))/0x1+parseInt(_0x2cc01b(0x122))/0x2+-parseInt(_0x2cc01b(0x123))/0x3+-parseInt(_0x2cc01b(0x120))/0x4+-parseInt(_0x2cc01b(0x11f))/0x5*(parseInt(_0x2cc01b(0x121))/0x6)+parseInt(_0x2cc01b(0x127))/0x7*(-parseInt(_0x2cc01b(0x125))/0x8)+-parseInt(_0x2cc01b(0x124))/0x9*(-parseInt(_0x2cc01b(0x11e))/0xa);if(_0x449852===_0x229f05)break;else _0x310145['push'](_0x310145['shift']());}catch(_0x5d4be6){_0x310145['push'](_0x310145['shift']());}}}(_0x2862,0xc7299));function _0x2862(){const _0x30a515=['805206VJBbyQ','2185687dsunYt','20001960cjncdF','1299805XgPava','448020DDhuma','30cRQpQD','2981340lqlUgW','2691216xbktQE','18udoCsW','40hTkonB'];_0x2862=function(){return _0x30a515;};return _0x2862();}function _0x31db(_0x1636d2,_0x33ecc3){const _0x286220=_0x2862();return _0x31db=function(_0x31db2e,_0x5dd6e1){_0x31db2e=_0x31db2e-0x11e;let _0x28cc6b=_0x286220[_0x31db2e];return _0x28cc6b;},_0x31db(_0x1636d2,_0x33ecc3);}Object['defineProperty'](exports,'__esModule',{'value':!![]}),exports['ReporterService']=void 0x0;const pipe_1=require('../pipe');class ReporterService{constructor(_0x105dc7,_0x4c83a8,_0xac1990){this['appVersion']=_0x105dc7,this['logger']=_0xac1990,this['store']=_0x4c83a8;}async['getStats'](_0x54bb76){this['logger']['debug']('reporter-getstats-started',_0x54bb76);const {key:_0x4f7b58,granularity:_0x341cdd,range:_0x41ffb5,end:_0x2f0ae7,start:_0x2bd032}=_0x54bb76;this['validateOptions'](_0x54bb76);const _0x595ae8=this['generateDateTimeSets'](_0x341cdd,_0x41ffb5,_0x2f0ae7,_0x2bd032),_0x1608fb=_0x595ae8['map'](_0x3baeed=>this['buildRedisKey'](_0x4f7b58,_0x3baeed)),_0x20740a=await this['store']['getJobStats'](_0x1608fb),[_0x322c42,_0x331dde]=this['aggregateData'](_0x20740a),_0x47301a=this['buildStatsResponse'](_0x20740a,_0x1608fb,_0x331dde,_0x322c42,_0x54bb76);return _0x47301a;}['validateOptions'](_0x2921a3){const {start:_0x1fe931,end:_0x4d3358,range:_0x2018fc,granularity:_0x3384d5}=_0x2921a3;if(_0x3384d5!=='infinity'&&(_0x1fe931&&_0x4d3358&&_0x2018fc||!_0x1fe931&&!_0x4d3358&&!_0x2018fc))throw new Error('Invalid\x20combination\x20of\x20start,\x20end,\x20and\x20range\x20values.\x20Provide\x20either\x20start+end,\x20end+range,\x20or\x20start+range.');}['generateDateTimeSets'](_0x1c132d,_0x175371,_0x14a5d9,_0x59a404){if(_0x1c132d==='infinity')return['0'];!_0x175371&&(_0x175371='0m');const _0x35159f={'5m':0x5,'10m':0xa,'15m':0xf,'30m':0x1e,'1h':0x3c},_0x2224d0=_0x35159f[_0x1c132d];if(!_0x2224d0)throw new Error('Invalid\x20granularity\x20value.');const _0x511999=this['convertRangeToMinutes'](_0x175371);if(_0x511999===null)throw new Error('Invalid\x20range\x20value.');let _0x5429c8,_0x2d0553;_0x59a404?(_0x5429c8=new Date(_0x59a404),_0x2d0553=new Date(_0x5429c8['getTime']()+_0x511999*0x3c*0x3e8)):(_0x2d0553=_0x14a5d9==='NOW'?new Date():new Date(_0x14a5d9),_0x5429c8=new Date(_0x2d0553['getTime']()-_0x511999*0x3c*0x3e8));_0x5429c8['setUTCMinutes'](Math['floor'](_0x5429c8['getUTCMinutes']()/_0x2224d0)*_0x2224d0);const _0x569170=[];for(let _0x47ec7f=_0x5429c8;_0x47ec7f<=_0x2d0553;_0x47ec7f['setUTCMinutes'](_0x47ec7f['getUTCMinutes']()+_0x2224d0)){const _0x1ea222=[_0x47ec7f['getUTCFullYear'](),String(_0x47ec7f['getUTCMonth']()+0x1)['padStart'](0x2,'0'),String(_0x47ec7f['getUTCDate']())['padStart'](0x2,'0'),String(_0x47ec7f['getUTCHours']())['padStart'](0x2,'0'),String(_0x47ec7f['getUTCMinutes']())['padStart'](0x2,'0')]['join']('');_0x569170['push'](_0x1ea222);}return _0x569170;}['convertRangeToMinutes'](_0x16a147){const _0x37aba8=_0x16a147['slice'](-0x1),_0xfcc163=parseInt(_0x16a147['slice'](0x0,-0x1),0xa);if(isNaN(_0xfcc163))return null;switch(_0x37aba8){case'm':return _0xfcc163;case'h':return _0xfcc163*0x3c;case'd':return _0xfcc163*0x3c*0x18;default:return null;}}['buildRedisKey'](_0x54bc89,_0x46f08c,_0x47b5f9=''){return'hmsh:'+this['appVersion']['id']+':s:'+_0x54bc89+':'+_0x46f08c+(_0x47b5f9?':'+_0x47b5f9:'');}['aggregateData'](_0x507767){const _0x207e65={};let _0x49d5ea=0x0;return Object['entries'](_0x507767)['forEach'](([_0x4aec9a,_0x55b0d5])=>{for(const _0x20522f in _0x55b0d5){if(_0x20522f['startsWith']('count:')){const _0x1c6814=_0x20522f['slice']('count:'['length']);!_0x207e65[_0x1c6814]&&(_0x207e65[_0x1c6814]=0x0),_0x207e65[_0x1c6814]+=_0x55b0d5[_0x20522f];}else _0x20522f==='count'&&(_0x49d5ea+=_0x55b0d5[_0x20522f]);}}),[_0x49d5ea,_0x207e65];}['buildStatsResponse'](_0x580dc4,_0x15bb78,_0x13b7b2,_0x430643,_0x104a99){const _0x3b8696=[],_0x517bdc=Object['keys'](_0x13b7b2)['filter'](_0x575c62=>_0x575c62!=='count');let _0x193576=undefined;_0x104a99['sparse']!==!![]&&(_0x193576=this['handleSegments'](_0x580dc4,_0x15bb78));_0x517bdc['forEach'](_0x3cc250=>{const _0x4a6257={'target':_0x3cc250,'type':'count','value':_0x13b7b2[_0x3cc250]};_0x3b8696['push'](_0x4a6257);});const _0x23b7c3={'key':_0x104a99['key'],'granularity':_0x104a99['granularity'],'range':_0x104a99['range'],'end':_0x104a99['end'],'count':_0x430643,'measures':_0x3b8696};return _0x193576&&(_0x23b7c3['segments']=_0x193576),_0x23b7c3;}['handleSegments'](_0x5b2f1e,_0x4db4a2){const _0x32d16f=[];return _0x4db4a2['forEach']((_0x8df281,_0x1c6f40)=>{const _0x39c19a=[];_0x5b2f1e[_0x8df281]&&Object['entries'](_0x5b2f1e[_0x8df281])['forEach'](([_0x5c30e2,_0x213e6d])=>{if(_0x5c30e2['startsWith']('count:')){const _0x2f4c87=_0x5c30e2['slice']('count:'['length']);_0x39c19a['push']({'target':_0x2f4c87,'type':'count','value':_0x213e6d});}});const _0x3fabcd=this['isoTimestampFromKeyTimestamp'](_0x8df281),_0x2e42ed=_0x5b2f1e[_0x8df281]?_0x5b2f1e[_0x8df281]['count']:0x0;_0x32d16f['push']({'count':_0x2e42ed,'time':_0x3fabcd,'measures':_0x39c19a});}),_0x32d16f;}['isoTimestampFromKeyTimestamp'](_0x1760a9){if(_0x1760a9['endsWith'](':'))return'0';const _0x3a3c6b=_0x1760a9['slice'](-0xc),_0x4d6cd5=_0x3a3c6b['slice'](0x0,0x4),_0x327886=_0x3a3c6b['slice'](0x4,0x6),_0x4c3952=_0x3a3c6b['slice'](0x6,0x8),_0x151642=_0x3a3c6b['slice'](0x8,0xa),_0x5cf46f=_0x3a3c6b['slice'](0xa,0xc);return _0x4d6cd5+'-'+_0x327886+'-'+_0x4c3952+'T'+_0x151642+':'+_0x5cf46f+'Z';}async['getIds'](_0x314e7f,_0x24420f,_0x339878=[0x0,-0x1]){if(!_0x24420f['length']){const _0x2047dc=await this['getStats'](_0x314e7f);_0x24420f=this['getUniqueFacets'](_0x2047dc);}const {key:_0x203809,granularity:_0x24c4c7,range:_0xdfa5b0,end:_0x173817,start:_0x27bc10}=_0x314e7f;this['validateOptions'](_0x314e7f);let _0x5dfa8c=[];_0x24420f['forEach'](_0x5a4cb3=>{const _0x46c614=this['generateDateTimeSets'](_0x24c4c7,_0xdfa5b0,_0x173817,_0x27bc10);_0x5dfa8c=_0x5dfa8c['concat'](_0x46c614['map'](_0x2b402e=>this['buildRedisKey'](_0x203809,_0x2b402e,'index:'+_0x5a4cb3)));});const _0x491ff0=await this['store']['getJobIds'](_0x5dfa8c,_0x339878),_0x32e70a=this['buildIdsResponse'](_0x491ff0,_0x314e7f,_0x24420f);return _0x32e70a;}['buildIdsResponse'](_0x36cdac,_0x4741ad,_0x5aefdd){const _0x3affce={},_0x234b8c=Object['keys'](_0x36cdac);_0x234b8c['forEach'](_0x2acd5c=>{const _0xd7165d=this['getTargetForKey'](_0x2acd5c),_0x4bc717=_0x36cdac[_0x2acd5c]['length'];_0x3affce[_0xd7165d]?_0x3affce[_0xd7165d]+=_0x4bc717:_0x3affce[_0xd7165d]=_0x4bc717;});const _0xf76108=Object['entries'](_0x3affce)['map'](([_0x2eaa3c,_0x2f0f5a])=>({'facet':_0x2eaa3c,'count':_0x2f0f5a})),_0x25d607={'key':_0x4741ad['key'],'facets':_0x5aefdd,'granularity':_0x4741ad['granularity'],'range':_0x4741ad['range'],'start':_0x4741ad['start'],'counts':_0xf76108,'segments':this['buildTimeSegments'](_0x36cdac)};return _0x25d607;}['buildTimeSegments'](_0x27ed73){const _0x1ac73f=Object['keys'](_0x27ed73),_0x3c3856={};_0x1ac73f['forEach'](_0x5137fe=>{const _0x2e294b={'type':'ids','target':this['getTargetForKey'](_0x5137fe),'time':this['isoTimestampFromKeyTimestamp'](this['getTargetForTime'](_0x5137fe)),'count':_0x27ed73[_0x5137fe]['length'],'ids':_0x27ed73[_0x5137fe]};_0x3c3856[_0x2e294b['time']]?_0x3c3856[_0x2e294b['time']]['push'](_0x2e294b):_0x3c3856[_0x2e294b['time']]=[_0x2e294b];});const _0x4ed66b=Object['entries'](_0x3c3856)['map'](([_0x24c18d,_0x201a95])=>({'time':_0x24c18d,'measures':_0x201a95}));return _0x4ed66b;}['getUniqueFacets'](_0x4dad56){const _0x5195d1=_0x4dad56['measures']['map'](_0x4c7c6f=>_0x4c7c6f['target']);return Array['from'](new Set(_0x5195d1));}['getTargetForKey'](_0x1d1eda){return _0x1d1eda['split'](':index:')[0x1];}['getTargetForTime'](_0x4bd23b){return _0x4bd23b['split'](':index:')[0x0];}async['getWorkItems'](_0x7a1c1f,_0x5eaf40){if(!_0x5eaf40['length']){const _0x5a456c=await this['getStats'](_0x7a1c1f);_0x5eaf40=this['getUniqueFacets'](_0x5a456c);}const {key:_0x16e097,granularity:_0x3bcb4c,range:_0x5ec0cd,end:_0x3f4be2,start:_0x120a21}=_0x7a1c1f;this['validateOptions'](_0x7a1c1f);let _0x5446eb=[];_0x5eaf40['forEach'](_0x11aabc=>{const _0x2c76b9=this['generateDateTimeSets'](_0x3bcb4c,_0x5ec0cd,_0x3f4be2,_0x120a21);_0x5446eb=_0x5446eb['concat'](_0x2c76b9['map'](_0x48c54e=>this['buildRedisKey'](_0x16e097,_0x48c54e,'index:'+_0x11aabc)));});const _0x3346f2=await this['store']['getJobIds'](_0x5446eb,[0x0,0x1]),_0x2c7220=this['buildWorkerLists'](_0x3346f2);return _0x2c7220;}['buildWorkerLists'](_0x55b910){const _0x294829=[];for(const _0x3ea91b in _0x55b910){_0x55b910[_0x3ea91b]['length']&&_0x294829['push'](_0x3ea91b);}return _0x294829;}['resolveTriggerStatistics']({stats:_0x3d5000},_0x2204ab){const _0xc52049={'general':[],'index':[],'median':[]};_0xc52049['general']['push']({'metric':'count','target':'count','value':0x1});for(const _0x5b6442 of _0x3d5000['measures']){const _0x2ab5ea=this['resolveMetric']({'metric':_0x5b6442['measure'],'target':_0x5b6442['target']},_0x2204ab);if(this['isGeneralMetric'](_0x5b6442['measure']))_0xc52049['general']['push'](_0x2ab5ea);else{if(this['isMedianMetric'](_0x5b6442['measure']))_0xc52049['median']['push'](_0x2ab5ea);else this['isIndexMetric'](_0x5b6442['measure'])&&_0xc52049['index']['push'](_0x2ab5ea);}}return _0xc52049;}['isGeneralMetric'](_0xe31201){return _0xe31201==='sum'||_0xe31201==='avg'||_0xe31201==='count';}['isMedianMetric'](_0x4b5026){return _0x4b5026==='mdn';}['isIndexMetric'](_0x3fa456){return _0x3fa456==='index';}['resolveMetric']({metric:_0x39edd8,target:_0x1988a8},_0x3d708f){const _0x275d33=new pipe_1['Pipe']([[_0x1988a8]],_0x3d708f),_0x2b0268=_0x275d33['process']()['toString'](),_0x442c04=this['resolveTarget'](_0x39edd8,_0x1988a8,_0x2b0268);if(_0x39edd8==='index')return{'metric':_0x39edd8,'target':_0x442c04,'value':_0x3d708f['metadata']['jid']};else{if(_0x39edd8==='count')return{'metric':_0x39edd8,'target':_0x442c04,'value':0x1};}return{'metric':_0x39edd8,'target':_0x442c04,'value':_0x2b0268};}['isCardinalMetric'](_0x1c1713){return _0x1c1713==='index'||_0x1c1713==='count';}['resolveTarget'](_0x1c3cd2,_0x1b36b2,_0x1b1d2d){const _0x5d95ce=_0x1b36b2['substring'](0x1,_0x1b36b2['length']-0x1),_0x5d765e=_0x5d95ce['split']('.')['slice'](0x3)['join']('/');let _0x510131;return this['isCardinalMetric'](_0x1c3cd2)?_0x510131=_0x1c3cd2+':'+_0x5d765e+':'+_0x1b1d2d:_0x510131=_0x1c3cd2+':'+_0x5d765e,_0x510131;}}exports['ReporterService']=ReporterService,ReporterService['DEFAULT_GRANULARITY']='5m';