@oneuptime/common 10.0.30 → 10.0.33

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 (130) hide show
  1. package/Models/AnalyticsModels/ExceptionInstance.ts +29 -4
  2. package/Models/AnalyticsModels/Log.ts +110 -4
  3. package/Models/AnalyticsModels/Metric.ts +16 -9
  4. package/Models/AnalyticsModels/MonitorLog.ts +4 -2
  5. package/Models/AnalyticsModels/Span.ts +79 -6
  6. package/Models/DatabaseModels/Index.ts +8 -0
  7. package/Models/DatabaseModels/LogDropFilter.ts +480 -0
  8. package/Models/DatabaseModels/LogPipeline.ts +412 -0
  9. package/Models/DatabaseModels/LogPipelineProcessor.ts +430 -0
  10. package/Models/DatabaseModels/LogScrubRule.ts +516 -0
  11. package/Server/API/TelemetryAPI.ts +261 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1773402621107-MigrationName.ts +131 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.ts +79 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.ts +41 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/1773676206197-MigrationName.ts +57 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  17. package/Server/Services/AnalyticsDatabaseService.ts +61 -0
  18. package/Server/Services/LogAggregationService.ts +238 -1
  19. package/Server/Services/LogDropFilterService.ts +10 -0
  20. package/Server/Services/LogPipelineProcessorService.ts +10 -0
  21. package/Server/Services/LogPipelineService.ts +10 -0
  22. package/Server/Services/LogScrubRuleService.ts +10 -0
  23. package/Server/Services/TelemetryAttributeService.ts +4 -6
  24. package/Server/Utils/AnalyticsDatabase/Statement.ts +15 -1
  25. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +126 -11
  26. package/Tests/Server/Services/LogAggregationService.test.ts +3 -2
  27. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +9 -0
  28. package/Types/AnalyticsDatabase/TableColumnType.ts +4 -0
  29. package/Types/Date.ts +22 -0
  30. package/Types/Log/LogDropFilterAction.ts +6 -0
  31. package/Types/Log/LogPipelineProcessorType.ts +44 -0
  32. package/Types/Log/LogScrubAction.ts +7 -0
  33. package/Types/Log/LogScrubPatternType.ts +10 -0
  34. package/Types/Permission.ts +174 -0
  35. package/UI/Components/LogsViewer/LogsViewer.tsx +152 -4
  36. package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +92 -0
  37. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +332 -117
  38. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +294 -274
  39. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +513 -234
  40. package/UI/Components/LogsViewer/components/LogsFilterCard.tsx +37 -29
  41. package/UI/Components/LogsViewer/components/LogsTable.tsx +6 -1
  42. package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +106 -0
  43. package/UI/Utils/LogExport.ts +160 -0
  44. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +28 -4
  45. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  46. package/build/dist/Models/AnalyticsModels/Log.js +97 -4
  47. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  48. package/build/dist/Models/AnalyticsModels/Metric.js +16 -9
  49. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  50. package/build/dist/Models/AnalyticsModels/MonitorLog.js +4 -2
  51. package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
  52. package/build/dist/Models/AnalyticsModels/Span.js +73 -6
  53. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  54. package/build/dist/Models/DatabaseModels/Index.js +8 -0
  55. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  56. package/build/dist/Models/DatabaseModels/LogDropFilter.js +508 -0
  57. package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -0
  58. package/build/dist/Models/DatabaseModels/LogPipeline.js +438 -0
  59. package/build/dist/Models/DatabaseModels/LogPipeline.js.map +1 -0
  60. package/build/dist/Models/DatabaseModels/LogPipelineProcessor.js +452 -0
  61. package/build/dist/Models/DatabaseModels/LogPipelineProcessor.js.map +1 -0
  62. package/build/dist/Models/DatabaseModels/LogScrubRule.js +545 -0
  63. package/build/dist/Models/DatabaseModels/LogScrubRule.js.map +1 -0
  64. package/build/dist/Server/API/TelemetryAPI.js +155 -0
  65. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  66. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773402621107-MigrationName.js +52 -0
  67. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773402621107-MigrationName.js.map +1 -0
  68. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.js +34 -0
  69. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.js.map +1 -0
  70. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.js +22 -0
  71. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.js.map +1 -0
  72. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773676206197-MigrationName.js +26 -0
  73. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773676206197-MigrationName.js.map +1 -0
  74. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  75. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  76. package/build/dist/Server/Services/AnalyticsDatabaseService.js +30 -0
  77. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  78. package/build/dist/Server/Services/LogAggregationService.js +188 -1
  79. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  80. package/build/dist/Server/Services/LogDropFilterService.js +9 -0
  81. package/build/dist/Server/Services/LogDropFilterService.js.map +1 -0
  82. package/build/dist/Server/Services/LogPipelineProcessorService.js +9 -0
  83. package/build/dist/Server/Services/LogPipelineProcessorService.js.map +1 -0
  84. package/build/dist/Server/Services/LogPipelineService.js +9 -0
  85. package/build/dist/Server/Services/LogPipelineService.js.map +1 -0
  86. package/build/dist/Server/Services/LogScrubRuleService.js +9 -0
  87. package/build/dist/Server/Services/LogScrubRuleService.js.map +1 -0
  88. package/build/dist/Server/Services/TelemetryAttributeService.js +4 -6
  89. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  90. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +13 -1
  91. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  92. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +89 -2
  93. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  94. package/build/dist/Tests/Server/Services/LogAggregationService.test.js +3 -2
  95. package/build/dist/Tests/Server/Services/LogAggregationService.test.js.map +1 -1
  96. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +10 -0
  97. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -0
  98. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js +4 -0
  99. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js.map +1 -1
  100. package/build/dist/Types/Date.js +16 -0
  101. package/build/dist/Types/Date.js.map +1 -1
  102. package/build/dist/Types/Log/LogDropFilterAction.js +7 -0
  103. package/build/dist/Types/Log/LogDropFilterAction.js.map +1 -0
  104. package/build/dist/Types/Log/LogPipelineProcessorType.js +9 -0
  105. package/build/dist/Types/Log/LogPipelineProcessorType.js.map +1 -0
  106. package/build/dist/Types/Log/LogScrubAction.js +8 -0
  107. package/build/dist/Types/Log/LogScrubAction.js.map +1 -0
  108. package/build/dist/Types/Log/LogScrubPatternType.js +11 -0
  109. package/build/dist/Types/Log/LogScrubPatternType.js.map +1 -0
  110. package/build/dist/Types/Permission.js +152 -0
  111. package/build/dist/Types/Permission.js.map +1 -1
  112. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +124 -11
  113. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  114. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +36 -0
  115. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -0
  116. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +114 -4
  117. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  118. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +17 -5
  119. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  120. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +229 -122
  121. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  122. package/build/dist/UI/Components/LogsViewer/components/LogsFilterCard.js +5 -4
  123. package/build/dist/UI/Components/LogsViewer/components/LogsFilterCard.js.map +1 -1
  124. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +4 -1
  125. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  126. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +28 -0
  127. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
  128. package/build/dist/UI/Utils/LogExport.js +129 -0
  129. package/build/dist/UI/Utils/LogExport.js.map +1 -0
  130. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
2
2
  import Route from "../../Types/API/Route";
3
3
  import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
4
+ import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
4
5
  import AnalyticsTableColumn, {
5
6
  SkipIndexType,
6
7
  } from "../../Types/AnalyticsDatabase/TableColumn";
@@ -63,7 +64,7 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
63
64
  title: "Time",
64
65
  description: "When was the log created?",
65
66
  required: true,
66
- type: TableColumnType.Date,
67
+ type: TableColumnType.DateTime64,
67
68
  accessControl: {
68
69
  read: [
69
70
  Permission.ProjectOwner,
@@ -328,6 +329,12 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
328
329
  description: "Name of the span",
329
330
  required: false,
330
331
  type: TableColumnType.Text,
332
+ skipIndex: {
333
+ name: "idx_span_name",
334
+ type: SkipIndexType.TokenBF,
335
+ params: [10240, 3, 0],
336
+ granularity: 4,
337
+ },
331
338
  accessControl: {
332
339
  read: [
333
340
  Permission.ProjectOwner,
@@ -352,6 +359,12 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
352
359
  "Service version / release from service.version resource attribute",
353
360
  required: false,
354
361
  type: TableColumnType.Text,
362
+ skipIndex: {
363
+ name: "idx_release",
364
+ type: SkipIndexType.Set,
365
+ params: [100],
366
+ granularity: 4,
367
+ },
355
368
  accessControl: {
356
369
  read: [
357
370
  Permission.ProjectOwner,
@@ -376,6 +389,12 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
376
389
  "Deployment environment from deployment.environment resource attribute",
377
390
  required: false,
378
391
  type: TableColumnType.Text,
392
+ skipIndex: {
393
+ name: "idx_environment",
394
+ type: SkipIndexType.Set,
395
+ params: [10],
396
+ granularity: 4,
397
+ },
379
398
  accessControl: {
380
399
  read: [
381
400
  Permission.ProjectOwner,
@@ -422,7 +441,7 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
422
441
  description: "Attributes",
423
442
  required: true,
424
443
  defaultValue: {},
425
- type: TableColumnType.JSON,
444
+ type: TableColumnType.MapStringString,
426
445
  accessControl: {
427
446
  read: [
428
447
  Permission.ProjectOwner,
@@ -451,7 +470,7 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
451
470
  });
452
471
 
453
472
  super({
454
- tableName: "ExceptionItem",
473
+ tableName: AnalyticsTableName.ExceptionInstance,
455
474
  tableEngine: AnalyticsTableEngine.MergeTree,
456
475
  singularName: "Exception Instance",
457
476
  pluralName: "Exception Instances",
@@ -505,7 +524,13 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
505
524
  attributesColumn,
506
525
  retentionDateColumn,
507
526
  ],
508
- projections: [],
527
+ projections: [
528
+ {
529
+ name: "proj_exception_group",
530
+ query:
531
+ "SELECT projectId, serviceId, fingerprint, exceptionType, count() AS cnt, max(time) AS last_seen GROUP BY projectId, serviceId, fingerprint, exceptionType",
532
+ },
533
+ ],
509
534
  sortKeys: ["projectId", "time", "serviceId", "fingerprint"],
510
535
  primaryKeys: ["projectId", "time", "serviceId", "fingerprint"],
511
536
  partitionKey: "sipHash64(projectId) % 16",
@@ -1,6 +1,7 @@
1
1
  import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
2
2
  import Route from "../../Types/API/Route";
3
3
  import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
4
+ import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
4
5
  import AnalyticsTableColumn, {
5
6
  SkipIndexType,
6
7
  } from "../../Types/AnalyticsDatabase/TableColumn";
@@ -64,7 +65,7 @@ export default class Log extends AnalyticsBaseModel {
64
65
  title: "Time",
65
66
  description: "When was the log created?",
66
67
  required: true,
67
- type: TableColumnType.Date,
68
+ type: TableColumnType.DateTime64,
68
69
  accessControl: {
69
70
  read: [
70
71
  Permission.ProjectOwner,
@@ -165,7 +166,7 @@ export default class Log extends AnalyticsBaseModel {
165
166
  description: "Attributes",
166
167
  required: true,
167
168
  defaultValue: {},
168
- type: TableColumnType.JSON,
169
+ type: TableColumnType.MapStringString,
169
170
  accessControl: {
170
171
  read: [
171
172
  Permission.ProjectOwner,
@@ -298,6 +299,78 @@ export default class Log extends AnalyticsBaseModel {
298
299
  },
299
300
  });
300
301
 
302
+ const observedTimeUnixNanoColumn: AnalyticsTableColumn =
303
+ new AnalyticsTableColumn({
304
+ key: "observedTimeUnixNano",
305
+ title: "Observed Time (in Unix Nano)",
306
+ description:
307
+ "When the log was observed/collected by the telemetry pipeline",
308
+ required: false,
309
+ type: TableColumnType.LongNumber,
310
+ accessControl: {
311
+ read: [
312
+ Permission.ProjectOwner,
313
+ Permission.ProjectAdmin,
314
+ Permission.ProjectMember,
315
+ Permission.ReadTelemetryServiceLog,
316
+ ],
317
+ create: [
318
+ Permission.ProjectOwner,
319
+ Permission.ProjectAdmin,
320
+ Permission.ProjectMember,
321
+ Permission.CreateTelemetryServiceLog,
322
+ ],
323
+ update: [],
324
+ },
325
+ });
326
+
327
+ const droppedAttributesCountColumn: AnalyticsTableColumn =
328
+ new AnalyticsTableColumn({
329
+ key: "droppedAttributesCount",
330
+ title: "Dropped Attributes Count",
331
+ description: "Number of attributes that were dropped during collection",
332
+ required: false,
333
+ type: TableColumnType.Number,
334
+ accessControl: {
335
+ read: [
336
+ Permission.ProjectOwner,
337
+ Permission.ProjectAdmin,
338
+ Permission.ProjectMember,
339
+ Permission.ReadTelemetryServiceLog,
340
+ ],
341
+ create: [
342
+ Permission.ProjectOwner,
343
+ Permission.ProjectAdmin,
344
+ Permission.ProjectMember,
345
+ Permission.CreateTelemetryServiceLog,
346
+ ],
347
+ update: [],
348
+ },
349
+ });
350
+
351
+ const flagsColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
352
+ key: "flags",
353
+ title: "Flags",
354
+ description: "Log record flags (e.g., W3C trace flags)",
355
+ required: false,
356
+ type: TableColumnType.Number,
357
+ accessControl: {
358
+ read: [
359
+ Permission.ProjectOwner,
360
+ Permission.ProjectAdmin,
361
+ Permission.ProjectMember,
362
+ Permission.ReadTelemetryServiceLog,
363
+ ],
364
+ create: [
365
+ Permission.ProjectOwner,
366
+ Permission.ProjectAdmin,
367
+ Permission.ProjectMember,
368
+ Permission.CreateTelemetryServiceLog,
369
+ ],
370
+ update: [],
371
+ },
372
+ });
373
+
301
374
  const retentionDateColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
302
375
  key: "retentionDate",
303
376
  title: "Retention Date",
@@ -309,7 +382,7 @@ export default class Log extends AnalyticsBaseModel {
309
382
  });
310
383
 
311
384
  super({
312
- tableName: "LogItem",
385
+ tableName: AnalyticsTableName.Log,
313
386
  tableEngine: AnalyticsTableEngine.MergeTree,
314
387
  singularName: "Log",
315
388
  accessControl: {
@@ -352,9 +425,18 @@ export default class Log extends AnalyticsBaseModel {
352
425
  traceIdColumn,
353
426
  spanIdColumn,
354
427
  bodyColumn,
428
+ observedTimeUnixNanoColumn,
429
+ droppedAttributesCountColumn,
430
+ flagsColumn,
355
431
  retentionDateColumn,
356
432
  ],
357
- projections: [],
433
+ projections: [
434
+ {
435
+ name: "proj_severity_histogram",
436
+ query:
437
+ "SELECT projectId, severityText, toStartOfInterval(time, INTERVAL 1 MINUTE) AS minute, count() AS cnt GROUP BY projectId, severityText, minute",
438
+ },
439
+ ],
358
440
  sortKeys: ["projectId", "time", "serviceId"],
359
441
  primaryKeys: ["projectId", "time", "serviceId"],
360
442
  partitionKey: "sipHash64(projectId) % 16",
@@ -450,6 +532,30 @@ export default class Log extends AnalyticsBaseModel {
450
532
  this.setColumnValue("spanId", v);
451
533
  }
452
534
 
535
+ public get observedTimeUnixNano(): number | undefined {
536
+ return this.getColumnValue("observedTimeUnixNano") as number | undefined;
537
+ }
538
+
539
+ public set observedTimeUnixNano(v: number | undefined) {
540
+ this.setColumnValue("observedTimeUnixNano", v);
541
+ }
542
+
543
+ public get droppedAttributesCount(): number | undefined {
544
+ return this.getColumnValue("droppedAttributesCount") as number | undefined;
545
+ }
546
+
547
+ public set droppedAttributesCount(v: number | undefined) {
548
+ this.setColumnValue("droppedAttributesCount", v);
549
+ }
550
+
551
+ public get flags(): number | undefined {
552
+ return this.getColumnValue("flags") as number | undefined;
553
+ }
554
+
555
+ public set flags(v: number | undefined) {
556
+ this.setColumnValue("flags", v);
557
+ }
558
+
453
559
  public get retentionDate(): Date | undefined {
454
560
  return this.getColumnValue("retentionDate") as Date | undefined;
455
561
  }
@@ -1,6 +1,7 @@
1
1
  import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
2
2
  import Route from "../../Types/API/Route";
3
3
  import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
4
+ import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
4
5
  import AnalyticsTableColumn, {
5
6
  SkipIndexType,
6
7
  } from "../../Types/AnalyticsDatabase/TableColumn";
@@ -169,6 +170,12 @@ export default class Metric extends AnalyticsBaseModel {
169
170
  description: "Metric Point Type of this Metric",
170
171
  required: false,
171
172
  type: TableColumnType.Text,
173
+ skipIndex: {
174
+ name: "idx_metric_point_type",
175
+ type: SkipIndexType.Set,
176
+ params: [5],
177
+ granularity: 4,
178
+ },
172
179
  accessControl: {
173
180
  read: [
174
181
  Permission.ProjectOwner,
@@ -192,7 +199,7 @@ export default class Metric extends AnalyticsBaseModel {
192
199
  title: "Time",
193
200
  description: "When did the Metric happen?",
194
201
  required: true,
195
- type: TableColumnType.Date,
202
+ type: TableColumnType.DateTime64,
196
203
  accessControl: {
197
204
  read: [
198
205
  Permission.ProjectOwner,
@@ -215,7 +222,7 @@ export default class Metric extends AnalyticsBaseModel {
215
222
  title: "Start Time",
216
223
  description: "When did the Metric happen?",
217
224
  required: false,
218
- type: TableColumnType.Date,
225
+ type: TableColumnType.DateTime64,
219
226
  accessControl: {
220
227
  read: [
221
228
  Permission.ProjectOwner,
@@ -286,7 +293,7 @@ export default class Metric extends AnalyticsBaseModel {
286
293
  title: "Attributes",
287
294
  description: "Attributes",
288
295
  required: true,
289
- type: TableColumnType.JSON,
296
+ type: TableColumnType.MapStringString,
290
297
  defaultValue: {},
291
298
  accessControl: {
292
299
  read: [
@@ -357,7 +364,7 @@ export default class Metric extends AnalyticsBaseModel {
357
364
  title: "Count",
358
365
  description: "Count",
359
366
  required: false,
360
- type: TableColumnType.Number,
367
+ type: TableColumnType.BigNumber,
361
368
  accessControl: {
362
369
  read: [
363
370
  Permission.ProjectOwner,
@@ -473,7 +480,7 @@ export default class Metric extends AnalyticsBaseModel {
473
480
  description: "Bucket Counts",
474
481
  required: true,
475
482
  defaultValue: [],
476
- type: TableColumnType.ArrayNumber,
483
+ type: TableColumnType.ArrayBigNumber,
477
484
  accessControl: {
478
485
  read: [
479
486
  Permission.ProjectOwner,
@@ -498,7 +505,7 @@ export default class Metric extends AnalyticsBaseModel {
498
505
  description: "Explicit Bonds",
499
506
  required: true,
500
507
  defaultValue: [],
501
- type: TableColumnType.ArrayNumber,
508
+ type: TableColumnType.ArrayBigNumber,
502
509
  accessControl: {
503
510
  read: [
504
511
  Permission.ProjectOwner,
@@ -528,7 +535,7 @@ export default class Metric extends AnalyticsBaseModel {
528
535
  });
529
536
 
530
537
  super({
531
- tableName: "MetricItem",
538
+ tableName: AnalyticsTableName.Metric,
532
539
  tableEngine: AnalyticsTableEngine.MergeTree,
533
540
  singularName: "Metric",
534
541
  pluralName: "Metrics",
@@ -583,8 +590,8 @@ export default class Metric extends AnalyticsBaseModel {
583
590
  retentionDateColumn,
584
591
  ],
585
592
  projections: [],
586
- sortKeys: ["projectId", "time", "serviceId"],
587
- primaryKeys: ["projectId", "time", "serviceId"],
593
+ sortKeys: ["projectId", "name", "serviceId", "time"],
594
+ primaryKeys: ["projectId", "name", "serviceId", "time"],
588
595
  partitionKey: "sipHash64(projectId) % 16",
589
596
  ttlExpression: "retentionDate DELETE",
590
597
  });
@@ -1,6 +1,7 @@
1
1
  import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
2
2
  import Route from "../../Types/API/Route";
3
3
  import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
4
+ import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
4
5
  import AnalyticsTableColumn from "../../Types/AnalyticsDatabase/TableColumn";
5
6
  import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
6
7
  import { JSONObject } from "../../Types/JSON";
@@ -61,7 +62,7 @@ export default class MonitorLog extends AnalyticsBaseModel {
61
62
  title: "Time",
62
63
  description: "When was the log created?",
63
64
  required: true,
64
- type: TableColumnType.Date,
65
+ type: TableColumnType.DateTime64,
65
66
  accessControl: {
66
67
  read: [
67
68
  Permission.ProjectOwner,
@@ -86,6 +87,7 @@ export default class MonitorLog extends AnalyticsBaseModel {
86
87
  required: true,
87
88
  defaultValue: {},
88
89
  type: TableColumnType.JSON,
90
+ codec: { codec: "ZSTD", level: 3 },
89
91
  accessControl: {
90
92
  read: [
91
93
  Permission.ProjectOwner,
@@ -114,7 +116,7 @@ export default class MonitorLog extends AnalyticsBaseModel {
114
116
  });
115
117
 
116
118
  super({
117
- tableName: "MonitorLog",
119
+ tableName: AnalyticsTableName.MonitorLog,
118
120
  tableEngine: AnalyticsTableEngine.MergeTree,
119
121
  singularName: "Monitor Log",
120
122
  accessControl: {
@@ -1,6 +1,7 @@
1
1
  import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
2
2
  import Route from "../../Types/API/Route";
3
3
  import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
4
+ import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
4
5
  import AnalyticsTableColumn, {
5
6
  SkipIndexType,
6
7
  } from "../../Types/AnalyticsDatabase/TableColumn";
@@ -95,7 +96,7 @@ export default class Span extends AnalyticsBaseModel {
95
96
  title: "Start Time",
96
97
  description: "When did the span start?",
97
98
  required: true,
98
- type: TableColumnType.Date,
99
+ type: TableColumnType.DateTime64,
99
100
  accessControl: {
100
101
  read: [
101
102
  Permission.ProjectOwner,
@@ -118,7 +119,7 @@ export default class Span extends AnalyticsBaseModel {
118
119
  title: "End Time",
119
120
  description: "When did the span end?",
120
121
  required: true,
121
- type: TableColumnType.Date,
122
+ type: TableColumnType.DateTime64,
122
123
  accessControl: {
123
124
  read: [
124
125
  Permission.ProjectOwner,
@@ -143,6 +144,7 @@ export default class Span extends AnalyticsBaseModel {
143
144
  description: "When did the span start?",
144
145
  required: true,
145
146
  type: TableColumnType.LongNumber,
147
+ codec: { codec: "ZSTD", level: 1 },
146
148
  accessControl: {
147
149
  read: [
148
150
  Permission.ProjectOwner,
@@ -167,6 +169,7 @@ export default class Span extends AnalyticsBaseModel {
167
169
  description: "How long did the span last?",
168
170
  required: true,
169
171
  type: TableColumnType.LongNumber,
172
+ codec: { codec: "ZSTD", level: 1 },
170
173
  accessControl: {
171
174
  read: [
172
175
  Permission.ProjectOwner,
@@ -191,6 +194,7 @@ export default class Span extends AnalyticsBaseModel {
191
194
  description: "When did the span end?",
192
195
  required: true,
193
196
  type: TableColumnType.LongNumber,
197
+ codec: { codec: "ZSTD", level: 1 },
194
198
  accessControl: {
195
199
  read: [
196
200
  Permission.ProjectOwner,
@@ -214,6 +218,7 @@ export default class Span extends AnalyticsBaseModel {
214
218
  description: "ID of the trace",
215
219
  required: true,
216
220
  type: TableColumnType.Text,
221
+ codec: { codec: "ZSTD", level: 1 },
217
222
  skipIndex: {
218
223
  name: "idx_trace_id",
219
224
  type: SkipIndexType.BloomFilter,
@@ -243,6 +248,7 @@ export default class Span extends AnalyticsBaseModel {
243
248
  description: "ID of the span",
244
249
  required: true,
245
250
  type: TableColumnType.Text,
251
+ codec: { codec: "ZSTD", level: 1 },
246
252
  skipIndex: {
247
253
  name: "idx_span_id",
248
254
  type: SkipIndexType.BloomFilter,
@@ -272,6 +278,13 @@ export default class Span extends AnalyticsBaseModel {
272
278
  description: "ID of the parent span",
273
279
  required: false,
274
280
  type: TableColumnType.Text,
281
+ codec: { codec: "ZSTD", level: 1 },
282
+ skipIndex: {
283
+ name: "idx_parent_span_id",
284
+ type: SkipIndexType.BloomFilter,
285
+ params: [0.01],
286
+ granularity: 1,
287
+ },
275
288
  accessControl: {
276
289
  read: [
277
290
  Permission.ProjectOwner,
@@ -318,7 +331,7 @@ export default class Span extends AnalyticsBaseModel {
318
331
  description: "Attributes",
319
332
  required: true,
320
333
  defaultValue: {},
321
- type: TableColumnType.JSON,
334
+ type: TableColumnType.MapStringString,
322
335
  accessControl: {
323
336
  read: [
324
337
  Permission.ProjectOwner,
@@ -367,6 +380,7 @@ export default class Span extends AnalyticsBaseModel {
367
380
  required: true,
368
381
  defaultValue: [],
369
382
  type: TableColumnType.JSONArray,
383
+ codec: { codec: "ZSTD", level: 3 },
370
384
  accessControl: {
371
385
  read: [
372
386
  Permission.ProjectOwner,
@@ -389,8 +403,9 @@ export default class Span extends AnalyticsBaseModel {
389
403
  title: "Links",
390
404
  description: "Span Links",
391
405
  required: true,
392
- defaultValue: {},
406
+ defaultValue: [],
393
407
  type: TableColumnType.JSON,
408
+ codec: { codec: "ZSTD", level: 3 },
394
409
  accessControl: {
395
410
  read: [
396
411
  Permission.ProjectOwner,
@@ -443,6 +458,7 @@ export default class Span extends AnalyticsBaseModel {
443
458
  description: "Status Message",
444
459
  required: false,
445
460
  type: TableColumnType.Text,
461
+ codec: { codec: "ZSTD", level: 1 },
446
462
  accessControl: {
447
463
  read: [
448
464
  Permission.ProjectOwner,
@@ -495,6 +511,43 @@ export default class Span extends AnalyticsBaseModel {
495
511
  description: "Kind of the span",
496
512
  required: false,
497
513
  type: TableColumnType.Text,
514
+ skipIndex: {
515
+ name: "idx_kind",
516
+ type: SkipIndexType.Set,
517
+ params: [5],
518
+ granularity: 4,
519
+ },
520
+ accessControl: {
521
+ read: [
522
+ Permission.ProjectOwner,
523
+ Permission.ProjectAdmin,
524
+ Permission.ProjectMember,
525
+ Permission.ReadTelemetryServiceTraces,
526
+ ],
527
+ create: [
528
+ Permission.ProjectOwner,
529
+ Permission.ProjectAdmin,
530
+ Permission.ProjectMember,
531
+ Permission.CreateTelemetryServiceTraces,
532
+ ],
533
+ update: [],
534
+ },
535
+ });
536
+
537
+ const hasExceptionColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
538
+ key: "hasException",
539
+ title: "Has Exception",
540
+ description:
541
+ "Whether this span contains an exception event, populated at ingest time for fast error filtering",
542
+ required: true,
543
+ defaultValue: false,
544
+ type: TableColumnType.Boolean,
545
+ skipIndex: {
546
+ name: "idx_has_exception",
547
+ type: SkipIndexType.Set,
548
+ params: [2],
549
+ granularity: 4,
550
+ },
498
551
  accessControl: {
499
552
  read: [
500
553
  Permission.ProjectOwner,
@@ -523,7 +576,7 @@ export default class Span extends AnalyticsBaseModel {
523
576
  });
524
577
 
525
578
  super({
526
- tableName: "SpanItem",
579
+ tableName: AnalyticsTableName.Span,
527
580
  tableEngine: AnalyticsTableEngine.MergeTree,
528
581
  singularName: "Span",
529
582
  pluralName: "Spans",
@@ -574,9 +627,21 @@ export default class Span extends AnalyticsBaseModel {
574
627
  statusMessageColumn,
575
628
  nameColumn,
576
629
  kindColumn,
630
+ hasExceptionColumn,
577
631
  retentionDateColumn,
578
632
  ],
579
- projections: [],
633
+ projections: [
634
+ {
635
+ name: "proj_agg_by_service",
636
+ query:
637
+ "SELECT projectId, serviceId, toStartOfMinute(startTime) AS minute, count() AS cnt, avg(durationUnixNano) AS avg_duration, quantile(0.99)(durationUnixNano) AS p99_duration GROUP BY projectId, serviceId, minute",
638
+ },
639
+ {
640
+ name: "proj_trace_by_id",
641
+ query:
642
+ "SELECT projectId, traceId, startTime, serviceId, spanId, parentSpanId, name, durationUnixNano, statusCode, hasException ORDER BY (projectId, traceId, startTime)",
643
+ },
644
+ ],
580
645
  sortKeys: ["projectId", "startTime", "serviceId", "traceId"],
581
646
  primaryKeys: ["projectId", "startTime", "serviceId", "traceId"],
582
647
  partitionKey: "sipHash64(projectId) % 16",
@@ -736,6 +801,14 @@ export default class Span extends AnalyticsBaseModel {
736
801
  this.setColumnValue("statusMessage", v);
737
802
  }
738
803
 
804
+ public get hasException(): boolean | undefined {
805
+ return this.getColumnValue("hasException") as boolean | undefined;
806
+ }
807
+
808
+ public set hasException(v: boolean | undefined) {
809
+ this.setColumnValue("hasException", v);
810
+ }
811
+
739
812
  public get retentionDate(): Date | undefined {
740
813
  return this.getColumnValue("retentionDate") as Date | undefined;
741
814
  }
@@ -37,6 +37,10 @@ import IncidentTemplateOwnerUser from "./IncidentTemplateOwnerUser";
37
37
  //Labels.
38
38
  import Label from "./Label";
39
39
  import LogSavedView from "./LogSavedView";
40
+ import LogPipeline from "./LogPipeline";
41
+ import LogPipelineProcessor from "./LogPipelineProcessor";
42
+ import LogDropFilter from "./LogDropFilter";
43
+ import LogScrubRule from "./LogScrubRule";
40
44
  // Monitors
41
45
  import Monitor from "./Monitor";
42
46
  import MonitorCustomField from "./MonitorCustomField";
@@ -252,6 +256,10 @@ const AllModelTypes: Array<{
252
256
  ApiKey,
253
257
  Label,
254
258
  LogSavedView,
259
+ LogPipeline,
260
+ LogPipelineProcessor,
261
+ LogDropFilter,
262
+ LogScrubRule,
255
263
  ApiKeyPermission,
256
264
  ProjectSmtpConfig,
257
265
  StatusPage,