@oneuptime/common 10.4.10 → 10.4.12

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 (174) 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/Alert.ts +332 -0
  8. package/Models/DatabaseModels/DockerHost.ts +83 -0
  9. package/Models/DatabaseModels/Host.ts +83 -0
  10. package/Models/DatabaseModels/Incident.ts +332 -0
  11. package/Models/DatabaseModels/Index.ts +0 -2
  12. package/Models/DatabaseModels/KubernetesCluster.ts +83 -0
  13. package/Models/DatabaseModels/RunbookAgent.ts +16 -2
  14. package/Server/EnvironmentConfig.ts +16 -0
  15. package/Server/Infrastructure/ClickhouseConfig.ts +14 -0
  16. package/Server/Infrastructure/ClickhouseDatabase.ts +20 -3
  17. package/Server/Infrastructure/InMemoryTTLCache.ts +61 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1779199346010-AddTelemetryRetentionConfig.ts +1 -1
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1779277271302-DropServiceDependencyTable.ts +44 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1779282769946-AddTelemetryRetentionToHostDockerKubernetes.ts +50 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1779302536475-AttachKubernetesAndDockerToIncidentAndAlert.ts +253 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1779303924241-AttachServiceToIncidentAndAlert.ts +60 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  24. package/Server/Middleware/TelemetryIngest.ts +6 -38
  25. package/Server/Middleware/UserAuthorization.ts +1 -11
  26. package/Server/Services/AlertService.ts +2 -4
  27. package/Server/Services/AnalyticsDatabaseService.ts +33 -1
  28. package/Server/Services/IncidentService.ts +2 -4
  29. package/Server/Services/Index.ts +0 -2
  30. package/Server/Services/LogAggregationService.ts +54 -6
  31. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +6 -0
  32. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +1 -0
  33. package/Server/Services/OnCallDutyPolicyScheduleService.ts +17 -0
  34. package/Server/Services/OpenTelemetryIngestService.ts +132 -0
  35. package/Server/Services/TelemetryIngestionKeyService.ts +90 -1
  36. package/Server/Services/TraceAggregationService.ts +83 -8
  37. package/Server/Utils/Monitor/MonitorMetricUtil.ts +2 -4
  38. package/Server/Utils/Telemetry/Telemetry.ts +38 -0
  39. package/Tests/Server/Middleware/UserAuthorization.test.ts +5 -7
  40. package/Types/Dashboard/DashboardComponentType.ts +0 -1
  41. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
  42. package/Types/Dashboard/DashboardComponents/DashboardTableComponent.ts +74 -1
  43. package/Types/Dashboard/DashboardTemplates.ts +164 -51
  44. package/Types/Monitor/MonitorType.ts +1 -1
  45. package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +36 -9
  46. package/Types/Permission.ts +0 -46
  47. package/Types/Telemetry/ServiceType.ts +19 -0
  48. package/UI/Components/Forms/Validation.ts +2 -2
  49. package/UI/Components/LogsViewer/LogsViewer.tsx +135 -17
  50. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +84 -1
  51. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -1
  52. package/Utils/Dashboard/Components/DashboardTableComponent.ts +80 -17
  53. package/Utils/Dashboard/Components/Index.ts +0 -7
  54. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +41 -1
  55. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  56. package/build/dist/Models/AnalyticsModels/Log.js +41 -1
  57. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  58. package/build/dist/Models/AnalyticsModels/Metric.js +0 -7
  59. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  60. package/build/dist/Models/AnalyticsModels/Profile.js +41 -1
  61. package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
  62. package/build/dist/Models/AnalyticsModels/ProfileSample.js +41 -1
  63. package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -1
  64. package/build/dist/Models/AnalyticsModels/Span.js +41 -1
  65. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  66. package/build/dist/Models/DatabaseModels/Alert.js +324 -0
  67. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  68. package/build/dist/Models/DatabaseModels/DockerHost.js +84 -0
  69. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  70. package/build/dist/Models/DatabaseModels/Host.js +84 -0
  71. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  72. package/build/dist/Models/DatabaseModels/Incident.js +324 -0
  73. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  74. package/build/dist/Models/DatabaseModels/Index.js +0 -2
  75. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  76. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +84 -0
  77. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  78. package/build/dist/Models/DatabaseModels/RunbookAgent.js +16 -2
  79. package/build/dist/Models/DatabaseModels/RunbookAgent.js.map +1 -1
  80. package/build/dist/Server/EnvironmentConfig.js +8 -0
  81. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  82. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +9 -1
  83. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  84. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +12 -3
  85. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
  86. package/build/dist/Server/Infrastructure/InMemoryTTLCache.js +49 -0
  87. package/build/dist/Server/Infrastructure/InMemoryTTLCache.js.map +1 -0
  88. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779199346010-AddTelemetryRetentionConfig.js.map +1 -1
  89. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779277271302-DropServiceDependencyTable.js +42 -0
  90. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779277271302-DropServiceDependencyTable.js.map +1 -0
  91. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779282769946-AddTelemetryRetentionToHostDockerKubernetes.js +22 -0
  92. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779282769946-AddTelemetryRetentionToHostDockerKubernetes.js.map +1 -0
  93. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779302536475-AttachKubernetesAndDockerToIncidentAndAlert.js +100 -0
  94. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779302536475-AttachKubernetesAndDockerToIncidentAndAlert.js.map +1 -0
  95. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779303924241-AttachServiceToIncidentAndAlert.js +28 -0
  96. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779303924241-AttachServiceToIncidentAndAlert.js.map +1 -0
  97. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  98. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  99. package/build/dist/Server/Middleware/TelemetryIngest.js +2 -26
  100. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  101. package/build/dist/Server/Middleware/UserAuthorization.js +1 -7
  102. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  103. package/build/dist/Server/Services/AlertService.js +2 -1
  104. package/build/dist/Server/Services/AlertService.js.map +1 -1
  105. package/build/dist/Server/Services/AnalyticsDatabaseService.js +23 -2
  106. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  107. package/build/dist/Server/Services/IncidentService.js +2 -1
  108. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  109. package/build/dist/Server/Services/Index.js +0 -2
  110. package/build/dist/Server/Services/Index.js.map +1 -1
  111. package/build/dist/Server/Services/LogAggregationService.js +46 -4
  112. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  113. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +28 -24
  114. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  115. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +1 -1
  116. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  117. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +18 -2
  118. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  119. package/build/dist/Server/Services/OpenTelemetryIngestService.js +103 -0
  120. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  121. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +83 -0
  122. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  123. package/build/dist/Server/Services/TraceAggregationService.js +66 -6
  124. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  125. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +2 -1
  126. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  127. package/build/dist/Server/Utils/Telemetry/Telemetry.js +26 -0
  128. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  129. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js +3 -7
  130. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js.map +1 -1
  131. package/build/dist/Types/Dashboard/DashboardComponentType.js +0 -1
  132. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  133. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
  134. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  135. package/build/dist/Types/Dashboard/DashboardComponents/DashboardTableComponent.js +13 -1
  136. package/build/dist/Types/Dashboard/DashboardComponents/DashboardTableComponent.js.map +1 -1
  137. package/build/dist/Types/Dashboard/DashboardTemplates.js +142 -42
  138. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  139. package/build/dist/Types/Monitor/MonitorType.js +1 -1
  140. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  141. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +27 -7
  142. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
  143. package/build/dist/Types/Permission.js +0 -40
  144. package/build/dist/Types/Permission.js.map +1 -1
  145. package/build/dist/Types/Telemetry/ServiceType.js +20 -0
  146. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -0
  147. package/build/dist/UI/Components/Forms/Validation.js +2 -2
  148. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  149. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +106 -16
  150. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  151. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +67 -1
  152. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  153. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +1 -1
  154. package/build/dist/Utils/Dashboard/Components/DashboardTableComponent.js +68 -16
  155. package/build/dist/Utils/Dashboard/Components/DashboardTableComponent.js.map +1 -1
  156. package/build/dist/Utils/Dashboard/Components/Index.js +0 -4
  157. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  158. package/package.json +1 -2
  159. package/Models/DatabaseModels/ServiceDependency.ts +0 -529
  160. package/Server/Services/ServiceDependencyService.ts +0 -48
  161. package/Types/Dashboard/DashboardComponents/DashboardHostMetricChartComponent.ts +0 -27
  162. package/Typings/elkjs.d.ts +0 -30
  163. package/UI/Components/Graphs/ServiceDependencyGraph.tsx +0 -286
  164. package/Utils/Dashboard/Components/DashboardHostMetricChartComponent.ts +0 -132
  165. package/build/dist/Models/DatabaseModels/ServiceDependency.js +0 -545
  166. package/build/dist/Models/DatabaseModels/ServiceDependency.js.map +0 -1
  167. package/build/dist/Server/Services/ServiceDependencyService.js +0 -47
  168. package/build/dist/Server/Services/ServiceDependencyService.js.map +0 -1
  169. package/build/dist/Types/Dashboard/DashboardComponents/DashboardHostMetricChartComponent.js +0 -11
  170. package/build/dist/Types/Dashboard/DashboardComponents/DashboardHostMetricChartComponent.js.map +0 -1
  171. package/build/dist/UI/Components/Graphs/ServiceDependencyGraph.js +0 -206
  172. package/build/dist/UI/Components/Graphs/ServiceDependencyGraph.js.map +0 -1
  173. package/build/dist/Utils/Dashboard/Components/DashboardHostMetricChartComponent.js +0 -113
  174. package/build/dist/Utils/Dashboard/Components/DashboardHostMetricChartComponent.js.map +0 -1
@@ -1,286 +0,0 @@
1
- import React, {
2
- FunctionComponent,
3
- ReactElement,
4
- useEffect,
5
- useState,
6
- } from "react";
7
- import ReactFlow, {
8
- Background,
9
- Controls,
10
- Edge,
11
- MarkerType,
12
- MiniMap,
13
- Node,
14
- Position,
15
- } from "reactflow";
16
- import "reactflow/dist/style.css";
17
- import type { ElkExtendedEdge, ElkNode, LayoutOptions } from "elkjs";
18
- import ELK from "elkjs/lib/elk.bundled.js";
19
-
20
- // Minimal interface for the ELK layout engine we rely on.
21
- interface ElkLayoutEngine {
22
- layout: (graph: ElkNode) => Promise<ElkNode>;
23
- }
24
-
25
- export interface ServiceNodeData {
26
- id: string;
27
- name: string;
28
- color?: string;
29
- }
30
-
31
- export interface ServiceEdgeData {
32
- fromServiceId: string;
33
- toServiceId: string;
34
- }
35
-
36
- export interface ServiceDependencyGraphProps {
37
- services: Array<ServiceNodeData>;
38
- dependencies: Array<ServiceEdgeData>;
39
- }
40
-
41
- const ServiceDependencyGraph: FunctionComponent<ServiceDependencyGraphProps> = (
42
- props: ServiceDependencyGraphProps,
43
- ): ReactElement => {
44
- const computeLuminance: (r: number, g: number, b: number) => number = (
45
- r: number,
46
- g: number,
47
- b: number,
48
- ): number => {
49
- const transform: (v: number) => number = (v: number): number => {
50
- const c: number = v / 255;
51
- return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
52
- };
53
- const R: number = transform(r);
54
- const G: number = transform(g);
55
- const B: number = transform(b);
56
- return 0.2126 * R + 0.7152 * G + 0.0722 * B;
57
- };
58
-
59
- const getContrastText: (bg?: string) => string = (bg?: string): string => {
60
- if (!bg) {
61
- return "#111827"; // gray-900
62
- }
63
- // normalize to hex like #rrggbb
64
- let hex: string = bg.trim();
65
- if (hex.startsWith("rgb")) {
66
- // basic rgb(a) parser
67
- const m: RegExpMatchArray | null = hex
68
- .replace(/\s+/g, "")
69
- .match(/rgba?\((\d+),(\d+),(\d+)/i);
70
- if (m) {
71
- const r: number = parseInt(m[1] as string, 10);
72
- const g: number = parseInt(m[2] as string, 10);
73
- const b: number = parseInt(m[3] as string, 10);
74
- const luminance: number = computeLuminance(r, g, b);
75
- return luminance > 0.5 ? "#111827" : "#ffffff";
76
- }
77
- return "#111827";
78
- }
79
- if (hex[0] === "#") {
80
- hex = hex.slice(1);
81
- }
82
- if (hex.length === 3) {
83
- hex = hex
84
- .split("")
85
- .map((c: string): string => {
86
- return c + c;
87
- })
88
- .join("");
89
- }
90
- if (hex.length !== 6) {
91
- return "#111827";
92
- }
93
- const r: number = parseInt(hex.slice(0, 2), 16);
94
- const g: number = parseInt(hex.slice(2, 4), 16);
95
- const b: number = parseInt(hex.slice(4, 6), 16);
96
- const luminance: number = computeLuminance(r, g, b);
97
- return luminance > 0.5 ? "#111827" : "#ffffff";
98
- };
99
-
100
- const [rfNodes, setRfNodes] = useState<Node[]>([]);
101
- const [rfEdges, setRfEdges] = useState<Edge[]>([]);
102
-
103
- useEffect((): void => {
104
- const elk: ElkLayoutEngine = new ELK() as unknown as ElkLayoutEngine;
105
- // fixed node dimensions for layout (px)
106
- const NODE_WIDTH: number = 220;
107
- const NODE_HEIGHT: number = 56;
108
-
109
- const sortedServices: Array<ServiceNodeData> = [...props.services].sort(
110
- (a: ServiceNodeData, b: ServiceNodeData): number => {
111
- return a.name.localeCompare(b.name) || a.id.localeCompare(b.id);
112
- },
113
- );
114
- const sortedDeps: Array<ServiceEdgeData> = [...props.dependencies].sort(
115
- (a: ServiceEdgeData, b: ServiceEdgeData): number => {
116
- if (a.fromServiceId === b.fromServiceId) {
117
- return a.toServiceId.localeCompare(b.toServiceId);
118
- }
119
- return a.fromServiceId.localeCompare(b.fromServiceId);
120
- },
121
- );
122
-
123
- const elkGraph: ElkNode = {
124
- id: "root",
125
- layoutOptions: {
126
- algorithm: "layered",
127
- "elk.direction": "RIGHT",
128
- "elk.layered.spacing.nodeNodeBetweenLayers": "120",
129
- "elk.spacing.nodeNode": "60",
130
- "elk.edgeRouting": "POLYLINE",
131
- } as LayoutOptions,
132
- children: sortedServices.map((svc: ServiceNodeData): ElkNode => {
133
- return {
134
- id: svc.id,
135
- width: NODE_WIDTH,
136
- height: NODE_HEIGHT,
137
- } as ElkNode;
138
- }),
139
- edges: sortedDeps.map((dep: ServiceEdgeData): ElkExtendedEdge => {
140
- return {
141
- id: `e-${dep.fromServiceId}-${dep.toServiceId}`,
142
- sources: [dep.fromServiceId],
143
- targets: [dep.toServiceId],
144
- };
145
- }),
146
- };
147
-
148
- const layout: () => Promise<void> = async (): Promise<void> => {
149
- try {
150
- const res: ElkNode = (await elk.layout(elkGraph)) as ElkNode; // casting to bundled ElkNode shape
151
- const placedNodes: Node[] = (res.children || []).map(
152
- (child: ElkNode): Node => {
153
- const svc: ServiceNodeData | undefined = sortedServices.find(
154
- (s: ServiceNodeData): boolean => {
155
- return s.id === child.id;
156
- },
157
- );
158
- const background: string = svc?.color || "#ffffff";
159
- const textColor: string = getContrastText(background);
160
- return {
161
- id: child.id || "",
162
- data: { label: svc?.name || "" },
163
- position: { x: child.x || 0, y: child.y || 0 },
164
- sourcePosition: Position.Right,
165
- targetPosition: Position.Left,
166
- style: {
167
- borderRadius: 8,
168
- padding: 8,
169
- border: "1px solid rgba(0,0,0,0.08)",
170
- background,
171
- color: textColor,
172
- boxShadow: "0 1px 2px rgba(16,24,40,.05)",
173
- width: NODE_WIDTH,
174
- height: NODE_HEIGHT,
175
- },
176
- } as Node;
177
- },
178
- );
179
-
180
- const stroke: string = "#94a3b8"; // slate-400
181
- const placedEdges: Edge[] = sortedDeps.map(
182
- (dep: ServiceEdgeData): Edge => {
183
- return {
184
- id: `e-${dep.fromServiceId}-${dep.toServiceId}`,
185
- source: dep.fromServiceId,
186
- target: dep.toServiceId,
187
- animated: false,
188
- style: { stroke, strokeWidth: 2 },
189
- markerEnd: { type: MarkerType.Arrow, color: stroke },
190
- type: "smoothstep",
191
- };
192
- },
193
- );
194
-
195
- setRfNodes(placedNodes);
196
- setRfEdges(placedEdges);
197
- } catch {
198
- // Fallback: deterministic grid by name
199
- const sorted: Array<ServiceNodeData> = sortedServices;
200
- const COLS: number = 4;
201
- const GAP_X: number = 260;
202
- const GAP_Y: number = 120;
203
- const nodes: Node[] = sorted.map(
204
- (svc: ServiceNodeData, i: number): Node => {
205
- const col: number = i % COLS;
206
- const row: number = Math.floor(i / COLS);
207
- const x: number = col * GAP_X;
208
- const y: number = row * GAP_Y;
209
- const background: string = svc.color || "#ffffff";
210
- const textColor: string = getContrastText(background);
211
- return {
212
- id: svc.id,
213
- data: { label: svc.name },
214
- position: { x, y },
215
- sourcePosition: Position.Right,
216
- targetPosition: Position.Left,
217
- style: {
218
- borderRadius: 8,
219
- padding: 8,
220
- border: "1px solid rgba(0,0,0,0.08)",
221
- background,
222
- color: textColor,
223
- boxShadow: "0 1px 2px rgba(16,24,40,.05)",
224
- width: NODE_WIDTH,
225
- height: NODE_HEIGHT,
226
- },
227
- };
228
- },
229
- );
230
- const stroke: string = "#94a3b8";
231
- const edges: Edge[] = sortedDeps.map((dep: ServiceEdgeData): Edge => {
232
- return {
233
- id: `e-${dep.fromServiceId}-${dep.toServiceId}`,
234
- source: dep.fromServiceId,
235
- target: dep.toServiceId,
236
- animated: false,
237
- style: { stroke, strokeWidth: 2 },
238
- markerEnd: { type: MarkerType.Arrow, color: stroke },
239
- type: "smoothstep",
240
- };
241
- });
242
- setRfNodes(nodes);
243
- setRfEdges(edges);
244
- }
245
- };
246
-
247
- layout();
248
- }, [props.services, props.dependencies]);
249
-
250
- return (
251
- <div style={{ width: "100%", height: 600 }}>
252
- <style>{`
253
- /* Hide/transparentize connection handles (ports) for read-only view */
254
- .service-dependency-graph .react-flow__handle {
255
- background: transparent !important;
256
- border-color: transparent !important;
257
- }
258
- `}</style>
259
- <ReactFlow
260
- className="service-dependency-graph"
261
- nodes={rfNodes}
262
- edges={rfEdges}
263
- fitView
264
- nodesDraggable={false}
265
- nodesConnectable={false}
266
- elementsSelectable={false}
267
- edgesUpdatable={false}
268
- connectOnClick={false}
269
- >
270
- <MiniMap
271
- nodeColor={(n: Node): string => {
272
- return (
273
- (n.style as any)?.background ||
274
- (n.data as any)?.color ||
275
- "#ffffff"
276
- );
277
- }}
278
- />
279
- <Controls />
280
- <Background gap={12} size={1} />
281
- </ReactFlow>
282
- </div>
283
- );
284
- };
285
-
286
- export default ServiceDependencyGraph;
@@ -1,132 +0,0 @@
1
- import DashboardHostMetricChartComponent, {
2
- HostMetricKind,
3
- } from "../../../Types/Dashboard/DashboardComponents/DashboardHostMetricChartComponent";
4
- import { ObjectType } from "../../../Types/JSON";
5
- import ObjectID from "../../../Types/ObjectID";
6
- import DashboardBaseComponentUtil from "./DashboardBaseComponent";
7
- import {
8
- ComponentArgument,
9
- ComponentArgumentSection,
10
- ComponentInputType,
11
- } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
12
- import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
13
- import DashboardChartType from "../../../Types/Dashboard/Chart/ChartType";
14
-
15
- const DataSection: ComponentArgumentSection = {
16
- name: "Data Source",
17
- description: "Pick which host metric to plot",
18
- order: 1,
19
- };
20
-
21
- const DisplaySection: ComponentArgumentSection = {
22
- name: "Display Options",
23
- description: "Customize the chart title and description",
24
- order: 2,
25
- defaultCollapsed: true,
26
- };
27
-
28
- export default class DashboardHostMetricChartComponentUtil extends DashboardBaseComponentUtil {
29
- public static override getDefaultComponent(): DashboardHostMetricChartComponent {
30
- return {
31
- _type: ObjectType.DashboardComponent,
32
- componentType: DashboardComponentType.HostMetricChart,
33
- widthInDashboardUnits: 6,
34
- heightInDashboardUnits: 3,
35
- topInDashboardUnits: 0,
36
- leftInDashboardUnits: 0,
37
- componentId: ObjectID.generate(),
38
- minHeightInDashboardUnits: 3,
39
- minWidthInDashboardUnits: 6,
40
- arguments: {
41
- metricKind: HostMetricKind.CpuUtilization,
42
- chartType: DashboardChartType.Line,
43
- },
44
- };
45
- }
46
-
47
- public static override getComponentConfigArguments(): Array<
48
- ComponentArgument<DashboardHostMetricChartComponent>
49
- > {
50
- const args: Array<ComponentArgument<DashboardHostMetricChartComponent>> =
51
- [];
52
-
53
- args.push({
54
- name: "Metric",
55
- description: "Which host telemetry metric to plot",
56
- required: true,
57
- type: ComponentInputType.Dropdown,
58
- id: "metricKind",
59
- section: DataSection,
60
- dropdownOptions: [
61
- { label: "CPU Utilization", value: HostMetricKind.CpuUtilization },
62
- {
63
- label: "Memory Utilization",
64
- value: HostMetricKind.MemoryUtilization,
65
- },
66
- { label: "Memory Usage (bytes)", value: HostMetricKind.MemoryUsage },
67
- { label: "Disk I/O (per sec)", value: HostMetricKind.DiskIo },
68
- { label: "Network I/O (per sec)", value: HostMetricKind.NetworkIo },
69
- { label: "Filesystem Usage", value: HostMetricKind.Filesystem },
70
- { label: "Process Count", value: HostMetricKind.ProcessCount },
71
- ],
72
- });
73
-
74
- args.push({
75
- name: "Host",
76
- description:
77
- "Limit to one host by host identifier (host.name attribute). Leave blank to plot one series per host.",
78
- required: false,
79
- type: ComponentInputType.Text,
80
- id: "hostIdentifier",
81
- placeholder: "production-host-1",
82
- section: DataSection,
83
- });
84
-
85
- args.push({
86
- name: "Chart Type",
87
- description: "How the data will be visualized",
88
- required: false,
89
- type: ComponentInputType.Dropdown,
90
- id: "chartType",
91
- section: DisplaySection,
92
- dropdownOptions: [
93
- {
94
- label: "Line Chart",
95
- value: DashboardChartType.Line,
96
- },
97
- {
98
- label: "Bar Chart",
99
- value: DashboardChartType.Bar,
100
- },
101
- {
102
- label: "Area Chart",
103
- value: DashboardChartType.Area,
104
- },
105
- {
106
- label: "Stacked Area Chart",
107
- value: DashboardChartType.StackedArea,
108
- },
109
- ],
110
- });
111
-
112
- args.push({
113
- name: "Title",
114
- description: "Displayed above the chart",
115
- required: false,
116
- type: ComponentInputType.Text,
117
- id: "title",
118
- section: DisplaySection,
119
- });
120
-
121
- args.push({
122
- name: "Description",
123
- description: "Subtitle shown below the title",
124
- required: false,
125
- type: ComponentInputType.LongText,
126
- id: "description",
127
- section: DisplaySection,
128
- });
129
-
130
- return args;
131
- }
132
- }