@openchoreo/backstage-plugin-openchoreo-observability 1.1.0
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/CHANGELOG.md +5 -0
- package/README.md +22 -0
- package/dist/api/FinOpsAgentApi.esm.js +43 -0
- package/dist/api/FinOpsAgentApi.esm.js.map +1 -0
- package/dist/api/ObservabilityApi.esm.js +568 -0
- package/dist/api/ObservabilityApi.esm.js.map +1 -0
- package/dist/api/ObserverUrlCache.esm.js +59 -0
- package/dist/api/ObserverUrlCache.esm.js.map +1 -0
- package/dist/api/RCAAgentApi.esm.js +104 -0
- package/dist/api/RCAAgentApi.esm.js.map +1 -0
- package/dist/components/Alerts/AlertRow.esm.js +203 -0
- package/dist/components/Alerts/AlertRow.esm.js.map +1 -0
- package/dist/components/Alerts/AlertsActions.esm.js +77 -0
- package/dist/components/Alerts/AlertsActions.esm.js.map +1 -0
- package/dist/components/Alerts/AlertsFilter.esm.js +95 -0
- package/dist/components/Alerts/AlertsFilter.esm.js.map +1 -0
- package/dist/components/Alerts/AlertsTable.esm.js +63 -0
- package/dist/components/Alerts/AlertsTable.esm.js.map +1 -0
- package/dist/components/Alerts/ObservabilityAlertsPage.esm.js +251 -0
- package/dist/components/Alerts/ObservabilityAlertsPage.esm.js.map +1 -0
- package/dist/components/Alerts/types.esm.js +4 -0
- package/dist/components/Alerts/types.esm.js.map +1 -0
- package/dist/components/CostAnalysis/CostAnalysisPage.esm.js +141 -0
- package/dist/components/CostAnalysis/CostAnalysisPage.esm.js.map +1 -0
- package/dist/components/CostAnalysis/CostAnalysisReport.esm.js +128 -0
- package/dist/components/CostAnalysis/CostAnalysisReport.esm.js.map +1 -0
- package/dist/components/CostAnalysis/CostAnalysisReportView.esm.js +517 -0
- package/dist/components/CostAnalysis/CostAnalysisReportView.esm.js.map +1 -0
- package/dist/components/CostAnalysis/CostAnalysisTable.esm.js +149 -0
- package/dist/components/CostAnalysis/CostAnalysisTable.esm.js.map +1 -0
- package/dist/components/CostAnalysis/FinOpsApplyButton.esm.js +112 -0
- package/dist/components/CostAnalysis/FinOpsApplyButton.esm.js.map +1 -0
- package/dist/components/CostAnalysis/index.esm.js +2 -0
- package/dist/components/CostAnalysis/index.esm.js.map +1 -0
- package/dist/components/Incidents/IncidentRow.esm.js +258 -0
- package/dist/components/Incidents/IncidentRow.esm.js.map +1 -0
- package/dist/components/Incidents/IncidentsActions.esm.js +77 -0
- package/dist/components/Incidents/IncidentsActions.esm.js.map +1 -0
- package/dist/components/Incidents/IncidentsFilter.esm.js +144 -0
- package/dist/components/Incidents/IncidentsFilter.esm.js.map +1 -0
- package/dist/components/Incidents/IncidentsTable.esm.js +68 -0
- package/dist/components/Incidents/IncidentsTable.esm.js.map +1 -0
- package/dist/components/Incidents/ObservabilityProjectIncidentsPage.esm.js +283 -0
- package/dist/components/Incidents/ObservabilityProjectIncidentsPage.esm.js.map +1 -0
- package/dist/components/Incidents/types.esm.js +8 -0
- package/dist/components/Incidents/types.esm.js.map +1 -0
- package/dist/components/Metrics/ChartTooltip.esm.js +53 -0
- package/dist/components/Metrics/ChartTooltip.esm.js.map +1 -0
- package/dist/components/Metrics/HTTPMetricsSection.esm.js +109 -0
- package/dist/components/Metrics/HTTPMetricsSection.esm.js.map +1 -0
- package/dist/components/Metrics/MetricGraphByComponent.esm.js +99 -0
- package/dist/components/Metrics/MetricGraphByComponent.esm.js.map +1 -0
- package/dist/components/Metrics/MetricsActions.esm.js +30 -0
- package/dist/components/Metrics/MetricsActions.esm.js.map +1 -0
- package/dist/components/Metrics/MetricsFilters.esm.js +49 -0
- package/dist/components/Metrics/MetricsFilters.esm.js.map +1 -0
- package/dist/components/Metrics/ObservabilityMetricsPage.esm.js +196 -0
- package/dist/components/Metrics/ObservabilityMetricsPage.esm.js.map +1 -0
- package/dist/components/Metrics/styles.esm.js +55 -0
- package/dist/components/Metrics/styles.esm.js.map +1 -0
- package/dist/components/Metrics/utils.esm.js +221 -0
- package/dist/components/Metrics/utils.esm.js.map +1 -0
- package/dist/components/RCA/RCAActions.esm.js +42 -0
- package/dist/components/RCA/RCAActions.esm.js.map +1 -0
- package/dist/components/RCA/RCAFilters.esm.js +100 -0
- package/dist/components/RCA/RCAFilters.esm.js.map +1 -0
- package/dist/components/RCA/RCAPage.esm.js +137 -0
- package/dist/components/RCA/RCAPage.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/EntityLinkContext.esm.js +9 -0
- package/dist/components/RCA/RCAReport/EntityLinkContext.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/FormattedText.esm.js +94 -0
- package/dist/components/RCA/RCAReport/FormattedText.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/RCAReportView.esm.js +308 -0
- package/dist/components/RCA/RCAReport/RCAReportView.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/AssessmentSection.esm.js +113 -0
- package/dist/components/RCA/RCAReport/sections/AssessmentSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/ChatPanelSection.esm.js +272 -0
- package/dist/components/RCA/RCAReport/sections/ChatPanelSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/ExcludedCausesSection.esm.js +48 -0
- package/dist/components/RCA/RCAReport/sections/ExcludedCausesSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/IncidentOverviewSection.esm.js +205 -0
- package/dist/components/RCA/RCAReport/sections/IncidentOverviewSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/InvestigationPathSection.esm.js +121 -0
- package/dist/components/RCA/RCAReport/sections/InvestigationPathSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/PatchTabContent.esm.js +593 -0
- package/dist/components/RCA/RCAReport/sections/PatchTabContent.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/QuickFixesPanelSection.esm.js +35 -0
- package/dist/components/RCA/RCAReport/sections/QuickFixesPanelSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/RecommendationsSection.esm.js +54 -0
- package/dist/components/RCA/RCAReport/sections/RecommendationsSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/RootCausesSection.esm.js +526 -0
- package/dist/components/RCA/RCAReport/sections/RootCausesSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/SystemTimelineSection.esm.js +70 -0
- package/dist/components/RCA/RCAReport/sections/SystemTimelineSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/VisibilityImprovementsSection.esm.js +54 -0
- package/dist/components/RCA/RCAReport/sections/VisibilityImprovementsSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/styles.esm.js +467 -0
- package/dist/components/RCA/RCAReport/styles.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport.esm.js +109 -0
- package/dist/components/RCA/RCAReport.esm.js.map +1 -0
- package/dist/components/RCA/RCATable.esm.js +140 -0
- package/dist/components/RCA/RCATable.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/LogEntry.esm.js +182 -0
- package/dist/components/RuntimeLogs/LogEntry.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/LogsActions.esm.js +106 -0
- package/dist/components/RuntimeLogs/LogsActions.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/LogsFilter.esm.js +200 -0
- package/dist/components/RuntimeLogs/LogsFilter.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/LogsTable.esm.js +91 -0
- package/dist/components/RuntimeLogs/LogsTable.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/ObservabilityProjectRuntimeLogsPage.esm.js +220 -0
- package/dist/components/RuntimeLogs/ObservabilityProjectRuntimeLogsPage.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/ObservabilityRuntimeLogsPage.esm.js +222 -0
- package/dist/components/RuntimeLogs/ObservabilityRuntimeLogsPage.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/styles.esm.js +256 -0
- package/dist/components/RuntimeLogs/styles.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/types.esm.js +16 -0
- package/dist/components/RuntimeLogs/types.esm.js.map +1 -0
- package/dist/components/TimeRangeFilter/TimeRangeFilter.esm.js +280 -0
- package/dist/components/TimeRangeFilter/TimeRangeFilter.esm.js.map +1 -0
- package/dist/components/Traces/ObservabilityTracesPage.esm.js +165 -0
- package/dist/components/Traces/ObservabilityTracesPage.esm.js.map +1 -0
- package/dist/components/Traces/TracesActions.esm.js +37 -0
- package/dist/components/Traces/TracesActions.esm.js.map +1 -0
- package/dist/components/Traces/TracesFilters.esm.js +121 -0
- package/dist/components/Traces/TracesFilters.esm.js.map +1 -0
- package/dist/components/Traces/TracesTable.esm.js +137 -0
- package/dist/components/Traces/TracesTable.esm.js.map +1 -0
- package/dist/components/Traces/WaterfallView.esm.js +567 -0
- package/dist/components/Traces/WaterfallView.esm.js.map +1 -0
- package/dist/components/Traces/styles.esm.js +198 -0
- package/dist/components/Traces/styles.esm.js.map +1 -0
- package/dist/components/Traces/utils.esm.js +19 -0
- package/dist/components/Traces/utils.esm.js.map +1 -0
- package/dist/hooks/useAutoSelectFirstEnvironment.esm.js +25 -0
- package/dist/hooks/useAutoSelectFirstEnvironment.esm.js.map +1 -0
- package/dist/hooks/useComponentAlerts.esm.js +80 -0
- package/dist/hooks/useComponentAlerts.esm.js.map +1 -0
- package/dist/hooks/useDataPlaneNetPolProvider.esm.js +55 -0
- package/dist/hooks/useDataPlaneNetPolProvider.esm.js.map +1 -0
- package/dist/hooks/useDebouncedSearch.esm.js +24 -0
- package/dist/hooks/useDebouncedSearch.esm.js.map +1 -0
- package/dist/hooks/useFilters.esm.js +29 -0
- package/dist/hooks/useFilters.esm.js.map +1 -0
- package/dist/hooks/useFinOpsReport.esm.js +66 -0
- package/dist/hooks/useFinOpsReport.esm.js.map +1 -0
- package/dist/hooks/useFinOpsReports.esm.js +70 -0
- package/dist/hooks/useFinOpsReports.esm.js.map +1 -0
- package/dist/hooks/useGetComponentsByProject.esm.js +57 -0
- package/dist/hooks/useGetComponentsByProject.esm.js.map +1 -0
- package/dist/hooks/useGetEnvironmentsByNamespace.esm.js +53 -0
- package/dist/hooks/useGetEnvironmentsByNamespace.esm.js.map +1 -0
- package/dist/hooks/useGetNamespaceAndProjectByEntity.esm.js +40 -0
- package/dist/hooks/useGetNamespaceAndProjectByEntity.esm.js.map +1 -0
- package/dist/hooks/useMetrics.esm.js +107 -0
- package/dist/hooks/useMetrics.esm.js.map +1 -0
- package/dist/hooks/useProjectIncidents.esm.js +111 -0
- package/dist/hooks/useProjectIncidents.esm.js.map +1 -0
- package/dist/hooks/useProjectRuntimeLogs.esm.js +185 -0
- package/dist/hooks/useProjectRuntimeLogs.esm.js.map +1 -0
- package/dist/hooks/useRCAReportByAlert.esm.js +54 -0
- package/dist/hooks/useRCAReportByAlert.esm.js.map +1 -0
- package/dist/hooks/useRCAReports.esm.js +75 -0
- package/dist/hooks/useRCAReports.esm.js.map +1 -0
- package/dist/hooks/useRuntimeLogs.esm.js +147 -0
- package/dist/hooks/useRuntimeLogs.esm.js.map +1 -0
- package/dist/hooks/useSpanDetails.esm.js +71 -0
- package/dist/hooks/useSpanDetails.esm.js.map +1 -0
- package/dist/hooks/useTraceSpans.esm.js +80 -0
- package/dist/hooks/useTraceSpans.esm.js.map +1 -0
- package/dist/hooks/useTraces.esm.js +112 -0
- package/dist/hooks/useTraces.esm.js.map +1 -0
- package/dist/hooks/useUpdateIncident.esm.js +50 -0
- package/dist/hooks/useUpdateIncident.esm.js.map +1 -0
- package/dist/hooks/useUrlFilters.esm.js +63 -0
- package/dist/hooks/useUrlFilters.esm.js.map +1 -0
- package/dist/hooks/useUrlFiltersForAlerts.esm.js +80 -0
- package/dist/hooks/useUrlFiltersForAlerts.esm.js.map +1 -0
- package/dist/hooks/useUrlFiltersForIncidents.esm.js +87 -0
- package/dist/hooks/useUrlFiltersForIncidents.esm.js.map +1 -0
- package/dist/hooks/useUrlFiltersForRuntimeLogs.esm.js +135 -0
- package/dist/hooks/useUrlFiltersForRuntimeLogs.esm.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/plugin.esm.js +107 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/routes.esm.js +8 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/types.esm.js +18 -0
- package/dist/types.esm.js.map +1 -0
- package/dist/utils/applyResourceChange.esm.js +79 -0
- package/dist/utils/applyResourceChange.esm.js.map +1 -0
- package/dist/utils/urlTimeRange.esm.js +52 -0
- package/dist/utils/urlTimeRange.esm.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
import { Box, IconButton, Typography, Button, Grid } from '@material-ui/core';
|
|
4
|
+
import ArrowBackIcon from '@material-ui/icons/ArrowBack';
|
|
5
|
+
import ChatOutlinedIcon from '@material-ui/icons/ChatOutlined';
|
|
6
|
+
import AutorenewIcon from '@material-ui/icons/Autorenew';
|
|
7
|
+
import { InfoCard } from '@backstage/core-components';
|
|
8
|
+
import BugReportOutlinedIcon from '@material-ui/icons/BugReportOutlined';
|
|
9
|
+
import TimelineOutlinedIcon from '@material-ui/icons/TimelineOutlined';
|
|
10
|
+
import ExploreOutlinedIcon from '@material-ui/icons/ExploreOutlined';
|
|
11
|
+
import NotInterestedOutlinedIcon from '@material-ui/icons/NotInterestedOutlined';
|
|
12
|
+
import AssignmentTurnedInOutlinedIcon from '@material-ui/icons/AssignmentTurnedInOutlined';
|
|
13
|
+
import EmojiObjectsOutlinedIcon from '@material-ui/icons/EmojiObjectsOutlined';
|
|
14
|
+
import { SystemTimelineSection } from './sections/SystemTimelineSection.esm.js';
|
|
15
|
+
import { RootCausesSection } from './sections/RootCausesSection.esm.js';
|
|
16
|
+
import { InvestigationPathSection } from './sections/InvestigationPathSection.esm.js';
|
|
17
|
+
import { ExcludedCausesSection } from './sections/ExcludedCausesSection.esm.js';
|
|
18
|
+
import { RecommendationsSection } from './sections/RecommendationsSection.esm.js';
|
|
19
|
+
import { VisibilityImprovementsSection } from './sections/VisibilityImprovementsSection.esm.js';
|
|
20
|
+
import { IncidentOverviewSection } from './sections/IncidentOverviewSection.esm.js';
|
|
21
|
+
import { AssessmentSection } from './sections/AssessmentSection.esm.js';
|
|
22
|
+
import { ChatPanelSection } from './sections/ChatPanelSection.esm.js';
|
|
23
|
+
import { QuickFixesPanelSection } from './sections/QuickFixesPanelSection.esm.js';
|
|
24
|
+
import { allActionsResolved } from './sections/PatchTabContent.esm.js';
|
|
25
|
+
import { useRCAReportStyles } from './styles.esm.js';
|
|
26
|
+
import { EntityLinkContext } from './EntityLinkContext.esm.js';
|
|
27
|
+
|
|
28
|
+
const RCAReportView = ({
|
|
29
|
+
report,
|
|
30
|
+
reportId,
|
|
31
|
+
onBack,
|
|
32
|
+
chatContext
|
|
33
|
+
}) => {
|
|
34
|
+
const classes = useRCAReportStyles();
|
|
35
|
+
const revisedActions = useMemo(() => {
|
|
36
|
+
const result = [];
|
|
37
|
+
const recs = (() => {
|
|
38
|
+
const r = report.report?.result;
|
|
39
|
+
if (r?.type === "root_cause_identified") return r.recommendations;
|
|
40
|
+
if (r?.type === "no_root_cause_identified") return r.recommendations;
|
|
41
|
+
return void 0;
|
|
42
|
+
})();
|
|
43
|
+
const actions = recs?.recommended_actions;
|
|
44
|
+
if (actions) {
|
|
45
|
+
actions.forEach((action, idx) => {
|
|
46
|
+
if ((action.status === "revised" || action.status === "applied" || action.status === "dismissed") && action.change) {
|
|
47
|
+
result.push({ index: idx, action });
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}, [report]);
|
|
53
|
+
const hasRevised = revisedActions.length > 0;
|
|
54
|
+
const [activePanel, setActivePanel] = useState(
|
|
55
|
+
() => {
|
|
56
|
+
if (!hasRevised) return null;
|
|
57
|
+
if (allActionsResolved(revisedActions)) return null;
|
|
58
|
+
return "fixes";
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
const formatTimestamp = (timestamp) => {
|
|
62
|
+
if (!timestamp) return "N/A";
|
|
63
|
+
try {
|
|
64
|
+
const date = new Date(timestamp);
|
|
65
|
+
return date.toLocaleString("en-US", {
|
|
66
|
+
month: "short",
|
|
67
|
+
day: "numeric",
|
|
68
|
+
hour: "numeric",
|
|
69
|
+
minute: "2-digit"
|
|
70
|
+
});
|
|
71
|
+
} catch {
|
|
72
|
+
return timestamp;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const namespaceValue = useMemo(
|
|
76
|
+
() => ({ namespace: chatContext.namespaceName }),
|
|
77
|
+
[chatContext.namespaceName]
|
|
78
|
+
);
|
|
79
|
+
const rcaReport = report.report;
|
|
80
|
+
if (!rcaReport) {
|
|
81
|
+
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
82
|
+
/* @__PURE__ */ jsx(Box, { className: classes.header, children: /* @__PURE__ */ jsxs(Box, { className: classes.headerLeft, children: [
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
IconButton,
|
|
85
|
+
{
|
|
86
|
+
onClick: onBack,
|
|
87
|
+
size: "small",
|
|
88
|
+
className: classes.backButton,
|
|
89
|
+
title: "Back to RCA reports",
|
|
90
|
+
children: /* @__PURE__ */ jsx(ArrowBackIcon, {})
|
|
91
|
+
}
|
|
92
|
+
),
|
|
93
|
+
/* @__PURE__ */ jsxs(Box, { className: classes.titleContainer, children: [
|
|
94
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h5", className: classes.title, children: "RCA Report" }),
|
|
95
|
+
report.timestamp && /* @__PURE__ */ jsx(Typography, { variant: "body2", className: classes.subtitle, children: report.reportId })
|
|
96
|
+
] })
|
|
97
|
+
] }) }),
|
|
98
|
+
/* @__PURE__ */ jsx(Box, { className: classes.content, children: /* @__PURE__ */ jsxs(Box, { className: classes.emptyState, children: [
|
|
99
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h6", gutterBottom: true, children: "Report content not available" }),
|
|
100
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "textSecondary", children: "The RCA report analysis is not yet complete or not available." })
|
|
101
|
+
] }) })
|
|
102
|
+
] });
|
|
103
|
+
}
|
|
104
|
+
const isNoRootCauseIdentified = rcaReport.result?.type === "no_root_cause_identified";
|
|
105
|
+
const timeline = rcaReport.result?.type === "root_cause_identified" ? rcaReport.result.timeline : void 0;
|
|
106
|
+
const rootCauses = rcaReport.result?.type === "root_cause_identified" ? rcaReport.result.root_causes : void 0;
|
|
107
|
+
const excludedCauses = rcaReport.result?.type === "root_cause_identified" ? rcaReport.result.excluded_causes : void 0;
|
|
108
|
+
const recommendations = (() => {
|
|
109
|
+
if (rcaReport.result?.type === "root_cause_identified") {
|
|
110
|
+
return rcaReport.result.recommendations;
|
|
111
|
+
}
|
|
112
|
+
if (rcaReport.result?.type === "no_root_cause_identified") {
|
|
113
|
+
return rcaReport.result.recommendations;
|
|
114
|
+
}
|
|
115
|
+
return void 0;
|
|
116
|
+
})();
|
|
117
|
+
const noRootCauseResult = rcaReport.result?.type === "no_root_cause_identified" ? rcaReport.result : void 0;
|
|
118
|
+
const alertContext = rcaReport.alert_context;
|
|
119
|
+
const investigationPath = rcaReport.investigation_path;
|
|
120
|
+
return /* @__PURE__ */ jsx(EntityLinkContext.Provider, { value: namespaceValue, children: /* @__PURE__ */ jsxs(Box, { children: [
|
|
121
|
+
/* @__PURE__ */ jsxs(Box, { className: classes.header, children: [
|
|
122
|
+
/* @__PURE__ */ jsxs(Box, { className: classes.headerLeft, children: [
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
IconButton,
|
|
125
|
+
{
|
|
126
|
+
onClick: onBack,
|
|
127
|
+
size: "small",
|
|
128
|
+
className: classes.backButton,
|
|
129
|
+
title: "Back to RCA reports",
|
|
130
|
+
children: /* @__PURE__ */ jsx(ArrowBackIcon, {})
|
|
131
|
+
}
|
|
132
|
+
),
|
|
133
|
+
/* @__PURE__ */ jsxs(Box, { className: classes.titleContainer, children: [
|
|
134
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h5", className: classes.title, children: "RCA Report" }),
|
|
135
|
+
report.timestamp && /* @__PURE__ */ jsx(Typography, { variant: "body2", className: classes.subtitle, children: report.reportId })
|
|
136
|
+
] })
|
|
137
|
+
] }),
|
|
138
|
+
/* @__PURE__ */ jsxs(Box, { display: "flex", style: { gap: 8 }, children: [
|
|
139
|
+
hasRevised && /* @__PURE__ */ jsx(
|
|
140
|
+
Button,
|
|
141
|
+
{
|
|
142
|
+
variant: activePanel === "fixes" ? "contained" : "outlined",
|
|
143
|
+
color: "primary",
|
|
144
|
+
size: "small",
|
|
145
|
+
startIcon: /* @__PURE__ */ jsx(AutorenewIcon, {}),
|
|
146
|
+
onClick: () => setActivePanel((prev) => prev === "fixes" ? null : "fixes"),
|
|
147
|
+
children: "Quick Fixes"
|
|
148
|
+
}
|
|
149
|
+
),
|
|
150
|
+
/* @__PURE__ */ jsx(
|
|
151
|
+
Button,
|
|
152
|
+
{
|
|
153
|
+
variant: activePanel === "chat" ? "contained" : "outlined",
|
|
154
|
+
color: "primary",
|
|
155
|
+
size: "small",
|
|
156
|
+
startIcon: /* @__PURE__ */ jsx(ChatOutlinedIcon, {}),
|
|
157
|
+
onClick: () => setActivePanel((prev) => prev === "chat" ? null : "chat"),
|
|
158
|
+
children: "Chat"
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
] })
|
|
162
|
+
] }),
|
|
163
|
+
/* @__PURE__ */ jsx(Box, { className: classes.content, children: /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 1, children: [
|
|
164
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, style: { flex: "0 0 62%", maxWidth: "62%" }, children: [
|
|
165
|
+
/* @__PURE__ */ jsx(
|
|
166
|
+
IncidentOverviewSection,
|
|
167
|
+
{
|
|
168
|
+
summary: rcaReport.summary || "",
|
|
169
|
+
alertContext,
|
|
170
|
+
reportId,
|
|
171
|
+
reportTimestamp: report.timestamp,
|
|
172
|
+
formatTimestamp
|
|
173
|
+
}
|
|
174
|
+
),
|
|
175
|
+
isNoRootCauseIdentified && noRootCauseResult && /* @__PURE__ */ jsx(AssessmentSection, { noRootCauseResult }),
|
|
176
|
+
rootCauses && /* @__PURE__ */ jsx(Box, { className: classes.infoCardSpacing, children: /* @__PURE__ */ jsx(
|
|
177
|
+
InfoCard,
|
|
178
|
+
{
|
|
179
|
+
title: /* @__PURE__ */ jsxs("span", { className: classes.cardTitle, children: [
|
|
180
|
+
/* @__PURE__ */ jsx(
|
|
181
|
+
BugReportOutlinedIcon,
|
|
182
|
+
{
|
|
183
|
+
className: classes.cardTitleIcon
|
|
184
|
+
}
|
|
185
|
+
),
|
|
186
|
+
"Likely Root Causes"
|
|
187
|
+
] }),
|
|
188
|
+
children: /* @__PURE__ */ jsx(RootCausesSection, { rootCauses })
|
|
189
|
+
}
|
|
190
|
+
) }),
|
|
191
|
+
excludedCauses && excludedCauses.length > 0 && /* @__PURE__ */ jsx(Box, { className: classes.infoCardSpacing, children: /* @__PURE__ */ jsx(
|
|
192
|
+
InfoCard,
|
|
193
|
+
{
|
|
194
|
+
title: /* @__PURE__ */ jsxs("span", { className: classes.cardTitle, children: [
|
|
195
|
+
/* @__PURE__ */ jsx(
|
|
196
|
+
NotInterestedOutlinedIcon,
|
|
197
|
+
{
|
|
198
|
+
className: classes.cardTitleIcon
|
|
199
|
+
}
|
|
200
|
+
),
|
|
201
|
+
"Unlikely Causes"
|
|
202
|
+
] }),
|
|
203
|
+
children: /* @__PURE__ */ jsx(ExcludedCausesSection, { excludedCauses })
|
|
204
|
+
}
|
|
205
|
+
) }),
|
|
206
|
+
recommendations?.recommended_actions && recommendations.recommended_actions.length > 0 && /* @__PURE__ */ jsx(Box, { className: classes.infoCardSpacing, children: /* @__PURE__ */ jsx(
|
|
207
|
+
InfoCard,
|
|
208
|
+
{
|
|
209
|
+
title: /* @__PURE__ */ jsxs("span", { className: classes.cardTitle, children: [
|
|
210
|
+
/* @__PURE__ */ jsx(
|
|
211
|
+
AssignmentTurnedInOutlinedIcon,
|
|
212
|
+
{
|
|
213
|
+
className: classes.cardTitleIcon
|
|
214
|
+
}
|
|
215
|
+
),
|
|
216
|
+
"Actionable Next Steps"
|
|
217
|
+
] }),
|
|
218
|
+
children: /* @__PURE__ */ jsx(
|
|
219
|
+
RecommendationsSection,
|
|
220
|
+
{
|
|
221
|
+
actions: recommendations.recommended_actions
|
|
222
|
+
}
|
|
223
|
+
)
|
|
224
|
+
}
|
|
225
|
+
) }),
|
|
226
|
+
recommendations?.observability_recommendations && recommendations.observability_recommendations.length > 0 && /* @__PURE__ */ jsx(
|
|
227
|
+
InfoCard,
|
|
228
|
+
{
|
|
229
|
+
title: /* @__PURE__ */ jsxs("span", { className: classes.cardTitle, children: [
|
|
230
|
+
/* @__PURE__ */ jsx(
|
|
231
|
+
EmojiObjectsOutlinedIcon,
|
|
232
|
+
{
|
|
233
|
+
className: classes.cardTitleIcon
|
|
234
|
+
}
|
|
235
|
+
),
|
|
236
|
+
"Observability Suggestions"
|
|
237
|
+
] }),
|
|
238
|
+
children: /* @__PURE__ */ jsx(
|
|
239
|
+
VisibilityImprovementsSection,
|
|
240
|
+
{
|
|
241
|
+
recommendations: recommendations.observability_recommendations
|
|
242
|
+
}
|
|
243
|
+
)
|
|
244
|
+
}
|
|
245
|
+
)
|
|
246
|
+
] }),
|
|
247
|
+
/* @__PURE__ */ jsxs(
|
|
248
|
+
Grid,
|
|
249
|
+
{
|
|
250
|
+
item: true,
|
|
251
|
+
xs: 12,
|
|
252
|
+
style: { flex: "0 0 38%", maxWidth: "38%" },
|
|
253
|
+
className: classes.sidebarColumn,
|
|
254
|
+
children: [
|
|
255
|
+
activePanel === "chat" && /* @__PURE__ */ jsx(
|
|
256
|
+
ChatPanelSection,
|
|
257
|
+
{
|
|
258
|
+
reportId,
|
|
259
|
+
chatContext
|
|
260
|
+
}
|
|
261
|
+
),
|
|
262
|
+
activePanel === "fixes" && /* @__PURE__ */ jsx(
|
|
263
|
+
QuickFixesPanelSection,
|
|
264
|
+
{
|
|
265
|
+
reportId,
|
|
266
|
+
chatContext,
|
|
267
|
+
revisedActions
|
|
268
|
+
}
|
|
269
|
+
),
|
|
270
|
+
timeline && timeline.length > 0 && /* @__PURE__ */ jsx(Box, { className: classes.infoCardSpacing, children: /* @__PURE__ */ jsx(
|
|
271
|
+
InfoCard,
|
|
272
|
+
{
|
|
273
|
+
title: /* @__PURE__ */ jsxs("span", { className: classes.cardTitle, children: [
|
|
274
|
+
/* @__PURE__ */ jsx(
|
|
275
|
+
TimelineOutlinedIcon,
|
|
276
|
+
{
|
|
277
|
+
className: classes.cardTitleIcon
|
|
278
|
+
}
|
|
279
|
+
),
|
|
280
|
+
"System Timeline"
|
|
281
|
+
] }),
|
|
282
|
+
children: /* @__PURE__ */ jsx(SystemTimelineSection, { timeline })
|
|
283
|
+
}
|
|
284
|
+
) }),
|
|
285
|
+
investigationPath && investigationPath.length > 0 && /* @__PURE__ */ jsx(
|
|
286
|
+
InfoCard,
|
|
287
|
+
{
|
|
288
|
+
title: /* @__PURE__ */ jsxs("span", { className: classes.cardTitle, children: [
|
|
289
|
+
/* @__PURE__ */ jsx(ExploreOutlinedIcon, { className: classes.cardTitleIcon }),
|
|
290
|
+
"Investigation Path"
|
|
291
|
+
] }),
|
|
292
|
+
children: /* @__PURE__ */ jsx(
|
|
293
|
+
InvestigationPathSection,
|
|
294
|
+
{
|
|
295
|
+
investigationPath
|
|
296
|
+
}
|
|
297
|
+
)
|
|
298
|
+
}
|
|
299
|
+
)
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
)
|
|
303
|
+
] }) })
|
|
304
|
+
] }) });
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
export { RCAReportView };
|
|
308
|
+
//# sourceMappingURL=RCAReportView.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RCAReportView.esm.js","sources":["../../../../src/components/RCA/RCAReport/RCAReportView.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { Typography, Grid, Box, IconButton, Button } from '@material-ui/core';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport ChatOutlinedIcon from '@material-ui/icons/ChatOutlined';\nimport AutorenewIcon from '@material-ui/icons/Autorenew';\nimport { InfoCard } from '@backstage/core-components';\nimport BugReportOutlinedIcon from '@material-ui/icons/BugReportOutlined';\nimport TimelineOutlinedIcon from '@material-ui/icons/TimelineOutlined';\nimport ExploreOutlinedIcon from '@material-ui/icons/ExploreOutlined';\nimport NotInterestedOutlinedIcon from '@material-ui/icons/NotInterestedOutlined';\nimport AssignmentTurnedInOutlinedIcon from '@material-ui/icons/AssignmentTurnedInOutlined';\nimport EmojiObjectsOutlinedIcon from '@material-ui/icons/EmojiObjectsOutlined';\nimport { SystemTimelineSection } from './sections/SystemTimelineSection';\nimport { RootCausesSection } from './sections/RootCausesSection';\nimport { InvestigationPathSection } from './sections/InvestigationPathSection';\nimport { ExcludedCausesSection } from './sections/ExcludedCausesSection';\nimport { RecommendationsSection } from './sections/RecommendationsSection';\nimport { VisibilityImprovementsSection } from './sections/VisibilityImprovementsSection';\nimport { IncidentOverviewSection } from './sections/IncidentOverviewSection';\nimport { AssessmentSection } from './sections/AssessmentSection';\nimport { ChatPanelSection } from './sections/ChatPanelSection';\nimport { QuickFixesPanelSection } from './sections/QuickFixesPanelSection';\nimport { allActionsResolved } from './sections/PatchTabContent';\nimport { useRCAReportStyles } from './styles';\nimport { EntityLinkContext } from './EntityLinkContext';\nimport type { AIRCAAgentComponents } from '@openchoreo/backstage-plugin-common';\nimport type { RCAAgentApi, RecommendedAction } from '../../../api/RCAAgentApi';\n\ntype RCAReportDetailed = AIRCAAgentComponents['schemas']['RCAReportDetailed'];\n\ninterface ChatContext {\n namespaceName: string;\n environmentName: string;\n projectName: string;\n rcaAgentApi: RCAAgentApi;\n backendBaseUrl?: string;\n}\n\ninterface RCAReportViewProps {\n report: RCAReportDetailed;\n reportId: string;\n onBack: () => void;\n chatContext: ChatContext;\n}\n\nexport const RCAReportView = ({\n report,\n reportId,\n onBack,\n chatContext,\n}: RCAReportViewProps) => {\n const classes = useRCAReportStyles();\n\n // Compute revised actions from the report\n const revisedActions = useMemo(() => {\n const result: { index: number; action: RecommendedAction }[] = [];\n const recs = (() => {\n const r = report.report?.result;\n if (r?.type === 'root_cause_identified') return r.recommendations;\n if (r?.type === 'no_root_cause_identified') return r.recommendations;\n return undefined;\n })();\n const actions = recs?.recommended_actions;\n if (actions) {\n actions.forEach((action, idx) => {\n if (\n (action.status === 'revised' ||\n action.status === 'applied' ||\n action.status === 'dismissed') &&\n action.change\n ) {\n result.push({ index: idx, action });\n }\n });\n }\n return result;\n }, [report]);\n\n const hasRevised = revisedActions.length > 0;\n\n const [activePanel, setActivePanel] = useState<'chat' | 'fixes' | null>(\n () => {\n if (!hasRevised) return null;\n if (allActionsResolved(revisedActions)) return null;\n return 'fixes';\n },\n );\n\n const formatTimestamp = (timestamp?: string): string => {\n if (!timestamp) return 'N/A';\n try {\n const date = new Date(timestamp);\n return date.toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n } catch {\n return timestamp;\n }\n };\n\n const namespaceValue = useMemo(\n () => ({ namespace: chatContext.namespaceName }),\n [chatContext.namespaceName],\n );\n\n const rcaReport = report.report;\n\n if (!rcaReport) {\n return (\n <Box>\n <Box className={classes.header}>\n <Box className={classes.headerLeft}>\n <IconButton\n onClick={onBack}\n size=\"small\"\n className={classes.backButton}\n title=\"Back to RCA reports\"\n >\n <ArrowBackIcon />\n </IconButton>\n <Box className={classes.titleContainer}>\n <Typography variant=\"h5\" className={classes.title}>\n RCA Report\n </Typography>\n {report.timestamp && (\n <Typography variant=\"body2\" className={classes.subtitle}>\n {report.reportId}\n </Typography>\n )}\n </Box>\n </Box>\n </Box>\n <Box className={classes.content}>\n <Box className={classes.emptyState}>\n <Typography variant=\"h6\" gutterBottom>\n Report content not available\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n The RCA report analysis is not yet complete or not available.\n </Typography>\n </Box>\n </Box>\n </Box>\n );\n }\n\n const isNoRootCauseIdentified =\n rcaReport.result?.type === 'no_root_cause_identified';\n\n const timeline =\n rcaReport.result?.type === 'root_cause_identified'\n ? rcaReport.result.timeline\n : undefined;\n\n const rootCauses =\n rcaReport.result?.type === 'root_cause_identified'\n ? rcaReport.result.root_causes\n : undefined;\n\n const excludedCauses =\n rcaReport.result?.type === 'root_cause_identified'\n ? rcaReport.result.excluded_causes\n : undefined;\n\n const recommendations = (() => {\n if (rcaReport.result?.type === 'root_cause_identified') {\n return rcaReport.result.recommendations;\n }\n if (rcaReport.result?.type === 'no_root_cause_identified') {\n return rcaReport.result.recommendations;\n }\n return undefined;\n })();\n\n const noRootCauseResult =\n rcaReport.result?.type === 'no_root_cause_identified'\n ? rcaReport.result\n : undefined;\n\n const alertContext = rcaReport.alert_context;\n\n const investigationPath = rcaReport.investigation_path;\n\n return (\n <EntityLinkContext.Provider value={namespaceValue}>\n <Box>\n <Box className={classes.header}>\n <Box className={classes.headerLeft}>\n <IconButton\n onClick={onBack}\n size=\"small\"\n className={classes.backButton}\n title=\"Back to RCA reports\"\n >\n <ArrowBackIcon />\n </IconButton>\n <Box className={classes.titleContainer}>\n <Typography variant=\"h5\" className={classes.title}>\n RCA Report\n </Typography>\n {report.timestamp && (\n <Typography variant=\"body2\" className={classes.subtitle}>\n {report.reportId}\n </Typography>\n )}\n </Box>\n </Box>\n <Box display=\"flex\" style={{ gap: 8 }}>\n {hasRevised && (\n <Button\n variant={activePanel === 'fixes' ? 'contained' : 'outlined'}\n color=\"primary\"\n size=\"small\"\n startIcon={<AutorenewIcon />}\n onClick={() =>\n setActivePanel(prev => (prev === 'fixes' ? null : 'fixes'))\n }\n >\n Quick Fixes\n </Button>\n )}\n <Button\n variant={activePanel === 'chat' ? 'contained' : 'outlined'}\n color=\"primary\"\n size=\"small\"\n startIcon={<ChatOutlinedIcon />}\n onClick={() =>\n setActivePanel(prev => (prev === 'chat' ? null : 'chat'))\n }\n >\n Chat\n </Button>\n </Box>\n </Box>\n <Box className={classes.content}>\n <Grid container spacing={1}>\n <Grid item xs={12} style={{ flex: '0 0 62%', maxWidth: '62%' }}>\n <IncidentOverviewSection\n summary={rcaReport.summary || ''}\n alertContext={alertContext}\n reportId={reportId}\n reportTimestamp={report.timestamp}\n formatTimestamp={formatTimestamp}\n />\n {isNoRootCauseIdentified && noRootCauseResult && (\n <AssessmentSection noRootCauseResult={noRootCauseResult} />\n )}\n {rootCauses && (\n <Box className={classes.infoCardSpacing}>\n <InfoCard\n title={\n <span className={classes.cardTitle}>\n <BugReportOutlinedIcon\n className={classes.cardTitleIcon}\n />\n Likely Root Causes\n </span>\n }\n >\n <RootCausesSection rootCauses={rootCauses} />\n </InfoCard>\n </Box>\n )}\n {excludedCauses && excludedCauses.length > 0 && (\n <Box className={classes.infoCardSpacing}>\n <InfoCard\n title={\n <span className={classes.cardTitle}>\n <NotInterestedOutlinedIcon\n className={classes.cardTitleIcon}\n />\n Unlikely Causes\n </span>\n }\n >\n <ExcludedCausesSection excludedCauses={excludedCauses} />\n </InfoCard>\n </Box>\n )}\n {recommendations?.recommended_actions &&\n recommendations.recommended_actions.length > 0 && (\n <Box className={classes.infoCardSpacing}>\n <InfoCard\n title={\n <span className={classes.cardTitle}>\n <AssignmentTurnedInOutlinedIcon\n className={classes.cardTitleIcon}\n />\n Actionable Next Steps\n </span>\n }\n >\n <RecommendationsSection\n actions={recommendations.recommended_actions}\n />\n </InfoCard>\n </Box>\n )}\n {recommendations?.observability_recommendations &&\n recommendations.observability_recommendations.length > 0 && (\n <InfoCard\n title={\n <span className={classes.cardTitle}>\n <EmojiObjectsOutlinedIcon\n className={classes.cardTitleIcon}\n />\n Observability Suggestions\n </span>\n }\n >\n <VisibilityImprovementsSection\n recommendations={\n recommendations.observability_recommendations\n }\n />\n </InfoCard>\n )}\n </Grid>\n\n <Grid\n item\n xs={12}\n style={{ flex: '0 0 38%', maxWidth: '38%' }}\n className={classes.sidebarColumn}\n >\n {activePanel === 'chat' && (\n <ChatPanelSection\n reportId={reportId}\n chatContext={chatContext}\n />\n )}\n {activePanel === 'fixes' && (\n <QuickFixesPanelSection\n reportId={reportId}\n chatContext={chatContext}\n revisedActions={revisedActions}\n />\n )}\n {timeline && timeline.length > 0 && (\n <Box className={classes.infoCardSpacing}>\n <InfoCard\n title={\n <span className={classes.cardTitle}>\n <TimelineOutlinedIcon\n className={classes.cardTitleIcon}\n />\n System Timeline\n </span>\n }\n >\n <SystemTimelineSection timeline={timeline} />\n </InfoCard>\n </Box>\n )}\n {investigationPath && investigationPath.length > 0 && (\n <InfoCard\n title={\n <span className={classes.cardTitle}>\n <ExploreOutlinedIcon className={classes.cardTitleIcon} />\n Investigation Path\n </span>\n }\n >\n <InvestigationPathSection\n investigationPath={investigationPath}\n />\n </InfoCard>\n )}\n </Grid>\n </Grid>\n </Box>\n </Box>\n </EntityLinkContext.Provider>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Typography } from '@material-ui/core';
|
|
3
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
4
|
+
import { InfoCard } from '@backstage/core-components';
|
|
5
|
+
import AssessmentOutlinedIcon from '@material-ui/icons/AssessmentOutlined';
|
|
6
|
+
import { FormattedText } from '../FormattedText.esm.js';
|
|
7
|
+
import { useRCAReportStyles } from '../styles.esm.js';
|
|
8
|
+
|
|
9
|
+
const useStyles = makeStyles((theme) => ({
|
|
10
|
+
propertyGrid: {
|
|
11
|
+
display: "flex",
|
|
12
|
+
flexDirection: "column",
|
|
13
|
+
gap: theme.spacing(1.5)
|
|
14
|
+
},
|
|
15
|
+
propertyRow: {
|
|
16
|
+
display: "flex",
|
|
17
|
+
alignItems: "baseline",
|
|
18
|
+
gap: theme.spacing(2)
|
|
19
|
+
},
|
|
20
|
+
propertyKey: {
|
|
21
|
+
fontWeight: 500,
|
|
22
|
+
color: theme.palette.text.secondary,
|
|
23
|
+
fontSize: theme.typography.body2.fontSize,
|
|
24
|
+
minWidth: 100,
|
|
25
|
+
flexShrink: 0
|
|
26
|
+
},
|
|
27
|
+
propertyValue: {
|
|
28
|
+
color: theme.palette.text.primary,
|
|
29
|
+
fontSize: theme.typography.body2.fontSize,
|
|
30
|
+
wordBreak: "break-word"
|
|
31
|
+
},
|
|
32
|
+
outcomeTransient: {
|
|
33
|
+
color: theme.palette.warning.main,
|
|
34
|
+
fontWeight: 500
|
|
35
|
+
},
|
|
36
|
+
outcomeNoAnomaly: {
|
|
37
|
+
color: theme.palette.success.main,
|
|
38
|
+
fontWeight: 500
|
|
39
|
+
},
|
|
40
|
+
outcomeInsufficientData: {
|
|
41
|
+
color: theme.palette.warning.main,
|
|
42
|
+
fontWeight: 500
|
|
43
|
+
},
|
|
44
|
+
outcomeExternal: {
|
|
45
|
+
color: theme.palette.info.main,
|
|
46
|
+
fontWeight: 500
|
|
47
|
+
}
|
|
48
|
+
}));
|
|
49
|
+
const getOutcomeClass = (outcome, classes) => {
|
|
50
|
+
switch (outcome) {
|
|
51
|
+
case "no_anomaly_detected":
|
|
52
|
+
return classes.outcomeNoAnomaly;
|
|
53
|
+
case "insufficient_data":
|
|
54
|
+
return classes.outcomeInsufficientData;
|
|
55
|
+
case "transient":
|
|
56
|
+
return classes.outcomeTransient;
|
|
57
|
+
case "external_dependency":
|
|
58
|
+
return classes.outcomeExternal;
|
|
59
|
+
default:
|
|
60
|
+
return "";
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const getOutcomeLabel = (outcome) => {
|
|
64
|
+
switch (outcome) {
|
|
65
|
+
case "no_anomaly_detected":
|
|
66
|
+
return "No Anomaly Detected";
|
|
67
|
+
case "insufficient_data":
|
|
68
|
+
return "Insufficient Data";
|
|
69
|
+
case "transient":
|
|
70
|
+
return "Transient Issue";
|
|
71
|
+
case "external_dependency":
|
|
72
|
+
return "External Dependency";
|
|
73
|
+
default:
|
|
74
|
+
return outcome;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const AssessmentSection = ({
|
|
78
|
+
noRootCauseResult
|
|
79
|
+
}) => {
|
|
80
|
+
const sharedClasses = useRCAReportStyles();
|
|
81
|
+
const classes = useStyles();
|
|
82
|
+
return /* @__PURE__ */ jsx(Box, { className: sharedClasses.infoCardSpacing, children: /* @__PURE__ */ jsx(
|
|
83
|
+
InfoCard,
|
|
84
|
+
{
|
|
85
|
+
title: /* @__PURE__ */ jsxs("span", { className: sharedClasses.cardTitle, children: [
|
|
86
|
+
/* @__PURE__ */ jsx(AssessmentOutlinedIcon, { className: sharedClasses.cardTitleIcon }),
|
|
87
|
+
"Assessment"
|
|
88
|
+
] }),
|
|
89
|
+
children: /* @__PURE__ */ jsxs(Box, { className: classes.propertyGrid, children: [
|
|
90
|
+
/* @__PURE__ */ jsxs(Box, { className: classes.propertyRow, children: [
|
|
91
|
+
/* @__PURE__ */ jsx(Typography, { className: classes.propertyKey, children: "Outcome" }),
|
|
92
|
+
/* @__PURE__ */ jsx(
|
|
93
|
+
Typography,
|
|
94
|
+
{
|
|
95
|
+
className: `${classes.propertyValue} ${getOutcomeClass(
|
|
96
|
+
noRootCauseResult.outcome,
|
|
97
|
+
classes
|
|
98
|
+
)}`,
|
|
99
|
+
children: getOutcomeLabel(noRootCauseResult.outcome)
|
|
100
|
+
}
|
|
101
|
+
)
|
|
102
|
+
] }),
|
|
103
|
+
/* @__PURE__ */ jsxs(Box, { className: classes.propertyRow, children: [
|
|
104
|
+
/* @__PURE__ */ jsx(Typography, { className: classes.propertyKey, children: "Explanation" }),
|
|
105
|
+
/* @__PURE__ */ jsx(Typography, { className: classes.propertyValue, children: /* @__PURE__ */ jsx(FormattedText, { text: noRootCauseResult.explanation }) })
|
|
106
|
+
] })
|
|
107
|
+
] })
|
|
108
|
+
}
|
|
109
|
+
) });
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export { AssessmentSection };
|
|
113
|
+
//# sourceMappingURL=AssessmentSection.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssessmentSection.esm.js","sources":["../../../../../src/components/RCA/RCAReport/sections/AssessmentSection.tsx"],"sourcesContent":["import { Box, Typography } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { InfoCard } from '@backstage/core-components';\nimport AssessmentOutlinedIcon from '@material-ui/icons/AssessmentOutlined';\nimport { FormattedText } from '../FormattedText';\nimport { useRCAReportStyles } from '../styles';\nimport type { AIRCAAgentComponents } from '@openchoreo/backstage-plugin-common';\n\ntype NoRootCauseIdentified =\n AIRCAAgentComponents['schemas']['NoRootCauseIdentified'];\ntype NoRootCauseOutcome = NoRootCauseIdentified['outcome'];\n\ninterface AssessmentSectionProps {\n noRootCauseResult: NoRootCauseIdentified;\n}\n\nconst useStyles = makeStyles(theme => ({\n propertyGrid: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1.5),\n },\n propertyRow: {\n display: 'flex',\n alignItems: 'baseline',\n gap: theme.spacing(2),\n },\n propertyKey: {\n fontWeight: 500,\n color: theme.palette.text.secondary,\n fontSize: theme.typography.body2.fontSize,\n minWidth: 100,\n flexShrink: 0,\n },\n propertyValue: {\n color: theme.palette.text.primary,\n fontSize: theme.typography.body2.fontSize,\n wordBreak: 'break-word',\n },\n outcomeTransient: {\n color: theme.palette.warning.main,\n fontWeight: 500,\n },\n outcomeNoAnomaly: {\n color: theme.palette.success.main,\n fontWeight: 500,\n },\n outcomeInsufficientData: {\n color: theme.palette.warning.main,\n fontWeight: 500,\n },\n outcomeExternal: {\n color: theme.palette.info.main,\n fontWeight: 500,\n },\n}));\n\nconst getOutcomeClass = (\n outcome: NoRootCauseOutcome,\n classes: ReturnType<typeof useStyles>,\n): string => {\n switch (outcome) {\n case 'no_anomaly_detected':\n return classes.outcomeNoAnomaly;\n case 'insufficient_data':\n return classes.outcomeInsufficientData;\n case 'transient':\n return classes.outcomeTransient;\n case 'external_dependency':\n return classes.outcomeExternal;\n default:\n return '';\n }\n};\n\nconst getOutcomeLabel = (outcome: NoRootCauseOutcome): string => {\n switch (outcome) {\n case 'no_anomaly_detected':\n return 'No Anomaly Detected';\n case 'insufficient_data':\n return 'Insufficient Data';\n case 'transient':\n return 'Transient Issue';\n case 'external_dependency':\n return 'External Dependency';\n default:\n return outcome;\n }\n};\n\nexport const AssessmentSection = ({\n noRootCauseResult,\n}: AssessmentSectionProps) => {\n const sharedClasses = useRCAReportStyles();\n const classes = useStyles();\n\n return (\n <Box className={sharedClasses.infoCardSpacing}>\n <InfoCard\n title={\n <span className={sharedClasses.cardTitle}>\n <AssessmentOutlinedIcon className={sharedClasses.cardTitleIcon} />\n Assessment\n </span>\n }\n >\n <Box className={classes.propertyGrid}>\n <Box className={classes.propertyRow}>\n <Typography className={classes.propertyKey}>Outcome</Typography>\n <Typography\n className={`${classes.propertyValue} ${getOutcomeClass(\n noRootCauseResult.outcome,\n classes,\n )}`}\n >\n {getOutcomeLabel(noRootCauseResult.outcome)}\n </Typography>\n </Box>\n <Box className={classes.propertyRow}>\n <Typography className={classes.propertyKey}>Explanation</Typography>\n <Typography className={classes.propertyValue}>\n <FormattedText text={noRootCauseResult.explanation} />\n </Typography>\n </Box>\n </Box>\n </InfoCard>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAgBA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,YAAA,EAAc;AAAA,IACZ,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG;AAAA,GACxB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,UAAA;AAAA,IACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GACtB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IAC1B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,IACjC,QAAA,EAAU,GAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,aAAA,EAAe;AAAA,IACb,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,IAC1B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,IACjC,SAAA,EAAW;AAAA,GACb;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IAC7B,UAAA,EAAY;AAAA,GACd;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IAC7B,UAAA,EAAY;AAAA,GACd;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IAC7B,UAAA,EAAY;AAAA,GACd;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,IAAA;AAAA,IAC1B,UAAA,EAAY;AAAA;AAEhB,CAAA,CAAE,CAAA;AAEF,MAAM,eAAA,GAAkB,CACtB,OAAA,EACA,OAAA,KACW;AACX,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,qBAAA;AACH,MAAA,OAAO,OAAA,CAAQ,gBAAA;AAAA,IACjB,KAAK,mBAAA;AACH,MAAA,OAAO,OAAA,CAAQ,uBAAA;AAAA,IACjB,KAAK,WAAA;AACH,MAAA,OAAO,OAAA,CAAQ,gBAAA;AAAA,IACjB,KAAK,qBAAA;AACH,MAAA,OAAO,OAAA,CAAQ,eAAA;AAAA,IACjB;AACE,MAAA,OAAO,EAAA;AAAA;AAEb,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,OAAA,KAAwC;AAC/D,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,qBAAA;AACH,MAAA,OAAO,qBAAA;AAAA,IACT,KAAK,mBAAA;AACH,MAAA,OAAO,mBAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,iBAAA;AAAA,IACT,KAAK,qBAAA;AACH,MAAA,OAAO,qBAAA;AAAA,IACT;AACE,MAAA,OAAO,OAAA;AAAA;AAEb,CAAA;AAEO,MAAM,oBAAoB,CAAC;AAAA,EAChC;AACF,CAAA,KAA8B;AAC5B,EAAA,MAAM,gBAAgB,kBAAA,EAAmB;AACzC,EAAA,MAAM,UAAU,SAAA,EAAU;AAE1B,EAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,aAAA,CAAc,eAAA,EAC5B,QAAA,kBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAA,kBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,cAAc,SAAA,EAC7B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,sBAAA,EAAA,EAAuB,SAAA,EAAW,aAAA,CAAc,aAAA,EAAe,CAAA;AAAA,QAAE;AAAA,OAAA,EAEpE,CAAA;AAAA,MAGF,QAAA,kBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,YAAA,EACtB,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,WAAA,EACtB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,WAAA,EAAa,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,0BACnD,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,CAAA,EAAG,OAAA,CAAQ,aAAa,CAAA,CAAA,EAAI,eAAA;AAAA,gBACrC,iBAAA,CAAkB,OAAA;AAAA,gBAClB;AAAA,eACD,CAAA,CAAA;AAAA,cAEA,QAAA,EAAA,eAAA,CAAgB,kBAAkB,OAAO;AAAA;AAAA;AAC5C,SAAA,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,WAAA,EACtB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,WAAA,EAAa,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,0BACvD,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,aAAA,EAC7B,8BAAC,aAAA,EAAA,EAAc,IAAA,EAAM,iBAAA,CAAkB,WAAA,EAAa,CAAA,EACtD;AAAA,SAAA,EACF;AAAA,OAAA,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;;;;"}
|