@oneuptime/common 10.4.9 → 10.4.11

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 (107) hide show
  1. package/Models/AnalyticsModels/ExceptionInstance.ts +47 -1
  2. package/Models/AnalyticsModels/Log.ts +47 -1
  3. package/Models/AnalyticsModels/Metric.ts +1 -7
  4. package/Models/AnalyticsModels/Profile.ts +47 -1
  5. package/Models/AnalyticsModels/ProfileSample.ts +47 -1
  6. package/Models/AnalyticsModels/Span.ts +47 -1
  7. package/Models/DatabaseModels/DockerHost.ts +83 -0
  8. package/Models/DatabaseModels/Host.ts +83 -0
  9. package/Models/DatabaseModels/Index.ts +0 -2
  10. package/Models/DatabaseModels/KubernetesCluster.ts +83 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1779199346010-AddTelemetryRetentionConfig.ts +1 -1
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1779277271302-DropServiceDependencyTable.ts +44 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1779282769946-AddTelemetryRetentionToHostDockerKubernetes.ts +50 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  15. package/Server/Services/AlertService.ts +2 -4
  16. package/Server/Services/IncidentService.ts +2 -4
  17. package/Server/Services/Index.ts +0 -2
  18. package/Server/Services/LogAggregationService.ts +54 -6
  19. package/Server/Services/OpenTelemetryIngestService.ts +132 -0
  20. package/Server/Services/TraceAggregationService.ts +83 -8
  21. package/Server/Utils/Monitor/MonitorMetricUtil.ts +2 -4
  22. package/Server/Utils/Telemetry/Telemetry.ts +38 -0
  23. package/Tests/Server/Middleware/UserAuthorization.test.ts +5 -0
  24. package/Types/Permission.ts +0 -46
  25. package/Types/Telemetry/ServiceType.ts +19 -0
  26. package/Types/Time/RangeStartAndEndDateTime.ts +8 -0
  27. package/Types/Time/TimeRange.ts +1 -0
  28. package/UI/Components/Forms/Validation.ts +2 -2
  29. package/UI/Components/LogsViewer/LogsViewer.tsx +135 -17
  30. package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +1 -0
  31. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +84 -1
  32. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -1
  33. package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +1 -0
  34. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +41 -1
  35. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  36. package/build/dist/Models/AnalyticsModels/Log.js +41 -1
  37. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  38. package/build/dist/Models/AnalyticsModels/Metric.js +0 -7
  39. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  40. package/build/dist/Models/AnalyticsModels/Profile.js +41 -1
  41. package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
  42. package/build/dist/Models/AnalyticsModels/ProfileSample.js +41 -1
  43. package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -1
  44. package/build/dist/Models/AnalyticsModels/Span.js +41 -1
  45. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  46. package/build/dist/Models/DatabaseModels/DockerHost.js +84 -0
  47. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  48. package/build/dist/Models/DatabaseModels/Host.js +84 -0
  49. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  50. package/build/dist/Models/DatabaseModels/Index.js +0 -2
  51. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  52. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +84 -0
  53. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  54. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779199346010-AddTelemetryRetentionConfig.js.map +1 -1
  55. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779277271302-DropServiceDependencyTable.js +42 -0
  56. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779277271302-DropServiceDependencyTable.js.map +1 -0
  57. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779282769946-AddTelemetryRetentionToHostDockerKubernetes.js +22 -0
  58. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779282769946-AddTelemetryRetentionToHostDockerKubernetes.js.map +1 -0
  59. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  60. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  61. package/build/dist/Server/Services/AlertService.js +2 -1
  62. package/build/dist/Server/Services/AlertService.js.map +1 -1
  63. package/build/dist/Server/Services/IncidentService.js +2 -1
  64. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  65. package/build/dist/Server/Services/Index.js +0 -2
  66. package/build/dist/Server/Services/Index.js.map +1 -1
  67. package/build/dist/Server/Services/LogAggregationService.js +46 -4
  68. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  69. package/build/dist/Server/Services/OpenTelemetryIngestService.js +103 -0
  70. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  71. package/build/dist/Server/Services/TraceAggregationService.js +66 -6
  72. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  73. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +2 -1
  74. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  75. package/build/dist/Server/Utils/Telemetry/Telemetry.js +26 -0
  76. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  77. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js +3 -0
  78. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js.map +1 -1
  79. package/build/dist/Types/Permission.js +0 -40
  80. package/build/dist/Types/Permission.js.map +1 -1
  81. package/build/dist/Types/Telemetry/ServiceType.js +20 -0
  82. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -0
  83. package/build/dist/Types/Time/RangeStartAndEndDateTime.js +4 -0
  84. package/build/dist/Types/Time/RangeStartAndEndDateTime.js.map +1 -1
  85. package/build/dist/Types/Time/TimeRange.js +1 -0
  86. package/build/dist/Types/Time/TimeRange.js.map +1 -1
  87. package/build/dist/UI/Components/Forms/Validation.js +2 -2
  88. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  89. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +106 -16
  90. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  91. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +1 -0
  92. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
  93. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +67 -1
  94. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  95. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +1 -1
  96. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +1 -0
  97. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
  98. package/package.json +1 -1
  99. package/Models/DatabaseModels/ServiceDependency.ts +0 -529
  100. package/Server/Services/ServiceDependencyService.ts +0 -48
  101. package/UI/Components/Graphs/ServiceDependencyGraph.tsx +0 -286
  102. package/build/dist/Models/DatabaseModels/ServiceDependency.js +0 -545
  103. package/build/dist/Models/DatabaseModels/ServiceDependency.js.map +0 -1
  104. package/build/dist/Server/Services/ServiceDependencyService.js +0 -47
  105. package/build/dist/Server/Services/ServiceDependencyService.js.map +0 -1
  106. package/build/dist/UI/Components/Graphs/ServiceDependencyGraph.js +0 -206
  107. package/build/dist/UI/Components/Graphs/ServiceDependencyGraph.js.map +0 -1
@@ -9,6 +9,7 @@ import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
9
9
  import ObjectID from "../../Types/ObjectID";
10
10
  import Permission from "../../Types/Permission";
11
11
  import { SpanStatus } from "./Span";
12
+ import ServiceType from "../../Types/Telemetry/ServiceType";
12
13
 
13
14
  export default class ExceptionInstance extends AnalyticsBaseModel {
14
15
  public constructor() {
@@ -44,7 +45,8 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
44
45
  const serviceIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
45
46
  key: "serviceId",
46
47
  title: "Service ID",
47
- description: "ID of the Service which created the log",
48
+ description:
49
+ "ID of the resource the exception belongs to (Service / Host / DockerHost / KubernetesCluster / Monitor — disambiguated by serviceType)",
48
50
  required: true,
49
51
  type: TableColumnType.ObjectID,
50
52
  accessControl: {
@@ -69,6 +71,41 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
69
71
  },
70
72
  });
71
73
 
74
+ const serviceTypeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
75
+ key: "serviceType",
76
+ title: "Service Type",
77
+ description:
78
+ "Discriminator for serviceId — tells the read side which resource table to dispatch to",
79
+ required: false,
80
+ type: TableColumnType.Text,
81
+ skipIndex: {
82
+ name: "idx_service_type",
83
+ type: SkipIndexType.Set,
84
+ params: [10],
85
+ granularity: 4,
86
+ },
87
+ accessControl: {
88
+ read: [
89
+ Permission.ProjectOwner,
90
+ Permission.ProjectAdmin,
91
+ Permission.ProjectMember,
92
+ Permission.TelemetryAdmin,
93
+ Permission.TelemetryMember,
94
+ Permission.TelemetryViewer,
95
+ Permission.ReadTelemetryException,
96
+ ],
97
+ create: [
98
+ Permission.ProjectOwner,
99
+ Permission.ProjectAdmin,
100
+ Permission.ProjectMember,
101
+ Permission.TelemetryAdmin,
102
+ Permission.TelemetryMember,
103
+ Permission.CreateTelemetryException,
104
+ ],
105
+ update: [],
106
+ },
107
+ });
108
+
72
109
  const timeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
73
110
  key: "time",
74
111
  title: "Time",
@@ -601,6 +638,7 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
601
638
  tableColumns: [
602
639
  projectIdColumn,
603
640
  serviceIdColumn,
641
+ serviceTypeColumn,
604
642
  timeColumn,
605
643
  timeUnixNanoColumn,
606
644
  exceptionTypeColumn,
@@ -648,6 +686,14 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
648
686
  this.setColumnValue("serviceId", v);
649
687
  }
650
688
 
689
+ public get serviceType(): ServiceType | undefined {
690
+ return this.getColumnValue("serviceType") as ServiceType | undefined;
691
+ }
692
+
693
+ public set serviceType(v: ServiceType | undefined) {
694
+ this.setColumnValue("serviceType", v);
695
+ }
696
+
651
697
  public get time(): Date | undefined {
652
698
  return this.getColumnValue("time") as Date | undefined;
653
699
  }
@@ -13,6 +13,7 @@ import ObjectID from "../../Types/ObjectID";
13
13
  import Permission from "../../Types/Permission";
14
14
  import LogSeverity from "../../Types/Log/LogSeverity";
15
15
  import Service from "../DatabaseModels/Service";
16
+ import ServiceType from "../../Types/Telemetry/ServiceType";
16
17
 
17
18
  @OperationalResource()
18
19
  @OwnedThrough("serviceId", Service)
@@ -50,7 +51,8 @@ export default class Log extends AnalyticsBaseModel {
50
51
  const serviceIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
51
52
  key: "serviceId",
52
53
  title: "Service ID",
53
- description: "ID of the Service which created the log",
54
+ description:
55
+ "ID of the resource the log belongs to (Service / Host / DockerHost / KubernetesCluster / Monitor — disambiguated by serviceType)",
54
56
  required: true,
55
57
  type: TableColumnType.ObjectID,
56
58
  accessControl: {
@@ -75,6 +77,41 @@ export default class Log extends AnalyticsBaseModel {
75
77
  },
76
78
  });
77
79
 
80
+ const serviceTypeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
81
+ key: "serviceType",
82
+ title: "Service Type",
83
+ description:
84
+ "Discriminator for serviceId — tells the read side which resource table to dispatch to",
85
+ required: false,
86
+ type: TableColumnType.Text,
87
+ skipIndex: {
88
+ name: "idx_service_type",
89
+ type: SkipIndexType.Set,
90
+ params: [10],
91
+ granularity: 4,
92
+ },
93
+ accessControl: {
94
+ read: [
95
+ Permission.ProjectOwner,
96
+ Permission.ProjectAdmin,
97
+ Permission.ProjectMember,
98
+ Permission.TelemetryAdmin,
99
+ Permission.TelemetryMember,
100
+ Permission.TelemetryViewer,
101
+ Permission.ReadTelemetryServiceLog,
102
+ ],
103
+ create: [
104
+ Permission.ProjectOwner,
105
+ Permission.ProjectAdmin,
106
+ Permission.ProjectMember,
107
+ Permission.TelemetryAdmin,
108
+ Permission.TelemetryMember,
109
+ Permission.CreateTelemetryServiceLog,
110
+ ],
111
+ update: [],
112
+ },
113
+ });
114
+
78
115
  const timeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
79
116
  key: "time",
80
117
  title: "Time",
@@ -506,6 +543,7 @@ export default class Log extends AnalyticsBaseModel {
506
543
  tableColumns: [
507
544
  projectIdColumn,
508
545
  serviceIdColumn,
546
+ serviceTypeColumn,
509
547
  timeColumn,
510
548
  timeUnixNanoColumn,
511
549
  severityTextColumn,
@@ -550,6 +588,14 @@ export default class Log extends AnalyticsBaseModel {
550
588
  this.setColumnValue("serviceId", v);
551
589
  }
552
590
 
591
+ public get serviceType(): ServiceType | undefined {
592
+ return this.getColumnValue("serviceType") as ServiceType | undefined;
593
+ }
594
+
595
+ public set serviceType(v: ServiceType | undefined) {
596
+ this.setColumnValue("serviceType", v);
597
+ }
598
+
553
599
  public set body(v: string | undefined) {
554
600
  this.setColumnValue("body", v);
555
601
  }
@@ -12,6 +12,7 @@ import { JSONObject } from "../../Types/JSON";
12
12
  import ObjectID from "../../Types/ObjectID";
13
13
  import Permission from "../../Types/Permission";
14
14
  import Service from "../DatabaseModels/Service";
15
+ import ServiceType from "../../Types/Telemetry/ServiceType";
15
16
 
16
17
  export enum AggregationTemporality {
17
18
  Delta = "Delta",
@@ -26,13 +27,6 @@ export enum MetricPointType {
26
27
  Summary = "Summary",
27
28
  }
28
29
 
29
- export enum ServiceType {
30
- OpenTelemetry = "OpenTelemetry",
31
- Monitor = "Monitor",
32
- Alert = "Alert",
33
- Incident = "Incident",
34
- }
35
-
36
30
  @OperationalResource()
37
31
  @OwnedThrough("serviceId", Service)
38
32
  export default class Metric extends AnalyticsBaseModel {
@@ -9,6 +9,7 @@ import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
9
9
  import { JSONObject } from "../../Types/JSON";
10
10
  import ObjectID from "../../Types/ObjectID";
11
11
  import Permission from "../../Types/Permission";
12
+ import ServiceType from "../../Types/Telemetry/ServiceType";
12
13
 
13
14
  export default class Profile extends AnalyticsBaseModel {
14
15
  public constructor() {
@@ -44,7 +45,8 @@ export default class Profile extends AnalyticsBaseModel {
44
45
  const serviceIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
45
46
  key: "serviceId",
46
47
  title: "Service ID",
47
- description: "ID of the Service which created the profile",
48
+ description:
49
+ "ID of the resource the profile belongs to (Service / Host / DockerHost / KubernetesCluster / Monitor — disambiguated by serviceType)",
48
50
  required: true,
49
51
  type: TableColumnType.ObjectID,
50
52
  accessControl: {
@@ -69,6 +71,41 @@ export default class Profile extends AnalyticsBaseModel {
69
71
  },
70
72
  });
71
73
 
74
+ const serviceTypeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
75
+ key: "serviceType",
76
+ title: "Service Type",
77
+ description:
78
+ "Discriminator for serviceId — tells the read side which resource table to dispatch to",
79
+ required: false,
80
+ type: TableColumnType.Text,
81
+ skipIndex: {
82
+ name: "idx_service_type",
83
+ type: SkipIndexType.Set,
84
+ params: [10],
85
+ granularity: 4,
86
+ },
87
+ accessControl: {
88
+ read: [
89
+ Permission.ProjectOwner,
90
+ Permission.ProjectAdmin,
91
+ Permission.ProjectMember,
92
+ Permission.TelemetryAdmin,
93
+ Permission.TelemetryMember,
94
+ Permission.TelemetryViewer,
95
+ Permission.ReadTelemetryServiceProfiles,
96
+ ],
97
+ create: [
98
+ Permission.ProjectOwner,
99
+ Permission.ProjectAdmin,
100
+ Permission.ProjectMember,
101
+ Permission.TelemetryAdmin,
102
+ Permission.TelemetryMember,
103
+ Permission.CreateTelemetryServiceProfiles,
104
+ ],
105
+ update: [],
106
+ },
107
+ });
108
+
72
109
  const profileIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
73
110
  key: "profileId",
74
111
  title: "Profile ID",
@@ -613,6 +650,7 @@ export default class Profile extends AnalyticsBaseModel {
613
650
  tableColumns: [
614
651
  projectIdColumn,
615
652
  serviceIdColumn,
653
+ serviceTypeColumn,
616
654
  profileIdColumn,
617
655
  traceIdColumn,
618
656
  spanIdColumn,
@@ -654,6 +692,14 @@ export default class Profile extends AnalyticsBaseModel {
654
692
  this.setColumnValue("serviceId", v);
655
693
  }
656
694
 
695
+ public get serviceType(): ServiceType | undefined {
696
+ return this.getColumnValue("serviceType") as ServiceType | undefined;
697
+ }
698
+
699
+ public set serviceType(v: ServiceType | undefined) {
700
+ this.setColumnValue("serviceType", v);
701
+ }
702
+
657
703
  public get profileId(): string | undefined {
658
704
  return this.getColumnValue("profileId") as string | undefined;
659
705
  }
@@ -9,6 +9,7 @@ import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
9
9
  import { JSONObject } from "../../Types/JSON";
10
10
  import ObjectID from "../../Types/ObjectID";
11
11
  import Permission from "../../Types/Permission";
12
+ import ServiceType from "../../Types/Telemetry/ServiceType";
12
13
 
13
14
  export default class ProfileSample extends AnalyticsBaseModel {
14
15
  public constructor() {
@@ -44,7 +45,8 @@ export default class ProfileSample extends AnalyticsBaseModel {
44
45
  const serviceIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
45
46
  key: "serviceId",
46
47
  title: "Service ID",
47
- description: "ID of the Service which created the profile",
48
+ description:
49
+ "ID of the resource the profile sample belongs to (Service / Host / DockerHost / KubernetesCluster / Monitor — disambiguated by serviceType)",
48
50
  required: true,
49
51
  type: TableColumnType.ObjectID,
50
52
  accessControl: {
@@ -69,6 +71,41 @@ export default class ProfileSample extends AnalyticsBaseModel {
69
71
  },
70
72
  });
71
73
 
74
+ const serviceTypeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
75
+ key: "serviceType",
76
+ title: "Service Type",
77
+ description:
78
+ "Discriminator for serviceId — tells the read side which resource table to dispatch to",
79
+ required: false,
80
+ type: TableColumnType.Text,
81
+ skipIndex: {
82
+ name: "idx_service_type",
83
+ type: SkipIndexType.Set,
84
+ params: [10],
85
+ granularity: 4,
86
+ },
87
+ accessControl: {
88
+ read: [
89
+ Permission.ProjectOwner,
90
+ Permission.ProjectAdmin,
91
+ Permission.ProjectMember,
92
+ Permission.TelemetryAdmin,
93
+ Permission.TelemetryMember,
94
+ Permission.TelemetryViewer,
95
+ Permission.ReadTelemetryServiceProfiles,
96
+ ],
97
+ create: [
98
+ Permission.ProjectOwner,
99
+ Permission.ProjectAdmin,
100
+ Permission.ProjectMember,
101
+ Permission.TelemetryAdmin,
102
+ Permission.TelemetryMember,
103
+ Permission.CreateTelemetryServiceProfiles,
104
+ ],
105
+ update: [],
106
+ },
107
+ });
108
+
72
109
  const profileIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
73
110
  key: "profileId",
74
111
  title: "Profile ID",
@@ -475,6 +512,7 @@ export default class ProfileSample extends AnalyticsBaseModel {
475
512
  tableColumns: [
476
513
  projectIdColumn,
477
514
  serviceIdColumn,
515
+ serviceTypeColumn,
478
516
  profileIdColumn,
479
517
  traceIdColumn,
480
518
  spanIdColumn,
@@ -523,6 +561,14 @@ export default class ProfileSample extends AnalyticsBaseModel {
523
561
  this.setColumnValue("serviceId", v);
524
562
  }
525
563
 
564
+ public get serviceType(): ServiceType | undefined {
565
+ return this.getColumnValue("serviceType") as ServiceType | undefined;
566
+ }
567
+
568
+ public set serviceType(v: ServiceType | undefined) {
569
+ this.setColumnValue("serviceType", v);
570
+ }
571
+
526
572
  public get profileId(): string | undefined {
527
573
  return this.getColumnValue("profileId") as string | undefined;
528
574
  }
@@ -12,6 +12,7 @@ import { JSONObject } from "../../Types/JSON";
12
12
  import ObjectID from "../../Types/ObjectID";
13
13
  import Permission from "../../Types/Permission";
14
14
  import Service from "../DatabaseModels/Service";
15
+ import ServiceType from "../../Types/Telemetry/ServiceType";
15
16
 
16
17
  export enum SpanKind {
17
18
  Server = "SPAN_KIND_SERVER",
@@ -81,7 +82,8 @@ export default class Span extends AnalyticsBaseModel {
81
82
  const serviceIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
82
83
  key: "serviceId",
83
84
  title: "Service ID",
84
- description: "ID of the Service which created the log",
85
+ description:
86
+ "ID of the resource the span belongs to (Service / Host / DockerHost / KubernetesCluster / Monitor — disambiguated by serviceType)",
85
87
  required: true,
86
88
  type: TableColumnType.ObjectID,
87
89
  accessControl: {
@@ -106,6 +108,41 @@ export default class Span extends AnalyticsBaseModel {
106
108
  },
107
109
  });
108
110
 
111
+ const serviceTypeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
112
+ key: "serviceType",
113
+ title: "Service Type",
114
+ description:
115
+ "Discriminator for serviceId — tells the read side which resource table to dispatch to",
116
+ required: false,
117
+ type: TableColumnType.Text,
118
+ skipIndex: {
119
+ name: "idx_service_type",
120
+ type: SkipIndexType.Set,
121
+ params: [10],
122
+ granularity: 4,
123
+ },
124
+ accessControl: {
125
+ read: [
126
+ Permission.ProjectOwner,
127
+ Permission.ProjectAdmin,
128
+ Permission.ProjectMember,
129
+ Permission.TelemetryAdmin,
130
+ Permission.TelemetryMember,
131
+ Permission.TelemetryViewer,
132
+ Permission.ReadTelemetryServiceTraces,
133
+ ],
134
+ create: [
135
+ Permission.ProjectOwner,
136
+ Permission.ProjectAdmin,
137
+ Permission.ProjectMember,
138
+ Permission.TelemetryAdmin,
139
+ Permission.TelemetryMember,
140
+ Permission.CreateTelemetryServiceTraces,
141
+ ],
142
+ update: [],
143
+ },
144
+ });
145
+
109
146
  const startTimeColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
110
147
  key: "startTime",
111
148
  title: "Start Time",
@@ -766,6 +803,7 @@ export default class Span extends AnalyticsBaseModel {
766
803
  tableColumns: [
767
804
  projectIdColumn,
768
805
  serviceIdColumn,
806
+ serviceTypeColumn,
769
807
  startTimeColumn,
770
808
  endTimeColumn,
771
809
  startTimeUnixNanoColumn,
@@ -867,6 +905,14 @@ export default class Span extends AnalyticsBaseModel {
867
905
  this.setColumnValue("serviceId", v);
868
906
  }
869
907
 
908
+ public get serviceType(): ServiceType | undefined {
909
+ return this.getColumnValue("serviceType") as ServiceType | undefined;
910
+ }
911
+
912
+ public set serviceType(v: ServiceType | undefined) {
913
+ this.setColumnValue("serviceType", v);
914
+ }
915
+
870
916
  public get startTime(): Date | undefined {
871
917
  return this.getColumnValue("startTime") as Date | undefined;
872
918
  }
@@ -19,6 +19,7 @@ import UniqueColumnBy from "../../Types/Database/UniqueColumnBy";
19
19
  import IconProp from "../../Types/Icon/IconProp";
20
20
  import ObjectID from "../../Types/ObjectID";
21
21
  import Permission from "../../Types/Permission";
22
+ import TelemetryRetentionConfig from "../../Types/Telemetry/TelemetryRetentionConfig";
22
23
  import {
23
24
  Column,
24
25
  Entity,
@@ -739,4 +740,86 @@ export default class DockerHost extends BaseModel {
739
740
  },
740
741
  })
741
742
  public labels?: Array<Label> = undefined;
743
+
744
+ @ColumnAccessControl({
745
+ create: [
746
+ Permission.ProjectOwner,
747
+ Permission.ProjectAdmin,
748
+ Permission.ProjectMember,
749
+ Permission.SettingsAdmin,
750
+ Permission.SettingsMember,
751
+ Permission.CreateDockerHost,
752
+ ],
753
+ read: [
754
+ Permission.ProjectOwner,
755
+ Permission.ProjectAdmin,
756
+ Permission.ProjectMember,
757
+ Permission.Viewer,
758
+ Permission.SettingsAdmin,
759
+ Permission.SettingsMember,
760
+ Permission.SettingsViewer,
761
+ Permission.ReadDockerHost,
762
+ ],
763
+ update: [
764
+ Permission.ProjectOwner,
765
+ Permission.ProjectAdmin,
766
+ Permission.ProjectMember,
767
+ Permission.SettingsAdmin,
768
+ Permission.SettingsMember,
769
+ Permission.EditDockerHost,
770
+ ],
771
+ })
772
+ @TableColumn({
773
+ type: TableColumnType.Number,
774
+ title: "Retain Telemetry Data For Days",
775
+ description:
776
+ "Number of days to retain telemetry data for this Docker host. Leave blank to use the project-wide default.",
777
+ })
778
+ @Column({
779
+ type: ColumnType.Number,
780
+ nullable: true,
781
+ unique: false,
782
+ })
783
+ public retainTelemetryDataForDays?: number = undefined;
784
+
785
+ @ColumnAccessControl({
786
+ create: [
787
+ Permission.ProjectOwner,
788
+ Permission.ProjectAdmin,
789
+ Permission.ProjectMember,
790
+ Permission.SettingsAdmin,
791
+ Permission.SettingsMember,
792
+ Permission.CreateDockerHost,
793
+ ],
794
+ read: [
795
+ Permission.ProjectOwner,
796
+ Permission.ProjectAdmin,
797
+ Permission.ProjectMember,
798
+ Permission.Viewer,
799
+ Permission.SettingsAdmin,
800
+ Permission.SettingsMember,
801
+ Permission.SettingsViewer,
802
+ Permission.ReadDockerHost,
803
+ ],
804
+ update: [
805
+ Permission.ProjectOwner,
806
+ Permission.ProjectAdmin,
807
+ Permission.ProjectMember,
808
+ Permission.SettingsAdmin,
809
+ Permission.SettingsMember,
810
+ Permission.EditDockerHost,
811
+ ],
812
+ })
813
+ @TableColumn({
814
+ type: TableColumnType.JSON,
815
+ required: false,
816
+ title: "Telemetry Data Retention Overrides",
817
+ description:
818
+ "Per-pillar retention overrides for this Docker host (logs by severity, traces by status, metrics, profiles). Unset fields fall back to the Docker host default, then the project's retention settings.",
819
+ })
820
+ @Column({
821
+ type: ColumnType.JSON,
822
+ nullable: true,
823
+ })
824
+ public telemetryRetentionConfig?: TelemetryRetentionConfig = undefined;
742
825
  }
@@ -21,6 +21,7 @@ import UniqueColumnBy from "../../Types/Database/UniqueColumnBy";
21
21
  import IconProp from "../../Types/Icon/IconProp";
22
22
  import ObjectID from "../../Types/ObjectID";
23
23
  import Permission from "../../Types/Permission";
24
+ import TelemetryRetentionConfig from "../../Types/Telemetry/TelemetryRetentionConfig";
24
25
  import {
25
26
  Column,
26
27
  Entity,
@@ -1055,4 +1056,86 @@ export default class Host extends BaseModel {
1055
1056
  },
1056
1057
  })
1057
1058
  public labels?: Array<Label> = undefined;
1059
+
1060
+ @ColumnAccessControl({
1061
+ create: [
1062
+ Permission.ProjectOwner,
1063
+ Permission.ProjectAdmin,
1064
+ Permission.ProjectMember,
1065
+ Permission.SettingsAdmin,
1066
+ Permission.SettingsMember,
1067
+ Permission.CreateHost,
1068
+ ],
1069
+ read: [
1070
+ Permission.ProjectOwner,
1071
+ Permission.ProjectAdmin,
1072
+ Permission.ProjectMember,
1073
+ Permission.Viewer,
1074
+ Permission.SettingsAdmin,
1075
+ Permission.SettingsMember,
1076
+ Permission.SettingsViewer,
1077
+ Permission.ReadHost,
1078
+ ],
1079
+ update: [
1080
+ Permission.ProjectOwner,
1081
+ Permission.ProjectAdmin,
1082
+ Permission.ProjectMember,
1083
+ Permission.SettingsAdmin,
1084
+ Permission.SettingsMember,
1085
+ Permission.EditHost,
1086
+ ],
1087
+ })
1088
+ @TableColumn({
1089
+ type: TableColumnType.Number,
1090
+ title: "Retain Telemetry Data For Days",
1091
+ description:
1092
+ "Number of days to retain telemetry data for this host. Leave blank to use the project-wide default.",
1093
+ })
1094
+ @Column({
1095
+ type: ColumnType.Number,
1096
+ nullable: true,
1097
+ unique: false,
1098
+ })
1099
+ public retainTelemetryDataForDays?: number = undefined;
1100
+
1101
+ @ColumnAccessControl({
1102
+ create: [
1103
+ Permission.ProjectOwner,
1104
+ Permission.ProjectAdmin,
1105
+ Permission.ProjectMember,
1106
+ Permission.SettingsAdmin,
1107
+ Permission.SettingsMember,
1108
+ Permission.CreateHost,
1109
+ ],
1110
+ read: [
1111
+ Permission.ProjectOwner,
1112
+ Permission.ProjectAdmin,
1113
+ Permission.ProjectMember,
1114
+ Permission.Viewer,
1115
+ Permission.SettingsAdmin,
1116
+ Permission.SettingsMember,
1117
+ Permission.SettingsViewer,
1118
+ Permission.ReadHost,
1119
+ ],
1120
+ update: [
1121
+ Permission.ProjectOwner,
1122
+ Permission.ProjectAdmin,
1123
+ Permission.ProjectMember,
1124
+ Permission.SettingsAdmin,
1125
+ Permission.SettingsMember,
1126
+ Permission.EditHost,
1127
+ ],
1128
+ })
1129
+ @TableColumn({
1130
+ type: TableColumnType.JSON,
1131
+ required: false,
1132
+ title: "Telemetry Data Retention Overrides",
1133
+ description:
1134
+ "Per-pillar retention overrides for this host (logs by severity, traces by status, metrics, profiles). Unset fields fall back to the host default, then the project's retention settings.",
1135
+ })
1136
+ @Column({
1137
+ type: ColumnType.JSON,
1138
+ nullable: true,
1139
+ })
1140
+ public telemetryRetentionConfig?: TelemetryRetentionConfig = undefined;
1058
1141
  }
@@ -226,7 +226,6 @@ import RunbookExecution from "./RunbookExecution";
226
226
  import RunbookOwnerTeam from "./RunbookOwnerTeam";
227
227
  import RunbookOwnerUser from "./RunbookOwnerUser";
228
228
  import RunbookRule from "./RunbookRule";
229
- import ServiceDependency from "./ServiceDependency";
230
229
  import ServiceMonitor from "./ServiceMonitor";
231
230
 
232
231
  import UserTotpAuth from "./UserTotpAuth";
@@ -618,7 +617,6 @@ const AllModelTypes: Array<{
618
617
  Service,
619
618
  ServiceOwnerTeam,
620
619
  ServiceOwnerUser,
621
- ServiceDependency,
622
620
  ServiceMonitor,
623
621
  ServiceCodeRepository,
624
622