@openchoreo/backstage-plugin-openchoreo-observability 1.1.0 → 1.1.1
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 +4 -0
- package/dist/components/Metrics/HTTPMetricsSection.esm.js +13 -3
- package/dist/components/Metrics/HTTPMetricsSection.esm.js.map +1 -1
- package/dist/components/Metrics/ObservabilityMetricsPage.esm.js +5 -2
- package/dist/components/Metrics/ObservabilityMetricsPage.esm.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -19,7 +19,8 @@ const HTTPMetricsSection = ({
|
|
|
19
19
|
filters,
|
|
20
20
|
entity,
|
|
21
21
|
namespaceName,
|
|
22
|
-
project
|
|
22
|
+
project,
|
|
23
|
+
refreshNonce
|
|
23
24
|
}) => {
|
|
24
25
|
const { networkPolicyProvider, loading: netPolLoading } = useDataPlaneNetPolProvider(
|
|
25
26
|
namespaceName,
|
|
@@ -38,6 +39,7 @@ const HTTPMetricsSection = ({
|
|
|
38
39
|
environment: void 0,
|
|
39
40
|
timeRange: void 0
|
|
40
41
|
});
|
|
42
|
+
const previousRefreshNonceRef = useRef(refreshNonce);
|
|
41
43
|
useEffect(() => {
|
|
42
44
|
if (!httpEnabled) {
|
|
43
45
|
return;
|
|
@@ -47,11 +49,19 @@ const HTTPMetricsSection = ({
|
|
|
47
49
|
timeRange: filters.timeRange
|
|
48
50
|
};
|
|
49
51
|
const filtersChanged = JSON.stringify(previousFiltersRef.current) !== JSON.stringify(currentFilters);
|
|
50
|
-
|
|
52
|
+
const refreshRequested = previousRefreshNonceRef.current !== refreshNonce;
|
|
53
|
+
if (filters.environment && filters.timeRange && (filtersChanged || refreshRequested)) {
|
|
51
54
|
fetchMetrics(true);
|
|
52
55
|
}
|
|
53
56
|
previousFiltersRef.current = currentFilters;
|
|
54
|
-
|
|
57
|
+
previousRefreshNonceRef.current = refreshNonce;
|
|
58
|
+
}, [
|
|
59
|
+
httpEnabled,
|
|
60
|
+
filters.environment,
|
|
61
|
+
filters.timeRange,
|
|
62
|
+
fetchMetrics,
|
|
63
|
+
refreshNonce
|
|
64
|
+
]);
|
|
55
65
|
if (netPolLoading || !httpEnabled) {
|
|
56
66
|
return null;
|
|
57
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HTTPMetricsSection.esm.js","sources":["../../../src/components/Metrics/HTTPMetricsSection.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n Divider,\n Grid,\n Typography,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { MetricGraphByComponent } from './MetricGraphByComponent';\nimport {\n Filters,\n HttpMetrics,\n NetworkLatencyMetrics,\n NetworkThroughputMetrics,\n} from '../../types';\nimport { Entity } from '@backstage/catalog-model';\nimport { useMetrics, useDataPlaneNetPolProvider } from '../../hooks';\n\ntype HTTPMetricsSectionProps = {\n filters: Filters;\n entity: Entity;\n namespaceName: string;\n project: string;\n};\n\nexport const HTTPMetricsSection = ({\n filters,\n entity,\n namespaceName,\n project,\n}: HTTPMetricsSectionProps) => {\n const { networkPolicyProvider, loading: netPolLoading } =\n useDataPlaneNetPolProvider(\n namespaceName,\n filters.environment?.dataPlaneRef,\n );\n const httpEnabled = networkPolicyProvider === 'cilium';\n const { metrics, error, fetchMetrics } = useMetrics(\n filters,\n entity,\n namespaceName,\n project,\n 'http',\n );\n const httpMetrics = metrics as HttpMetrics;\n\n const previousFiltersRef = useRef({\n environment: undefined as string | undefined,\n timeRange: undefined as string | undefined,\n });\n\n useEffect(() => {\n if (!httpEnabled) {\n return;\n }\n\n const currentFilters = {\n environment: filters.environment?.name,\n timeRange: filters.timeRange,\n };\n\n const filtersChanged =\n JSON.stringify(previousFiltersRef.current) !==\n JSON.stringify(currentFilters);\n\n if (filters.environment
|
|
1
|
+
{"version":3,"file":"HTTPMetricsSection.esm.js","sources":["../../../src/components/Metrics/HTTPMetricsSection.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n Divider,\n Grid,\n Typography,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { MetricGraphByComponent } from './MetricGraphByComponent';\nimport {\n Filters,\n HttpMetrics,\n NetworkLatencyMetrics,\n NetworkThroughputMetrics,\n} from '../../types';\nimport { Entity } from '@backstage/catalog-model';\nimport { useMetrics, useDataPlaneNetPolProvider } from '../../hooks';\n\ntype HTTPMetricsSectionProps = {\n filters: Filters;\n entity: Entity;\n namespaceName: string;\n project: string;\n refreshNonce: number;\n};\n\nexport const HTTPMetricsSection = ({\n filters,\n entity,\n namespaceName,\n project,\n refreshNonce,\n}: HTTPMetricsSectionProps) => {\n const { networkPolicyProvider, loading: netPolLoading } =\n useDataPlaneNetPolProvider(\n namespaceName,\n filters.environment?.dataPlaneRef,\n );\n const httpEnabled = networkPolicyProvider === 'cilium';\n const { metrics, error, fetchMetrics } = useMetrics(\n filters,\n entity,\n namespaceName,\n project,\n 'http',\n );\n const httpMetrics = metrics as HttpMetrics;\n\n const previousFiltersRef = useRef({\n environment: undefined as string | undefined,\n timeRange: undefined as string | undefined,\n });\n const previousRefreshNonceRef = useRef(refreshNonce);\n\n useEffect(() => {\n if (!httpEnabled) {\n return;\n }\n\n const currentFilters = {\n environment: filters.environment?.name,\n timeRange: filters.timeRange,\n };\n\n const filtersChanged =\n JSON.stringify(previousFiltersRef.current) !==\n JSON.stringify(currentFilters);\n const refreshRequested = previousRefreshNonceRef.current !== refreshNonce;\n\n if (\n filters.environment &&\n filters.timeRange &&\n (filtersChanged || refreshRequested)\n ) {\n fetchMetrics(true);\n }\n\n previousFiltersRef.current = currentFilters;\n previousRefreshNonceRef.current = refreshNonce;\n }, [\n httpEnabled,\n filters.environment,\n filters.timeRange,\n fetchMetrics,\n refreshNonce,\n ]);\n\n if (netPolLoading || !httpEnabled) {\n return null;\n }\n\n if (error) {\n const isMetricsModuleError = error.toLowerCase().includes('metrics module');\n\n return (\n <Grid item xs={12}>\n <Alert severity=\"error\">\n <Typography variant=\"body1\">\n {isMetricsModuleError\n ? 'HTTP metrics are unavailable. Check the metrics module configuration.'\n : 'Failed to load HTTP metrics.'}\n </Typography>\n <Typography variant=\"body2\">{error}</Typography>\n {!isMetricsModuleError && (\n <Button\n onClick={() => fetchMetrics(true)}\n color=\"inherit\"\n size=\"small\"\n >\n Retry\n </Button>\n )}\n </Alert>\n </Grid>\n );\n }\n\n const throughputData =\n httpMetrics?.networkThroughput || ({} as NetworkThroughputMetrics);\n const latencyData =\n httpMetrics?.networkLatency || ({} as NetworkLatencyMetrics);\n\n return (\n <>\n <Grid item xs={12} md={6}>\n <Card>\n <CardHeader title=\"Network Throughput\" />\n <Divider />\n <CardContent>\n <MetricGraphByComponent\n usageData={throughputData}\n usageType=\"networkThroughput\"\n timeRange={filters.timeRange}\n customStartTime={filters.customStartTime}\n customEndTime={filters.customEndTime}\n />\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} md={6}>\n <Card>\n <CardHeader title=\"Network Latency\" />\n <Divider />\n <CardContent>\n <MetricGraphByComponent\n usageData={latencyData}\n usageType=\"networkLatency\"\n timeRange={filters.timeRange}\n customStartTime={filters.customStartTime}\n customEndTime={filters.customEndTime}\n />\n </CardContent>\n </Card>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA6BO,MAAM,qBAAqB,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAA+B;AAC7B,EAAA,MAAM,EAAE,qBAAA,EAAuB,OAAA,EAAS,aAAA,EAAc,GACpD,0BAAA;AAAA,IACE,aAAA;AAAA,IACA,QAAQ,WAAA,EAAa;AAAA,GACvB;AACF,EAAA,MAAM,cAAc,qBAAA,KAA0B,QAAA;AAC9C,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,YAAA,EAAa,GAAI,UAAA;AAAA,IACvC,OAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,WAAA,GAAc,OAAA;AAEpB,EAAA,MAAM,qBAAqB,MAAA,CAAO;AAAA,IAChC,WAAA,EAAa,MAAA;AAAA,IACb,SAAA,EAAW;AAAA,GACZ,CAAA;AACD,EAAA,MAAM,uBAAA,GAA0B,OAAO,YAAY,CAAA;AAEnD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,WAAA,EAAa,QAAQ,WAAA,EAAa,IAAA;AAAA,MAClC,WAAW,OAAA,CAAQ;AAAA,KACrB;AAEA,IAAA,MAAM,cAAA,GACJ,KAAK,SAAA,CAAU,kBAAA,CAAmB,OAAO,CAAA,KACzC,IAAA,CAAK,UAAU,cAAc,CAAA;AAC/B,IAAA,MAAM,gBAAA,GAAmB,wBAAwB,OAAA,KAAY,YAAA;AAE7D,IAAA,IACE,OAAA,CAAQ,WAAA,IACR,OAAA,CAAQ,SAAA,KACP,kBAAkB,gBAAA,CAAA,EACnB;AACA,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB;AAEA,IAAA,kBAAA,CAAmB,OAAA,GAAU,cAAA;AAC7B,IAAA,uBAAA,CAAwB,OAAA,GAAU,YAAA;AAAA,EACpC,CAAA,EAAG;AAAA,IACD,WAAA;AAAA,IACA,OAAA,CAAQ,WAAA;AAAA,IACR,OAAA,CAAQ,SAAA;AAAA,IACR,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,IAAI,aAAA,IAAiB,CAAC,WAAA,EAAa;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,oBAAA,GAAuB,KAAA,CAAM,WAAA,EAAY,CAAE,SAAS,gBAAgB,CAAA;AAE1E,IAAA,uBACE,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,QAAA,EAAS,OAAA,EACd,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EACjB,QAAA,EAAA,oBAAA,GACG,0EACA,8BAAA,EACN,CAAA;AAAA,sBACA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAClC,CAAC,oBAAA,oBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,UAChC,KAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAK,OAAA;AAAA,UACN,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EAEJ,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,cAAA,GACJ,WAAA,EAAa,iBAAA,IAAsB,EAAC;AACtC,EAAA,MAAM,WAAA,GACJ,WAAA,EAAa,cAAA,IAAmB,EAAC;AAEnC,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAI,IAAA,EAAC,EAAA,EAAI,IAAI,EAAA,EAAI,CAAA,EACrB,+BAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,oBAAA,EAAqB,CAAA;AAAA,0BACtC,OAAA,EAAA,EAAQ,CAAA;AAAA,0BACR,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,cAAA;AAAA,UACX,SAAA,EAAU,mBAAA;AAAA,UACV,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,UACzB,eAAe,OAAA,CAAQ;AAAA;AAAA,OACzB,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,iBAAA,EAAkB,CAAA;AAAA,0BACnC,OAAA,EAAA,EAAQ,CAAA;AAAA,0BACR,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,WAAA;AAAA,UACX,SAAA,EAAU,gBAAA;AAAA,UACV,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,UACzB,eAAe,OAAA,CAAQ;AAAA;AAAA,OACzB,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { useEffect } from 'react';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
3
|
import { Box, Grid, Card, CardHeader, Divider, CardContent, Typography, Button } from '@material-ui/core';
|
|
4
4
|
import { Progress } from '@backstage/core-components';
|
|
5
5
|
import { MetricsFilters } from './MetricsFilters.esm.js';
|
|
@@ -62,11 +62,13 @@ const ObservabilityMetricsContent = () => {
|
|
|
62
62
|
fetchMetrics,
|
|
63
63
|
canViewMetricsForEnv
|
|
64
64
|
]);
|
|
65
|
+
const [refreshNonce, setRefreshNonce] = useState(0);
|
|
65
66
|
const handleFiltersChange = (newFilters) => {
|
|
66
67
|
updateFilters(newFilters);
|
|
67
68
|
};
|
|
68
69
|
const handleRefresh = () => {
|
|
69
70
|
refresh();
|
|
71
|
+
setRefreshNonce((prev) => prev + 1);
|
|
70
72
|
};
|
|
71
73
|
if (namespaceError) {
|
|
72
74
|
return /* @__PURE__ */ jsx(Fragment, {});
|
|
@@ -160,7 +162,8 @@ const ObservabilityMetricsContent = () => {
|
|
|
160
162
|
filters,
|
|
161
163
|
entity,
|
|
162
164
|
namespaceName: namespace,
|
|
163
|
-
project
|
|
165
|
+
project,
|
|
166
|
+
refreshNonce
|
|
164
167
|
}
|
|
165
168
|
)
|
|
166
169
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservabilityMetricsPage.esm.js","sources":["../../../src/components/Metrics/ObservabilityMetricsPage.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport {\n Grid,\n Card,\n CardContent,\n CardHeader,\n Divider,\n Button,\n Typography,\n Box,\n} from '@material-ui/core';\nimport { Progress } from '@backstage/core-components';\nimport { MetricsFilters } from './MetricsFilters';\nimport { MetricGraphByComponent } from './MetricGraphByComponent';\nimport { MetricsActions } from './MetricsActions';\nimport { HTTPMetricsSection } from './HTTPMetricsSection';\nimport {\n useGetNamespaceAndProjectByEntity,\n useGetEnvironmentsByNamespace,\n useUrlFilters,\n useMetrics,\n} from '../../hooks';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport {\n ResourceMetrics,\n CpuUsageMetrics,\n MemoryUsageMetrics,\n} from '../../types';\nimport { useObservabilityMetricsPageStyles } from './styles';\nimport { Alert } from '@material-ui/lab';\nimport {\n useMetricsPermission,\n ForbiddenState,\n} from '@openchoreo/backstage-plugin-react';\n\nconst ObservabilityMetricsContent = () => {\n const classes = useObservabilityMetricsPageStyles();\n const { entity } = useEntity();\n\n const {\n namespace,\n project,\n error: namespaceError,\n } = useGetNamespaceAndProjectByEntity(entity);\n const {\n environments,\n loading: environmentsLoading,\n error: environmentsError,\n } = useGetEnvironmentsByNamespace(namespace, project);\n\n // URL-synced filters - must be after environments are available\n const { filters, updateFilters } = useUrlFilters({\n environments,\n });\n\n // Per-environment permission (ABAC `resource.environment`) — gates the\n // metrics content and the fetch once an env is selected. See openchoreo#3408.\n const {\n canViewMetrics: canViewMetricsForEnv,\n loading: envPermissionLoading,\n deniedTooltip: envPermissionDenied,\n permissionName: envPermissionName,\n } = useMetricsPermission(filters.environment?.name);\n\n // Fetch metrics using the custom hook\n const {\n metrics,\n loading: metricsLoading,\n error: metricsError,\n fetchMetrics,\n refresh,\n } = useMetrics(filters, entity, namespace as string, project as string);\n const resourceMetrics = metrics as ResourceMetrics;\n\n // Fetch metrics when filters change\n useEffect(() => {\n if (filters.environment && filters.timeRange && canViewMetricsForEnv) {\n fetchMetrics(true);\n }\n }, [\n filters.environment,\n filters.timeRange,\n fetchMetrics,\n canViewMetricsForEnv,\n ]);\n\n const handleFiltersChange = (newFilters: Partial<typeof filters>) => {\n updateFilters(newFilters);\n };\n\n const handleRefresh = () => {\n refresh();\n };\n\n if (namespaceError) {\n // TODO: Add a toast notification here\n return <></>;\n }\n\n if (environmentsError) {\n // TODO: Add a toast notification here\n return <></>;\n }\n\n const isLoading = environmentsLoading;\n\n const renderError = (error: string) => {\n const isObservabilityDisabled = error.includes(\n 'Observability is not enabled',\n );\n\n return (\n <Alert\n severity={isObservabilityDisabled ? 'info' : 'error'}\n className={classes.errorContainer}\n >\n <Typography variant=\"body1\">\n {isObservabilityDisabled\n ? 'Observability is not enabled for this component in the current environment. Enable observability to view metrics.'\n : error}\n </Typography>\n {!isObservabilityDisabled && (\n <Button onClick={handleRefresh} color=\"inherit\" size=\"small\">\n Retry\n </Button>\n )}\n </Alert>\n );\n };\n\n return (\n <Box>\n {(isLoading || metricsLoading) && <Progress />}\n\n {!isLoading && (\n <>\n <MetricsFilters\n filters={filters}\n onFiltersChange={handleFiltersChange}\n environments={environments}\n disabled={isLoading}\n />\n {filters.environment &&\n !envPermissionLoading &&\n !canViewMetricsForEnv && (\n <ForbiddenState\n message={envPermissionDenied}\n permissionName={envPermissionName}\n variant=\"compact\"\n />\n )}\n {canViewMetricsForEnv && metricsError && renderError(metricsError)}\n {canViewMetricsForEnv && (\n <MetricsActions\n onRefresh={handleRefresh}\n disabled={metricsLoading}\n />\n )}\n {canViewMetricsForEnv && (\n <Grid\n container\n spacing={4}\n className={classes.metricsGridContainer}\n >\n <Grid item xs={12} md={6}>\n <Card>\n <CardHeader title=\"CPU Usage\" />\n <Divider />\n <CardContent>\n <MetricGraphByComponent\n usageData={\n resourceMetrics?.cpuUsage || ({} as CpuUsageMetrics)\n }\n usageType=\"cpu\"\n timeRange={filters.timeRange}\n customStartTime={filters.customStartTime}\n customEndTime={filters.customEndTime}\n />\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} md={6}>\n <Card>\n <CardHeader title=\"Memory Usage\" />\n <Divider />\n <CardContent>\n <MetricGraphByComponent\n usageData={\n resourceMetrics?.memoryUsage ||\n ({} as MemoryUsageMetrics)\n }\n usageType=\"memory\"\n timeRange={filters.timeRange}\n customStartTime={filters.customStartTime}\n customEndTime={filters.customEndTime}\n />\n </CardContent>\n </Card>\n </Grid>\n <HTTPMetricsSection\n filters={filters}\n entity={entity}\n namespaceName={namespace as string}\n project={project as string}\n />\n </Grid>\n )}\n </>\n )}\n </Box>\n );\n};\n\nexport const ObservabilityMetricsPage = () => {\n const {\n canViewMetrics,\n loading: permissionLoading,\n deniedTooltip,\n permissionName,\n } = useMetricsPermission();\n\n if (permissionLoading) {\n return <Progress />;\n }\n\n if (!canViewMetrics) {\n return (\n <ForbiddenState\n message={deniedTooltip}\n permissionName={permissionName}\n variant=\"fullpage\"\n />\n );\n }\n\n return <ObservabilityMetricsContent />;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ObservabilityMetricsPage.esm.js","sources":["../../../src/components/Metrics/ObservabilityMetricsPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n Grid,\n Card,\n CardContent,\n CardHeader,\n Divider,\n Button,\n Typography,\n Box,\n} from '@material-ui/core';\nimport { Progress } from '@backstage/core-components';\nimport { MetricsFilters } from './MetricsFilters';\nimport { MetricGraphByComponent } from './MetricGraphByComponent';\nimport { MetricsActions } from './MetricsActions';\nimport { HTTPMetricsSection } from './HTTPMetricsSection';\nimport {\n useGetNamespaceAndProjectByEntity,\n useGetEnvironmentsByNamespace,\n useUrlFilters,\n useMetrics,\n} from '../../hooks';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport {\n ResourceMetrics,\n CpuUsageMetrics,\n MemoryUsageMetrics,\n} from '../../types';\nimport { useObservabilityMetricsPageStyles } from './styles';\nimport { Alert } from '@material-ui/lab';\nimport {\n useMetricsPermission,\n ForbiddenState,\n} from '@openchoreo/backstage-plugin-react';\n\nconst ObservabilityMetricsContent = () => {\n const classes = useObservabilityMetricsPageStyles();\n const { entity } = useEntity();\n\n const {\n namespace,\n project,\n error: namespaceError,\n } = useGetNamespaceAndProjectByEntity(entity);\n const {\n environments,\n loading: environmentsLoading,\n error: environmentsError,\n } = useGetEnvironmentsByNamespace(namespace, project);\n\n // URL-synced filters - must be after environments are available\n const { filters, updateFilters } = useUrlFilters({\n environments,\n });\n\n // Per-environment permission (ABAC `resource.environment`) — gates the\n // metrics content and the fetch once an env is selected. See openchoreo#3408.\n const {\n canViewMetrics: canViewMetricsForEnv,\n loading: envPermissionLoading,\n deniedTooltip: envPermissionDenied,\n permissionName: envPermissionName,\n } = useMetricsPermission(filters.environment?.name);\n\n // Fetch metrics using the custom hook\n const {\n metrics,\n loading: metricsLoading,\n error: metricsError,\n fetchMetrics,\n refresh,\n } = useMetrics(filters, entity, namespace as string, project as string);\n const resourceMetrics = metrics as ResourceMetrics;\n\n // Fetch metrics when filters change\n useEffect(() => {\n if (filters.environment && filters.timeRange && canViewMetricsForEnv) {\n fetchMetrics(true);\n }\n }, [\n filters.environment,\n filters.timeRange,\n fetchMetrics,\n canViewMetricsForEnv,\n ]);\n\n const [refreshNonce, setRefreshNonce] = useState(0);\n\n const handleFiltersChange = (newFilters: Partial<typeof filters>) => {\n updateFilters(newFilters);\n };\n\n const handleRefresh = () => {\n refresh();\n setRefreshNonce(prev => prev + 1);\n };\n\n if (namespaceError) {\n // TODO: Add a toast notification here\n return <></>;\n }\n\n if (environmentsError) {\n // TODO: Add a toast notification here\n return <></>;\n }\n\n const isLoading = environmentsLoading;\n\n const renderError = (error: string) => {\n const isObservabilityDisabled = error.includes(\n 'Observability is not enabled',\n );\n\n return (\n <Alert\n severity={isObservabilityDisabled ? 'info' : 'error'}\n className={classes.errorContainer}\n >\n <Typography variant=\"body1\">\n {isObservabilityDisabled\n ? 'Observability is not enabled for this component in the current environment. Enable observability to view metrics.'\n : error}\n </Typography>\n {!isObservabilityDisabled && (\n <Button onClick={handleRefresh} color=\"inherit\" size=\"small\">\n Retry\n </Button>\n )}\n </Alert>\n );\n };\n\n return (\n <Box>\n {(isLoading || metricsLoading) && <Progress />}\n\n {!isLoading && (\n <>\n <MetricsFilters\n filters={filters}\n onFiltersChange={handleFiltersChange}\n environments={environments}\n disabled={isLoading}\n />\n {filters.environment &&\n !envPermissionLoading &&\n !canViewMetricsForEnv && (\n <ForbiddenState\n message={envPermissionDenied}\n permissionName={envPermissionName}\n variant=\"compact\"\n />\n )}\n {canViewMetricsForEnv && metricsError && renderError(metricsError)}\n {canViewMetricsForEnv && (\n <MetricsActions\n onRefresh={handleRefresh}\n disabled={metricsLoading}\n />\n )}\n {canViewMetricsForEnv && (\n <Grid\n container\n spacing={4}\n className={classes.metricsGridContainer}\n >\n <Grid item xs={12} md={6}>\n <Card>\n <CardHeader title=\"CPU Usage\" />\n <Divider />\n <CardContent>\n <MetricGraphByComponent\n usageData={\n resourceMetrics?.cpuUsage || ({} as CpuUsageMetrics)\n }\n usageType=\"cpu\"\n timeRange={filters.timeRange}\n customStartTime={filters.customStartTime}\n customEndTime={filters.customEndTime}\n />\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} md={6}>\n <Card>\n <CardHeader title=\"Memory Usage\" />\n <Divider />\n <CardContent>\n <MetricGraphByComponent\n usageData={\n resourceMetrics?.memoryUsage ||\n ({} as MemoryUsageMetrics)\n }\n usageType=\"memory\"\n timeRange={filters.timeRange}\n customStartTime={filters.customStartTime}\n customEndTime={filters.customEndTime}\n />\n </CardContent>\n </Card>\n </Grid>\n <HTTPMetricsSection\n filters={filters}\n entity={entity}\n namespaceName={namespace as string}\n project={project as string}\n refreshNonce={refreshNonce}\n />\n </Grid>\n )}\n </>\n )}\n </Box>\n );\n};\n\nexport const ObservabilityMetricsPage = () => {\n const {\n canViewMetrics,\n loading: permissionLoading,\n deniedTooltip,\n permissionName,\n } = useMetricsPermission();\n\n if (permissionLoading) {\n return <Progress />;\n }\n\n if (!canViewMetrics) {\n return (\n <ForbiddenState\n message={deniedTooltip}\n permissionName={permissionName}\n variant=\"fullpage\"\n />\n );\n }\n\n return <ObservabilityMetricsContent />;\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openchoreo/backstage-plugin-openchoreo-observability",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/index.esm.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"@material-ui/icons": "4.11.3",
|
|
43
43
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
44
44
|
"@material-ui/pickers": "3.3.11",
|
|
45
|
-
"@openchoreo/backstage-design-system": "^1.1.
|
|
46
|
-
"@openchoreo/backstage-plugin-common": "^1.1.
|
|
47
|
-
"@openchoreo/backstage-plugin-react": "^1.1.
|
|
45
|
+
"@openchoreo/backstage-design-system": "^1.1.1",
|
|
46
|
+
"@openchoreo/backstage-plugin-common": "^1.1.1",
|
|
47
|
+
"@openchoreo/backstage-plugin-react": "^1.1.1",
|
|
48
48
|
"date-fns": "2.30.0",
|
|
49
49
|
"react-markdown": "^9.0.1",
|
|
50
50
|
"react-use": "17.6.0",
|