@oneuptime/common 8.0.5462 → 8.0.5469

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 (27) hide show
  1. package/Models/DatabaseModels/TelemetryUsageBilling.ts +1 -1
  2. package/Server/EnvironmentConfig.ts +3 -0
  3. package/Server/Services/AnalyticsDatabaseService.ts +71 -11
  4. package/Server/Services/TelemetryUsageBillingService.ts +68 -8
  5. package/Server/Utils/CodeRepository/CodeRepository.ts +44 -36
  6. package/Server/Utils/Execute.ts +40 -1
  7. package/Server/Utils/LocalFile.ts +40 -0
  8. package/Server/Utils/Telemetry/Telemetry.ts +17 -11
  9. package/Types/Date.ts +5 -0
  10. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js +1 -1
  11. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js.map +1 -1
  12. package/build/dist/Server/EnvironmentConfig.js +1 -0
  13. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  14. package/build/dist/Server/Services/AnalyticsDatabaseService.js +55 -8
  15. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  16. package/build/dist/Server/Services/TelemetryUsageBillingService.js +52 -9
  17. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  18. package/build/dist/Server/Utils/CodeRepository/CodeRepository.js +30 -22
  19. package/build/dist/Server/Utils/CodeRepository/CodeRepository.js.map +1 -1
  20. package/build/dist/Server/Utils/Execute.js +26 -1
  21. package/build/dist/Server/Utils/Execute.js.map +1 -1
  22. package/build/dist/Server/Utils/LocalFile.js +35 -0
  23. package/build/dist/Server/Utils/LocalFile.js.map +1 -1
  24. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  25. package/build/dist/Types/Date.js +4 -0
  26. package/build/dist/Types/Date.js.map +1 -1
  27. package/package.json +1 -1
@@ -39,7 +39,7 @@ export const DEFAULT_RETENTION_IN_DAYS: number = 15;
39
39
  pluralName: "Telemetry Usage Billings",
40
40
  icon: IconProp.Billing,
41
41
  tableDescription:
42
- "Stores historical usage billing data for your telemetry data like Logs, Metrics, and Traces.",
42
+ "Stores historical usage billing data for your telemetry data like Logs, Metrics, Traces, and Exceptions.",
43
43
  })
44
44
  @Entity({
45
45
  name: "TelemetryUsageBilling",
@@ -380,6 +380,9 @@ export const AverageMetricRowSizeInBytes: number = parsePositiveNumberFromEnv(
380
380
  1024,
381
381
  );
382
382
 
383
+ export const AverageExceptionRowSizeInBytes: number =
384
+ parsePositiveNumberFromEnv("AVERAGE_EXCEPTION_ROW_SIZE_IN_BYTES", 1024);
385
+
383
386
  export const SlackAppClientId: string | null =
384
387
  process.env["SLACK_APP_CLIENT_ID"] || null;
385
388
  export const SlackAppClientSecret: string | null =
@@ -42,6 +42,7 @@ import SortOrder from "../../Types/BaseDatabase/SortOrder";
42
42
  import OneUptimeDate from "../../Types/Date";
43
43
  import BadDataException from "../../Types/Exception/BadDataException";
44
44
  import Exception from "../../Types/Exception/Exception";
45
+ import ExceptionCode from "../../Types/Exception/ExceptionCode";
45
46
  import { JSONObject } from "../../Types/JSON";
46
47
  import ObjectID from "../../Types/ObjectID";
47
48
  import PositiveNumber from "../../Types/PositiveNumber";
@@ -66,7 +67,7 @@ export default class AnalyticsDatabaseService<
66
67
  public modelType!: { new (): TBaseModel };
67
68
  public database!: ClickhouseDatabase;
68
69
  public model!: TBaseModel;
69
- public databaseClient!: ClickhouseClient;
70
+ public databaseClient!: ClickhouseClient | null;
70
71
  public statementGenerator!: StatementGenerator<TBaseModel>;
71
72
 
72
73
  public constructor(data: {
@@ -82,7 +83,7 @@ export default class AnalyticsDatabaseService<
82
83
  this.database = ClickhouseAppInstance; // default database
83
84
  }
84
85
 
85
- this.databaseClient = this.database.getDataSource() as ClickhouseClient;
86
+ this.databaseClient = this.database.getDataSource();
86
87
 
87
88
  this.statementGenerator = new StatementGenerator<TBaseModel>({
88
89
  modelType: this.modelType,
@@ -90,6 +91,46 @@ export default class AnalyticsDatabaseService<
90
91
  });
91
92
  }
92
93
 
94
+ @CaptureSpan()
95
+ public async insertJsonRows(rows: Array<JSONObject>): Promise<void> {
96
+ if (!rows || rows.length === 0) {
97
+ return;
98
+ }
99
+
100
+ const client: ClickhouseClient = this.getDatabaseClient();
101
+
102
+ const tableName: string = this.model.tableName;
103
+
104
+ if (!tableName) {
105
+ throw new Exception(
106
+ ExceptionCode.BadDataException,
107
+ "Analytics model table name not configured",
108
+ );
109
+ }
110
+
111
+ try {
112
+ await client.insert({
113
+ table: tableName,
114
+ values: rows,
115
+ format: "JSONEachRow",
116
+ clickhouse_settings: {
117
+ async_insert: 1,
118
+ wait_for_async_insert: 0,
119
+ },
120
+ });
121
+
122
+ logger.debug(
123
+ `ClickHouse insert succeeded for table ${tableName} at ${OneUptimeDate.toString(OneUptimeDate.getCurrentDate())}`,
124
+ );
125
+ } catch (error) {
126
+ logger.error(
127
+ `ClickHouse insert failed for table ${tableName} at ${OneUptimeDate.toString(OneUptimeDate.getCurrentDate())}`,
128
+ );
129
+ logger.error(error);
130
+ throw error;
131
+ }
132
+ }
133
+
93
134
  @CaptureSpan()
94
135
  public async doesColumnExistInDatabase(columnName: string): Promise<boolean> {
95
136
  const statement: string =
@@ -807,23 +848,21 @@ export default class AnalyticsDatabaseService<
807
848
 
808
849
  public useDefaultDatabase(): void {
809
850
  this.database = ClickhouseAppInstance;
810
- this.databaseClient = this.database.getDataSource() as ClickhouseClient;
851
+ this.databaseClient = this.database.getDataSource();
811
852
  }
812
853
 
813
854
  @CaptureSpan()
814
855
  public async execute(
815
856
  statement: Statement | string
816
857
  ): Promise<ExecResult<Stream>> {
817
- if (!this.databaseClient) {
818
- this.useDefaultDatabase();
819
- }
858
+ const client: ClickhouseClient = this.getDatabaseClient();
820
859
 
821
860
  const query: string =
822
861
  statement instanceof Statement ? statement.query : statement;
823
862
  const queryParams: Record<string, unknown> | undefined =
824
863
  statement instanceof Statement ? statement.query_params : undefined;
825
864
 
826
- return (await this.databaseClient.exec({
865
+ return (await client.exec({
827
866
  query: query,
828
867
  query_params: queryParams || (undefined as any), // undefined is not specified in the type for query_params, but its ok to pass undefined.
829
868
  })) as ExecResult<Stream>;
@@ -833,22 +872,43 @@ export default class AnalyticsDatabaseService<
833
872
  public async executeQuery(
834
873
  statement: Statement | string
835
874
  ): Promise<ResultSet<"JSON">> {
836
- if (!this.databaseClient) {
837
- this.useDefaultDatabase();
838
- }
875
+ const client: ClickhouseClient = this.getDatabaseClient();
839
876
 
840
877
  const query: string =
841
878
  statement instanceof Statement ? statement.query : statement;
842
879
  const queryParams: Record<string, unknown> | undefined =
843
880
  statement instanceof Statement ? statement.query_params : undefined;
844
881
 
845
- return await this.databaseClient.query({
882
+ return await client.query({
846
883
  query: query,
847
884
  format: "JSON",
848
885
  query_params: queryParams || (undefined as any), // undefined is not specified in the type for query_params, but its ok to pass undefined.
849
886
  });
850
887
  }
851
888
 
889
+ private getDatabaseClient(): ClickhouseClient {
890
+ /*
891
+ * Refresh the ClickHouse client lazily so services created before the
892
+ * ClickHouse connection was established pick up the live client.
893
+ */
894
+ if (!this.database) {
895
+ this.useDefaultDatabase();
896
+ }
897
+
898
+ if (!this.databaseClient && this.database) {
899
+ this.databaseClient = this.database.getDataSource();
900
+ }
901
+
902
+ if (!this.databaseClient) {
903
+ throw new Exception(
904
+ ExceptionCode.DatabaseNotConnectedException,
905
+ "ClickHouse client is not connected",
906
+ );
907
+ }
908
+
909
+ return this.databaseClient;
910
+ }
911
+
852
912
  protected async onUpdateSuccess(
853
913
  onUpdate: OnUpdate<TBaseModel>,
854
914
  _updatedItemIds: Array<ObjectID>
@@ -15,6 +15,7 @@ import TelemetryServiceService from "./TelemetryServiceService";
15
15
  import SpanService from "./SpanService";
16
16
  import LogService from "./LogService";
17
17
  import MetricService from "./MetricService";
18
+ import ExceptionInstanceService from "./ExceptionInstanceService";
18
19
  import AnalyticsQueryHelper from "../Types/AnalyticsDatabase/QueryHelper";
19
20
  import DiskSize from "../../Types/DiskSize";
20
21
  import logger from "../Utils/Logger";
@@ -24,6 +25,7 @@ import {
24
25
  AverageSpanRowSizeInBytes,
25
26
  AverageLogRowSizeInBytes,
26
27
  AverageMetricRowSizeInBytes,
28
+ AverageExceptionRowSizeInBytes,
27
29
  IsBillingEnabled,
28
30
  } from "../EnvironmentConfig";
29
31
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
@@ -76,8 +78,18 @@ export class Service extends DatabaseService<Model> {
76
78
  const averageRowSizeInBytes: number = this.getAverageRowSizeForProduct(
77
79
  data.productType,
78
80
  );
81
+ const averageExceptionRowSizeInBytes: number =
82
+ this.getAverageExceptionRowSize();
79
83
 
80
- if (averageRowSizeInBytes <= 0) {
84
+ if (data.productType !== ProductType.Traces && averageRowSizeInBytes <= 0) {
85
+ return;
86
+ }
87
+
88
+ if (
89
+ data.productType === ProductType.Traces &&
90
+ averageRowSizeInBytes <= 0 &&
91
+ averageExceptionRowSizeInBytes <= 0
92
+ ) {
81
93
  return;
82
94
  }
83
95
 
@@ -129,11 +141,11 @@ export class Service extends DatabaseService<Model> {
129
141
  continue;
130
142
  }
131
143
 
132
- let rowCount: number = 0;
144
+ let estimatedBytes: number = 0;
133
145
 
134
146
  try {
135
147
  if (data.productType === ProductType.Traces) {
136
- const count: PositiveNumber = await SpanService.countBy({
148
+ const spanCount: PositiveNumber = await SpanService.countBy({
137
149
  query: {
138
150
  projectId: data.projectId,
139
151
  serviceId: telemetryService.id,
@@ -146,7 +158,30 @@ export class Service extends DatabaseService<Model> {
146
158
  },
147
159
  });
148
160
 
149
- rowCount = count.toNumber();
161
+ const exceptionCount: PositiveNumber =
162
+ await ExceptionInstanceService.countBy({
163
+ query: {
164
+ projectId: data.projectId,
165
+ serviceId: telemetryService.id,
166
+ time: AnalyticsQueryHelper.inBetween(startOfDay, endOfDay),
167
+ },
168
+ skip: 0,
169
+ limit: LIMIT_INFINITY,
170
+ props: {
171
+ isRoot: true,
172
+ },
173
+ });
174
+
175
+ const totalSpanCount: number = spanCount.toNumber();
176
+ const totalExceptionCount: number = exceptionCount.toNumber();
177
+
178
+ if (totalSpanCount <= 0 && totalExceptionCount <= 0) {
179
+ continue;
180
+ }
181
+
182
+ estimatedBytes =
183
+ totalSpanCount * averageRowSizeInBytes +
184
+ totalExceptionCount * averageExceptionRowSizeInBytes;
150
185
  } else if (data.productType === ProductType.Logs) {
151
186
  const count: PositiveNumber = await LogService.countBy({
152
187
  query: {
@@ -161,7 +196,13 @@ export class Service extends DatabaseService<Model> {
161
196
  },
162
197
  });
163
198
 
164
- rowCount = count.toNumber();
199
+ const totalRowCount: number = count.toNumber();
200
+
201
+ if (totalRowCount <= 0) {
202
+ continue;
203
+ }
204
+
205
+ estimatedBytes = totalRowCount * averageRowSizeInBytes;
165
206
  } else if (data.productType === ProductType.Metrics) {
166
207
  const count: PositiveNumber = await MetricService.countBy({
167
208
  query: {
@@ -176,7 +217,13 @@ export class Service extends DatabaseService<Model> {
176
217
  },
177
218
  });
178
219
 
179
- rowCount = count.toNumber();
220
+ const totalRowCount: number = count.toNumber();
221
+
222
+ if (totalRowCount <= 0) {
223
+ continue;
224
+ }
225
+
226
+ estimatedBytes = totalRowCount * averageRowSizeInBytes;
180
227
  }
181
228
  } catch (error) {
182
229
  logger.error(
@@ -186,11 +233,10 @@ export class Service extends DatabaseService<Model> {
186
233
  continue;
187
234
  }
188
235
 
189
- if (rowCount <= 0) {
236
+ if (estimatedBytes <= 0) {
190
237
  continue;
191
238
  }
192
239
 
193
- const estimatedBytes: number = rowCount * averageRowSizeInBytes;
194
240
  const estimatedGigabytes: number = DiskSize.byteSizeToGB(estimatedBytes);
195
241
 
196
242
  if (!Number.isFinite(estimatedGigabytes) || estimatedGigabytes <= 0) {
@@ -344,6 +390,20 @@ export class Service extends DatabaseService<Model> {
344
390
 
345
391
  return value;
346
392
  }
393
+
394
+ private getAverageExceptionRowSize(): number {
395
+ const fallbackSize: number = 1024;
396
+
397
+ if (!Number.isFinite(AverageExceptionRowSizeInBytes)) {
398
+ return fallbackSize;
399
+ }
400
+
401
+ if (AverageExceptionRowSizeInBytes <= 0) {
402
+ return fallbackSize;
403
+ }
404
+
405
+ return AverageExceptionRowSizeInBytes;
406
+ }
347
407
  }
348
408
 
349
409
  export default new Service();
@@ -1,9 +1,12 @@
1
+ import path from "path";
2
+ import fs from "fs";
1
3
  import Execute from "../Execute";
2
4
  import LocalFile from "../LocalFile";
3
5
  import logger from "../Logger";
4
6
  import CaptureSpan from "../Telemetry/CaptureSpan";
5
7
  import CodeRepositoryFile from "./CodeRepositoryFile";
6
8
  import Dictionary from "../../../Types/Dictionary";
9
+ import BadDataException from "../../../Types/Exception/BadDataException";
7
10
 
8
11
  export default class CodeRepositoryUtil {
9
12
  @CaptureSpan()
@@ -112,15 +115,12 @@ export default class CodeRepositoryUtil {
112
115
  repoPath: string;
113
116
  filePath: string;
114
117
  }): Promise<string> {
115
- const path: string = LocalFile.sanitizeFilePath(
116
- `${data.repoPath}/${data.filePath}`,
118
+ const absolutePath: string = this.resolvePathWithinRepo(
119
+ data.repoPath,
120
+ data.filePath,
117
121
  );
118
122
 
119
- const command: string = `cat ${path}`;
120
-
121
- logger.debug("Executing command: " + command);
122
-
123
- return Execute.executeCommand(`${command}`);
123
+ return LocalFile.read(absolutePath);
124
124
  }
125
125
 
126
126
  // discard all changes in the working directory
@@ -183,13 +183,9 @@ export default class CodeRepositoryUtil {
183
183
  `${data.repoPath}/${data.directoryPath}`,
184
184
  );
185
185
 
186
- const command: string = `rm -rf ${totalPath}`;
186
+ logger.debug("Deleting directory: " + totalPath);
187
187
 
188
- logger.debug("Executing command: " + command);
189
-
190
- const stdout: string = await Execute.executeCommand(command);
191
-
192
- logger.debug(stdout);
188
+ await LocalFile.deleteDirectory(totalPath);
193
189
  }
194
190
 
195
191
  @CaptureSpan()
@@ -264,11 +260,13 @@ export default class CodeRepositoryUtil {
264
260
  repoPath: string;
265
261
  message: string;
266
262
  }): Promise<void> {
267
- const command: string = `cd ${data.repoPath} && git commit -m "${data.message}"`;
268
-
269
- logger.debug("Executing command: " + command);
263
+ logger.debug("Executing git commit");
270
264
 
271
- const stdout: string = await Execute.executeCommand(command);
265
+ const stdout: string = await Execute.executeCommandFile({
266
+ command: "git",
267
+ args: ["commit", "-m", data.message],
268
+ cwd: data.repoPath,
269
+ });
272
270
 
273
271
  logger.debug(stdout);
274
272
  }
@@ -318,11 +316,11 @@ export default class CodeRepositoryUtil {
318
316
 
319
317
  totalPath = LocalFile.sanitizeFilePath(totalPath); // clean up the path
320
318
 
321
- const output: string = await Execute.executeCommand(`ls ${totalPath}`);
319
+ const entries: Array<fs.Dirent> = await LocalFile.readDirectory(totalPath);
322
320
 
323
- const fileNames: Array<string> = output.split("\n");
324
-
325
- return fileNames;
321
+ return entries.map((entry: fs.Dirent) => {
322
+ return entry.name;
323
+ });
326
324
  }
327
325
 
328
326
  @CaptureSpan()
@@ -350,16 +348,12 @@ export default class CodeRepositoryUtil {
350
348
  totalPath = LocalFile.sanitizeFilePath(totalPath); // clean up the path
351
349
 
352
350
  const files: Dictionary<CodeRepositoryFile> = {};
353
- const output: string = await Execute.executeCommand(`ls ${totalPath}`);
354
-
355
- const fileNames: Array<string> = output.split("\n");
356
-
357
351
  const subDirectories: Array<string> = [];
358
352
 
359
- for (const fileName of fileNames) {
360
- if (fileName === "") {
361
- continue;
362
- }
353
+ const entries: Array<fs.Dirent> = await LocalFile.readDirectory(totalPath);
354
+
355
+ for (const entry of entries) {
356
+ const fileName: string = entry.name;
363
357
 
364
358
  const filePath: string = LocalFile.sanitizeFilePath(
365
359
  `${directoryPath}/${fileName}`,
@@ -369,13 +363,7 @@ export default class CodeRepositoryUtil {
369
363
  continue;
370
364
  }
371
365
 
372
- const isDirectory: boolean = (
373
- await Execute.executeCommand(
374
- `file "${LocalFile.sanitizeFilePath(`${totalPath}/${fileName}`)}"`,
375
- )
376
- ).includes("directory");
377
-
378
- if (isDirectory) {
366
+ if (entry.isDirectory()) {
379
367
  subDirectories.push(
380
368
  LocalFile.sanitizeFilePath(`${directoryPath}/${fileName}`),
381
369
  );
@@ -449,4 +437,24 @@ export default class CodeRepositoryUtil {
449
437
 
450
438
  return files;
451
439
  }
440
+
441
+ private static resolvePathWithinRepo(
442
+ repoPath: string,
443
+ targetPath: string,
444
+ ): string {
445
+ const root: string = path.resolve(repoPath);
446
+ const sanitizedTarget: string = LocalFile.sanitizeFilePath(
447
+ targetPath,
448
+ ).replace(/^\/+/, "");
449
+ const absoluteTarget: string = path.resolve(root, sanitizedTarget);
450
+
451
+ if (
452
+ absoluteTarget !== root &&
453
+ !absoluteTarget.startsWith(root + path.sep)
454
+ ) {
455
+ throw new BadDataException("File path is outside the repository");
456
+ }
457
+
458
+ return absoluteTarget;
459
+ }
452
460
  }
@@ -1,5 +1,5 @@
1
1
  import { PromiseRejectErrorFunction } from "../../Types/FunctionTypes";
2
- import { ExecException, exec } from "node:child_process";
2
+ import { ExecException, exec, execFile } from "node:child_process";
3
3
  import logger from "./Logger";
4
4
  import CaptureSpan from "./Telemetry/CaptureSpan";
5
5
 
@@ -24,4 +24,43 @@ export default class Execute {
24
24
  },
25
25
  );
26
26
  }
27
+
28
+ @CaptureSpan()
29
+ public static executeCommandFile(data: {
30
+ command: string;
31
+ args: Array<string>;
32
+ cwd: string;
33
+ }): Promise<string> {
34
+ return new Promise(
35
+ (
36
+ resolve: (output: string) => void,
37
+ reject: PromiseRejectErrorFunction,
38
+ ) => {
39
+ execFile(
40
+ data.command,
41
+ data.args,
42
+ {
43
+ cwd: data.cwd,
44
+ },
45
+ (err: ExecException | null, stdout: string, stderr: string) => {
46
+ if (err) {
47
+ logger.error(
48
+ `Error executing command: ${data.command} ${data.args.join(" ")}`,
49
+ );
50
+ logger.error(err);
51
+ logger.error(stdout);
52
+ logger.error(stderr);
53
+ return reject(err);
54
+ }
55
+
56
+ if (stderr) {
57
+ logger.debug(stderr);
58
+ }
59
+
60
+ return resolve(stdout);
61
+ },
62
+ );
63
+ },
64
+ );
65
+ }
27
66
  }
@@ -71,6 +71,46 @@ export default class LocalFile {
71
71
  );
72
72
  }
73
73
 
74
+ @CaptureSpan()
75
+ public static async deleteDirectory(path: string): Promise<void> {
76
+ if ((await this.doesDirectoryExist(path)) === false) {
77
+ return;
78
+ }
79
+
80
+ return new Promise(
81
+ (resolve: VoidFunction, reject: PromiseRejectErrorFunction) => {
82
+ fs.rm(path, { recursive: true, force: true }, (err: Error | null) => {
83
+ if (err) {
84
+ return reject(err);
85
+ }
86
+ resolve();
87
+ });
88
+ },
89
+ );
90
+ }
91
+
92
+ @CaptureSpan()
93
+ public static async readDirectory(path: string): Promise<Array<fs.Dirent>> {
94
+ return new Promise(
95
+ (
96
+ resolve: (entries: Array<fs.Dirent>) => void,
97
+ reject: PromiseRejectErrorFunction,
98
+ ) => {
99
+ fs.readdir(
100
+ path,
101
+ { withFileTypes: true },
102
+ (err: Error | null, entries: Array<fs.Dirent>) => {
103
+ if (err) {
104
+ return reject(err);
105
+ }
106
+
107
+ resolve(entries);
108
+ },
109
+ );
110
+ },
111
+ );
112
+ }
113
+
74
114
  @CaptureSpan()
75
115
  public static async getListOfDirectories(path: string): Promise<string[]> {
76
116
  return new Promise(
@@ -160,10 +160,11 @@ export default class TelemetryUtil {
160
160
 
161
161
  const keyWithPrefix: string = `${prefixKeysWithString}${attribute["key"]}`;
162
162
 
163
- const value = this.getAttributeValues(
164
- keyWithPrefix,
165
- attribute["value"],
166
- );
163
+ const value:
164
+ | AttributeType
165
+ | Dictionary<AttributeType | Array<AttributeType>>
166
+ | Array<AttributeType>
167
+ | null = this.getAttributeValues(keyWithPrefix, attribute["value"]);
167
168
 
168
169
  if (value === null) {
169
170
  finalObj[keyWithPrefix] = null;
@@ -237,7 +238,10 @@ export default class TelemetryUtil {
237
238
  "values"
238
239
  ] as JSONArray;
239
240
  finalObj = values.map((v: JSONObject) => {
240
- return this.getAttributeValues(prefixKeysWithString, v) as AttributeType;
241
+ return this.getAttributeValues(
242
+ prefixKeysWithString,
243
+ v,
244
+ ) as AttributeType;
241
245
  }) as Array<AttributeType>;
242
246
  } else if (
243
247
  jsonValue["mapValue"] &&
@@ -247,14 +251,16 @@ export default class TelemetryUtil {
247
251
  "fields"
248
252
  ] as JSONObject;
249
253
 
250
- const flattenedFields: Dictionary<AttributeType | Array<AttributeType>> =
251
- {};
254
+ const flattenedFields: Dictionary<
255
+ AttributeType | Array<AttributeType>
256
+ > = {};
252
257
  for (const key in fields) {
253
258
  const nestedPrefix: string = `${prefixKeysWithString}.${key}`;
254
- const nestedValue = this.getAttributeValues(
255
- nestedPrefix,
256
- fields[key],
257
- );
259
+ const nestedValue:
260
+ | AttributeType
261
+ | Dictionary<AttributeType | Array<AttributeType>>
262
+ | Array<AttributeType>
263
+ | null = this.getAttributeValues(nestedPrefix, fields[key]);
258
264
 
259
265
  if (nestedValue === null) {
260
266
  flattenedFields[nestedPrefix] = null;
package/Types/Date.ts CHANGED
@@ -1453,4 +1453,9 @@ export default class OneUptimeDate {
1453
1453
  date = this.fromString(date);
1454
1454
  return moment(date).format("YYYY-MM-DD HH:mm:ss");
1455
1455
  }
1456
+
1457
+ public static toClickhouseDateTime(date: Date | string): string {
1458
+ const parsedDate: Date = this.fromString(date);
1459
+ return moment(parsedDate).utc().format("YYYY-MM-DD HH:mm:ss");
1460
+ }
1456
1461
  }
@@ -435,7 +435,7 @@ TelemetryUsageBilling = __decorate([
435
435
  singularName: "Telemetry Usage Billing",
436
436
  pluralName: "Telemetry Usage Billings",
437
437
  icon: IconProp.Billing,
438
- tableDescription: "Stores historical usage billing data for your telemetry data like Logs, Metrics, and Traces.",
438
+ tableDescription: "Stores historical usage billing data for your telemetry data like Logs, Metrics, Traces, and Exceptions.",
439
439
  }),
440
440
  Entity({
441
441
  name: "TelemetryUsageBilling",
@@ -1 +1 @@
1
- {"version":3,"file":"TelemetryUsageBilling.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/TelemetryUsageBilling.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TelemetryUsageBilling.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/TelemetryUsageBilling.ts"],"names":[],"mappings":"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"}
@@ -127,6 +127,7 @@ export const DisableTelemetry = process.env["DISABLE_TELEMETRY"] === "true";
127
127
  export const AverageSpanRowSizeInBytes = parsePositiveNumberFromEnv("AVERAGE_SPAN_ROW_SIZE_IN_BYTES", 1024);
128
128
  export const AverageLogRowSizeInBytes = parsePositiveNumberFromEnv("AVERAGE_LOG_ROW_SIZE_IN_BYTES", 1024);
129
129
  export const AverageMetricRowSizeInBytes = parsePositiveNumberFromEnv("AVERAGE_METRIC_ROW_SIZE_IN_BYTES", 1024);
130
+ export const AverageExceptionRowSizeInBytes = parsePositiveNumberFromEnv("AVERAGE_EXCEPTION_ROW_SIZE_IN_BYTES", 1024);
130
131
  export const SlackAppClientId = process.env["SLACK_APP_CLIENT_ID"] || null;
131
132
  export const SlackAppClientSecret = process.env["SLACK_APP_CLIENT_SECRET"] || null;
132
133
  export const SlackAppSigningSecret = process.env["SLACK_APP_SIGNING_SECRET"] || null;