@hotmeshio/hotmesh 0.3.6 → 0.3.7

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 (120) hide show
  1. package/build/index.d.ts +2 -1
  2. package/build/index.js +7 -1
  3. package/build/modules/key.js +1 -62
  4. package/build/modules/utils.js +1 -267
  5. package/build/package.json +12 -8
  6. package/build/services/activities/activity.js +1 -495
  7. package/build/services/activities/await.js +1 -109
  8. package/build/services/activities/cycle.js +1 -96
  9. package/build/services/activities/hook.js +1 -154
  10. package/build/services/activities/index.js +1 -20
  11. package/build/services/activities/interrupt.js +1 -149
  12. package/build/services/activities/signal.js +1 -118
  13. package/build/services/activities/trigger.js +1 -237
  14. package/build/services/activities/worker.js +1 -101
  15. package/build/services/collator/index.js +1 -197
  16. package/build/services/compiler/deployer.d.ts +3 -1
  17. package/build/services/compiler/deployer.js +1 -455
  18. package/build/services/compiler/index.d.ts +3 -1
  19. package/build/services/compiler/index.js +1 -91
  20. package/build/services/compiler/validator.js +1 -122
  21. package/build/services/engine/index.d.ts +5 -2
  22. package/build/services/engine/index.js +1 -562
  23. package/build/services/exporter/index.js +1 -93
  24. package/build/services/mapper/index.js +1 -67
  25. package/build/services/meshdata/index.d.ts +0 -1
  26. package/build/services/meshdata/index.js +16 -24
  27. package/build/services/meshflow/client.js +4 -8
  28. package/build/services/meshflow/exporter.js +1 -186
  29. package/build/services/meshflow/search.d.ts +4 -5
  30. package/build/services/meshflow/search.js +45 -35
  31. package/build/services/meshflow/workflow.d.ts +1 -1
  32. package/build/services/meshflow/workflow.js +3 -28
  33. package/build/services/pipe/functions/array.js +1 -74
  34. package/build/services/pipe/functions/bitwise.js +1 -24
  35. package/build/services/pipe/functions/conditional.js +1 -36
  36. package/build/services/pipe/functions/cron.js +1 -32
  37. package/build/services/pipe/functions/date.js +1 -164
  38. package/build/services/pipe/functions/index.js +1 -30
  39. package/build/services/pipe/functions/json.js +1 -12
  40. package/build/services/pipe/functions/logical.js +1 -12
  41. package/build/services/pipe/functions/math.js +1 -182
  42. package/build/services/pipe/functions/number.js +1 -60
  43. package/build/services/pipe/functions/object.js +1 -81
  44. package/build/services/pipe/functions/string.js +1 -69
  45. package/build/services/pipe/functions/symbol.js +1 -33
  46. package/build/services/pipe/functions/unary.js +1 -18
  47. package/build/services/pipe/index.js +1 -221
  48. package/build/services/quorum/index.d.ts +1 -1
  49. package/build/services/quorum/index.js +1 -219
  50. package/build/services/reporter/index.js +1 -331
  51. package/build/services/router/index.js +1 -420
  52. package/build/services/search/factory.d.ts +7 -0
  53. package/build/services/search/factory.js +20 -0
  54. package/build/services/search/index.d.ts +21 -0
  55. package/build/services/search/index.js +10 -0
  56. package/build/services/search/providers/redis/ioredis.d.ts +18 -0
  57. package/build/services/search/providers/redis/ioredis.js +1 -0
  58. package/build/services/search/providers/redis/redis.d.ts +18 -0
  59. package/build/services/search/providers/redis/redis.js +1 -0
  60. package/build/services/serializer/index.js +1 -265
  61. package/build/services/store/factory.d.ts +2 -1
  62. package/build/services/store/factory.js +2 -2
  63. package/build/services/store/index.d.ts +71 -97
  64. package/build/services/store/index.js +2 -939
  65. package/build/services/store/providers/postgres/postgres.d.ts +0 -0
  66. package/build/services/store/providers/postgres/postgres.js +0 -0
  67. package/build/services/store/providers/postgres/types/hash.d.ts +0 -0
  68. package/build/services/store/providers/postgres/types/hash.js +0 -0
  69. package/build/services/store/providers/postgres/types/list.d.ts +0 -0
  70. package/build/services/store/providers/postgres/types/list.js +0 -0
  71. package/build/services/store/providers/postgres/types/string.d.ts +0 -0
  72. package/build/services/store/providers/postgres/types/string.js +0 -0
  73. package/build/services/store/providers/postgres/types/zset.d.ts +0 -0
  74. package/build/services/store/providers/postgres/types/zset.js +0 -0
  75. package/build/services/store/providers/redis/_base.d.ts +98 -0
  76. package/build/services/store/providers/redis/_base.js +1 -0
  77. package/build/services/store/providers/redis/ioredis.d.ts +12 -0
  78. package/build/services/store/providers/redis/ioredis.js +1 -0
  79. package/build/services/store/providers/redis/redis.d.ts +13 -0
  80. package/build/services/store/providers/redis/redis.js +1 -0
  81. package/build/services/store/providers/store-initializable.d.ts +5 -0
  82. package/build/services/store/providers/store-initializable.js +1 -0
  83. package/build/services/stream/factory.d.ts +2 -1
  84. package/build/services/stream/factory.js +5 -5
  85. package/build/services/stream/index.d.ts +13 -14
  86. package/build/services/stream/index.js +3 -2
  87. package/build/services/stream/providers/postgres/_deploy.d.ts +4 -0
  88. package/build/services/stream/providers/postgres/_deploy.js +1 -0
  89. package/build/services/stream/providers/redis/ioredis.d.ts +21 -0
  90. package/build/services/stream/providers/redis/ioredis.js +1 -0
  91. package/build/services/stream/providers/redis/redis.d.ts +21 -0
  92. package/build/services/stream/providers/redis/redis.js +1 -0
  93. package/build/services/stream/providers/stream-initializable.d.ts +5 -0
  94. package/build/services/stream/providers/stream-initializable.js +1 -0
  95. package/build/services/sub/factory.d.ts +1 -1
  96. package/build/services/sub/factory.js +5 -5
  97. package/build/services/sub/index.d.ts +9 -7
  98. package/build/services/sub/index.js +3 -2
  99. package/build/services/sub/{clients → providers/redis}/ioredis.d.ts +7 -10
  100. package/build/services/sub/providers/redis/ioredis.js +1 -0
  101. package/build/services/sub/{clients → providers/redis}/redis.d.ts +7 -10
  102. package/build/services/sub/providers/redis/redis.js +1 -0
  103. package/build/services/task/index.js +1 -171
  104. package/build/services/telemetry/index.js +1 -225
  105. package/build/services/worker/index.d.ts +2 -2
  106. package/build/services/worker/index.js +1 -158
  107. package/build/types/redis.d.ts +5 -5
  108. package/index.ts +15 -1
  109. package/package.json +12 -8
  110. package/types/redis.ts +5 -5
  111. package/build/services/store/clients/ioredis.d.ts +0 -30
  112. package/build/services/store/clients/ioredis.js +0 -220
  113. package/build/services/store/clients/redis.d.ts +0 -32
  114. package/build/services/store/clients/redis.js +0 -319
  115. package/build/services/stream/clients/ioredis.d.ts +0 -24
  116. package/build/services/stream/clients/ioredis.js +0 -121
  117. package/build/services/stream/clients/redis.d.ts +0 -24
  118. package/build/services/stream/clients/redis.js +0 -161
  119. package/build/services/sub/clients/ioredis.js +0 -72
  120. 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(_0x4a38f0,_0x52f415){const _0x137d4b=_0x4f61,_0x1e7e70=_0x4a38f0();while(!![]){try{const _0x1a2f7a=-parseInt(_0x137d4b(0x6f))/0x1+-parseInt(_0x137d4b(0x6d))/0x2+parseInt(_0x137d4b(0x71))/0x3+-parseInt(_0x137d4b(0x70))/0x4+-parseInt(_0x137d4b(0x6a))/0x5+parseInt(_0x137d4b(0x72))/0x6*(parseInt(_0x137d4b(0x6b))/0x7)+parseInt(_0x137d4b(0x6c))/0x8*(parseInt(_0x137d4b(0x6e))/0x9);if(_0x1a2f7a===_0x52f415)break;else _0x1e7e70['push'](_0x1e7e70['shift']());}catch(_0x157bdb){_0x1e7e70['push'](_0x1e7e70['shift']());}}}(_0x1c98,0xec53b));function _0x1c98(){const _0x3cf99f=['9129580EMvlPC','178626HjuWBI','14254808hHSnKW','715718tVCGMs','9qlUaaP','363459FdKtCz','405568HvTZoi','5427756iIyUhB','6hZQvNF'];_0x1c98=function(){return _0x3cf99f;};return _0x1c98();}Object['defineProperty'](exports,'__esModule',{'value':!![]}),exports['ReporterService']=void 0x0;function _0x4f61(_0x2e129a,_0x19f862){const _0x1c98f=_0x1c98();return _0x4f61=function(_0x4f613c,_0x47fcdb){_0x4f613c=_0x4f613c-0x6a;let _0x551659=_0x1c98f[_0x4f613c];return _0x551659;},_0x4f61(_0x2e129a,_0x19f862);}const pipe_1=require('../pipe');class ReporterService{constructor(_0x2f480f,_0x30cf41,_0x16bbc0){this['appVersion']=_0x2f480f,this['logger']=_0x16bbc0,this['store']=_0x30cf41;}async['getStats'](_0x252eb7){this['logger']['debug']('reporter-getstats-started',_0x252eb7);const {key:_0x391072,granularity:_0x49cf0f,range:_0x126db2,end:_0x268986,start:_0x24c7b9}=_0x252eb7;this['validateOptions'](_0x252eb7);const _0xb7def1=this['generateDateTimeSets'](_0x49cf0f,_0x126db2,_0x268986,_0x24c7b9),_0x3e6b1b=_0xb7def1['map'](_0x172208=>this['buildRedisKey'](_0x391072,_0x172208)),_0x22ceac=await this['store']['getJobStats'](_0x3e6b1b),[_0x5c36e4,_0x37a532]=this['aggregateData'](_0x22ceac),_0x382d34=this['buildStatsResponse'](_0x22ceac,_0x3e6b1b,_0x37a532,_0x5c36e4,_0x252eb7);return _0x382d34;}['validateOptions'](_0x512f98){const {start:_0x253bdd,end:_0x5ee435,range:_0x2f1e3c,granularity:_0x4e4843}=_0x512f98;if(_0x4e4843!=='infinity'&&(_0x253bdd&&_0x5ee435&&_0x2f1e3c||!_0x253bdd&&!_0x5ee435&&!_0x2f1e3c))throw new Error('Invalid\x20combination\x20of\x20start,\x20end,\x20and\x20range\x20values.\x20Provide\x20either\x20start+end,\x20end+range,\x20or\x20start+range.');}['generateDateTimeSets'](_0x718ab3,_0x12b403,_0x260f26,_0x262d38){if(_0x718ab3==='infinity')return['0'];!_0x12b403&&(_0x12b403='0m');const _0x508fa9={'5m':0x5,'10m':0xa,'15m':0xf,'30m':0x1e,'1h':0x3c},_0x131ddd=_0x508fa9[_0x718ab3];if(!_0x131ddd)throw new Error('Invalid\x20granularity\x20value.');const _0x1cf61e=this['convertRangeToMinutes'](_0x12b403);if(_0x1cf61e===null)throw new Error('Invalid\x20range\x20value.');let _0x449a52,_0x1449fd;_0x262d38?(_0x449a52=new Date(_0x262d38),_0x1449fd=new Date(_0x449a52['getTime']()+_0x1cf61e*0x3c*0x3e8)):(_0x1449fd=_0x260f26==='NOW'?new Date():new Date(_0x260f26),_0x449a52=new Date(_0x1449fd['getTime']()-_0x1cf61e*0x3c*0x3e8));_0x449a52['setUTCMinutes'](Math['floor'](_0x449a52['getUTCMinutes']()/_0x131ddd)*_0x131ddd);const _0x1c8ddc=[];for(let _0x410366=_0x449a52;_0x410366<=_0x1449fd;_0x410366['setUTCMinutes'](_0x410366['getUTCMinutes']()+_0x131ddd)){const _0x256803=[_0x410366['getUTCFullYear'](),String(_0x410366['getUTCMonth']()+0x1)['padStart'](0x2,'0'),String(_0x410366['getUTCDate']())['padStart'](0x2,'0'),String(_0x410366['getUTCHours']())['padStart'](0x2,'0'),String(_0x410366['getUTCMinutes']())['padStart'](0x2,'0')]['join']('');_0x1c8ddc['push'](_0x256803);}return _0x1c8ddc;}['convertRangeToMinutes'](_0x5b5608){const _0x3a82df=_0x5b5608['slice'](-0x1),_0x263b15=parseInt(_0x5b5608['slice'](0x0,-0x1),0xa);if(isNaN(_0x263b15))return null;switch(_0x3a82df){case'm':return _0x263b15;case'h':return _0x263b15*0x3c;case'd':return _0x263b15*0x3c*0x18;default:return null;}}['buildRedisKey'](_0x5cccd5,_0x405697,_0x1faaea=''){return'hmsh:'+this['appVersion']['id']+':s:'+_0x5cccd5+':'+_0x405697+(_0x1faaea?':'+_0x1faaea:'');}['aggregateData'](_0x2974ac){const _0xf63fe7={};let _0x30745b=0x0;return Object['entries'](_0x2974ac)['forEach'](([_0xfe34c1,_0x39becf])=>{for(const _0x418a52 in _0x39becf){if(_0x418a52['startsWith']('count:')){const _0x381017=_0x418a52['slice']('count:'['length']);!_0xf63fe7[_0x381017]&&(_0xf63fe7[_0x381017]=0x0),_0xf63fe7[_0x381017]+=_0x39becf[_0x418a52];}else _0x418a52==='count'&&(_0x30745b+=_0x39becf[_0x418a52]);}}),[_0x30745b,_0xf63fe7];}['buildStatsResponse'](_0xbcde64,_0x3010de,_0x2c18bc,_0x4de472,_0xab8f3a){const _0x2b0d74=[],_0x5080c9=Object['keys'](_0x2c18bc)['filter'](_0x1c30db=>_0x1c30db!=='count');let _0x369bce=undefined;_0xab8f3a['sparse']!==!![]&&(_0x369bce=this['handleSegments'](_0xbcde64,_0x3010de));_0x5080c9['forEach'](_0x41b79f=>{const _0x4fa5b8={'target':_0x41b79f,'type':'count','value':_0x2c18bc[_0x41b79f]};_0x2b0d74['push'](_0x4fa5b8);});const _0x27eae8={'key':_0xab8f3a['key'],'granularity':_0xab8f3a['granularity'],'range':_0xab8f3a['range'],'end':_0xab8f3a['end'],'count':_0x4de472,'measures':_0x2b0d74};return _0x369bce&&(_0x27eae8['segments']=_0x369bce),_0x27eae8;}['handleSegments'](_0x316823,_0x2f7cda){const _0x44addd=[];return _0x2f7cda['forEach']((_0x35f39c,_0x5d78b1)=>{const _0x19af35=[];_0x316823[_0x35f39c]&&Object['entries'](_0x316823[_0x35f39c])['forEach'](([_0xf6f16a,_0x5ba7c4])=>{if(_0xf6f16a['startsWith']('count:')){const _0x164710=_0xf6f16a['slice']('count:'['length']);_0x19af35['push']({'target':_0x164710,'type':'count','value':_0x5ba7c4});}});const _0x26e867=this['isoTimestampFromKeyTimestamp'](_0x35f39c),_0x2b8a7a=_0x316823[_0x35f39c]?_0x316823[_0x35f39c]['count']:0x0;_0x44addd['push']({'count':_0x2b8a7a,'time':_0x26e867,'measures':_0x19af35});}),_0x44addd;}['isoTimestampFromKeyTimestamp'](_0x1c140f){if(_0x1c140f['endsWith'](':'))return'0';const _0x63b227=_0x1c140f['slice'](-0xc),_0x156e04=_0x63b227['slice'](0x0,0x4),_0x22f5f7=_0x63b227['slice'](0x4,0x6),_0x19d91a=_0x63b227['slice'](0x6,0x8),_0x2b7662=_0x63b227['slice'](0x8,0xa),_0x4c078f=_0x63b227['slice'](0xa,0xc);return _0x156e04+'-'+_0x22f5f7+'-'+_0x19d91a+'T'+_0x2b7662+':'+_0x4c078f+'Z';}async['getIds'](_0x276c58,_0x12e5ea,_0x1c45a9=[0x0,-0x1]){if(!_0x12e5ea['length']){const _0x5a07c6=await this['getStats'](_0x276c58);_0x12e5ea=this['getUniqueFacets'](_0x5a07c6);}const {key:_0x11cd1f,granularity:_0x407893,range:_0x4c0465,end:_0x55d209,start:_0x15c505}=_0x276c58;this['validateOptions'](_0x276c58);let _0x379905=[];_0x12e5ea['forEach'](_0x45c0c7=>{const _0x46ccb1=this['generateDateTimeSets'](_0x407893,_0x4c0465,_0x55d209,_0x15c505);_0x379905=_0x379905['concat'](_0x46ccb1['map'](_0x48a298=>this['buildRedisKey'](_0x11cd1f,_0x48a298,'index:'+_0x45c0c7)));});const _0x50511e=await this['store']['getJobIds'](_0x379905,_0x1c45a9),_0x65a002=this['buildIdsResponse'](_0x50511e,_0x276c58,_0x12e5ea);return _0x65a002;}['buildIdsResponse'](_0x5e277c,_0x18f543,_0x3031c9){const _0x2482f2={},_0x3ce14e=Object['keys'](_0x5e277c);_0x3ce14e['forEach'](_0x4f6746=>{const _0x2dadb3=this['getTargetForKey'](_0x4f6746),_0x22555f=_0x5e277c[_0x4f6746]['length'];_0x2482f2[_0x2dadb3]?_0x2482f2[_0x2dadb3]+=_0x22555f:_0x2482f2[_0x2dadb3]=_0x22555f;});const _0x5aacca=Object['entries'](_0x2482f2)['map'](([_0x5d2e23,_0x56d68c])=>({'facet':_0x5d2e23,'count':_0x56d68c})),_0x161772={'key':_0x18f543['key'],'facets':_0x3031c9,'granularity':_0x18f543['granularity'],'range':_0x18f543['range'],'start':_0x18f543['start'],'counts':_0x5aacca,'segments':this['buildTimeSegments'](_0x5e277c)};return _0x161772;}['buildTimeSegments'](_0x47a7c2){const _0x42d32d=Object['keys'](_0x47a7c2),_0x5d6ba6={};_0x42d32d['forEach'](_0x575944=>{const _0x311779={'type':'ids','target':this['getTargetForKey'](_0x575944),'time':this['isoTimestampFromKeyTimestamp'](this['getTargetForTime'](_0x575944)),'count':_0x47a7c2[_0x575944]['length'],'ids':_0x47a7c2[_0x575944]};_0x5d6ba6[_0x311779['time']]?_0x5d6ba6[_0x311779['time']]['push'](_0x311779):_0x5d6ba6[_0x311779['time']]=[_0x311779];});const _0x2a44f1=Object['entries'](_0x5d6ba6)['map'](([_0x18e671,_0x29aefe])=>({'time':_0x18e671,'measures':_0x29aefe}));return _0x2a44f1;}['getUniqueFacets'](_0x13f0fe){const _0x4e01c2=_0x13f0fe['measures']['map'](_0x2f3d42=>_0x2f3d42['target']);return Array['from'](new Set(_0x4e01c2));}['getTargetForKey'](_0x727d2b){return _0x727d2b['split'](':index:')[0x1];}['getTargetForTime'](_0x2a3faa){return _0x2a3faa['split'](':index:')[0x0];}async['getWorkItems'](_0x172529,_0xd1939){if(!_0xd1939['length']){const _0x174173=await this['getStats'](_0x172529);_0xd1939=this['getUniqueFacets'](_0x174173);}const {key:_0x3a1034,granularity:_0x1c69a2,range:_0x52d638,end:_0x46bc5c,start:_0x370f1a}=_0x172529;this['validateOptions'](_0x172529);let _0x4a318c=[];_0xd1939['forEach'](_0x329518=>{const _0x1012d8=this['generateDateTimeSets'](_0x1c69a2,_0x52d638,_0x46bc5c,_0x370f1a);_0x4a318c=_0x4a318c['concat'](_0x1012d8['map'](_0x3e4d58=>this['buildRedisKey'](_0x3a1034,_0x3e4d58,'index:'+_0x329518)));});const _0x15e326=await this['store']['getJobIds'](_0x4a318c,[0x0,0x1]),_0x405c40=this['buildWorkerLists'](_0x15e326);return _0x405c40;}['buildWorkerLists'](_0x4c839f){const _0x5776f2=[];for(const _0x308cac in _0x4c839f){_0x4c839f[_0x308cac]['length']&&_0x5776f2['push'](_0x308cac);}return _0x5776f2;}['resolveTriggerStatistics']({stats:_0x5de012},_0x46ddf5){const _0x2c1bb8={'general':[],'index':[],'median':[]};_0x2c1bb8['general']['push']({'metric':'count','target':'count','value':0x1});for(const _0x1b7e85 of _0x5de012['measures']){const _0x36c1b7=this['resolveMetric']({'metric':_0x1b7e85['measure'],'target':_0x1b7e85['target']},_0x46ddf5);if(this['isGeneralMetric'](_0x1b7e85['measure']))_0x2c1bb8['general']['push'](_0x36c1b7);else{if(this['isMedianMetric'](_0x1b7e85['measure']))_0x2c1bb8['median']['push'](_0x36c1b7);else this['isIndexMetric'](_0x1b7e85['measure'])&&_0x2c1bb8['index']['push'](_0x36c1b7);}}return _0x2c1bb8;}['isGeneralMetric'](_0x1341dd){return _0x1341dd==='sum'||_0x1341dd==='avg'||_0x1341dd==='count';}['isMedianMetric'](_0x742b48){return _0x742b48==='mdn';}['isIndexMetric'](_0x5251cb){return _0x5251cb==='index';}['resolveMetric']({metric:_0x32b26f,target:_0x38380e},_0xa4e30b){const _0x5dacc9=new pipe_1['Pipe']([[_0x38380e]],_0xa4e30b),_0x15a9c9=_0x5dacc9['process']()['toString'](),_0x2d8586=this['resolveTarget'](_0x32b26f,_0x38380e,_0x15a9c9);if(_0x32b26f==='index')return{'metric':_0x32b26f,'target':_0x2d8586,'value':_0xa4e30b['metadata']['jid']};else{if(_0x32b26f==='count')return{'metric':_0x32b26f,'target':_0x2d8586,'value':0x1};}return{'metric':_0x32b26f,'target':_0x2d8586,'value':_0x15a9c9};}['isCardinalMetric'](_0x374c80){return _0x374c80==='index'||_0x374c80==='count';}['resolveTarget'](_0x4fc6c9,_0x379fee,_0x1f583a){const _0x3da2d1=_0x379fee['substring'](0x1,_0x379fee['length']-0x1),_0x3f6055=_0x3da2d1['split']('.')['slice'](0x3)['join']('/');let _0x328c7a;return this['isCardinalMetric'](_0x4fc6c9)?_0x328c7a=_0x4fc6c9+':'+_0x3f6055+':'+_0x1f583a:_0x328c7a=_0x4fc6c9+':'+_0x3f6055,_0x328c7a;}}exports['ReporterService']=ReporterService,ReporterService['DEFAULT_GRANULARITY']='5m';