@red-hat-developer-hub/plugin-cost-management 2.2.2 → 2.3.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.
Files changed (59) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/Router.esm.js +14 -8
  3. package/dist/Router.esm.js.map +1 -1
  4. package/dist/components/BasePage.esm.js +8 -5
  5. package/dist/components/BasePage.esm.js.map +1 -1
  6. package/dist/components/InfoCardTitle.esm.js +2 -2
  7. package/dist/components/InfoCardTitle.esm.js.map +1 -1
  8. package/dist/components/PageLayout.esm.js +37 -30
  9. package/dist/components/PageLayout.esm.js.map +1 -1
  10. package/dist/components/icon/AnalyticsIcon.esm.js +3 -3
  11. package/dist/components/icon/AnalyticsIcon.esm.js.map +1 -1
  12. package/dist/components/icon/AnalyticsIconFilled.esm.js +2 -2
  13. package/dist/components/icon/AnalyticsIconFilled.esm.js.map +1 -1
  14. package/dist/components/icon/AnalyticsIconOutlined.esm.js +2 -2
  15. package/dist/components/icon/AnalyticsIconOutlined.esm.js.map +1 -1
  16. package/dist/components/icon/CostManagementIcon.esm.js +3 -3
  17. package/dist/components/icon/CostManagementIcon.esm.js.map +1 -1
  18. package/dist/components/icon/CostManagementIconFilled.esm.js +2 -2
  19. package/dist/components/icon/CostManagementIconFilled.esm.js.map +1 -1
  20. package/dist/components/icon/CostManagementIconOutlined.esm.js +2 -2
  21. package/dist/components/icon/CostManagementIconOutlined.esm.js.map +1 -1
  22. package/dist/index.d.ts +9 -9
  23. package/dist/pages/openshift/OpenShiftPage.esm.js +255 -207
  24. package/dist/pages/openshift/OpenShiftPage.esm.js.map +1 -1
  25. package/dist/pages/openshift/components/AutocompleteComponent.esm.js +43 -40
  26. package/dist/pages/openshift/components/AutocompleteComponent.esm.js.map +1 -1
  27. package/dist/pages/openshift/components/DownloadIconButton.esm.js +11 -11
  28. package/dist/pages/openshift/components/DownloadIconButton.esm.js.map +1 -1
  29. package/dist/pages/openshift/components/Filters.esm.js +178 -161
  30. package/dist/pages/openshift/components/Filters.esm.js.map +1 -1
  31. package/dist/pages/openshift/components/PageHeader.esm.js +11 -6
  32. package/dist/pages/openshift/components/PageHeader.esm.js.map +1 -1
  33. package/dist/pages/openshift/components/SelectComponent.esm.js +30 -27
  34. package/dist/pages/openshift/components/SelectComponent.esm.js.map +1 -1
  35. package/dist/pages/openshift/components/TableToolbar.esm.js +187 -163
  36. package/dist/pages/openshift/components/TableToolbar.esm.js.map +1 -1
  37. package/dist/pages/optimizations/OptimizationsPage.esm.js +60 -56
  38. package/dist/pages/optimizations/OptimizationsPage.esm.js.map +1 -1
  39. package/dist/pages/optimizations/components/ComboBox.esm.js +37 -33
  40. package/dist/pages/optimizations/components/ComboBox.esm.js.map +1 -1
  41. package/dist/pages/optimizations/components/Filters.esm.js +35 -28
  42. package/dist/pages/optimizations/components/Filters.esm.js.map +1 -1
  43. package/dist/pages/optimizations/components/TableToolbar.esm.js +3 -2
  44. package/dist/pages/optimizations/components/TableToolbar.esm.js.map +1 -1
  45. package/dist/pages/optimizations-breakdown/OptimizationsBreakdownPage.esm.js +51 -45
  46. package/dist/pages/optimizations-breakdown/OptimizationsBreakdownPage.esm.js.map +1 -1
  47. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/OptimizationEngineTab.esm.js +79 -64
  48. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/OptimizationEngineTab.esm.js.map +1 -1
  49. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/CodeInfoCard.esm.js +4 -3
  50. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/CodeInfoCard.esm.js.map +1 -1
  51. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/ContainerInfoCard.esm.js +28 -20
  52. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/ContainerInfoCard.esm.js.map +1 -1
  53. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/ChartInfoCard.esm.js +4 -3
  54. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/ChartInfoCard.esm.js.map +1 -1
  55. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/IntlBreakdownChart.esm.js +3 -3
  56. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/IntlBreakdownChart.esm.js.map +1 -1
  57. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/intl-breakdown-chart/components/optimizations-breakdown-chart/components/optimizations-breakdown-chart/OptimizationsBreakdownChart.esm.js +29 -26
  58. package/dist/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/intl-breakdown-chart/components/optimizations-breakdown-chart/components/optimizations-breakdown-chart/OptimizationsBreakdownChart.esm.js.map +1 -1
  59. package/package.json +13 -13
@@ -1,7 +1,8 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
1
2
  import React, { useState, useCallback, useMemo, useEffect } from 'react';
2
3
  import { useIntl } from 'react-intl';
3
4
  import { makeStyles } from '@material-ui/core/styles';
4
- import { createContainer, Chart, ChartThemeColor, ChartAxis, ChartLegend, getInteractiveLegendEvents, ChartLegendTooltip, ChartArea, ChartScatter, ChartBoxPlot } from '@patternfly/react-charts/victory';
5
+ import { createContainer, Chart, ChartThemeColor, ChartAxis, ChartArea, ChartScatter, ChartBoxPlot, ChartLegend, getInteractiveLegendEvents, ChartLegendTooltip } from '@patternfly/react-charts/victory';
5
6
  import { chart_color_blue_100 } from '@patternfly/react-tokens/dist/js/chart_color_blue_100';
6
7
  import { chart_color_blue_200 } from '@patternfly/react-tokens/dist/js/chart_color_blue_200';
7
8
  import { chart_color_blue_400 } from '@patternfly/react-tokens/dist/js/chart_color_blue_400';
@@ -58,7 +59,7 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
58
59
  );
59
60
  return cursorVoronoiContainer ? React.cloneElement(cursorVoronoiContainer, {
60
61
  disable: !isDataAvailable(series, hiddenSeries),
61
- labelComponent: /* @__PURE__ */ React.createElement(
62
+ labelComponent: /* @__PURE__ */ jsx(
62
63
  ChartLegendTooltip,
63
64
  {
64
65
  legendData,
@@ -70,15 +71,15 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
70
71
  const getLimitChart = () => {
71
72
  return series?.map((serie, index) => {
72
73
  if (serie.childName === "limit") {
73
- return /* @__PURE__ */ React.createElement(
74
+ return /* @__PURE__ */ jsx(
74
75
  ChartArea,
75
76
  {
76
77
  data: !hiddenSeries.has(index) ? serie.data : [{ y: null }],
77
78
  interpolation: "monotoneX",
78
- key: serie.childName,
79
79
  name: serie.childName,
80
80
  style: serie.style
81
- }
81
+ },
82
+ serie.childName
82
83
  );
83
84
  }
84
85
  return null;
@@ -87,15 +88,15 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
87
88
  const getRequestChart = () => {
88
89
  return series?.map((serie, index) => {
89
90
  if (serie.childName === "request") {
90
- return /* @__PURE__ */ React.createElement(
91
+ return /* @__PURE__ */ jsx(
91
92
  ChartArea,
92
93
  {
93
94
  data: !hiddenSeries.has(index) ? serie.data : [{ y: null }],
94
95
  interpolation: "monotoneX",
95
- key: serie.childName,
96
96
  name: serie.childName,
97
97
  style: serie.style
98
- }
98
+ },
99
+ serie.childName
99
100
  );
100
101
  }
101
102
  return null;
@@ -104,14 +105,14 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
104
105
  const getScatterChart = () => {
105
106
  return series?.map((serie, index) => {
106
107
  if (serie.childName === "scatter") {
107
- return /* @__PURE__ */ React.createElement(
108
+ return /* @__PURE__ */ jsx(
108
109
  ChartScatter,
109
110
  {
110
111
  data: !hiddenSeries.has(index - 1) ? serie.data : [{ y: null }],
111
- key: serie.childName,
112
112
  name: serie.childName,
113
113
  style: serie.style
114
- }
114
+ },
115
+ serie.childName
115
116
  );
116
117
  }
117
118
  return null;
@@ -120,15 +121,15 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
120
121
  const getUsageChart = () => {
121
122
  return series?.map((serie, index) => {
122
123
  if (serie.childName === "usage") {
123
- return /* @__PURE__ */ React.createElement(
124
+ return /* @__PURE__ */ jsx(
124
125
  ChartBoxPlot,
125
126
  {
126
127
  boxWidth: width < 475 ? 15 : void 0,
127
128
  data: !hiddenSeries.has(index) ? serie.data : [{ y: [null] }],
128
- key: serie.childName,
129
129
  name: serie.childName,
130
130
  style: serie.style
131
- }
131
+ },
132
+ serie.childName
132
133
  );
133
134
  }
134
135
  return null;
@@ -193,7 +194,7 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
193
194
  })
194
195
  }) : intl.formatMessage(messages.chartNoData);
195
196
  };
196
- return /* @__PURE__ */ React.createElement(
197
+ return /* @__PURE__ */ jsx(
197
198
  CursorVoronoiContainer,
198
199
  {
199
200
  cursorDimension: "x",
@@ -217,7 +218,7 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
217
218
  return baseHeight + extraHeight;
218
219
  };
219
220
  const getLegend = () => {
220
- return /* @__PURE__ */ React.createElement(
221
+ return /* @__PURE__ */ jsx(
221
222
  ChartLegend,
222
223
  {
223
224
  data: getLegendData(series, hiddenSeries),
@@ -358,10 +359,9 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
358
359
  };
359
360
  }, [containerRef, handleOnResize]);
360
361
  const chartHeight = getHeight();
361
- return /* @__PURE__ */ React.createElement("div", { className: classes.chartOverride, ref: containerRef }, /* @__PURE__ */ React.createElement("div", { style: { height: chartHeight } }, /* @__PURE__ */ React.createElement(
362
+ return /* @__PURE__ */ jsx("div", { className: classes.chartOverride, ref: containerRef, children: /* @__PURE__ */ jsx("div", { style: { height: chartHeight }, children: /* @__PURE__ */ jsxs(
362
363
  Chart,
363
364
  {
364
- key: `chart-${name}`,
365
365
  containerComponent: cloneContainer(),
366
366
  domain: getDomain(series, hiddenSeries, 1),
367
367
  domainPadding: { x: [30, 30] },
@@ -373,15 +373,18 @@ const OptimizationsBreakdownChart = ({ baseHeight, name, limitData, padding, req
373
373
  name,
374
374
  padding: getPadding(),
375
375
  width,
376
- themeColor: ChartThemeColor.default
376
+ themeColor: ChartThemeColor.default,
377
+ children: [
378
+ /* @__PURE__ */ jsx(ChartAxis, { fixLabelOverlap: true }),
379
+ /* @__PURE__ */ jsx(ChartAxis, { dependentAxis: true, showGrid: true }),
380
+ getRequestChart(),
381
+ getLimitChart(),
382
+ getScatterChart(),
383
+ getUsageChart()
384
+ ]
377
385
  },
378
- /* @__PURE__ */ React.createElement(ChartAxis, { fixLabelOverlap: true }),
379
- /* @__PURE__ */ React.createElement(ChartAxis, { dependentAxis: true, showGrid: true }),
380
- getRequestChart(),
381
- getLimitChart(),
382
- getScatterChart(),
383
- getUsageChart()
384
- )));
386
+ `chart-${name}`
387
+ ) }) });
385
388
  };
386
389
 
387
390
  export { OptimizationsBreakdownChart, chartStyles };
@@ -1 +1 @@
1
- {"version":3,"file":"OptimizationsBreakdownChart.esm.js","sources":["../../../../../../../../../../../../../src/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/intl-breakdown-chart/components/optimizations-breakdown-chart/components/optimizations-breakdown-chart/OptimizationsBreakdownChart.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n Chart,\n ChartArea,\n ChartAxis,\n ChartBoxPlot,\n ChartLegend,\n ChartLegendTooltip,\n ChartScatter,\n createContainer,\n getInteractiveLegendEvents,\n ChartThemeColor,\n} from '@patternfly/react-charts/victory';\nimport { chart_color_blue_100 } from '@patternfly/react-tokens/dist/js/chart_color_blue_100';\nimport { chart_color_blue_200 } from '@patternfly/react-tokens/dist/js/chart_color_blue_200';\nimport { chart_color_blue_400 } from '@patternfly/react-tokens/dist/js/chart_color_blue_400';\nimport { chart_color_red_orange_200 } from '@patternfly/react-tokens/dist/js/chart_color_red_orange_200';\nimport { ChartSeries } from './types/ChartSeries';\nimport {\n getDomain,\n getLegendData,\n getResizeObserver,\n initHiddenSeries,\n isDataAvailable,\n isSeriesHidden,\n} from './utils/chart-utils';\nimport messages from './i18n/messages';\nimport { unitsLookupKey } from './utils/format';\nimport { getDateRangeString } from './utils/chart-datum';\n\nconst useOptimizationsBreakdownChartStyles = makeStyles(() => ({\n chartOverride: {\n '& > div > div > svg': {\n overflow: 'visible',\n },\n },\n}));\n\nexport const chartStyles = {\n limit: {\n fill: 'none',\n },\n limitColorScale: [chart_color_red_orange_200.value],\n request: {\n fill: 'none',\n },\n requestColorScale: [chart_color_blue_400.value],\n usageColorScale: [chart_color_blue_100.value, chart_color_blue_200.value],\n};\n\ninterface OptimizationsBreakdownChartOwnProps {\n baseHeight: number;\n limitData?: any;\n name?: string;\n padding?: any;\n requestData?: any;\n usageData?: any;\n}\n\ntype OptimizationsBreakdownChartProps = OptimizationsBreakdownChartOwnProps;\n\nconst OptimizationsBreakdownChart: React.FC<\n OptimizationsBreakdownChartProps\n> = ({ baseHeight, name, limitData, padding, requestData, usageData }) => {\n const [containerRef] = useState(React.createRef<HTMLDivElement>());\n const [cursorVoronoiContainer, setCursorVoronoiContainer] = useState<any>();\n const [extraHeight, setExtraHeight] = useState(0);\n const [hiddenSeries, setHiddenSeries] = useState(new Set<number>());\n const [series, setSeries] = useState<ChartSeries[]>();\n const [width, setWidth] = useState(0);\n\n const intl = useIntl();\n const classes = useOptimizationsBreakdownChartStyles();\n\n // Clone original container. See https://issues.redhat.com/browse/COST-762\n const cloneContainer = () => {\n const legendData = getLegendData(series, hiddenSeries, true);\n // Force extra space for line wrapping\n legendData?.push(\n {\n childName: 'usage',\n name: '',\n symbol: {\n fill: 'none',\n },\n },\n {\n childName: 'usage',\n name: '',\n symbol: {\n fill: 'none',\n },\n },\n );\n return cursorVoronoiContainer\n ? React.cloneElement(cursorVoronoiContainer, {\n disable: !isDataAvailable(series, hiddenSeries),\n labelComponent: (\n <ChartLegendTooltip\n legendData={legendData}\n title={datum => `${datum.x}`}\n />\n ),\n } as any)\n : undefined;\n };\n\n const getLimitChart = () => {\n return series?.map((serie, index) => {\n if (serie.childName === 'limit') {\n return (\n <ChartArea\n data={!hiddenSeries.has(index) ? serie.data : [{ y: null }]}\n interpolation=\"monotoneX\"\n key={serie.childName}\n name={serie.childName}\n style={serie.style}\n />\n );\n }\n return null;\n });\n };\n\n const getRequestChart = () => {\n return series?.map((serie, index) => {\n if (serie.childName === 'request') {\n return (\n <ChartArea\n data={!hiddenSeries.has(index) ? serie.data : [{ y: null }]}\n interpolation=\"monotoneX\"\n key={serie.childName}\n name={serie.childName}\n style={serie.style}\n />\n );\n }\n return null;\n });\n };\n\n const getScatterChart = () => {\n return series?.map((serie, index) => {\n if (serie.childName === 'scatter') {\n return (\n <ChartScatter\n data={!hiddenSeries.has(index - 1) ? serie.data : [{ y: null }]}\n key={serie.childName}\n name={serie.childName}\n style={serie.style}\n />\n );\n }\n return null;\n });\n };\n\n const getUsageChart = () => {\n return series?.map((serie, index) => {\n if (serie.childName === 'usage') {\n return (\n <ChartBoxPlot\n boxWidth={width < 475 ? 15 : undefined}\n data={!hiddenSeries.has(index) ? serie.data : [{ y: [null] }]}\n key={serie.childName}\n name={serie.childName}\n style={serie.style}\n />\n );\n }\n return null;\n });\n };\n\n // Returns groups of chart names associated with each data series\n const getChartNames = () => {\n const result: (string | string[] | undefined)[] = [];\n\n if (series) {\n series.forEach(serie => {\n // Each group of chart names are hidden / shown together\n if (serie.childName === 'usage') {\n result.push([serie.childName, 'scatter']);\n } else if (serie.childName !== 'scatter') {\n result.push(serie.childName);\n }\n });\n }\n return result as any;\n };\n\n const getPadding = useCallback(() => {\n return padding\n ? padding\n : {\n bottom: 75 + extraHeight, // Maintain chart aspect ratio\n left: 50,\n right: 50,\n top: 10,\n };\n }, [extraHeight, padding]);\n\n // Hide each data series individually\n const handleOnLegendClick = (index: number) => {\n const newHiddenSeries = initHiddenSeries(hiddenSeries, index);\n setHiddenSeries(newHiddenSeries);\n };\n\n // Returns CursorVoronoiContainer component\n const getCursorVoronoiContainer = useCallback(() => {\n // Note: Container order is important\n const CursorVoronoiContainer: any = createContainer('voronoi', 'cursor');\n\n const labelFormatter = (datum: {\n childName: string;\n _min: undefined;\n _max: undefined;\n _median: undefined;\n _q1: undefined;\n _q3: undefined;\n yVal: null;\n units: string;\n y: any[];\n }) => {\n const formatValue = (val: undefined | null) =>\n val !== undefined ? val : '';\n if (datum.childName === 'scatter') {\n return null;\n } else if (\n datum.childName === 'usage' &&\n (datum._min !== undefined ||\n datum._max !== undefined ||\n datum._median !== undefined ||\n datum._q1 !== undefined ||\n datum._q3 !== undefined ||\n datum.yVal !== null)\n ) {\n return intl.formatMessage(messages.chartUsageTooltip, {\n br: '\\n',\n min: formatValue(datum._min !== undefined ? datum._min : datum.yVal),\n max: formatValue(datum._max !== undefined ? datum._max : datum.yVal),\n median: formatValue(\n datum._median !== undefined ? datum._median : datum.yVal,\n ),\n q1: formatValue(datum._q1 !== undefined ? datum._q1 : datum.yVal),\n q3: formatValue(datum._q3 !== undefined ? datum._q3 : datum.yVal),\n units: intl.formatMessage(messages.units, {\n units: unitsLookupKey(datum.units),\n }),\n });\n }\n\n // With box plot, datum.y will be an array\n const yVal = Array.isArray(datum.y) ? datum.y[0] : datum.y;\n let units = datum.units;\n\n /**\n * The recommendations API intentionally omits CPU request and limit units when \"cores\".\n *\n * The yaml format for the resource units needs to adhere to the Kubernetes standard that is outlined here\n * https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/\n *\n * Example. \"45 millicores\" is represented as \"45m\", 64 MiB is represented as \"64Mi\",\n * 2.3 cores is represented as \"2.3\" (Note cores is not specified)\n */\n if (\n (datum.childName === 'limit' || datum.childName === 'request') &&\n datum.units === ''\n ) {\n units = unitsLookupKey('cores');\n }\n return yVal !== null\n ? intl.formatMessage(messages.valueUnits, {\n value: yVal,\n units: intl.formatMessage(messages.units, {\n units: unitsLookupKey(units),\n }),\n })\n : intl.formatMessage(messages.chartNoData);\n };\n\n return (\n <CursorVoronoiContainer\n cursorDimension=\"x\"\n labels={({ datum }: any) => labelFormatter(datum)}\n mouseFollowTooltips\n voronoiDimension=\"x\"\n voronoiPadding={getPadding()}\n />\n );\n }, [getPadding, intl]);\n\n // Returns onMouseOver, onMouseOut, and onClick events for the interactive legend\n const getEvents = () => {\n const result = getInteractiveLegendEvents({\n chartNames: getChartNames(),\n isHidden: index => isSeriesHidden(hiddenSeries, index),\n legendName: `${name}-legend`,\n onLegendClick: props => handleOnLegendClick(props.index),\n });\n return result;\n };\n\n const getHeight = () => {\n return baseHeight + extraHeight;\n };\n\n const getLegend = () => {\n return (\n <ChartLegend\n data={getLegendData(series, hiddenSeries)}\n gutter={20}\n name={`${name}-legend`}\n y={320}\n />\n );\n };\n\n const handleLegendAllowWrap = (value: number) => {\n if (value !== extraHeight) {\n setExtraHeight(value);\n }\n };\n\n const handleOnResize = useCallback(() => {\n const { clientWidth = 0 } = containerRef.current || {};\n\n if (clientWidth !== width) {\n setWidth(clientWidth);\n }\n }, [containerRef, width]);\n\n const initDatum = useCallback(() => {\n // Show all legends, regardless of data size\n\n const newSeries: ChartSeries[] = [];\n if (requestData && requestData.length) {\n newSeries.push({\n childName: 'request',\n data: requestData,\n legendItem: {\n name: getDateRangeString(\n requestData,\n messages.recommendedRequest,\n true,\n ),\n symbol: {\n fill: chartStyles.requestColorScale[0],\n type: 'square',\n },\n tooltip: intl.formatMessage(messages.request),\n },\n style: {\n data: {\n ...chartStyles.request,\n stroke: chartStyles.requestColorScale[0],\n },\n },\n });\n }\n if (limitData && limitData.length) {\n newSeries.push({\n childName: 'limit',\n data: limitData,\n legendItem: {\n name: getDateRangeString(limitData, messages.recommendedLimit, true),\n symbol: {\n fill: chartStyles.limitColorScale[0],\n type: 'square',\n },\n tooltip: intl.formatMessage(messages.limit),\n },\n style: {\n data: {\n ...chartStyles.limit,\n stroke: chartStyles.limitColorScale[0],\n },\n },\n });\n }\n if (usageData && usageData.length) {\n const boxPlotData: any[] = [];\n usageData.map((datum: any) => {\n if (datum.y.every((val: any, _i: any, arr: any[]) => val === arr[0])) {\n boxPlotData.push({\n ...datum,\n yVal: datum.y[0],\n y: [null],\n });\n } else {\n boxPlotData.push(datum);\n }\n });\n newSeries.push({\n childName: 'usage',\n data: boxPlotData as any,\n legendItem: {\n name: getDateRangeString(usageData, messages.actualUsage),\n symbol: {\n fill: chartStyles.usageColorScale[1],\n type: 'square',\n },\n tooltip: intl.formatMessage(messages.usage),\n },\n style: {\n median: {\n stroke: chartStyles.usageColorScale[0],\n },\n q1: {\n fill: chartStyles.usageColorScale[1],\n },\n q3: {\n fill: chartStyles.usageColorScale[1],\n },\n } as any,\n });\n\n // Show dots in place of box plot when all values are equal\n const scatterData: any[] = [];\n usageData.map((datum: any) => {\n if (datum.y.every((val: any, _i: any, arr: any[]) => val === arr[0])) {\n scatterData.push({\n ...datum,\n y: datum.y[0],\n });\n } else {\n scatterData.push({\n ...datum,\n y: null,\n });\n }\n });\n newSeries.push({\n childName: 'scatter',\n data: scatterData as any,\n style: {\n data: { fill: chartStyles.usageColorScale[1] },\n } as any,\n });\n }\n setSeries(newSeries);\n setCursorVoronoiContainer(getCursorVoronoiContainer());\n setHiddenSeries(new Set());\n }, [getCursorVoronoiContainer, intl, limitData, requestData, usageData]);\n\n useMemo(() => {\n initDatum();\n }, [initDatum]);\n\n useEffect(() => {\n const unobserve = getResizeObserver(containerRef.current, handleOnResize);\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n }, [containerRef, handleOnResize]);\n\n const chartHeight = getHeight();\n\n return (\n <div className={classes.chartOverride} ref={containerRef}>\n <div style={{ height: chartHeight }}>\n <Chart\n key={`chart-${name}`}\n containerComponent={cloneContainer()}\n domain={getDomain(series, hiddenSeries, 1)}\n domainPadding={{ x: [30, 30] }}\n events={getEvents()}\n height={chartHeight}\n legendAllowWrap={handleLegendAllowWrap}\n legendComponent={getLegend()}\n legendPosition=\"bottom\"\n name={name}\n padding={getPadding()}\n width={width}\n // PatternFly will handle theming automatically when pf-v6-theme-dark is applied\n themeColor={ChartThemeColor.default}\n >\n <ChartAxis fixLabelOverlap />\n <ChartAxis dependentAxis showGrid />\n {getRequestChart()}\n {getLimitChart()}\n {getScatterChart()}\n {getUsageChart()}\n </Chart>\n </div>\n </div>\n );\n};\n\nexport { OptimizationsBreakdownChart };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OptimizationsBreakdownChart.esm.js","sources":["../../../../../../../../../../../../../src/pages/optimizations-breakdown/components/optimization-engine-tab/components/chart-info-card/components/intl-breakdown-chart/components/optimizations-breakdown-chart/components/optimizations-breakdown-chart/OptimizationsBreakdownChart.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n default as React,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useIntl } from 'react-intl';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n Chart,\n ChartArea,\n ChartAxis,\n ChartBoxPlot,\n ChartLegend,\n ChartLegendTooltip,\n ChartScatter,\n createContainer,\n getInteractiveLegendEvents,\n ChartThemeColor,\n} from '@patternfly/react-charts/victory';\nimport { chart_color_blue_100 } from '@patternfly/react-tokens/dist/js/chart_color_blue_100';\nimport { chart_color_blue_200 } from '@patternfly/react-tokens/dist/js/chart_color_blue_200';\nimport { chart_color_blue_400 } from '@patternfly/react-tokens/dist/js/chart_color_blue_400';\nimport { chart_color_red_orange_200 } from '@patternfly/react-tokens/dist/js/chart_color_red_orange_200';\nimport { ChartSeries } from './types/ChartSeries';\nimport {\n getDomain,\n getLegendData,\n getResizeObserver,\n initHiddenSeries,\n isDataAvailable,\n isSeriesHidden,\n} from './utils/chart-utils';\nimport messages from './i18n/messages';\nimport { unitsLookupKey } from './utils/format';\nimport { getDateRangeString } from './utils/chart-datum';\n\nconst useOptimizationsBreakdownChartStyles = makeStyles(() => ({\n chartOverride: {\n '& > div > div > svg': {\n overflow: 'visible',\n },\n },\n}));\n\nexport const chartStyles = {\n limit: {\n fill: 'none',\n },\n limitColorScale: [chart_color_red_orange_200.value],\n request: {\n fill: 'none',\n },\n requestColorScale: [chart_color_blue_400.value],\n usageColorScale: [chart_color_blue_100.value, chart_color_blue_200.value],\n};\n\ninterface OptimizationsBreakdownChartOwnProps {\n baseHeight: number;\n limitData?: any;\n name?: string;\n padding?: any;\n requestData?: any;\n usageData?: any;\n}\n\ntype OptimizationsBreakdownChartProps = OptimizationsBreakdownChartOwnProps;\n\nconst OptimizationsBreakdownChart: React.FC<\n OptimizationsBreakdownChartProps\n> = ({ baseHeight, name, limitData, padding, requestData, usageData }) => {\n const [containerRef] = useState(React.createRef<HTMLDivElement>());\n const [cursorVoronoiContainer, setCursorVoronoiContainer] = useState<any>();\n const [extraHeight, setExtraHeight] = useState(0);\n const [hiddenSeries, setHiddenSeries] = useState(new Set<number>());\n const [series, setSeries] = useState<ChartSeries[]>();\n const [width, setWidth] = useState(0);\n\n const intl = useIntl();\n const classes = useOptimizationsBreakdownChartStyles();\n\n // Clone original container. See https://issues.redhat.com/browse/COST-762\n const cloneContainer = () => {\n const legendData = getLegendData(series, hiddenSeries, true);\n // Force extra space for line wrapping\n legendData?.push(\n {\n childName: 'usage',\n name: '',\n symbol: {\n fill: 'none',\n },\n },\n {\n childName: 'usage',\n name: '',\n symbol: {\n fill: 'none',\n },\n },\n );\n return cursorVoronoiContainer\n ? React.cloneElement(cursorVoronoiContainer, {\n disable: !isDataAvailable(series, hiddenSeries),\n labelComponent: (\n <ChartLegendTooltip\n legendData={legendData}\n title={datum => `${datum.x}`}\n />\n ),\n } as any)\n : undefined;\n };\n\n const getLimitChart = () => {\n return series?.map((serie, index) => {\n if (serie.childName === 'limit') {\n return (\n <ChartArea\n data={!hiddenSeries.has(index) ? serie.data : [{ y: null }]}\n interpolation=\"monotoneX\"\n key={serie.childName}\n name={serie.childName}\n style={serie.style}\n />\n );\n }\n return null;\n });\n };\n\n const getRequestChart = () => {\n return series?.map((serie, index) => {\n if (serie.childName === 'request') {\n return (\n <ChartArea\n data={!hiddenSeries.has(index) ? serie.data : [{ y: null }]}\n interpolation=\"monotoneX\"\n key={serie.childName}\n name={serie.childName}\n style={serie.style}\n />\n );\n }\n return null;\n });\n };\n\n const getScatterChart = () => {\n return series?.map((serie, index) => {\n if (serie.childName === 'scatter') {\n return (\n <ChartScatter\n data={!hiddenSeries.has(index - 1) ? serie.data : [{ y: null }]}\n key={serie.childName}\n name={serie.childName}\n style={serie.style}\n />\n );\n }\n return null;\n });\n };\n\n const getUsageChart = () => {\n return series?.map((serie, index) => {\n if (serie.childName === 'usage') {\n return (\n <ChartBoxPlot\n boxWidth={width < 475 ? 15 : undefined}\n data={!hiddenSeries.has(index) ? serie.data : [{ y: [null] }]}\n key={serie.childName}\n name={serie.childName}\n style={serie.style}\n />\n );\n }\n return null;\n });\n };\n\n // Returns groups of chart names associated with each data series\n const getChartNames = () => {\n const result: (string | string[] | undefined)[] = [];\n\n if (series) {\n series.forEach(serie => {\n // Each group of chart names are hidden / shown together\n if (serie.childName === 'usage') {\n result.push([serie.childName, 'scatter']);\n } else if (serie.childName !== 'scatter') {\n result.push(serie.childName);\n }\n });\n }\n return result as any;\n };\n\n const getPadding = useCallback(() => {\n return padding\n ? padding\n : {\n bottom: 75 + extraHeight, // Maintain chart aspect ratio\n left: 50,\n right: 50,\n top: 10,\n };\n }, [extraHeight, padding]);\n\n // Hide each data series individually\n const handleOnLegendClick = (index: number) => {\n const newHiddenSeries = initHiddenSeries(hiddenSeries, index);\n setHiddenSeries(newHiddenSeries);\n };\n\n // Returns CursorVoronoiContainer component\n const getCursorVoronoiContainer = useCallback(() => {\n // Note: Container order is important\n const CursorVoronoiContainer: any = createContainer('voronoi', 'cursor');\n\n const labelFormatter = (datum: {\n childName: string;\n _min: undefined;\n _max: undefined;\n _median: undefined;\n _q1: undefined;\n _q3: undefined;\n yVal: null;\n units: string;\n y: any[];\n }) => {\n const formatValue = (val: undefined | null) =>\n val !== undefined ? val : '';\n if (datum.childName === 'scatter') {\n return null;\n } else if (\n datum.childName === 'usage' &&\n (datum._min !== undefined ||\n datum._max !== undefined ||\n datum._median !== undefined ||\n datum._q1 !== undefined ||\n datum._q3 !== undefined ||\n datum.yVal !== null)\n ) {\n return intl.formatMessage(messages.chartUsageTooltip, {\n br: '\\n',\n min: formatValue(datum._min !== undefined ? datum._min : datum.yVal),\n max: formatValue(datum._max !== undefined ? datum._max : datum.yVal),\n median: formatValue(\n datum._median !== undefined ? datum._median : datum.yVal,\n ),\n q1: formatValue(datum._q1 !== undefined ? datum._q1 : datum.yVal),\n q3: formatValue(datum._q3 !== undefined ? datum._q3 : datum.yVal),\n units: intl.formatMessage(messages.units, {\n units: unitsLookupKey(datum.units),\n }),\n });\n }\n\n // With box plot, datum.y will be an array\n const yVal = Array.isArray(datum.y) ? datum.y[0] : datum.y;\n let units = datum.units;\n\n /**\n * The recommendations API intentionally omits CPU request and limit units when \"cores\".\n *\n * The yaml format for the resource units needs to adhere to the Kubernetes standard that is outlined here\n * https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/\n *\n * Example. \"45 millicores\" is represented as \"45m\", 64 MiB is represented as \"64Mi\",\n * 2.3 cores is represented as \"2.3\" (Note cores is not specified)\n */\n if (\n (datum.childName === 'limit' || datum.childName === 'request') &&\n datum.units === ''\n ) {\n units = unitsLookupKey('cores');\n }\n return yVal !== null\n ? intl.formatMessage(messages.valueUnits, {\n value: yVal,\n units: intl.formatMessage(messages.units, {\n units: unitsLookupKey(units),\n }),\n })\n : intl.formatMessage(messages.chartNoData);\n };\n\n return (\n <CursorVoronoiContainer\n cursorDimension=\"x\"\n labels={({ datum }: any) => labelFormatter(datum)}\n mouseFollowTooltips\n voronoiDimension=\"x\"\n voronoiPadding={getPadding()}\n />\n );\n }, [getPadding, intl]);\n\n // Returns onMouseOver, onMouseOut, and onClick events for the interactive legend\n const getEvents = () => {\n const result = getInteractiveLegendEvents({\n chartNames: getChartNames(),\n isHidden: index => isSeriesHidden(hiddenSeries, index),\n legendName: `${name}-legend`,\n onLegendClick: props => handleOnLegendClick(props.index),\n });\n return result;\n };\n\n const getHeight = () => {\n return baseHeight + extraHeight;\n };\n\n const getLegend = () => {\n return (\n <ChartLegend\n data={getLegendData(series, hiddenSeries)}\n gutter={20}\n name={`${name}-legend`}\n y={320}\n />\n );\n };\n\n const handleLegendAllowWrap = (value: number) => {\n if (value !== extraHeight) {\n setExtraHeight(value);\n }\n };\n\n const handleOnResize = useCallback(() => {\n const { clientWidth = 0 } = containerRef.current || {};\n\n if (clientWidth !== width) {\n setWidth(clientWidth);\n }\n }, [containerRef, width]);\n\n const initDatum = useCallback(() => {\n // Show all legends, regardless of data size\n\n const newSeries: ChartSeries[] = [];\n if (requestData && requestData.length) {\n newSeries.push({\n childName: 'request',\n data: requestData,\n legendItem: {\n name: getDateRangeString(\n requestData,\n messages.recommendedRequest,\n true,\n ),\n symbol: {\n fill: chartStyles.requestColorScale[0],\n type: 'square',\n },\n tooltip: intl.formatMessage(messages.request),\n },\n style: {\n data: {\n ...chartStyles.request,\n stroke: chartStyles.requestColorScale[0],\n },\n },\n });\n }\n if (limitData && limitData.length) {\n newSeries.push({\n childName: 'limit',\n data: limitData,\n legendItem: {\n name: getDateRangeString(limitData, messages.recommendedLimit, true),\n symbol: {\n fill: chartStyles.limitColorScale[0],\n type: 'square',\n },\n tooltip: intl.formatMessage(messages.limit),\n },\n style: {\n data: {\n ...chartStyles.limit,\n stroke: chartStyles.limitColorScale[0],\n },\n },\n });\n }\n if (usageData && usageData.length) {\n const boxPlotData: any[] = [];\n usageData.map((datum: any) => {\n if (datum.y.every((val: any, _i: any, arr: any[]) => val === arr[0])) {\n boxPlotData.push({\n ...datum,\n yVal: datum.y[0],\n y: [null],\n });\n } else {\n boxPlotData.push(datum);\n }\n });\n newSeries.push({\n childName: 'usage',\n data: boxPlotData as any,\n legendItem: {\n name: getDateRangeString(usageData, messages.actualUsage),\n symbol: {\n fill: chartStyles.usageColorScale[1],\n type: 'square',\n },\n tooltip: intl.formatMessage(messages.usage),\n },\n style: {\n median: {\n stroke: chartStyles.usageColorScale[0],\n },\n q1: {\n fill: chartStyles.usageColorScale[1],\n },\n q3: {\n fill: chartStyles.usageColorScale[1],\n },\n } as any,\n });\n\n // Show dots in place of box plot when all values are equal\n const scatterData: any[] = [];\n usageData.map((datum: any) => {\n if (datum.y.every((val: any, _i: any, arr: any[]) => val === arr[0])) {\n scatterData.push({\n ...datum,\n y: datum.y[0],\n });\n } else {\n scatterData.push({\n ...datum,\n y: null,\n });\n }\n });\n newSeries.push({\n childName: 'scatter',\n data: scatterData as any,\n style: {\n data: { fill: chartStyles.usageColorScale[1] },\n } as any,\n });\n }\n setSeries(newSeries);\n setCursorVoronoiContainer(getCursorVoronoiContainer());\n setHiddenSeries(new Set());\n }, [getCursorVoronoiContainer, intl, limitData, requestData, usageData]);\n\n useMemo(() => {\n initDatum();\n }, [initDatum]);\n\n useEffect(() => {\n const unobserve = getResizeObserver(containerRef.current, handleOnResize);\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n }, [containerRef, handleOnResize]);\n\n const chartHeight = getHeight();\n\n return (\n <div className={classes.chartOverride} ref={containerRef}>\n <div style={{ height: chartHeight }}>\n <Chart\n key={`chart-${name}`}\n containerComponent={cloneContainer()}\n domain={getDomain(series, hiddenSeries, 1)}\n domainPadding={{ x: [30, 30] }}\n events={getEvents()}\n height={chartHeight}\n legendAllowWrap={handleLegendAllowWrap}\n legendComponent={getLegend()}\n legendPosition=\"bottom\"\n name={name}\n padding={getPadding()}\n width={width}\n // PatternFly will handle theming automatically when pf-v6-theme-dark is applied\n themeColor={ChartThemeColor.default}\n >\n <ChartAxis fixLabelOverlap />\n <ChartAxis dependentAxis showGrid />\n {getRequestChart()}\n {getLimitChart()}\n {getScatterChart()}\n {getUsageChart()}\n </Chart>\n </div>\n </div>\n );\n};\n\nexport { OptimizationsBreakdownChart };\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@red-hat-developer-hub/plugin-cost-management",
3
- "version": "2.2.2",
3
+ "version": "2.3.0",
4
4
  "backstage": {
5
5
  "pluginId": "cost-management",
6
6
  "pluginPackages": [
@@ -12,18 +12,18 @@
12
12
  },
13
13
  "configSchema": "config.schema.json",
14
14
  "dependencies": {
15
- "@backstage/core-components": "^0.18.8",
16
- "@backstage/core-plugin-api": "^1.12.4",
17
- "@backstage/plugin-permission-common": "^0.9.7",
18
- "@backstage/plugin-permission-react": "^0.4.41",
19
- "@backstage/theme": "^0.7.2",
15
+ "@backstage/core-components": "^0.18.13",
16
+ "@backstage/core-plugin-api": "^1.12.9",
17
+ "@backstage/plugin-permission-common": "^0.9.10",
18
+ "@backstage/plugin-permission-react": "^0.5.4",
19
+ "@backstage/theme": "^0.7.3",
20
20
  "@material-table/core": "^3.1.0",
21
21
  "@material-ui/core": "^4.12.2",
22
22
  "@material-ui/icons": "^4.9.1",
23
23
  "@material-ui/lab": "4.0.0-alpha.61",
24
24
  "@patternfly/react-charts": "^8.3.0",
25
25
  "@patternfly/react-tokens": "^6.1.0",
26
- "@red-hat-developer-hub/plugin-cost-management-common": "^2.2.2",
26
+ "@red-hat-developer-hub/plugin-cost-management-common": "^2.3.0",
27
27
  "date-fns": "^3.6.0",
28
28
  "lodash": "^4.18.1",
29
29
  "react-intl": "^6.6.8",
@@ -46,16 +46,16 @@
46
46
  "yaml": "^2.4.5"
47
47
  },
48
48
  "devDependencies": {
49
- "@backstage/cli": "^0.36.0",
50
- "@backstage/core-app-api": "^1.19.6",
51
- "@backstage/dev-utils": "^1.1.21",
52
- "@backstage/plugin-search-react": "^1.11.0",
53
- "@backstage/test-utils": "^1.7.16",
49
+ "@backstage/cli": "^0.36.5",
50
+ "@backstage/core-app-api": "^1.20.4",
51
+ "@backstage/dev-utils": "^1.1.26",
52
+ "@backstage/plugin-search-react": "^1.11.7",
53
+ "@backstage/test-utils": "^1.7.21",
54
54
  "@testing-library/dom": "^10.0.0",
55
55
  "@testing-library/jest-dom": "^6.0.0",
56
56
  "@testing-library/react": "^16.0.0",
57
57
  "@testing-library/user-event": "^14.0.0",
58
- "msw": "^2.3.4",
58
+ "msw": "^2.15.0",
59
59
  "react": "^18.3.1",
60
60
  "react-dom": "^18.3.1",
61
61
  "react-router-dom": "^6.30.2"