@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 CHANGED
@@ -1,5 +1,9 @@
1
1
  # @openchoreo/backstage-plugin-openchoreo-observability
2
2
 
3
+ ## 1.1.1
4
+
5
+ - HTTP metrics now refresh on refresh button click. (#595)
6
+
3
7
  ## 1.1.0
4
8
 
5
9
  - Initial public release on GitHub Packages, aligned with the OpenChoreo platform release line (`1.1.0`).
@@ -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
- if (filters.environment && filters.timeRange && filtersChanged) {
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
- }, [httpEnabled, filters.environment, filters.timeRange, fetchMetrics]);
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 && filters.timeRange && filtersChanged) {\n fetchMetrics(true);\n }\n\n previousFiltersRef.current = currentFilters;\n }, [httpEnabled, filters.environment, filters.timeRange, fetchMetrics]);\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":"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"}
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":"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"}
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAM,8BAA8B,MAAM;AACxC,EAAA,MAAM,UAAU,iCAAA,EAAkC;AAClD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAE7B,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT,GAAI,kCAAkC,MAAM,CAAA;AAC5C,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,OAAA,EAAS,mBAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT,GAAI,6BAAA,CAA8B,SAAA,EAAW,OAAO,CAAA;AAGpD,EAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAc,GAAI,aAAA,CAAc;AAAA,IAC/C;AAAA,GACD,CAAA;AAID,EAAA,MAAM;AAAA,IACJ,cAAA,EAAgB,oBAAA;AAAA,IAChB,OAAA,EAAS,oBAAA;AAAA,IACT,aAAA,EAAe,mBAAA;AAAA,IACf,cAAA,EAAgB;AAAA,GAClB,GAAI,oBAAA,CAAqB,OAAA,CAAQ,WAAA,EAAa,IAAI,CAAA;AAGlD,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,YAAA;AAAA,IACP,YAAA;AAAA,IACA;AAAA,GACF,GAAI,UAAA,CAAW,OAAA,EAAS,MAAA,EAAQ,WAAqB,OAAiB,CAAA;AACtE,EAAA,MAAM,eAAA,GAAkB,OAAA;AAGxB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,SAAA,IAAa,oBAAA,EAAsB;AACpE,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA,CAAQ,WAAA;AAAA,IACR,OAAA,CAAQ,SAAA;AAAA,IACR,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,mBAAA,GAAsB,CAAC,UAAA,KAAwC;AACnE,IAAA,aAAA,CAAc,UAAU,CAAA;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,IAAI,cAAA,EAAgB;AAElB,IAAA,uBAAO,GAAA,CAAA,QAAA,EAAA,EAAE,CAAA;AAAA,EACX;AAEA,EAAA,IAAI,iBAAA,EAAmB;AAErB,IAAA,uBAAO,GAAA,CAAA,QAAA,EAAA,EAAE,CAAA;AAAA,EACX;AAEA,EAAA,MAAM,SAAA,GAAY,mBAAA;AAElB,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAkB;AACrC,IAAA,MAAM,0BAA0B,KAAA,CAAM,QAAA;AAAA,MACpC;AAAA,KACF;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,0BAA0B,MAAA,GAAS,OAAA;AAAA,QAC7C,WAAW,OAAA,CAAQ,cAAA;AAAA,QAEnB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EACjB,QAAA,EAAA,uBAAA,GACG,sHACA,KAAA,EACN,CAAA;AAAA,UACC,CAAC,uBAAA,oBACA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,eAAe,KAAA,EAAM,SAAA,EAAU,IAAA,EAAK,OAAA,EAAQ,QAAA,EAAA,OAAA,EAE7D;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ,CAAA;AAEA,EAAA,4BACG,GAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,CAAA,SAAA,IAAa,cAAA,yBAAoB,QAAA,EAAA,EAAS,CAAA;AAAA,IAE3C,CAAC,6BACA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,eAAA,EAAiB,mBAAA;AAAA,UACjB,YAAA;AAAA,UACA,QAAA,EAAU;AAAA;AAAA,OACZ;AAAA,MACC,OAAA,CAAQ,WAAA,IACP,CAAC,oBAAA,IACD,CAAC,oBAAA,oBACC,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,mBAAA;AAAA,UACT,cAAA,EAAgB,iBAAA;AAAA,UAChB,OAAA,EAAQ;AAAA;AAAA,OACV;AAAA,MAEH,oBAAA,IAAwB,YAAA,IAAgB,WAAA,CAAY,YAAY,CAAA;AAAA,MAChE,oBAAA,oBACC,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,aAAA;AAAA,UACX,QAAA,EAAU;AAAA;AAAA,OACZ;AAAA,MAED,oBAAA,oBACC,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,CAAA;AAAA,UACT,WAAW,OAAA,CAAQ,oBAAA;AAAA,UAEnB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAI,IAAA,EAAC,EAAA,EAAI,IAAI,EAAA,EAAI,CAAA,EACrB,+BAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,WAAA,EAAY,CAAA;AAAA,kCAC7B,OAAA,EAAA,EAAQ,CAAA;AAAA,kCACR,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,gBAAC,sBAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EACE,eAAA,EAAiB,QAAA,IAAa,EAAC;AAAA,kBAEjC,SAAA,EAAU,KAAA;AAAA,kBACV,WAAW,OAAA,CAAQ,SAAA;AAAA,kBACnB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,kBACzB,eAAe,OAAA,CAAQ;AAAA;AAAA,eACzB,EACF;AAAA,aAAA,EACF,CAAA,EACF,CAAA;AAAA,4BACA,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,cAAA,EAAe,CAAA;AAAA,kCAChC,OAAA,EAAA,EAAQ,CAAA;AAAA,kCACR,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,gBAAC,sBAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EACE,eAAA,EAAiB,WAAA,IAChB,EAAC;AAAA,kBAEJ,SAAA,EAAU,QAAA;AAAA,kBACV,WAAW,OAAA,CAAQ,SAAA;AAAA,kBACnB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,kBACzB,eAAe,OAAA,CAAQ;AAAA;AAAA,eACzB,EACF;AAAA,aAAA,EACF,CAAA,EACF,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,kBAAA;AAAA,cAAA;AAAA,gBACC,OAAA;AAAA,gBACA,MAAA;AAAA,gBACA,aAAA,EAAe,SAAA;AAAA,gBACf;AAAA;AAAA;AACF;AAAA;AAAA;AACF,KAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AAEO,MAAM,2BAA2B,MAAM;AAC5C,EAAA,MAAM;AAAA,IACJ,cAAA;AAAA,IACA,OAAA,EAAS,iBAAA;AAAA,IACT,aAAA;AAAA,IACA;AAAA,MACE,oBAAA,EAAqB;AAEzB,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,2BAAQ,QAAA,EAAA,EAAS,CAAA;AAAA,EACnB;AAEA,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,uBACE,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,aAAA;AAAA,QACT,cAAA;AAAA,QACA,OAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AAEA,EAAA,2BAAQ,2BAAA,EAAA,EAA4B,CAAA;AACtC;;;;"}
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.0",
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.0",
46
- "@openchoreo/backstage-plugin-common": "^1.1.0",
47
- "@openchoreo/backstage-plugin-react": "^1.1.0",
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",