@oneuptime/common 10.0.34 → 10.0.36
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.
- package/Models/DatabaseModels/Index.ts +3 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +640 -0
- package/Server/API/IPWhitelistAPI.ts +31 -0
- package/Server/API/Index.ts +2 -0
- package/Server/EnvironmentConfig.ts +2 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1774000000000-MigrationName.ts +80 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1774000000001-MigrationName.ts +137 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Services/KubernetesClusterService.ts +109 -0
- package/Server/Services/UserService.ts +6 -0
- package/Server/Services/UserSessionService.ts +23 -0
- package/Server/Types/Markdown.ts +11 -3
- package/Server/Utils/Express.ts +0 -6
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +4 -1
- package/Server/Utils/StartServer.ts +7 -3
- package/Server/Utils/VM/VMRunner.ts +3 -0
- package/Types/Code/CodeType.ts +1 -1
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Metrics/MetricQueryConfigData.ts +1 -0
- package/Types/Monitor/CriteriaFilter.ts +19 -0
- package/Types/Monitor/KubernetesAlertTemplates.ts +703 -0
- package/Types/Monitor/KubernetesMetricCatalog.ts +347 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +86 -0
- package/Types/Monitor/MonitorStep.ts +36 -1
- package/Types/Monitor/MonitorStepKubernetesMonitor.ts +50 -0
- package/Types/Monitor/MonitorType.ts +14 -10
- package/Types/Permission.ts +42 -0
- package/UI/Components/AlertBanner/AlertBanner.tsx +69 -0
- package/UI/Components/ConditionsTable/ConditionsTable.tsx +149 -0
- package/UI/Components/Dictionary/DictionaryOfStingsViewer.tsx +35 -15
- package/UI/Components/ExpandableText/ExpandableText.tsx +42 -0
- package/UI/Components/FilterButtons/FilterButtons.tsx +60 -0
- package/UI/Components/Icon/Icon.tsx +51 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +2 -0
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +25 -0
- package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +4 -1
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +85 -53
- package/UI/Components/Navbar/NavBarMenu.tsx +2 -2
- package/UI/Components/ResourceUsageBar/ResourceUsageBar.tsx +58 -0
- package/UI/Components/StackedProgressBar/StackedProgressBar.tsx +81 -0
- package/UI/Components/StatusBadge/StatusBadge.tsx +44 -0
- package/UI/Components/Tabs/Tabs.tsx +36 -8
- package/UI/Utils/Dropdown.ts +2 -1
- package/Utils/Traces/CriticalPath.ts +348 -0
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +661 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -0
- package/build/dist/Server/API/IPWhitelistAPI.js +24 -0
- package/build/dist/Server/API/IPWhitelistAPI.js.map +1 -0
- package/build/dist/Server/API/Index.js +2 -0
- package/build/dist/Server/API/Index.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +1 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774000000000-MigrationName.js +35 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774000000000-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774000000001-MigrationName.js +52 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774000000001-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +117 -0
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -0
- package/build/dist/Server/Services/UserService.js +5 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/UserSessionService.js +20 -0
- package/build/dist/Server/Services/UserSessionService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +10 -2
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/Express.js +1 -42
- package/build/dist/Server/Utils/Express.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +2 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +4 -3
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +3 -0
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Types/Code/CodeType.js +1 -1
- package/build/dist/Types/Code/CodeType.js.map +1 -1
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +18 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +594 -0
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +311 -0
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +78 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +24 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepKubernetesMonitor.js +30 -0
- package/build/dist/Types/Monitor/MonitorStepKubernetesMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +13 -10
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Permission.js +36 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/UI/Components/AlertBanner/AlertBanner.js +42 -0
- package/build/dist/UI/Components/AlertBanner/AlertBanner.js.map +1 -0
- package/build/dist/UI/Components/ConditionsTable/ConditionsTable.js +83 -0
- package/build/dist/UI/Components/ConditionsTable/ConditionsTable.js.map +1 -0
- package/build/dist/UI/Components/Dictionary/DictionaryOfStingsViewer.js +14 -8
- package/build/dist/UI/Components/Dictionary/DictionaryOfStingsViewer.js.map +1 -1
- package/build/dist/UI/Components/ExpandableText/ExpandableText.js +19 -0
- package/build/dist/UI/Components/ExpandableText/ExpandableText.js.map +1 -0
- package/build/dist/UI/Components/FilterButtons/FilterButtons.js +17 -0
- package/build/dist/UI/Components/FilterButtons/FilterButtons.js.map +1 -0
- package/build/dist/UI/Components/Icon/Icon.js +27 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +4 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +3 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +50 -43
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenu.js +2 -2
- package/build/dist/UI/Components/ResourceUsageBar/ResourceUsageBar.js +23 -0
- package/build/dist/UI/Components/ResourceUsageBar/ResourceUsageBar.js.map +1 -0
- package/build/dist/UI/Components/StackedProgressBar/StackedProgressBar.js +34 -0
- package/build/dist/UI/Components/StackedProgressBar/StackedProgressBar.js.map +1 -0
- package/build/dist/UI/Components/StatusBadge/StatusBadge.js +22 -0
- package/build/dist/UI/Components/StatusBadge/StatusBadge.js.map +1 -0
- package/build/dist/UI/Components/Tabs/Tabs.js +32 -9
- package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
- package/build/dist/UI/Utils/Dropdown.js +2 -1
- package/build/dist/UI/Utils/Dropdown.js.map +1 -1
- package/build/dist/Utils/Traces/CriticalPath.js +240 -0
- package/build/dist/Utils/Traces/CriticalPath.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,23 +1,46 @@
|
|
|
1
1
|
import TabElement from "./Tab";
|
|
2
|
-
import React, { useEffect, useState, } from "react";
|
|
2
|
+
import React, { useEffect, useRef, useState, } from "react";
|
|
3
3
|
const Tabs = (props) => {
|
|
4
|
-
const [
|
|
4
|
+
const [currentTabName, setCurrentTabName] = useState(null);
|
|
5
|
+
const hasInitialized = useRef(false);
|
|
6
|
+
// Initialize current tab only once, or when the tab list names change
|
|
5
7
|
useEffect(() => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
const tabNames = props.tabs.map((t) => {
|
|
9
|
+
return t.name;
|
|
10
|
+
});
|
|
11
|
+
if (!hasInitialized.current && props.tabs.length > 0) {
|
|
12
|
+
hasInitialized.current = true;
|
|
13
|
+
setCurrentTabName(props.tabs[0].name);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// If current tab no longer exists in the list, reset to first
|
|
17
|
+
if (currentTabName && !tabNames.includes(currentTabName)) {
|
|
18
|
+
setCurrentTabName(props.tabs.length > 0 ? props.tabs[0].name : null);
|
|
19
|
+
}
|
|
20
|
+
}, [
|
|
21
|
+
props.tabs
|
|
22
|
+
.map((t) => {
|
|
23
|
+
return t.name;
|
|
24
|
+
})
|
|
25
|
+
.join(","),
|
|
26
|
+
]);
|
|
27
|
+
// Find the current tab object by name
|
|
28
|
+
const currentTab = props.tabs.find((t) => {
|
|
29
|
+
return t.name === currentTabName;
|
|
30
|
+
});
|
|
8
31
|
useEffect(() => {
|
|
9
32
|
if (currentTab && props.onTabChange) {
|
|
10
33
|
props.onTabChange(currentTab);
|
|
11
34
|
}
|
|
12
|
-
}, [
|
|
13
|
-
const tabPanelId = `tabpanel-${
|
|
35
|
+
}, [currentTabName]);
|
|
36
|
+
const tabPanelId = `tabpanel-${currentTabName || "default"}`;
|
|
14
37
|
return (React.createElement("div", null,
|
|
15
38
|
React.createElement("nav", { role: "tablist", className: "flex space-x-2 overflow-x-auto md:overflow-visible md:space-x-4", "aria-label": "Tabs" }, props.tabs.map((tab) => {
|
|
16
39
|
return (React.createElement(TabElement, { key: tab.name, tab: tab, onClick: () => {
|
|
17
|
-
|
|
18
|
-
}, isSelected: tab ===
|
|
40
|
+
setCurrentTabName(tab.name);
|
|
41
|
+
}, isSelected: tab.name === currentTabName, tabPanelId: tabPanelId }));
|
|
19
42
|
})),
|
|
20
|
-
React.createElement("div", { id: tabPanelId, role: "tabpanel", "aria-labelledby": `tab-${
|
|
43
|
+
React.createElement("div", { id: tabPanelId, role: "tabpanel", "aria-labelledby": `tab-${currentTabName || "default"}`, className: "mt-3 ml-1" }, currentTab && currentTab.children)));
|
|
21
44
|
};
|
|
22
45
|
export default Tabs;
|
|
23
46
|
//# sourceMappingURL=Tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../../../UI/Components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,EAGZ,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AAOf,MAAM,IAAI,GAAsC,CAC9C,KAAqB,EACP,EAAE;IAChB,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../../../UI/Components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,EAGZ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AAOf,MAAM,IAAI,GAAsC,CAC9C,KAAqB,EACP,EAAE;IAChB,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC1E,MAAM,cAAc,GAClB,MAAM,CAAU,KAAK,CAAC,CAAC;IAEzB,sEAAsE;IACtE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;YACxD,OAAO,CAAC,CAAC,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,8DAA8D;QAC9D,IAAI,cAAc,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACzD,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,EAAE;QACD,KAAK,CAAC,IAAI;aACP,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;YACd,OAAO,CAAC,CAAC,IAAI,CAAC;QAChB,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC;KACb,CAAC,CAAC;IAEH,sCAAsC;IACtC,MAAM,UAAU,GAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE;QAC7D,OAAO,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACpC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,UAAU,GAAW,YAAY,cAAc,IAAI,SAAS,EAAE,CAAC;IAErE,OAAO,CACL;QACE,6BACE,IAAI,EAAC,SAAS,EACd,SAAS,EAAC,iEAAiE,gBAChE,MAAM,IAEhB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;YAC3B,OAAO,CACL,oBAAC,UAAU,IACT,GAAG,EAAE,GAAG,CAAC,IAAI,EACb,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,GAAG,EAAE;oBACZ,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC,EACD,UAAU,EAAE,GAAG,CAAC,IAAI,KAAK,cAAc,EACvC,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QACJ,CAAC,CAAC,CACE;QACN,6BACE,EAAE,EAAE,UAAU,EACd,IAAI,EAAC,UAAU,qBACE,OAAO,cAAc,IAAI,SAAS,EAAE,EACrD,SAAS,EAAC,WAAW,IAEpB,UAAU,IAAI,UAAU,CAAC,QAAQ,CAC9B,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../../../UI/Utils/Dropdown.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAO5C,MAAM,CAAC,OAAO,OAAO,YAAY;IACxB,MAAM,CAAC,0BAA0B,CACtC,GAAY,EACZ,gBAAyB,KAAK;QAE9B,MAAM,eAAe,GAA0B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAC5D,GAAG,CAAC,CAAC,GAAoB,EAAE,EAAE;YAC5B,mGAAmG;YACnG,IAAI,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;gBACzD,KAAK,EAAE,UAAU,CAAC,sBAAsB,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC;oBACzD,CAAC,CAAC,UAAU,CAAC,eAAe,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC;oBAC/C,CAAC,CAAE,GAAW,CAAC,GAAG,CAAC;aACtB,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,MAA6B,EAAE,EAAE;YACxC,OAAO,MAAM,KAAK,IAAI,CAAC;QACzB,CAAC,CAA0B,CAAC;QAE9B,OAAO,eAAe,CAAC;IACzB,CAAC;IAEM,MAAM,CAAC,iCAAiC,CAC7C,UAAmB,EACnB,KAAa;QAEb,MAAM,OAAO,GACX,YAAY,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAA+B,OAAO,CAAC,IAAI,CACrD,CAAC,MAAsB,EAAE,EAAE;YACzB,OAAO,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;QAChC,CAAC,CACF,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,iCAAiC,CAE7C,IAID;QACC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAgB,EAAE,EAAE;YACzC,MAAM,MAAM,GAAmB;gBAC7B,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAW;gBACrD,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAW;aACtD,CAAC;YAEF,MAAM,eAAe,GACnB,OAAO,IAAI,CAAC,mBAAmB,KAAK,UAAU;gBAC5C,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,CAAC,CAAC,IAAI,CAAC;YAEX,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAiB,IAAI,CAAC,cAAc,CAC7C,eAAe,CACA,CAAC;gBAElB,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,2BAA2B,CACvC,GAAkB;QAElB,
|
|
1
|
+
{"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../../../UI/Utils/Dropdown.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAO5C,MAAM,CAAC,OAAO,OAAO,YAAY;IACxB,MAAM,CAAC,0BAA0B,CACtC,GAAY,EACZ,gBAAyB,KAAK;QAE9B,MAAM,eAAe,GAA0B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAC5D,GAAG,CAAC,CAAC,GAAoB,EAAE,EAAE;YAC5B,mGAAmG;YACnG,IAAI,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;gBACzD,KAAK,EAAE,UAAU,CAAC,sBAAsB,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC;oBACzD,CAAC,CAAC,UAAU,CAAC,eAAe,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC;oBAC/C,CAAC,CAAE,GAAW,CAAC,GAAG,CAAC;aACtB,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,MAA6B,EAAE,EAAE;YACxC,OAAO,MAAM,KAAK,IAAI,CAAC;QACzB,CAAC,CAA0B,CAAC;QAE9B,OAAO,eAAe,CAAC;IACzB,CAAC;IAEM,MAAM,CAAC,iCAAiC,CAC7C,UAAmB,EACnB,KAAa;QAEb,MAAM,OAAO,GACX,YAAY,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAA+B,OAAO,CAAC,IAAI,CACrD,CAAC,MAAsB,EAAE,EAAE;YACzB,OAAO,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;QAChC,CAAC,CACF,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,iCAAiC,CAE7C,IAID;QACC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAgB,EAAE,EAAE;YACzC,MAAM,MAAM,GAAmB;gBAC7B,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAW;gBACrD,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAW;aACtD,CAAC;YAEF,MAAM,eAAe,GACnB,OAAO,IAAI,CAAC,mBAAmB,KAAK,UAAU;gBAC5C,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,CAAC,CAAC,IAAI,CAAC;YAEX,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAiB,IAAI,CAAC,cAAc,CAC7C,eAAe,CACA,CAAC;gBAElB,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,2BAA2B,CACvC,GAAkB;QAElB,MAAM,SAAS,GAAkB,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE;YACpC,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Critical Path Analysis for distributed traces
|
|
3
|
+
* Computes self-time, critical path, and bottleneck identification
|
|
4
|
+
*/
|
|
5
|
+
export default class CriticalPathUtil {
|
|
6
|
+
/**
|
|
7
|
+
* Compute self-time for each span.
|
|
8
|
+
* Self-time = span duration minus the time covered by direct children,
|
|
9
|
+
* accounting for overlapping children.
|
|
10
|
+
*/
|
|
11
|
+
static computeSelfTimes(spans) {
|
|
12
|
+
const result = new Map();
|
|
13
|
+
// Build parent -> children index
|
|
14
|
+
const childrenMap = new Map();
|
|
15
|
+
for (const span of spans) {
|
|
16
|
+
if (span.parentSpanId) {
|
|
17
|
+
const children = childrenMap.get(span.parentSpanId) || [];
|
|
18
|
+
children.push(span);
|
|
19
|
+
childrenMap.set(span.parentSpanId, children);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
for (const span of spans) {
|
|
23
|
+
const children = childrenMap.get(span.spanId) || [];
|
|
24
|
+
const childTimeUnixNano = CriticalPathUtil.computeMergedChildDuration(children, span.startTimeUnixNano, span.endTimeUnixNano);
|
|
25
|
+
const selfTimeUnixNano = Math.max(0, span.durationUnixNano - childTimeUnixNano);
|
|
26
|
+
result.set(span.spanId, {
|
|
27
|
+
spanId: span.spanId,
|
|
28
|
+
selfTimeUnixNano,
|
|
29
|
+
childTimeUnixNano,
|
|
30
|
+
totalTimeUnixNano: span.durationUnixNano,
|
|
31
|
+
selfTimePercent: span.durationUnixNano > 0
|
|
32
|
+
? (selfTimeUnixNano / span.durationUnixNano) * 100
|
|
33
|
+
: 0,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Compute the merged duration of child spans within the parent's time window.
|
|
40
|
+
* Handles overlapping children by merging intervals.
|
|
41
|
+
*/
|
|
42
|
+
static computeMergedChildDuration(children, parentStart, parentEnd) {
|
|
43
|
+
if (children.length === 0) {
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
// Clamp children to parent boundaries and create intervals
|
|
47
|
+
const intervals = children
|
|
48
|
+
.map((child) => {
|
|
49
|
+
return {
|
|
50
|
+
start: Math.max(child.startTimeUnixNano, parentStart),
|
|
51
|
+
end: Math.min(child.endTimeUnixNano, parentEnd),
|
|
52
|
+
};
|
|
53
|
+
})
|
|
54
|
+
.filter((interval) => {
|
|
55
|
+
return interval.end > interval.start;
|
|
56
|
+
});
|
|
57
|
+
if (intervals.length === 0) {
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
// Sort by start time
|
|
61
|
+
intervals.sort((a, b) => {
|
|
62
|
+
return a.start - b.start;
|
|
63
|
+
});
|
|
64
|
+
// Merge overlapping intervals
|
|
65
|
+
let mergedDuration = 0;
|
|
66
|
+
let currentStart = intervals[0].start;
|
|
67
|
+
let currentEnd = intervals[0].end;
|
|
68
|
+
for (let i = 1; i < intervals.length; i++) {
|
|
69
|
+
const interval = intervals[i];
|
|
70
|
+
if (interval.start <= currentEnd) {
|
|
71
|
+
// Overlapping - extend
|
|
72
|
+
currentEnd = Math.max(currentEnd, interval.end);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Non-overlapping - add previous and start new
|
|
76
|
+
mergedDuration += currentEnd - currentStart;
|
|
77
|
+
currentStart = interval.start;
|
|
78
|
+
currentEnd = interval.end;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
mergedDuration += currentEnd - currentStart;
|
|
82
|
+
return mergedDuration;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Compute the critical path through the trace.
|
|
86
|
+
* The critical path is the longest sequential chain of spans,
|
|
87
|
+
* accounting for parallelism (parallel children don't add to the critical path together).
|
|
88
|
+
*/
|
|
89
|
+
static computeCriticalPath(spans) {
|
|
90
|
+
if (spans.length === 0) {
|
|
91
|
+
return {
|
|
92
|
+
criticalPathSpanIds: [],
|
|
93
|
+
totalTraceDurationUnixNano: 0,
|
|
94
|
+
criticalPathDurationUnixNano: 0,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// Find total trace duration
|
|
98
|
+
let traceStart = spans[0].startTimeUnixNano;
|
|
99
|
+
let traceEnd = spans[0].endTimeUnixNano;
|
|
100
|
+
for (const span of spans) {
|
|
101
|
+
if (span.startTimeUnixNano < traceStart) {
|
|
102
|
+
traceStart = span.startTimeUnixNano;
|
|
103
|
+
}
|
|
104
|
+
if (span.endTimeUnixNano > traceEnd) {
|
|
105
|
+
traceEnd = span.endTimeUnixNano;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Build parent -> children index
|
|
109
|
+
const childrenMap = new Map();
|
|
110
|
+
const spanMap = new Map();
|
|
111
|
+
const allSpanIds = new Set();
|
|
112
|
+
for (const span of spans) {
|
|
113
|
+
spanMap.set(span.spanId, span);
|
|
114
|
+
allSpanIds.add(span.spanId);
|
|
115
|
+
}
|
|
116
|
+
for (const span of spans) {
|
|
117
|
+
if (span.parentSpanId && allSpanIds.has(span.parentSpanId)) {
|
|
118
|
+
const children = childrenMap.get(span.parentSpanId) || [];
|
|
119
|
+
children.push(span);
|
|
120
|
+
childrenMap.set(span.parentSpanId, children);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Find root spans
|
|
124
|
+
const rootSpans = spans.filter((span) => {
|
|
125
|
+
return !span.parentSpanId || !allSpanIds.has(span.parentSpanId);
|
|
126
|
+
});
|
|
127
|
+
if (rootSpans.length === 0) {
|
|
128
|
+
return {
|
|
129
|
+
criticalPathSpanIds: [],
|
|
130
|
+
totalTraceDurationUnixNano: traceEnd - traceStart,
|
|
131
|
+
criticalPathDurationUnixNano: 0,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// For each span, compute the critical path weight (longest path through this span and descendants)
|
|
135
|
+
const criticalPathCache = new Map();
|
|
136
|
+
const computeWeight = (spanId) => {
|
|
137
|
+
const cached = criticalPathCache.get(spanId);
|
|
138
|
+
if (cached) {
|
|
139
|
+
return cached;
|
|
140
|
+
}
|
|
141
|
+
const span = spanMap.get(spanId);
|
|
142
|
+
if (!span) {
|
|
143
|
+
return { weight: 0, path: [] };
|
|
144
|
+
}
|
|
145
|
+
const children = childrenMap.get(spanId) || [];
|
|
146
|
+
if (children.length === 0) {
|
|
147
|
+
const result = {
|
|
148
|
+
weight: span.durationUnixNano,
|
|
149
|
+
path: [spanId],
|
|
150
|
+
};
|
|
151
|
+
criticalPathCache.set(spanId, result);
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
// Find the child with the longest critical path
|
|
155
|
+
let maxChildWeight = 0;
|
|
156
|
+
let maxChildPath = [];
|
|
157
|
+
for (const child of children) {
|
|
158
|
+
const childResult = computeWeight(child.spanId);
|
|
159
|
+
if (childResult.weight > maxChildWeight) {
|
|
160
|
+
maxChildWeight = childResult.weight;
|
|
161
|
+
maxChildPath = childResult.path;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Self time contribution
|
|
165
|
+
const selfTimes = CriticalPathUtil.computeSelfTimes([span, ...children]);
|
|
166
|
+
const selfTime = selfTimes.get(spanId);
|
|
167
|
+
const selfTimeValue = selfTime ? selfTime.selfTimeUnixNano : 0;
|
|
168
|
+
const result = {
|
|
169
|
+
weight: selfTimeValue + maxChildWeight,
|
|
170
|
+
path: [spanId, ...maxChildPath],
|
|
171
|
+
};
|
|
172
|
+
criticalPathCache.set(spanId, result);
|
|
173
|
+
return result;
|
|
174
|
+
};
|
|
175
|
+
// Find the root with the longest critical path
|
|
176
|
+
let maxWeight = 0;
|
|
177
|
+
let criticalPath = [];
|
|
178
|
+
for (const rootSpan of rootSpans) {
|
|
179
|
+
const result = computeWeight(rootSpan.spanId);
|
|
180
|
+
if (result.weight > maxWeight) {
|
|
181
|
+
maxWeight = result.weight;
|
|
182
|
+
criticalPath = result.path;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
criticalPathSpanIds: criticalPath,
|
|
187
|
+
totalTraceDurationUnixNano: traceEnd - traceStart,
|
|
188
|
+
criticalPathDurationUnixNano: maxWeight,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Compute latency breakdown by service.
|
|
193
|
+
*/
|
|
194
|
+
static computeServiceBreakdown(spans) {
|
|
195
|
+
const selfTimes = CriticalPathUtil.computeSelfTimes(spans);
|
|
196
|
+
// Find total trace duration
|
|
197
|
+
let traceStart = Number.MAX_SAFE_INTEGER;
|
|
198
|
+
let traceEnd = 0;
|
|
199
|
+
for (const span of spans) {
|
|
200
|
+
if (span.startTimeUnixNano < traceStart) {
|
|
201
|
+
traceStart = span.startTimeUnixNano;
|
|
202
|
+
}
|
|
203
|
+
if (span.endTimeUnixNano > traceEnd) {
|
|
204
|
+
traceEnd = span.endTimeUnixNano;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const totalDuration = traceEnd - traceStart;
|
|
208
|
+
// Aggregate by service
|
|
209
|
+
const serviceMap = new Map();
|
|
210
|
+
for (const span of spans) {
|
|
211
|
+
const serviceId = span.serviceId || "unknown";
|
|
212
|
+
const entry = serviceMap.get(serviceId) || {
|
|
213
|
+
totalDuration: 0,
|
|
214
|
+
selfTime: 0,
|
|
215
|
+
spanCount: 0,
|
|
216
|
+
};
|
|
217
|
+
entry.totalDuration += span.durationUnixNano;
|
|
218
|
+
const selfTime = selfTimes.get(span.spanId);
|
|
219
|
+
entry.selfTime += selfTime ? selfTime.selfTimeUnixNano : 0;
|
|
220
|
+
entry.spanCount += 1;
|
|
221
|
+
serviceMap.set(serviceId, entry);
|
|
222
|
+
}
|
|
223
|
+
const result = [];
|
|
224
|
+
for (const [serviceId, data] of serviceMap.entries()) {
|
|
225
|
+
result.push({
|
|
226
|
+
serviceId,
|
|
227
|
+
totalDurationUnixNano: data.totalDuration,
|
|
228
|
+
selfTimeUnixNano: data.selfTime,
|
|
229
|
+
spanCount: data.spanCount,
|
|
230
|
+
percentOfTrace: totalDuration > 0 ? (data.selfTime / totalDuration) * 100 : 0,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
// Sort by self-time descending (biggest contributors first)
|
|
234
|
+
result.sort((a, b) => {
|
|
235
|
+
return b.selfTimeUnixNano - a.selfTimeUnixNano;
|
|
236
|
+
});
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=CriticalPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CriticalPath.js","sourceRoot":"","sources":["../../../../Utils/Traces/CriticalPath.ts"],"names":[],"mappings":"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"}
|