@nsshunt/stsappframework 3.0.104 → 3.0.105

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 (140) hide show
  1. package/dist/authutilsnode.js +6 -7
  2. package/dist/authutilsnode.js.map +1 -1
  3. package/dist/influxdb/influxDBManager.js +16 -17
  4. package/dist/influxdb/influxDBManager.js.map +1 -1
  5. package/dist/influxdb/influxDBManagerAgent.js +9 -13
  6. package/dist/influxdb/influxDBManagerAgent.js.map +1 -1
  7. package/dist/influxdb/influxDBManagerBase.js +2 -6
  8. package/dist/influxdb/influxDBManagerBase.js.map +1 -1
  9. package/dist/influxdb/influxDBManagerService.js +10 -14
  10. package/dist/influxdb/influxDBManagerService.js.map +1 -1
  11. package/dist/instrumentationsubscriber.js +11 -15
  12. package/dist/instrumentationsubscriber.js.map +1 -1
  13. package/dist/kafka/IMKafkaManager.js +2 -6
  14. package/dist/kafka/IMKafkaManager.js.map +1 -1
  15. package/dist/kafkatesting/produce.js +1 -5
  16. package/dist/kafkatesting/produce.js.map +1 -1
  17. package/dist/masterprocessbase.js +19 -20
  18. package/dist/masterprocessbase.js.map +1 -1
  19. package/dist/processbase.js +7 -8
  20. package/dist/processbase.js.map +1 -1
  21. package/dist/server.js +1 -1
  22. package/dist/server.js.map +1 -1
  23. package/dist/singleprocessbase.js +3 -4
  24. package/dist/singleprocessbase.js.map +1 -1
  25. package/dist/tcpclient/app2.js +2 -2
  26. package/dist/tcpserver/appmaster.js +39 -16
  27. package/dist/tcpserver/appmaster.js.map +1 -1
  28. package/dist/workerprocessbase.js +3 -4
  29. package/dist/workerprocessbase.js.map +1 -1
  30. package/package.json +7 -7
  31. package/src/authutilsnode.ts +8 -10
  32. package/src/influxdb/influxDBManager.ts +16 -18
  33. package/src/influxdb/influxDBManagerAgent.ts +9 -11
  34. package/src/influxdb/influxDBManagerBase.ts +2 -4
  35. package/src/influxdb/influxDBManagerService.ts +10 -12
  36. package/src/instrumentationsubscriber.ts +11 -14
  37. package/src/kafka/IMKafkaManager.ts +2 -4
  38. package/src/kafkatesting/produce.ts +1 -3
  39. package/src/masterprocessbase.ts +32 -24
  40. package/src/processbase.ts +7 -9
  41. package/src/server.ts +1 -1
  42. package/src/singleprocessbase.ts +3 -5
  43. package/src/tcpclient/app2.ts +2 -2
  44. package/src/tcpserver/appmaster.ts +39 -17
  45. package/src/workerprocessbase.ts +3 -5
  46. package/types/authutilsnode.d.ts.map +1 -1
  47. package/types/influxdb/influxDBManager.d.ts.map +1 -1
  48. package/types/influxdb/influxDBManagerAgent.d.ts.map +1 -1
  49. package/types/influxdb/influxDBManagerBase.d.ts.map +1 -1
  50. package/types/influxdb/influxDBManagerService.d.ts.map +1 -1
  51. package/types/instrumentationsubscriber.d.ts.map +1 -1
  52. package/types/kafka/IMKafkaManager.d.ts.map +1 -1
  53. package/types/masterprocessbase.d.ts.map +1 -1
  54. package/types/processbase.d.ts +2 -2
  55. package/types/processbase.d.ts.map +1 -1
  56. package/types/singleprocessbase.d.ts.map +1 -1
  57. package/types/tcpserver/appmaster.d.ts.map +1 -1
  58. package/types/workerprocessbase.d.ts.map +1 -1
  59. package/src_working/authDefs.ts +0 -37
  60. package/src_working/authutilsnode.ts +0 -373
  61. package/src_working/commonTypes.ts +0 -239
  62. package/src_working/index.ts +0 -22
  63. package/src_working/influxdb/influxDBManager.ts +0 -970
  64. package/src_working/influxdb/influxDBManagerAgent.ts +0 -314
  65. package/src_working/influxdb/influxDBManagerBase.ts +0 -109
  66. package/src_working/influxdb/influxDBManagerService.ts +0 -373
  67. package/src_working/instrumentationsubscriber.ts +0 -283
  68. package/src_working/kafka/IMKafkaManager.ts +0 -152
  69. package/src_working/kafka/kafkaconsumer.ts +0 -82
  70. package/src_working/kafka/kafkamanager.ts +0 -186
  71. package/src_working/kafka/kafkaproducer.ts +0 -58
  72. package/src_working/kafkatesting/config.ts +0 -10
  73. package/src_working/kafkatesting/consume.ts +0 -116
  74. package/src_working/kafkatesting/produce.ts +0 -153
  75. package/src_working/masterprocessbase.ts +0 -598
  76. package/src_working/middleware/serverNetworkMiddleware.ts +0 -240
  77. package/src_working/network.ts +0 -36
  78. package/src_working/processbase.ts +0 -411
  79. package/src_working/processoptions.ts +0 -164
  80. package/src_working/publishertransports/publishTransportDirect.ts +0 -45
  81. package/src_working/publishertransports/publishTransportUtils.ts +0 -53
  82. package/src_working/server.ts +0 -141
  83. package/src_working/serverprocessbase.ts +0 -393
  84. package/src_working/singleprocessbase.ts +0 -121
  85. package/src_working/socketIoServerHelper.ts +0 -177
  86. package/src_working/stscontrollerbase.ts +0 -15
  87. package/src_working/stslatencycontroller.ts +0 -27
  88. package/src_working/stslatencyroute.ts +0 -16
  89. package/src_working/stsrouterbase.ts +0 -22
  90. package/src_working/tcpclient/app.ts +0 -19
  91. package/src_working/tcpclient/app2.ts +0 -56
  92. package/src_working/tcpserver/app.ts +0 -11
  93. package/src_working/tcpserver/appConfig.ts +0 -65
  94. package/src_working/tcpserver/appmaster.ts +0 -544
  95. package/src_working/validation/errors.ts +0 -6
  96. package/src_working/webworkertesting/app.ts +0 -49
  97. package/src_working/webworkertesting/worker.ts +0 -24
  98. package/src_working/workerprocessbase.test.ts +0 -47
  99. package/src_working/workerprocessbase.ts +0 -185
  100. package/src_working2/authDefs.ts +0 -37
  101. package/src_working2/authutilsnode.ts +0 -375
  102. package/src_working2/commonTypes.ts +0 -239
  103. package/src_working2/index.ts +0 -22
  104. package/src_working2/influxdb/influxDBManager.ts +0 -972
  105. package/src_working2/influxdb/influxDBManagerAgent.ts +0 -316
  106. package/src_working2/influxdb/influxDBManagerBase.ts +0 -111
  107. package/src_working2/influxdb/influxDBManagerService.ts +0 -375
  108. package/src_working2/instrumentationsubscriber.ts +0 -286
  109. package/src_working2/kafka/IMKafkaManager.ts +0 -154
  110. package/src_working2/kafka/kafkaconsumer.ts +0 -82
  111. package/src_working2/kafka/kafkamanager.ts +0 -186
  112. package/src_working2/kafka/kafkaproducer.ts +0 -58
  113. package/src_working2/kafkatesting/config.ts +0 -10
  114. package/src_working2/kafkatesting/consume.ts +0 -116
  115. package/src_working2/kafkatesting/produce.ts +0 -155
  116. package/src_working2/masterprocessbase.ts +0 -590
  117. package/src_working2/middleware/serverNetworkMiddleware.ts +0 -240
  118. package/src_working2/network.ts +0 -36
  119. package/src_working2/processbase.ts +0 -415
  120. package/src_working2/processoptions.ts +0 -164
  121. package/src_working2/publishertransports/publishTransportDirect.ts +0 -45
  122. package/src_working2/publishertransports/publishTransportUtils.ts +0 -53
  123. package/src_working2/server.ts +0 -141
  124. package/src_working2/serverprocessbase.ts +0 -393
  125. package/src_working2/singleprocessbase.ts +0 -123
  126. package/src_working2/socketIoServerHelper.ts +0 -177
  127. package/src_working2/stscontrollerbase.ts +0 -15
  128. package/src_working2/stslatencycontroller.ts +0 -27
  129. package/src_working2/stslatencyroute.ts +0 -16
  130. package/src_working2/stsrouterbase.ts +0 -22
  131. package/src_working2/tcpclient/app.ts +0 -19
  132. package/src_working2/tcpclient/app2.ts +0 -56
  133. package/src_working2/tcpserver/app.ts +0 -11
  134. package/src_working2/tcpserver/appConfig.ts +0 -65
  135. package/src_working2/tcpserver/appmaster.ts +0 -522
  136. package/src_working2/validation/errors.ts +0 -6
  137. package/src_working2/webworkertesting/app.ts +0 -49
  138. package/src_working2/webworkertesting/worker.ts +0 -24
  139. package/src_working2/workerprocessbase.test.ts +0 -47
  140. package/src_working2/workerprocessbase.ts +0 -187
@@ -1,972 +0,0 @@
1
- /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
2
- import { InfluxDB, WriteApi, QueryApi, DEFAULT_WriteOptions, WriteOptions } from '@influxdata/influxdb-client'
3
- // Use below for production https mode - needs to be config item
4
- //import { Agent } from 'https'
5
- import { Agent } from 'http'
6
-
7
- import chalk from 'chalk';
8
-
9
- import { $Options } from '@nsshunt/stsconfig'
10
- import { JSONObject } from '@nsshunt/stsutils'
11
- const goptions = $Options()
12
-
13
- import { InfluxDBManagerBase } from './influxDBManagerBase'
14
- import { InfluxDBManagerService} from './influxDBManagerService'
15
- import { InfluxDBManagerAgent } from './influxDBManagerAgent'
16
- import { IInfluxDBManagerOptions, InstrumentPayload } from './../commonTypes'
17
-
18
- import { TasksAPI, Tasks, Task } from '@influxdata/influxdb-client-apis'
19
-
20
- import debugModule from 'debug'
21
- const debug = debugModule(`proc:${process.pid}`);
22
-
23
- /*
24
- Manual docker run command and setup -------------------------------------------------------
25
-
26
- docker run -d -p 8086:8086 --name influxdb \
27
- -v $PWD/data:/var/lib/influxdb2 \
28
- -v $PWD/config:/etc/influxdb2 \
29
- -e DOCKER_INFLUXDB_INIT_MODE=setup \
30
- -e DOCKER_INFLUXDB_INIT_USERNAME=my-user \
31
- -e DOCKER_INFLUXDB_INIT_PASSWORD=my-password \
32
- -e DOCKER_INFLUXDB_INIT_ORG=my-org \
33
- -e DOCKER_INFLUXDB_INIT_BUCKET=my-bucket \
34
- -e DOCKER_INFLUXDB_INIT_RETENTION=1w \
35
- -e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-super-secret-auth-token \
36
- --restart unless-stopped \
37
- influxdb:latest
38
-
39
- Then access admin portal via;
40
- https://192.168.14.92:8086
41
-
42
- Login using credentials above
43
- username: my-user
44
- password: my-password
45
-
46
- Select Buckets from the menu
47
- Create buckets as required
48
- Example: TestBucket01
49
- Note: We will not use the default bucket as specified in the docker initial setup (my-bucket)
50
-
51
- Select API Tokens from the menu
52
- Generate an API token / custom API token for read/write access to the bucket about
53
- Bucket: TestBucket01 (from above bucket create)
54
-
55
- Copy the API token and use in the ENV file for access
56
- INFLUXDB_API_TOKEN=<< generated from InfluxDB web admin tool >> \
57
- INFLUXDB_URL=http://192.168.14.92:8086 \
58
- INFLUXDB_ORG=my-org \
59
- INFLUXDB_BUCKET=TestBucket01 \
60
-
61
- Docker compose file --------------------------------------------------------------
62
-
63
- version: '2'
64
- services:
65
- influxdb:
66
- image: influxdb:latest
67
- ports:
68
- - "8086:8086"
69
- environment:
70
- DOCKER_INFLUXDB_INIT_MODE: setup
71
- DOCKER_INFLUXDB_INIT_USERNAME: my-user
72
- DOCKER_INFLUXDB_INIT_PASSWORD: my-password
73
- DOCKER_INFLUXDB_INIT_ORG: my-org
74
- DOCKER_INFLUXDB_INIT_BUCKET: my-bucket
75
- DOCKER_INFLUXDB_INIT_RETENTION: 1w
76
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: my-super-secret-auth-token
77
- volumes:
78
- - /var/run/influxdb/data:/var/lib/influxdb2
79
- - /var/run/influxdb/config:/etc/influxdb2
80
- restart: unless-stopped
81
-
82
-
83
- // Exam Queries Below ----------------------------------------------------------------------
84
-
85
- from(bucket: "TestBucket01")
86
- |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
87
- |> filter(fn: (r) => r["_measurement"] == "stsServicePointV3")
88
- |> group(columns: ["serviceId"], mode: "by")
89
- |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
90
- |> yield(name: "mean")
91
-
92
- from(bucket: "TestBucket01")
93
- |> range(start: -10m)
94
- |> filter(fn: (r) => r["_measurement"] == "requestCount")
95
- |> group(columns: ["serviceInstanceId"])
96
- |> mean()
97
-
98
- from(bucket: "TestBucket01")
99
- |> range(start: -10m)
100
- |> filter(fn: (r) => r["_measurement"] == "cpu")
101
- |> group(columns: ["serviceInstanceId"])
102
- |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)
103
-
104
- from(bucket: "TestBucket01")
105
- |> range(start: -2m)
106
- |> filter(fn: (r) => r["_measurement"] == "cpu")
107
- |> group(columns: ["serviceInstanceId"])
108
- |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)
109
-
110
- from(bucket: "TestBucket01")
111
- |> range(start: -10s)
112
- |> filter(fn: (r) => r["_measurement"] == "all")
113
- |> filter(fn: (r) => r["_field"] == "requestCount")
114
- |> group(columns: ["serviceInstanceId"])
115
- |> max()
116
-
117
- from(bucket: "TestBucket01")
118
- |> range(start: -10s)
119
- |> filter(fn: (r) => r["_measurement"] == "all")
120
- |> filter(fn: (r) => r["_field"] == "requestCount" or r["_field"] == "errorCount")
121
- |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
122
- |> group(columns: ["serviceInstanceId"])
123
- |> max()
124
-
125
- from(bucket: "TestBucket01")
126
- |> range(start: -5s)
127
- |> filter(fn: (r) => r["_measurement"] == "all") |> filter(fn: (r) => r["_field"] == "cpu")
128
- |> last()
129
- |> group(columns: ["serviceInstanceId", "serviceId", "_field"])
130
- |> sum()
131
- |> group(columns: ["_field"])
132
- |> sum()
133
-
134
- // Histo ---------------------------------------
135
-
136
- import "math"
137
- from(bucket: "TestBucket01")
138
- |> range(start: -10m)
139
- |> filter(fn: (r) => r["_measurement"] == "all") |> filter(fn: (r) => r["_field"] == "latency")
140
- |> group(columns: ["serviceInstanceIsssd", "serviceId", "_field"])
141
- |> aggregateWindow(every: 1s, fn: mean, createEmpty: false)
142
- |> histogram(bins: [0.0, 5.0, 10.0, 20.0, 50.0, math.mInf(sign: 1) ])
143
- |> difference()
144
-
145
- // Velocity ------------------------------------------------------------------------
146
-
147
- dostsvelocityex = (r, ds, d) =>
148
- from(bucket: "TestBucket01")
149
- |> range(start: r)
150
- |> filter(fn: (r) => r["_measurement"] == "all")
151
- |> filter(fn: (r) => r["_field"] == "requestCount")
152
- |> group(columns: ["serviceInstanceIsssd", "serviceId", "_field", "serviceInstanceProcessId"])
153
- |> aggregateWindow(every: ds, fn: last, createEmpty: false)
154
- |> limit(n: 5)
155
- |> difference()
156
- |> last()
157
- |> group(columns: ["serviceInstanceIsssd", "serviceId", "_field"])
158
- |> sum()
159
- |> map(fn: (r) => ({r with _value: float(v: r._value) / d}))
160
-
161
- dostsvelocity = () =>
162
- dostsvelocityex(r: -30s, ds: 5s, d: 5.0)
163
-
164
- dostsvelocity()
165
-
166
- // Velocity - for a specific service instance ----------------------------------
167
-
168
- dostsvelocitybyserviceinstanceex = (sid, r, ds, d) =>
169
- from(bucket: "TestBucket01")
170
- |> range(start: r)
171
- |> filter(fn: (r) => r["_measurement"] == "all")
172
- |> filter(fn: (r) => r["_field"] == "requestCount")
173
- |> filter(fn: (r) => r["serviceId"] == sid)
174
- |> group(columns: ["serviceInstanceId", "serviceId", "_field", "serviceInstanceProcessId"])
175
- |> aggregateWindow(every: ds, fn: last, createEmpty: false)
176
- |> limit(n: 5)
177
- |> difference()
178
- |> last()
179
- |> sum()
180
- |> map(fn: (r) => ({r with _value: float(v: r._value) / d}))
181
-
182
- dostsvelocitybyserviceinstance = (sid) =>
183
- dostsvelocitybyserviceinstanceex(sid: sid, r: -30s, ds: 5s, d: 5.0)
184
-
185
- dostsvelocitybyserviceinstance(sid: "STSAuth@1.0.0")
186
-
187
- // Percentile --------------------------------------------------------------
188
-
189
- from(bucket: "TestBucket01")
190
- |> range(start: -10m)
191
- |> filter(fn: (r) => r["_measurement"] == "all") |> filter(fn: (r) => r["_field"] == "latency")
192
- |> group(columns: ["serviceInstanceIsssd", "serviceId", "_field"])
193
- |> aggregateWindow(every: 10s, fn: mean, createEmpty: false)
194
- |> quantile(q: 0.99, method: "exact_mean")
195
- */
196
-
197
- // export INFLUXDB_TOKEN=W6GztqLmWEqqpP9hAOW9nucgVfESk32dC0JYzFCaYD2yJtS8Ox_WK_1hwSkPUaheWjwwcavkE7_J2aRzm3-E7w==
198
-
199
-
200
- const _logPrefix = 'InfluxDBManager:'
201
-
202
- export class InfluxDBManager
203
- {
204
- #shuttingDown: boolean = false;
205
-
206
- //#token = process.env.INFLUXDB_TOKEN;
207
- #token = '';
208
- #url = '' // 'http://192.168.14.92:8086'
209
- #org = '' // `my-org`
210
- #bucket = '' // `TestBucket01`
211
- #client: InfluxDB;
212
- #writeClient: WriteApi | null = null;
213
- #queryApi: QueryApi;
214
- #writeDataPointFlushTimeout: NodeJS.Timeout | null = null;
215
- #agent: Agent | null = null;
216
- #influxDBManagerClients: Record<string, InfluxDBManagerBase> = { };
217
- #options: IInfluxDBManagerOptions;
218
-
219
- constructor()
220
- {
221
- this.#options = {
222
- token: goptions.influxDB_APIToken,
223
- url: goptions.influxDB_Url,
224
- org: goptions.influxDB_Org,
225
- bucket:goptions.influxDB_Bucket,
226
- agent: {
227
- influxDB_keepAlive: goptions.influxDB_keepAlive,
228
- influxDB_maxSockets: goptions.influxDB_maxSockets,
229
- influxDB_maxTotalSockets: goptions.influxDB_maxTotalSockets,
230
- influxDB_maxFreeSockets: goptions.influxDB_maxFreeSockets,
231
- influxDB_timeout: goptions.influxDB_timeout,
232
- }
233
- };
234
-
235
- this.#token = this.#options.token;
236
- this.#url = this.#options.url;
237
- this.#org = this.#options.org;
238
- this.#bucket = this.#options.bucket;
239
-
240
- if (this.#options.agent) {
241
- this.#agent = new Agent({
242
- keepAlive: this.#options.agent.influxDB_keepAlive,
243
- keepAliveMsecs: 20000, //@@
244
- maxSockets: this.#options.agent.influxDB_maxSockets,
245
- maxTotalSockets: this.#options.agent.influxDB_maxTotalSockets,
246
- maxFreeSockets: this.#options.agent.influxDB_maxFreeSockets,
247
- timeout: this.#options.agent.influxDB_timeout,
248
- //rejectUnauthorized: this.#options.agent.influxDB_rejectUnauthorized, // only for SSL
249
- })
250
-
251
- this.#client = new InfluxDB({
252
- url: this.#url,
253
- token: this.#token,
254
- transportOptions: { agent: this.#agent }
255
- })
256
- } else {
257
- this.#agent = null;
258
-
259
- this.#client = new InfluxDB({
260
- url: this.#url,
261
- token: this.#token
262
- })
263
- }
264
-
265
- this.#BoostrapInfluxDB();
266
-
267
- this.#queryApi = this.#client.getQueryApi(this.#org);
268
-
269
- this.CreateInfluxDBManagerClient('service');
270
- this.CreateInfluxDBManagerClient('agent');
271
- }
272
-
273
- #BoostrapInfluxDB = async(): Promise<void> => {
274
- const tasksAPI = new TasksAPI(this.#client);
275
- const tasks: Tasks = await tasksAPI.getTasks({
276
- org: 'my-org'
277
- });
278
- if (tasks.tasks) {
279
- console.log(chalk.cyan(`[InfluxDB Tasks] - Count: [${tasks.tasks.length}]`));
280
- tasks.tasks.forEach((task: Task) => {
281
- console.log(chalk.cyan(`-- [ Start Task Definition ]--`));
282
- console.log(chalk.green(`${JSON.stringify(task)}`));
283
- console.log(chalk.yellow(`authorizationID: [${task.authorizationID}]`));
284
- console.log(chalk.cyan(`-- [ End Task Definition ]--`));
285
- });
286
- } else {
287
- console.log(chalk.magenta(`[InfluxDB Tasks] - Could not get tasks from the InfluxDB API`));
288
- }
289
- }
290
-
291
- CreateInfluxDBManagerClient(modelType: string) {
292
- switch (modelType) {
293
- case 'service':
294
- this.#influxDBManagerClients[modelType] = new InfluxDBManagerService(this.#options, this.#queryApi);
295
- break;
296
- case 'agent':
297
- this.#influxDBManagerClients[modelType] = new InfluxDBManagerAgent(this.#options, this.#queryApi);
298
- break;
299
- default:
300
- throw new Error(`Model type: [${modelType} not supported.]`);
301
- }
302
- }
303
-
304
- get serviceManager(): InfluxDBManagerService {
305
- return this.#influxDBManagerClients['service'] as InfluxDBManagerService;
306
- }
307
-
308
- get agentManager(): InfluxDBManagerAgent {
309
- return this.#influxDBManagerClients['agent'] as InfluxDBManagerAgent;
310
- }
311
-
312
- Start = async () => {
313
- // perform any setup here
314
- }
315
-
316
- Terminate = async () => {
317
- if (this.#shuttingDown) {
318
- console.log(`${_logPrefix}Terminate: Terminate already called. Ignoring.`.yellow);
319
- } else {
320
- this.#shuttingDown = true;
321
- if (this.#writeClient) {
322
- try {
323
- this.#writeClient.flush();
324
- this.#shuttingDown = true;
325
- if (this.#writeDataPointFlushTimeout) {
326
- clearTimeout(this.#writeDataPointFlushTimeout);
327
- this.#writeDataPointFlushTimeout = null;
328
- }
329
-
330
- if (this.#agent) {
331
- this.#agent?.destroy();
332
- this.#agent = null;
333
- }
334
-
335
- this.#writeClient = null;
336
-
337
- console.log(chalk.yellow(`ProducerDisconnect`));
338
- } catch (error) {
339
- console.error(chalk.red(`${_logPrefix}#Terminate: Error: [${error}]`));
340
- }
341
- }
342
- }
343
- }
344
-
345
- /*
346
- .floatField('timer', instrumentPayload.instruments[Gauge.TIMER_GAUGE].val)
347
- .floatField('duration', instrumentPayload.instruments[Gauge.DURATION_GAUGE].val)
348
- .floatField('latency', instrumentPayload.instruments[Gauge.LATENCY_GAUGE].val)
349
- */
350
-
351
- CreateGlobalCountModel = (stscount: any[]) => {
352
- try {
353
- const results: any = { };
354
- stscount.forEach((o: any) => {
355
- results[o._field] = o._value;
356
- });
357
- return results;
358
- } catch (error) {
359
- console.error(chalk.red(`${_logPrefix}#CreateGlobalCountModel: Error: [${error}]`));
360
- }
361
- }
362
-
363
-
364
- CreateNestedObject(combinedResults: JSONObject, keyList: string[]): JSONObject {
365
- let workingObject = combinedResults;
366
- keyList.forEach((key) => {
367
- if (!workingObject[key]) {
368
- workingObject[key] = { };
369
- workingObject = workingObject[key];
370
- }
371
- });
372
- return combinedResults;
373
- }
374
-
375
- get writeClient(): WriteApi {
376
- if (!this.#writeClient) {
377
- /* Defaults from the library as at 12/11/2023
378
- // default RetryDelayStrategyOptions
379
- export const DEFAULT_RetryDelayStrategyOptions = {
380
- retryJitter: 200,
381
- minRetryDelay: 5000,
382
- maxRetryDelay: 125000,
383
- exponentialBase: 5,
384
- randomRetry: true,
385
- }
386
-
387
- // default writeOptions
388
- export const DEFAULT_WriteOptions: WriteOptions = {
389
- batchSize: 1000,
390
- maxBatchBytes: 50_000_000, // default max batch size in the cloud
391
- flushInterval: 60000,
392
- writeFailed: function () {},
393
- writeSuccess: function () {},
394
- writeRetrySkipped: function () {},
395
- maxRetries: 5,
396
- maxRetryTime: 180_000,
397
- maxBufferLines: 32_000,
398
- // a copy of DEFAULT_RetryDelayStrategyOptions, so that DEFAULT_WriteOptions could be tree-shaken
399
- retryJitter: 200,
400
- minRetryDelay: 5000,
401
- maxRetryDelay: 125000,
402
- exponentialBase: 2,
403
- gzipThreshold: 1000,
404
- randomRetry: true,
405
- }
406
- */
407
-
408
- const flushBatchSize = DEFAULT_WriteOptions.batchSize;
409
-
410
- const writeOptions: Partial<WriteOptions> = {
411
- /* the maximum points/lines to send in a single batch to InfluxDB server */
412
- batchSize: flushBatchSize + 1, // don't let automatically flush data
413
- /* default tags to add to every point */
414
- //defaultTags: {location: hostname},
415
- /* maximum time in millis to keep points in an unflushed batch, 0 means don't periodically flush */
416
- flushInterval: 0,
417
- // max size of a batch in bytes
418
- maxBatchBytes: 50_000_000, // default max batch size in the cloud
419
-
420
- // Retry Options
421
-
422
- /* maximum size of the retry buffer - it contains items that could not be sent for the first time */
423
- maxBufferLines: 30000,
424
- /* the count of internally-scheduled retries upon write failure, the delays between write attempts follow an exponential backoff strategy if there is no Retry-After HTTP header */
425
- maxRetries: 5, // do not retry writes
426
- // max time (millis) that can be spent with retries
427
- maxRetryTime: 180_000,
428
-
429
- // ... there are more write options that can be customized, see
430
- // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeoptions.html and
431
- // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeretryoptions.html
432
- writeFailed(error, lines, attempt, expires) {
433
- debug(chalk.red(`writeOptions:writeSuccess(): Error: [${error}], Attempt: [${attempt}], Expires: [${expires}], Lines: [${lines}]`));
434
- },
435
- writeSuccess(lines) {
436
- debug(chalk.green(`writeOptions:writeSuccess(): Lines: [${lines}]`));
437
- },
438
- writeRetrySkipped(entry) {
439
- debug(chalk.magenta(`writeOptions:writeSuccess(): Expires: [${entry.expires}], Lines: [${entry.lines}]`));
440
- }
441
- }
442
-
443
- this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns', writeOptions);
444
-
445
- let attemptCount = 0;
446
- const maxAttemptCount = 5;
447
- const normalFlushDelay = 1000;
448
- const retryFlushDelay = 2500;
449
-
450
- const StartWriteClient = (delay: number) => {
451
- this.#writeDataPointFlushTimeout = setTimeout(async () => {
452
- if (this.#writeClient) {
453
- try {
454
- attemptCount++;
455
- const start = performance.now();
456
- await this.#writeClient.flush();
457
- const end = performance.now();
458
- debug(`InfluxDB Flush time: [${end-start}]`.grey)
459
- attemptCount = 0;
460
- StartWriteClient(normalFlushDelay);
461
- } catch (error) {
462
- console.error(chalk.red(`InfluxDBManager:StartWriteClient(): Attempt: [${attemptCount}], Error: [${error}]`));
463
- if (attemptCount === maxAttemptCount) {
464
- console.error(chalk.red(`InfluxDBManager:StartWriteClient(): Max Attempts reached. Will no longer retry.`));
465
- console.error(chalk.red(`InfluxDBManager:StartWriteClient(): InfluxDB data capture ended in permanent faiilure.`));
466
- } else {
467
- StartWriteClient(retryFlushDelay);
468
- }
469
- }
470
- }
471
- }, delay).unref();
472
- }
473
-
474
- StartWriteClient(normalFlushDelay);
475
- }
476
- return this.#writeClient;
477
- }
478
-
479
- // Agent context payload
480
- // {"nid":"somehost@e58f5d75-6ff6-4e04-92a4-f2bcd722fec0-someuseragent|MainProcess|0","id":"somehost@e58f5d75-6ff6-4e04-92a4-f2bcd722fec0-someuseragent|MainProcess|0","hostName":"somehost","agentName":"e58f5d75-6ff6-4e04-92a4-f2bcd722fec0-someuseragent","threadId":"MainProcess","asyncRunnerId":"0"}
481
- async OutputInfluxDB(instrumentPayload: InstrumentPayload): Promise<boolean> {
482
- try {
483
- if (this.#shuttingDown) {
484
- return false;
485
- }
486
- if (instrumentPayload.context.agentName) {
487
- return this.#influxDBManagerClients['agent'].OutputInfluxDB(this.writeClient, instrumentPayload);
488
- } else {
489
- return this.#influxDBManagerClients['service'].OutputInfluxDB(this.writeClient, instrumentPayload);
490
- }
491
- } catch (error) {
492
- console.error(chalk.red(`${_logPrefix}OutputInfluxDB: Could not write data point: [${error}]`));
493
- return false;
494
- }
495
- }
496
- }
497
-
498
-
499
-
500
- /*
501
- |> histogram(bins: [0.0, 10.0, 20.0, 50.0, 100.0, 1000.0, 50000.0, math.mInf(sign: 1) ])
502
-
503
-
504
- |> histogramQuantile(quantile: 0.99999)
505
-
506
-
507
-
508
- option task = {name: "downsample-daily", every: 1d}
509
-
510
-
511
- option task = {name: "downsample-daily", every: 1d}
512
-
513
- from(bucket: "my-db/")
514
- |> range(start: -task.every)
515
- |> filter(fn: (r) => r._measurement == "example-measurement")
516
- |> filter(fn: (r) => r._field == "example-field")
517
- |> aggregateWindow(every: 1h, fn: mean)
518
- |> set(key: "_measurement", value: "average-example-measurement")
519
- |> to(org: "example-org", bucket: "my-db/example-rp")
520
-
521
-
522
-
523
-
524
- |> set(key: "_measurement", value: "sts01")
525
- |> to(org: "my-org", bucket: "TestBucket01")
526
-
527
-
528
-
529
-
530
-
531
-
532
-
533
-
534
-
535
-
536
- from(bucket: "TestBucket01")
537
- |> range(start: -5s)
538
- |> last()
539
- |> filter(fn: (r) => r["_measurement"] == "service")
540
- |> filter(fn: (r) => r["_field"] != "memory")
541
- |> group(columns: ["_field"])
542
- |> sum()
543
- |> map(
544
- fn: (r) => ({r with _time: now(), _measurement: "sts01"}),
545
- )
546
- |> to(org: "my-org", bucket: "TestBucket01")
547
-
548
-
549
-
550
-
551
- group(columns: ["serviceId", "serviceInstanceId", "_field"])
552
-
553
- option task = {name: "task-sts-stats-sum-byserviceInstanceprocessid", every: 1s}
554
- from(bucket: "TestBucket01")
555
- |> range(start: -5s)
556
- |> last()
557
- |> filter(fn: (r) => r["_measurement"] == "service" and r["_field"] != "memory")
558
- |> group(columns: ["serviceId", "serviceInstanceId", "serviceInstanceProcessId", "_field"])
559
- |> sum()
560
- |> toFloat()
561
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-sum-byserviceInstanceprocessid"}))
562
- |> to(org: "my-org", bucket: "TestBucket01")
563
-
564
- option task = {name: "task-sts-stats-sum-byserviceinstance", every: 1s}
565
- from(bucket: "TestBucket01")
566
- |> range(start: -5s)
567
- |> last()
568
- |> filter(fn: (r) => r["_measurement"] == "service" and r["_field"] != "memory")
569
- |> group(columns: ["serviceId", "serviceInstanceId", "_field"])
570
- |> sum()
571
- |> toFloat()
572
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-sum-byserviceinstance"}))
573
- |> to(org: "my-org", bucket: "TestBucket01")
574
-
575
- option task = {name: "task-sts-stats-sum-byservice", every: 1s}
576
- from(bucket: "TestBucket01")
577
- |> range(start: -5s)
578
- |> last()
579
- |> filter(fn: (r) => r["_measurement"] == "service" and r["_field"] != "memory")
580
- |> group(columns: ["serviceId", "_field"])
581
- |> sum()
582
- |> toFloat()
583
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-sum-byservice"}))
584
- |> to(org: "my-org", bucket: "TestBucket01")
585
-
586
- option task = {name: "task-sts-stats-sum", every: 1s}
587
- from(bucket: "TestBucket01")
588
- |> range(start: -5s)
589
- |> last()
590
- |> filter(fn: (r) => r["_measurement"] == "service" and r["_field"] != "memory")
591
- |> group(columns: ["_field"])
592
- |> sum()
593
- |> toFloat()
594
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-sum"}))
595
- |> to(org: "my-org", bucket: "TestBucket01")
596
-
597
-
598
-
599
-
600
-
601
- option task = {name: "task-sts-stats-sum-byagentthreadasyncrunner-agent", every: 1s}
602
- from(bucket: "TestBucket01")
603
- |> range(start: -5s)
604
- |> last()
605
- |> filter(fn: (r) => r["_measurement"] == "agent")
606
- |> group(columns: ["agentName", "threadId", "asyncRunnerId", "_field"])
607
- |> sum()
608
- |> toFloat()
609
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-sum-byagentthreadasyncunner-agent"}))
610
- |> to(org: "my-org", bucket: "TestBucket01")
611
-
612
- option task = {name: "task-sts-stats-sum-byagentthread-agent", every: 1s}
613
- from(bucket: "TestBucket01")
614
- |> range(start: -5s)
615
- |> last()
616
- |> filter(fn: (r) => r["_measurement"] == "agent")
617
- |> group(columns: ["agentName", "threadId", "_field"])
618
- |> sum()
619
- |> toFloat()
620
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-sum-byagentthread-agent"}))
621
- |> to(org: "my-org", bucket: "TestBucket01")
622
-
623
- option task = {name: "task-sts-stats-sum-byagent-agent", every: 1s}
624
- from(bucket: "TestBucket01")
625
- |> range(start: -5s)
626
- |> last()
627
- |> filter(fn: (r) => r["_measurement"] == "agent")
628
- |> group(columns: ["agentName", "_field"])
629
- |> sum()
630
- |> toFloat()
631
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-sum-byagent-agent"}))
632
- |> to(org: "my-org", bucket: "TestBucket01")
633
-
634
- option task = {name: "task-sts-stats-sum-agent", every: 1s}
635
- from(bucket: "TestBucket01")
636
- |> range(start: -5s)
637
- |> last()
638
- |> filter(fn: (r) => r["_measurement"] == "agent")
639
- |> group(columns: ["_field"])
640
- |> sum()
641
- |> toFloat()
642
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-sum-agent"}))
643
- |> to(org: "my-org", bucket: "TestBucket01")
644
-
645
-
646
-
647
-
648
-
649
-
650
-
651
-
652
- import "math"
653
- from(bucket: "TestBucket01")
654
- |> range(start: -10m)
655
- |> filter(fn: (r) => r["_measurement"] == "sts-stats-sum-byservice" and r["serviceId"] == "STSBroker@1.0.0" and r["_field"] == "cpu")
656
- |> histogram(bins: [0.0, 10.0, 20.0, 50.0, 100.0, 200.0, 250.0, 1000.0, 50000.0, math.mInf(sign: 1) ])
657
- |> difference()
658
-
659
-
660
-
661
- import "math"
662
- from(bucket: "TestBucket01")
663
- |> range(start: -10m)
664
- |> filter(fn: (r) => r["_measurement"] == "sts-stats-sum" and r["_field"] == "cpu")
665
- |> histogram(bins: [0.0, 10.0, 20.0, 50.0, 100.0, 200.0, 250.0, 1000.0, 50000.0, math.mInf(sign: 1) ])
666
- |> difference()
667
-
668
-
669
-
670
-
671
- // More accurate
672
-
673
- data = from(bucket: "TestBucket01")
674
- |> range(start: -10m)
675
- |> filter(fn: (r) => r["_measurement"] == "sts-stats-sum-byservice" and r["serviceId"] == "STSBroker@1.0.0" and r["_field"] == "cpu")
676
- |> aggregateWindow(every: 5s, fn: max, createEmpty: false)
677
-
678
- dostsquantileex = (q) =>
679
- data
680
- |> quantile(q: q, method: "estimate_tdigest", compression: 1000.0)
681
- |> set(key: "quantile", value: string(v:q))
682
- |> group(columns: ["quantile"])
683
-
684
- union(tables: [
685
- dostsquantileex(q: 0.5),
686
- dostsquantileex(q: 0.8),
687
- dostsquantileex(q: 0.9),
688
- dostsquantileex(q: 0.95),
689
- dostsquantileex(q: 0.99)
690
- ])
691
-
692
-
693
-
694
-
695
- // Less accurate
696
-
697
- import "math"
698
- data = from(bucket: "TestBucket01")
699
- |> range(start: -10m)
700
- |> filter(fn: (r) => r["_measurement"] == "sts-stats-sum-byservice" and r["serviceId"] == "STSBroker@1.0.0" and r["_field"] == "cpu")
701
- |> histogram(bins: [0.0, 10.0, 20.0, 50.0, 100.0, 200.0, 250.0, 1000.0, 50000.0, math.mInf(sign: 1) ])
702
-
703
-
704
- dostsquantileex = (q) =>
705
- data
706
- |> histogramQuantile(quantile: q)
707
- |> set(key: "quantile", value: string(v:q))
708
- |> group(columns: ["quantile"])
709
-
710
- union(tables: [
711
- dostsquantileex(q: 0.5),
712
- dostsquantileex(q: 0.8),
713
- dostsquantileex(q: 0.9),
714
- dostsquantileex(q: 0.95),
715
- dostsquantileex(q: 0.99)
716
- ])
717
-
718
-
719
-
720
-
721
-
722
-
723
- activeRequestCount 0 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
724
- 1 sts-stats-sum authenticationCount 0 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
725
- 2 sts-stats-sum connectionCount 40 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
726
- 3 sts-stats-sum connectionIdleCount 12 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
727
- 4 sts-stats-sum connectionPoolCount 12 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
728
- 5 sts-stats-sum connectionWaitingCount 0 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
729
- 6 sts-stats-sum coreCount
730
-
731
-
732
- cpu 50.91 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
733
- 8 sts-stats-sum duration 3.6900000000000004 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
734
- 9 sts-stats-sum errorCount 0 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
735
- 10 sts-stats-sum latency 22.82 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
736
- 11 sts-stats-sum requestCount 4485612 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
737
- 12 sts-stats-sum retryCount 0 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
738
- 13 sts-stats-sum systemcpu
739
-
740
- timer 72578365.22 2023-11-11T06:23:52.761Z 2023-11-11T06:33:52.761Z 2023-11-11T06:33:52.000Z
741
- 15 sts-stats-sum velocity
742
-
743
-
744
-
745
-
746
-
747
-
748
-
749
-
750
-
751
-
752
-
753
-
754
-
755
- option task = {
756
- name: "sts-service-stats",
757
- every: 1s,
758
- }
759
-
760
- data = from(bucket: "TestBucket01")
761
- |> range(start: -5s)
762
- |> last()
763
- |> filter(fn: (r) => r["_measurement"] == "service" and r["_field"] != "memory")
764
-
765
- r1 = data
766
- |> filter(fn: (r) => r["_field"] == "requestCount"
767
- or r["_field"] == "errorCount"
768
- or r["_field"] == "retryCount"
769
- or r["_field"] == "authenticationCount"
770
- or r["_field"] == "activeRequestCount"
771
- or r["_field"] == "connectionCount"
772
- or r["_field"] == "connectionPoolCount"
773
- or r["_field"] == "connectionIdleCount"
774
- or r["_field"] == "connectionWaitingCount"
775
- or r["_field"] == "coreCount"
776
- or r["_field"] == "cpu"
777
- or r["_field"] == "systemcpu"
778
- or r["_field"] == "velocity"
779
- or r["_field"] == "timer")
780
- |> group(columns: ["_field"])
781
- |> sum()
782
- |> toFloat()
783
-
784
- r2 = data
785
- |> filter(fn: (r) => float(v: r["_value"]) > 0.0 and (r["_field"] == "duration"
786
- or r["_field"] == "latency"))
787
-
788
- serviceInstanceProcessSum = r1
789
- |> group(columns: ["serviceId", "serviceInstanceId", "serviceInstanceProcessId", "_field"])
790
- |> sum()
791
- |> toFloat()
792
-
793
- serviceInstanceProcessMean = r2
794
- |> group(columns: ["serviceId", "serviceInstanceId", "serviceInstanceProcessId", "_field"])
795
- |> mean()
796
- |> toFloat()
797
-
798
- union(tables: [serviceInstanceProcessSum, serviceInstanceProcessMean])
799
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-by-serviceinstanceprocess"}))
800
- |> to(org: "my-org", bucket: "TestBucket01")
801
-
802
- serviceInstanceSum = r1
803
- |> group(columns: ["serviceId", "serviceInstanceId", "_field"])
804
- |> sum()
805
- |> toFloat()
806
-
807
- serviceInstanceMean = r2
808
- |> group(columns: ["serviceId", "serviceInstanceId", "_field"])
809
- |> mean()
810
- |> toFloat()
811
-
812
- union(tables: [serviceInstanceSum, serviceInstanceMean])
813
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-by-serviceinstance"}))
814
- |> to(org: "my-org", bucket: "TestBucket01")
815
-
816
- serviceSum = r1
817
- |> group(columns: ["serviceId", "_field"])
818
- |> sum()
819
- |> toFloat()
820
-
821
- serviceMean = r2
822
- |> group(columns: ["serviceId", "_field"])
823
- |> mean()
824
- |> toFloat()
825
-
826
- union(tables: [serviceSum, serviceMean])
827
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-by-service"}))
828
- |> to(org: "my-org", bucket: "TestBucket01")
829
-
830
- globalServiceSum = r1
831
- |> group(columns: ["_field"])
832
- |> sum()
833
- |> toFloat()
834
-
835
- globalServiceMean = r2
836
- |> group(columns: ["_field"])
837
- |> mean()
838
- |> toFloat()
839
-
840
- union(tables: [globalServiceSum, globalServiceMean])
841
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-globalservice"}))
842
- |> to(org: "my-org", bucket: "TestBucket01")
843
-
844
-
845
-
846
-
847
-
848
-
849
-
850
-
851
-
852
-
853
-
854
-
855
-
856
-
857
-
858
-
859
-
860
-
861
-
862
-
863
-
864
-
865
-
866
-
867
-
868
- option task = {name: "task-sts-service-stats", every: 1s}
869
-
870
- data =
871
- from(bucket: "TestBucket01")
872
- |> range(start: -5s)
873
- |> last()
874
- |> filter(fn: (r) => r["_measurement"] == "service" and r["_field"] != "memory")
875
-
876
- r1 =
877
- data
878
- |> filter(
879
- fn: (r) =>
880
- r["_field"] == "requestCount" or r["_field"] == "errorCount" or r["_field"]
881
- ==
882
- "retryCount" or r["_field"] == "authenticationCount" or r["_field"]
883
- ==
884
- "activeRequestCount" or r["_field"] == "connectionCount" or r["_field"]
885
- ==
886
- "connectionPoolCount" or r["_field"] == "connectionIdleCount" or r["_field"]
887
- ==
888
- "connectionWaitingCount" or r["_field"] == "coreCount" or r["_field"] == "cpu"
889
- or
890
- r["_field"] == "systemcpu" or r["_field"] == "velocity" or r["_field"]
891
- ==
892
- "timer",
893
- )
894
-
895
- r2 =
896
- data
897
- |> filter(
898
- fn: (r) =>
899
- float(v: r["_value"]) > 0.0 and (r["_field"] == "duration" or r["_field"]
900
- ==
901
- "latency"),
902
- )
903
-
904
- serviceInstanceProcessSum =
905
- r1
906
- |> group(columns: ["serviceId", "serviceInstanceId", "serviceInstanceProcessId", "_field"])
907
- |> sum()
908
- |> toFloat()
909
-
910
- serviceInstanceProcessMean =
911
- r2
912
- |> group(columns: ["serviceId", "serviceInstanceId", "serviceInstanceProcessId", "_field"])
913
- |> mean()
914
- |> toFloat()
915
-
916
- union(tables: [serviceInstanceProcessSum, serviceInstanceProcessMean])
917
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-by-serviceinstanceprocess"}))
918
- |> to(org: "my-org", bucket: "TestBucket01")
919
-
920
- serviceInstanceSum =
921
- r1
922
- |> group(columns: ["serviceId", "serviceInstanceId", "_field"])
923
- |> sum()
924
- |> toFloat()
925
-
926
- serviceInstanceMean =
927
- r2
928
- |> group(columns: ["serviceId", "serviceInstanceId", "_field"])
929
- |> mean()
930
- |> toFloat()
931
-
932
- union(tables: [serviceInstanceSum, serviceInstanceMean])
933
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-by-serviceinstance"}))
934
- |> to(org: "my-org", bucket: "TestBucket01")
935
-
936
- serviceSum =
937
- r1
938
- |> group(columns: ["serviceId", "_field"])
939
- |> sum()
940
- |> toFloat()
941
-
942
- serviceMean =
943
- r2
944
- |> group(columns: ["serviceId", "_field"])
945
- |> mean()
946
- |> toFloat()
947
-
948
- union(tables: [serviceSum, serviceMean])
949
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-by-service"}))
950
- |> to(org: "my-org", bucket: "TestBucket01")
951
-
952
- globalServiceSum =
953
- r1
954
- |> group(columns: ["_field"])
955
- |> sum()
956
- |> toFloat()
957
-
958
- globalServiceMean =
959
- r2
960
- |> group(columns: ["_field"])
961
- |> mean()
962
- |> toFloat()
963
-
964
- union(tables: [globalServiceSum, globalServiceMean])
965
- |> map(fn: (r) => ({r with _time: now(), _measurement: "sts-stats-globalservice"}))
966
- |> to(org: "my-org", bucket: "TestBucket01")
967
-
968
-
969
-
970
-
971
-
972
- */