@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
@@ -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;