@jfvilas/plugin-kwirth-metrics 0.13.2 → 0.13.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"EntityKwirthMetricsContent.esm.js","sources":["../../src/components/EntityKwirthMetricsContent.tsx"],"sourcesContent":["/*\r\nCopyright 2025 Julio Fernandez\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\nimport React, { useRef, useState } from 'react'\r\nimport useAsync from 'react-use/esm/useAsync'\r\n\r\nimport { Progress, WarningPanel } from '@backstage/core-components'\r\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api'\r\nimport { isKwirthAvailable, ClusterValidPods, PodData, IStatusLine, MetricDefinition, ANNOTATION_BACKSTAGE_KUBERNETES_LABELID, ANNOTATION_BACKSTAGE_KUBERNETES_LABELSELECTOR, IBackendInfo, getPodList, getContainerList } from '@jfvilas/plugin-kwirth-common'\r\nimport { MissingAnnotationEmptyState, useEntity } from '@backstage/plugin-catalog-react'\r\n\r\n// kwirthMetrics\r\nimport { kwirthMetricsApiRef } from '../api'\r\nimport { accessKeySerialize, MetricsConfigModeEnum, MetricsMessage, InstanceMessageActionEnum, InstanceMessageFlowEnum, InstanceConfigScopeEnum, InstanceConfigViewEnum, IInstanceMessage, InstanceMessageTypeEnum, ISignalMessage, SignalMessageLevelEnum, InstanceConfigObjectEnum, InstanceConfig, InstanceMessageChannelEnum, OpsCommandEnum, IOpsMessageResponse, IOpsMessage, IRouteMessage } from '@jfvilas/kwirth-common'\r\nimport { ClusterList, ObjectSelector, ShowError, StatusLog, KwirthNews, ComponentNotFound, ErrorType } from '@jfvilas/plugin-kwirth-frontend'\r\nimport { VERSION } from '../index'\r\n\r\n// Material-UI\r\nimport { Box, Checkbox, FormControl, Grid, MenuItem, Select, Card, CardHeader, CardContent, Divider, IconButton, Typography, Tooltip as MUITooltip } from '@material-ui/core'\r\n\r\n// Icons\r\nimport PlayIcon from '@material-ui/icons/PlayArrow'\r\nimport PauseIcon from '@material-ui/icons/Pause'\r\nimport StopIcon from '@material-ui/icons/Stop'\r\nimport InfoIcon from '@material-ui/icons/Info'\r\nimport WarningIcon from '@material-ui/icons/Warning'\r\nimport ErrorIcon from '@material-ui/icons/Error'\r\nimport RefreshIcon from '@material-ui/icons/Refresh'\r\nimport KwirthMetricsLogo from '../assets/kwirthmetrics-logo.svg'\r\n\r\nimport { Area, AreaChart, Bar, BarChart, CartesianGrid, LabelList, Legend, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts'\r\nimport { IMetricsOptions } from './IOptions'\r\nimport { Options } from './Options'\r\n\r\nexport interface IProps {\r\n allMetrics: boolean\r\n enableRestart: boolean\r\n width?: number\r\n depth?: number\r\n interval?: number\r\n chart?: string\r\n}\r\n\r\nexport const EntityKwirthMetricsContent: React.FC<IProps> = (props:IProps) => { \r\n const kwirthMetricsApi = useApi(kwirthMetricsApiRef)\r\n const alertApi = useApi(alertApiRef)\r\n const { entity } = useEntity()\r\n const [validClusters, setValidClusters] = useState<ClusterValidPods[]>([])\r\n const [selectedClusterName, setSelectedClusterName] = useState('')\r\n const [selectedNamespaces, setSelectedNamespaces] = useState<string[]>([])\r\n const [selectedPodNames, setSelectedPodNames] = useState<string[]>([])\r\n const [selectedContainerNames, setSelectedContainerNames] = useState<string[]>([])\r\n const [selectedMetrics, setSelectedMetrics] = useState<string[]>([])\r\n const [showError, setShowError] = useState('')\r\n const [started, setStarted] = useState(false)\r\n const [stopped, setStopped] = useState(true)\r\n const paused=useRef<boolean>(false)\r\n const [metricsMessages, setMetricsMessages] = useState<MetricsMessage[]>([])\r\n const [statusMessages, setStatusMessages] = useState<IStatusLine[]>([])\r\n const [websocket, setWebsocket] = useState<WebSocket>()\r\n const [instance, setInstance] = useState<string>()\r\n const kwirthMetricsOptionsRef = useRef<IMetricsOptions>({\r\n depth: props.depth !==undefined? props.depth : 10,\r\n width: props.width !==undefined? props.width : 3,\r\n interval: props.interval !==undefined? props.interval : 15,\r\n chart: props.chart !==undefined? props.chart : 'area',\r\n aggregate:false,\r\n merge:false,\r\n stack:false\r\n })\r\n const [showStatusDialog, setShowStatusDialog] = useState(false)\r\n const [statusLevel, setStatusLevel] = useState<SignalMessageLevelEnum>(SignalMessageLevelEnum.INFO)\r\n const [backendVersion, setBackendVersion ] = useState<string>('')\r\n const [ backendInfo, setBackendInfo ] = useState<IBackendInfo>()\r\n const [_refresh,setRefresh] = useState(0)\r\n const [allMetrics, setAllMetrics] = useState<MetricDefinition[]>(\r\n [\r\n {metric:'kwirth_container_memory_percentage',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_cpu_percentage',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_transmit_percentage',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_receive_percentage',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_transmit_mbps',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_receive_mbps',help:'',eval:'',type:'counter'}\r\n ])\r\n const { loading, error } = useAsync ( async () => {\r\n if (backendVersion==='') setBackendVersion(await kwirthMetricsApi.getVersion())\r\n if (!backendInfo) setBackendInfo(await kwirthMetricsApi.getInfo())\r\n let reqScopes = [InstanceConfigScopeEnum.STREAM]\r\n if (props.enableRestart) reqScopes.push(InstanceConfigScopeEnum.RESTART)\r\n let data = await kwirthMetricsApi.requestAccess(entity,'metrics', reqScopes)\r\n setValidClusters(data)\r\n })\r\n\r\n const colours = [\r\n \"#6e5bb8\", // morado oscuro\r\n \"#4a9076\", // verde oscuro\r\n \"#b56c52\", // naranja oscuro\r\n \"#7f6b97\", // color lavanda oscuro\r\n \"#b0528f\", // rosa oscuro\r\n \"#b0b052\", // amarillo oscuro\r\n \"#b05252\", // rojo oscuro\r\n \"#5285b0\", // azul oscuro\r\n \"#a38ad6\", // morado pastel\r\n \"#89c1a0\", // verde pastel\r\n \"#e4a28a\", // naranja pastel\r\n \"#b09dbd\", // lavanda pastel\r\n \"#e2a4c6\", // rosa pastel\r\n \"#c5c89e\", // amarillo pastel\r\n \"#e2a4a4\", // rojo pastel\r\n \"#90b7e2\", // azul pastel\r\n \"#f8d5e1\", // rosa claro pastel\r\n \"#b2d7f0\", // azul muy claro pastel\r\n \"#f7e1b5\", // amarillo muy claro pastel\r\n \"#d0f0c0\", // verde muy claro pastel\r\n \"#f5b0a1\", // coral pastel\r\n \"#d8a7db\", // lavanda muy claro pastel\r\n \"#f4c2c2\", // rosa suave pastel\r\n \"#e6c7b9\", // marron claro pastel\r\n \"#f0e2b6\", // crema pastel\r\n \"#a7c7e7\", // azul palido pastel\r\n \"#f5e6a5\", // amarillo palido pastel\r\n \"#e3c8f5\", // lilas pastel\r\n \"#d0c4e8\", // lila palido pastel\r\n \"#b8d8b8\", // verde claro pastel\r\n \"#d2ebfa\", // azul muy claro pastel\r\n \"#f1c1d2\" // rosa bebe pastel\r\n ]\r\n \r\n const clickStart = () => {\r\n if (!paused.current) {\r\n setMetricsMessages([])\r\n setStarted(true)\r\n paused.current=false\r\n setStopped(false)\r\n startMetricsViewer()\r\n }\r\n else {\r\n paused.current=false\r\n setStarted(true)\r\n }\r\n }\r\n\r\n const clickPause = () => {\r\n setStarted(false)\r\n paused.current=true\r\n }\r\n\r\n const onClickStop = () => {\r\n setStarted(false)\r\n setStopped(true)\r\n paused.current=false\r\n stopMetricsViewer()\r\n }\r\n\r\n const onSelectCluster = async (clusterName:string|undefined) => {\r\n if (started) onClickStop()\r\n // if (clusterName) {\r\n // setSelectedClusterName(clusterName)\r\n // setSelectedNamespaces([])\r\n // setSelectedPodNames([])\r\n // setSelectedContainerNames([])\r\n // setMetricsMessages([])\r\n // setStatusMessages([])\r\n // let cluster = clusterValidPods.find(cluster => cluster.name === clusterName)\r\n // if (cluster && cluster.metrics) {\r\n // cluster.metrics.sort( (a,_b) => a.metric.startsWith('kwirth')? -1:1)\r\n // setAllMetrics(cluster.metrics)\r\n // }\r\n // }\r\n if (clusterName) {\r\n setSelectedClusterName(clusterName)\r\n setSelectedPodNames([])\r\n setSelectedContainerNames([])\r\n setStatusMessages([])\r\n let cluster = validClusters.find(cluster => cluster.name === clusterName)\r\n\r\n if (cluster && cluster.pods && cluster.metrics) {\r\n cluster.metrics.sort( (a,_b) => a.metric.startsWith('kwirth')? -1:1)\r\n setAllMetrics(cluster.metrics)\r\n\r\n let validNamespaces = Array.from(new Set(cluster.pods.map(pod => pod.namespace)))\r\n if (validNamespaces.length === 1) {\r\n setSelectedNamespaces(validNamespaces)\r\n let podList = getPodList (cluster.pods, validNamespaces)\r\n setSelectedPodNames(podList.map(pod => pod.name))\r\n setSelectedContainerNames(getContainerList(cluster.pods, validNamespaces, podList.map(pod => pod.name)))\r\n }\r\n else {\r\n setSelectedNamespaces([])\r\n }\r\n }\r\n }\r\n }\r\n\r\n const processMetricsMessage = (wsEvent:any) => {\r\n let instanceMessage = JSON.parse(wsEvent.data) as IInstanceMessage\r\n switch (instanceMessage.type) {\r\n case InstanceMessageTypeEnum.DATA:\r\n let metricsMessage = instanceMessage as MetricsMessage\r\n if (metricsMessage.timestamp===0) { // initial metrics values\r\n metricsMessage.timestamp = Date.now()\r\n setMetricsMessages([metricsMessage])\r\n }\r\n else {\r\n setMetricsMessages((prev) => {\r\n while (prev.length>kwirthMetricsOptionsRef.current.depth) {\r\n prev.splice(0,1)\r\n }\r\n if (paused.current)\r\n return prev\r\n else\r\n return [ ...prev, metricsMessage ]\r\n })\r\n }\r\n break\r\n case InstanceMessageTypeEnum.SIGNAL:\r\n if (instanceMessage.flow === InstanceMessageFlowEnum.RESPONSE && instanceMessage.action === InstanceMessageActionEnum.START) {\r\n if (instanceMessage.instance!=='')\r\n setInstance(instanceMessage.instance)\r\n else {\r\n let signalMessage = instanceMessage as ISignalMessage\r\n if (signalMessage.text) {\r\n alertApi.post({ message: signalMessage.text, severity:'error', display:'transient' })\r\n }\r\n }\r\n }\r\n else {\r\n let signalMessage = instanceMessage as ISignalMessage\r\n if (signalMessage.text) {\r\n addMessage(signalMessage.level, signalMessage.text)\r\n switch(signalMessage.level) {\r\n case SignalMessageLevelEnum.INFO:\r\n alertApi.post({ message: signalMessage.text, severity:'info', display:'transient' })\r\n break\r\n case SignalMessageLevelEnum.WARNING:\r\n alertApi.post({ message: signalMessage.text, severity:'warning', display:'transient' })\r\n break\r\n case SignalMessageLevelEnum.ERROR:\r\n alertApi.post({ message: signalMessage.text, severity:'error', display:'transient' })\r\n break\r\n default:\r\n alertApi.post({ message: signalMessage.text, severity:'success', display:'transient' })\r\n break\r\n }\r\n }\r\n }\r\n break\r\n default:\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Invalid message type received: ' + instanceMessage.type)\r\n alertApi.post({ message: 'Invalid message type received: ' + instanceMessage.type, severity:'error', display:'transient' })\r\n break\r\n }\r\n }\r\n \r\n const websocketOnChunk = (wsEvent:any) => {\r\n let instanceMessage:IInstanceMessage\r\n try {\r\n instanceMessage = JSON.parse(wsEvent.data) as IInstanceMessage\r\n }\r\n catch (err) {\r\n console.log(err)\r\n console.log(wsEvent.data)\r\n return\r\n }\r\n\r\n switch(instanceMessage.channel) {\r\n case InstanceMessageChannelEnum.METRICS:\r\n processMetricsMessage(wsEvent)\r\n break\r\n case InstanceMessageChannelEnum.OPS:\r\n let opsMessage = instanceMessage as IOpsMessageResponse\r\n if (opsMessage.data?.data) \r\n addMessage (SignalMessageLevelEnum.WARNING, 'Operations message: '+opsMessage.data.data)\r\n else\r\n addMessage (SignalMessageLevelEnum.WARNING, 'Operations message: '+JSON.stringify(opsMessage))\r\n break\r\n default:\r\n console.log('Invalid channel in message: ', instanceMessage)\r\n break\r\n }\r\n\r\n }\r\n\r\n const websocketOnOpen = (ws:WebSocket) => {\r\n let cluster=validClusters.find(cluster => cluster.name===selectedClusterName)\r\n if (!cluster) {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Cluster not found')\r\n return\r\n }\r\n let pods = cluster.pods.filter(p => selectedNamespaces.includes(p.namespace))\r\n if (!pods || pods.length===0) {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Pod not found')\r\n return\r\n }\r\n\r\n console.log(`WS connected`)\r\n let accessKey = cluster.accessKeys.get(InstanceConfigScopeEnum.STREAM)\r\n if (accessKey) {\r\n let containers:string[] = []\r\n if (selectedContainerNames.length>0) {\r\n for(var p of selectedPodNames) {\r\n for (var c of selectedContainerNames) {\r\n containers.push(p+'+'+c)\r\n }\r\n }\r\n }\r\n var iConfig:InstanceConfig = {\r\n channel: InstanceMessageChannelEnum.METRICS,\r\n objects: InstanceConfigObjectEnum.PODS,\r\n action: InstanceMessageActionEnum.START,\r\n flow: InstanceMessageFlowEnum.REQUEST,\r\n instance: '',\r\n accessKey: accessKeySerialize(accessKey),\r\n scope: InstanceConfigScopeEnum.STREAM,\r\n view: (selectedContainerNames.length > 0 ? InstanceConfigViewEnum.CONTAINER : InstanceConfigViewEnum.POD),\r\n namespace: selectedNamespaces.join(','),\r\n group: '',\r\n pod: selectedPodNames.join(','),\r\n container: containers.join(','),\r\n data: {\r\n mode: MetricsConfigModeEnum.STREAM,\r\n aggregate: kwirthMetricsOptionsRef.current.aggregate,\r\n metrics: selectedMetrics,\r\n interval: kwirthMetricsOptionsRef.current.interval\r\n },\r\n type: InstanceMessageTypeEnum.SIGNAL\r\n }\r\n ws.send(JSON.stringify(iConfig))\r\n }\r\n else {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'AccessKey has not been obtained')\r\n return\r\n }\r\n }\r\n\r\n const startMetricsViewer = () => {\r\n let cluster=validClusters.find(cluster => cluster.name===selectedClusterName)\r\n if (!cluster) {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Cluster not found')\r\n return\r\n }\r\n\r\n try {\r\n let ws = new WebSocket(cluster.url)\r\n ws.onopen = () => websocketOnOpen(ws)\r\n ws.onmessage = (event) => websocketOnChunk(event)\r\n ws.onclose = (event) => websocketOnClose(event)\r\n setWebsocket(ws)\r\n }\r\n catch (err) {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Error starting websocket')\r\n }\r\n\r\n }\r\n\r\n const websocketOnClose = (_event:any) => {\r\n console.log(`WS disconnected from remote`)\r\n setStarted(false)\r\n paused.current=false\r\n setStopped(true)\r\n }\r\n\r\n const stopMetricsViewer = () => {\r\n websocket?.close()\r\n }\r\n\r\n const onChangeOptions = (options:IMetricsOptions) => {\r\n kwirthMetricsOptionsRef.current=options\r\n setRefresh(Math.random())\r\n }\r\n \r\n const actionButtons = () => {\r\n let hasStreamKey = false, hasRestartKey = false\r\n let cluster=validClusters.find(cluster => cluster.name===selectedClusterName)\r\n if (cluster) {\r\n hasStreamKey = Boolean(cluster.accessKeys.has(InstanceConfigScopeEnum.STREAM))\r\n hasRestartKey = Boolean(cluster.accessKeys.get(InstanceConfigScopeEnum.RESTART))\r\n }\r\n\r\n return <>\r\n { props.enableRestart &&\r\n <IconButton title='Restart' onClick={onClickRestart} disabled={selectedPodNames.length === 0 || !hasRestartKey || !websocket || !started}>\r\n <RefreshIcon />\r\n </IconButton>\r\n }\r\n <IconButton onClick={clickStart} title=\"Play\" disabled={started || !paused || selectedPodNames.length === 0 || selectedMetrics.length==0 || !hasStreamKey}>\r\n <PlayIcon />\r\n </IconButton>\r\n <IconButton onClick={clickPause} title=\"Pause\" disabled={!((started && !paused.current) && selectedPodNames.length === 0)}>\r\n <PauseIcon />\r\n </IconButton>\r\n <IconButton onClick={onClickStop} title=\"Stop\" disabled={stopped || selectedPodNames.length === 0}>\r\n <StopIcon />\r\n </IconButton>\r\n </>\r\n }\r\n\r\n const onMetricsChange = (event:any) => {\r\n setSelectedMetrics(event.target.value)\r\n }\r\n\r\n const statusButtons = (title:string) => {\r\n const show = (level:SignalMessageLevelEnum) => {\r\n setShowStatusDialog(true)\r\n setStatusLevel(level)\r\n }\r\n\r\n const prepareText = (txt:string|undefined) => {\r\n return txt? (txt.length>25? txt.substring(0,25)+\"...\":txt) : 'N/A'\r\n }\r\n\r\n return (\r\n <Grid container direction='row'>\r\n <Grid item>\r\n <Typography variant='h5'>{prepareText(title)}</Typography>\r\n </Grid>\r\n <Grid item style={{marginTop:'-8px'}}>\r\n <IconButton title=\"info\" disabled={!statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.INFO)} onClick={() => show(SignalMessageLevelEnum.INFO)}>\r\n <InfoIcon style={{ color:statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.INFO)?'blue':'#BDBDBD'}}/>\r\n </IconButton>\r\n <IconButton title=\"warning\" disabled={!statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.WARNING)} onClick={() => show(SignalMessageLevelEnum.WARNING)} style={{marginLeft:'-16px'}}>\r\n <WarningIcon style={{ color:statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.WARNING)?'gold':'#BDBDBD'}}/>\r\n </IconButton>\r\n <IconButton title=\"error\" disabled={!statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.ERROR)} onClick={() => show(SignalMessageLevelEnum.ERROR)} style={{marginLeft:'-16px'}}>\r\n <ErrorIcon style={{ color:statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.ERROR)?'red':'#BDBDBD'}}/>\r\n </IconButton>\r\n </Grid>\r\n </Grid>\r\n )\r\n }\r\n\r\n const statusClear = (level: SignalMessageLevelEnum) => {\r\n setStatusMessages(statusMessages.filter(m=> m.level!==level))\r\n setShowStatusDialog(false)\r\n }\r\n \r\n const mergeSeries = (names:string[], series:any[]) => {\r\n if (!names || names.length===0) return []\r\n var resultSeries:any[] = []\r\n\r\n for (var i=0; i<series[0].length; i++) {\r\n var item: { [key: string]: string|number } = {}\r\n for (var j=0; j<series.length; j++ ) {\r\n if (series[j][i]) {\r\n item['timestamp'] = series[0][i].timestamp\r\n item[names[j]] = series[j][i].value\r\n }\r\n }\r\n resultSeries.push(item)\r\n }\r\n return resultSeries\r\n }\r\n\r\n const addChart = (options: IMetricsOptions, metric:MetricDefinition, names:string[], series:any[], colour:string) => {\r\n var result = <></>\r\n var mergedSeries = mergeSeries(names, series)\r\n\r\n const renderLabel = (data:any) => {\r\n var values:any[] = series.map (s => s[data.index])\r\n var total:number =values.reduce((acc,value) => acc+value.value, 0)\r\n return <text x={data.x + data.width/3.5} y={data.y-10}>{total.toPrecision(3).replace(/0+$/, \"\")}</text>\r\n }\r\n let height=300\r\n\r\n switch (options.chart) {\r\n case 'value':\r\n height=40+series.length*80\r\n result = (\r\n <Grid>\r\n {\r\n <Typography>\r\n { series.map( (serie,index) => {\r\n return (<>\r\n <Typography >\r\n {serie[serie.length-1].value}\r\n </Typography>\r\n <Typography >\r\n {names[index]}\r\n </Typography>\r\n </>)\r\n })}\r\n </Typography>\r\n }\r\n </Grid>\r\n\r\n )\r\n break\r\n case 'line':\r\n result = (\r\n <LineChart data={mergedSeries}>\r\n <CartesianGrid strokeDasharray=\"3 3\"/>\r\n <XAxis dataKey=\"timestamp\" fontSize={8}/>\r\n <YAxis />\r\n <Tooltip />\r\n <Legend/>\r\n { series.map ((_serie,index) => <Line key={index} name={names[index]} type=\"monotone\" dataKey={names[index]} stroke={series.length===1?colour:colours[index]} activeDot={{ r: 8 }} />) }\r\n </LineChart>\r\n )\r\n break\r\n case 'area':\r\n result = (\r\n <AreaChart data={mergedSeries}>\r\n <defs>\r\n {\r\n series.map( (_serie,index) => {\r\n return (\r\n <linearGradient key={index} id={`color${series.length===1?colour:colours[index]}`} x1='0' y1='0' x2='0' y2='1'>\r\n <stop offset='7%' stopColor={series.length===1?colour:colours[index]} stopOpacity={0.8}/>\r\n <stop offset='93%' stopColor={series.length===1?colour:colours[index]} stopOpacity={0}/>\r\n </linearGradient>\r\n )\r\n })\r\n }\r\n </defs>\r\n <CartesianGrid strokeDasharray=\"3 3\"/>\r\n <XAxis dataKey=\"timestamp\" fontSize={8}/>\r\n <YAxis />\r\n <Tooltip />\r\n <Legend/>\r\n { series.map ((_serie,index) => \r\n <Area key={index} name={names[index]} type=\"monotone\" {...(options.stack? {stackId:\"1\"}:{})} dataKey={names[index]} stroke={series.length===1?colour:colours[index]} fill={`url(#color${series.length===1?colour:colours[index]})`}/> )}\r\n </AreaChart>\r\n )\r\n break\r\n case 'bar':\r\n result = (\r\n <BarChart data={mergedSeries}>\r\n <CartesianGrid strokeDasharray=\"3 3\"/>\r\n <XAxis dataKey=\"timestamp\" fontSize={8}/>\r\n <YAxis />\r\n <Tooltip/>\r\n <Legend/>\r\n { series.map ((_serie,index) =>\r\n <Bar name={names[index]} {...(options.stack? {stackId:\"1\"}:{})} dataKey={names[index]} stroke={series.length===1?colour:colours[index]} fill={series.length===1?colour:colours[index]}>\r\n { index === series.length-1 && series.length > 1 ? <LabelList dataKey={names[index]} position='insideTop' content={ renderLabel }/> : null }\r\n </Bar>\r\n )}\r\n </BarChart>\r\n )\r\n break\r\n default:\r\n break\r\n }\r\n\r\n let title = metric.metric.replaceAll('_',' ')\r\n title = title[0].toLocaleUpperCase()+ title.substring(1)\r\n title = title.replaceAll('cpu', 'CPU')\r\n title = title.replaceAll(' fs ', ' FS ')\r\n title = title.replaceAll(' io ', ' IO ')\r\n title = title.replaceAll('oom', 'OOM')\r\n title = title.replaceAll('nvm', 'NVM')\r\n title = title.replaceAll('rss', 'RSS')\r\n title = title.replaceAll('failcnt', 'fail count')\r\n return (\r\n <Grid style={{width:'100%', marginBottom:32}}>\r\n <MUITooltip title={<Typography style={{fontSize:12}}><b>{metric.metric}</b><br/><br/>{metric.help}</Typography>}>\r\n <Typography align='center'>{title}</Typography>\r\n </MUITooltip>\r\n <ResponsiveContainer height={height} key={metric+JSON.stringify(names)}>\r\n {result}\r\n </ResponsiveContainer> \r\n </Grid>\r\n )\r\n }\r\n\r\n const showMetrics = (options: IMetricsOptions) => {\r\n if (!metricsMessages || metricsMessages.length === 0) {\r\n if (selectedNamespaces.length === 0) \r\n return <Typography>Select namespace chip on top.</Typography>\r\n else\r\n return <>\r\n {started?<Typography>Waiting for first data, be patient...</Typography>:<Typography>Configure <b>chart options</b>, select some <b>metrics on top</b>, and <b>press PLAY</b> on top-right button to start viewing.</Typography>}\r\n </>\r\n }\r\n\r\n let cluster = validClusters.find(cluster => cluster.name === selectedClusterName)\r\n if (!cluster) return\r\n\r\n let data:Map<string, Map<string, { timestamp:string, value:number}[]>> = new Map()\r\n for (let metricsMessage of metricsMessages) {\r\n let ts = new Date(metricsMessage.timestamp)\r\n let timestamp = `${ts.getHours().toString().padStart(2,'0')}:${ts.getMinutes().toString().padStart(2,'0')}:${ts.getSeconds().toString().padStart(2,'0')}`\r\n for (var i=0;i<metricsMessage.assets.length;i++) {\r\n var assetName=metricsMessage.assets[i].assetName\r\n for (var metrics of metricsMessage.assets[i].values) {\r\n if (!data.has(assetName)) data.set(assetName, new Map())\r\n if (!data.get(assetName)?.has(metrics.metricName)) data.get(assetName)?.set(metrics.metricName,[])\r\n data.get(assetName)?.get(metrics.metricName)?.push({timestamp, value:metrics.metricValue})\r\n }\r\n } \r\n }\r\n\r\n let allCharts:any[] = []\r\n if (options.merge) {\r\n var assetNames=Array.from(data.keys())\r\n var firstAsset=assetNames[0]\r\n var allMetrics:string[] = Array.from(new Set(data.get(firstAsset)!.keys()))\r\n\r\n for (let metric of allMetrics) {\r\n let metricDefinition = cluster.metrics?.find(m => m.metric === metric)!\r\n var series = assetNames.map(an => {\r\n return data.get(an)!.get(metric)\r\n })\r\n allCharts.push(<>{addChart(options, metricDefinition, assetNames, series, '')}</>)\r\n }\r\n\r\n let rows = []\r\n for (let i = 0; i < allCharts.length; i += options.width) {\r\n rows.push(allCharts.slice(i, i + options.width))\r\n }\r\n return (<>\r\n {rows.map((row, index) => (\r\n <div key={index} style={{ display: 'flex', justifyContent: 'space-around' }}>\r\n {row}\r\n </div>\r\n ))}\r\n </>)\r\n }\r\n else {\r\n let allCharts = Array.from(data.keys()!).map( (asset, index) => {\r\n return Array.from(data.get(asset)?.keys()!).map ( metric => {\r\n var serie:any=data.get(asset)?.get(metric)!\r\n let metricDefinition = cluster.metrics?.find(m => m.metric === metric)!\r\n return (<>{addChart(options, metricDefinition, [asset], [serie], colours[index])}</>)\r\n })\r\n })\r\n\r\n // convert allResults (a list of charts) into a series of rows of charts\r\n let rows = []\r\n for (var resultAsset of allCharts) {\r\n for (let i = 0; i < resultAsset.length; i += options.width) {\r\n rows.push(resultAsset.slice(i, i + options.width))\r\n }\r\n }\r\n return (<>\r\n {rows.map((row, index) => (\r\n <div key={index} style={{ display: 'flex', justifyContent: 'space-around' }}>\r\n {row}\r\n </div>\r\n ))}\r\n </>)\r\n }\r\n }\r\n\r\n const onSelectObject = (namespaces:string[], podNames:string[], containerNames:string[]) => {\r\n setSelectedNamespaces(namespaces)\r\n setSelectedPodNames(podNames)\r\n setSelectedContainerNames(containerNames)\r\n }\r\n\r\n const addMessage = (level:SignalMessageLevelEnum, text:string) => {\r\n setStatusMessages ((prev) => [...prev, {\r\n level,\r\n text,\r\n type: InstanceMessageTypeEnum.SIGNAL\r\n }])\r\n }\r\n\r\n const onClickRestart = () => {\r\n // we perform a route command from channel 'metrics' to channel 'ops'\r\n let cluster=validClusters.find(cluster => cluster.name===selectedClusterName)\r\n if (!cluster) {\r\n addMessage(SignalMessageLevelEnum.ERROR,'No cluster selected')\r\n return\r\n }\r\n let restartKey = cluster.accessKeys.get(InstanceConfigScopeEnum.RESTART)\r\n if (!restartKey) {\r\n addMessage(SignalMessageLevelEnum.ERROR,'No access key present')\r\n return\r\n }\r\n if (!instance) {\r\n addMessage(SignalMessageLevelEnum.ERROR,'No instance has been established')\r\n return\r\n }\r\n\r\n\r\n let pods:PodData[] = (cluster.pods as PodData[]).filter(pod => selectedNamespaces.includes(pod.namespace))\r\n for (let pod of pods) {\r\n let om:IOpsMessage = {\r\n msgtype: 'opsmessage',\r\n action: InstanceMessageActionEnum.COMMAND,\r\n flow: InstanceMessageFlowEnum.IMMEDIATE,\r\n type: InstanceMessageTypeEnum.DATA,\r\n channel: InstanceMessageChannelEnum.OPS,\r\n instance: '',\r\n id: '1',\r\n accessKey: accessKeySerialize(restartKey),\r\n command: OpsCommandEnum.RESTARTPOD,\r\n namespace: pod.namespace,\r\n group: '',\r\n pod: pod.name,\r\n container: ''\r\n }\r\n let rm: IRouteMessage = {\r\n msgtype: 'routemessage',\r\n accessKey: accessKeySerialize(restartKey),\r\n destChannel: InstanceMessageChannelEnum.OPS,\r\n action: InstanceMessageActionEnum.ROUTE,\r\n flow: InstanceMessageFlowEnum.IMMEDIATE,\r\n type: InstanceMessageTypeEnum.SIGNAL,\r\n channel: InstanceMessageChannelEnum.METRICS,\r\n instance: instance,\r\n data: om\r\n }\r\n websocket?.send(JSON.stringify(rm))\r\n }\r\n }\r\n\r\n return (<>\r\n { showError!=='' && <ShowError message={showError} onClose={() => setShowError('')}/> }\r\n\r\n { loading && <Progress/> }\r\n\r\n {!isKwirthAvailable(entity) && !loading && error && (\r\n <WarningPanel title={'An error has ocurred while obtaining data from kuebernetes clusters.'} message={error?.message} />\r\n )}\r\n\r\n {!isKwirthAvailable(entity) && !loading && (\r\n <MissingAnnotationEmptyState readMoreUrl='https://github.com/jfvilas/kwirth' annotation={[ANNOTATION_BACKSTAGE_KUBERNETES_LABELID, ANNOTATION_BACKSTAGE_KUBERNETES_LABELSELECTOR]}/>\r\n )}\r\n\r\n { isKwirthAvailable(entity) && !loading && validClusters && validClusters.length===0 &&\r\n <ComponentNotFound error={ErrorType.NO_CLUSTERS} entity={entity}/>\r\n }\r\n\r\n { isKwirthAvailable(entity) && !loading && validClusters && validClusters.length>0 && validClusters.reduce((sum,cluster) => sum+cluster.pods.length, 0)===0 &&\r\n <ComponentNotFound error={ErrorType.NO_PODS} entity={entity}/>\r\n }\r\n\r\n { isKwirthAvailable(entity) && !loading && validClusters && validClusters.length>0 && validClusters.reduce((sum,cluster) => sum+cluster.pods.length, 0)>0 &&\r\n <Box sx={{ display: 'flex'}}>\r\n <Box sx={{ width: '200px', maxWidth:'200px'}}>\r\n <Grid container direction='column'>\r\n <Grid item>\r\n <Card>\r\n <ClusterList resources={validClusters} selectedClusterName={selectedClusterName} onSelect={onSelectCluster}/>\r\n </Card>\r\n </Grid>\r\n <Grid item>\r\n <Card>\r\n <Options metricsOptions={kwirthMetricsOptionsRef.current!} selectedNamespaces={selectedNamespaces} selectedPodNames={selectedPodNames} selectedContainerNames={selectedContainerNames} onChange={onChangeOptions} disabled={selectedNamespaces.length === 0 || paused.current}/>\r\n </Card>\r\n </Grid>\r\n <Grid item>\r\n <Card>\r\n <KwirthNews latestVersions={backendInfo} backendVersion={backendVersion} ownVersion={VERSION}/>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n\r\n <Box sx={{ flexGrow: 1, p:1, marginLeft:'8px' }}>\r\n\r\n { !selectedClusterName && \r\n <img src={KwirthMetricsLogo} alt=\"No cluster selected\" style={{ left:'40%', marginTop:'10%', width:'20%', position:'relative' }} />\r\n }\r\n\r\n { selectedClusterName && <>\r\n <Card style={{marginTop:-8}}>\r\n <CardHeader title={statusButtons(selectedClusterName)} style={{marginTop:-4, marginBottom:4, flexShrink:0}} action={actionButtons()} />\r\n \r\n <Grid container style={{alignItems:'end'}}>\r\n <Grid item style={{width:'66%'}}>\r\n <Typography style={{marginLeft:14}}>\r\n <ObjectSelector cluster={validClusters.find(cluster => cluster.name === selectedClusterName)!} onSelect={onSelectObject} disabled={selectedClusterName === '' || started || paused.current} selectedNamespaces={selectedNamespaces} selectedPodNames={selectedPodNames} selectedContainerNames={selectedContainerNames} scope={InstanceConfigScopeEnum.STREAM}/>\r\n </Typography>\r\n </Grid>\r\n <Grid item style={{width:'33%', marginLeft:0, marginBottom:6, maxWidth:'33%' }}>\r\n <FormControl style={{width:'100%'}}>\r\n <Select value={selectedMetrics} MenuProps={{variant:'menu'}} multiple onChange={onMetricsChange} renderValue={(selected) => (selected as string[]).join(', ').substring(0,40)+'...'} disabled={selectedClusterName === '' || selectedNamespaces.length === 0 || started}>\r\n {\r\n allMetrics.map(m => \r\n <MenuItem key={m.metric} value={m.metric} style={{marginTop:'-8px', marginBottom:'-8px'}}>\r\n <Checkbox checked={selectedMetrics.includes(m.metric)} style={{marginTop:'-8px', marginBottom:'-8px'}}/>\r\n <Typography style={{marginTop:'-8px', marginBottom:'-8px'}}>{m.metric}</Typography>\r\n </MenuItem>\r\n )\r\n }\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n\r\n <Divider/>\r\n <CardContent style={{ overflow: 'auto' }}>\r\n { showMetrics(kwirthMetricsOptionsRef.current) }\r\n </CardContent>\r\n </Card>\r\n </>}\r\n </Box> \r\n </Box>\r\n }\r\n\r\n { showStatusDialog && <StatusLog level={statusLevel} onClose={() => setShowStatusDialog(false)} statusMessages={statusMessages} onClear={statusClear}/>}\r\n </>)\r\n}\r\n"],"names":["cluster","p","MUITooltip","allMetrics","i","allCharts"],"mappings":"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"}
1
+ {"version":3,"file":"EntityKwirthMetricsContent.esm.js","sources":["../../src/components/EntityKwirthMetricsContent.tsx"],"sourcesContent":["/*\r\nCopyright 2025 Julio Fernandez\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\nimport React, { useRef, useState } from 'react'\r\nimport useAsync from 'react-use/esm/useAsync'\r\n\r\nimport { Progress, WarningPanel } from '@backstage/core-components'\r\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api'\r\nimport { isKwirthAvailable, ClusterValidPods, PodData, IStatusLine, MetricDefinition, ANNOTATION_BACKSTAGE_KUBERNETES_LABELID, ANNOTATION_BACKSTAGE_KUBERNETES_LABELSELECTOR, IBackendInfo, getPodList, getContainerList } from '@jfvilas/plugin-kwirth-common'\r\nimport { MissingAnnotationEmptyState, useEntity } from '@backstage/plugin-catalog-react'\r\n\r\n// kwirthMetrics\r\nimport { kwirthMetricsApiRef } from '../api'\r\nimport { accessKeySerialize, MetricsConfigModeEnum, MetricsMessage, InstanceMessageActionEnum, InstanceMessageFlowEnum, InstanceConfigScopeEnum, InstanceConfigViewEnum, IInstanceMessage, InstanceMessageTypeEnum, ISignalMessage, SignalMessageLevelEnum, InstanceConfigObjectEnum, InstanceConfig, InstanceMessageChannelEnum, OpsCommandEnum, IOpsMessageResponse, IOpsMessage, IRouteMessage } from '@jfvilas/kwirth-common'\r\nimport { ClusterList, ObjectSelector, ShowError, StatusLog, KwirthNews, ComponentNotFound, ErrorType } from '@jfvilas/plugin-kwirth-frontend'\r\nimport { VERSION } from '../index'\r\n\r\n// Material-UI\r\nimport { Box, Checkbox, FormControl, Grid, MenuItem, Select, Card, CardHeader, CardContent, Divider, IconButton, Typography, Tooltip as MUITooltip } from '@material-ui/core'\r\n\r\n// Icons\r\nimport PlayIcon from '@material-ui/icons/PlayArrow'\r\nimport PauseIcon from '@material-ui/icons/Pause'\r\nimport StopIcon from '@material-ui/icons/Stop'\r\nimport InfoIcon from '@material-ui/icons/Info'\r\nimport WarningIcon from '@material-ui/icons/Warning'\r\nimport ErrorIcon from '@material-ui/icons/Error'\r\nimport RefreshIcon from '@material-ui/icons/Refresh'\r\nimport KwirthMetricsLogo from '../assets/kwirthmetrics-logo.svg'\r\n\r\nimport { Area, AreaChart, Bar, BarChart, CartesianGrid, LabelList, Legend, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts'\r\nimport { IMetricsOptions } from './IOptions'\r\nimport { Options } from './Options'\r\n\r\nexport interface IKwirthMetricsProps {\r\n allMetrics: boolean\r\n enableRestart: boolean\r\n width?: number\r\n depth?: number\r\n interval?: number\r\n chart?: string\r\n}\r\n\r\nexport const EntityKwirthMetricsContent: React.FC<IKwirthMetricsProps> = (props:IKwirthMetricsProps) : JSX.Element => { \r\n const kwirthMetricsApi = useApi(kwirthMetricsApiRef)\r\n const alertApi = useApi(alertApiRef)\r\n const { entity } = useEntity()\r\n const [validClusters, setValidClusters] = useState<ClusterValidPods[]>([])\r\n const [selectedClusterName, setSelectedClusterName] = useState('')\r\n const [selectedNamespaces, setSelectedNamespaces] = useState<string[]>([])\r\n const [selectedPodNames, setSelectedPodNames] = useState<string[]>([])\r\n const [selectedContainerNames, setSelectedContainerNames] = useState<string[]>([])\r\n const [selectedMetrics, setSelectedMetrics] = useState<string[]>([])\r\n const [showError, setShowError] = useState('')\r\n const [started, setStarted] = useState(false)\r\n const [stopped, setStopped] = useState(true)\r\n const paused=useRef<boolean>(false)\r\n const [metricsMessages, setMetricsMessages] = useState<MetricsMessage[]>([])\r\n const [statusMessages, setStatusMessages] = useState<IStatusLine[]>([])\r\n const [websocket, setWebsocket] = useState<WebSocket>()\r\n const [instance, setInstance] = useState<string>()\r\n const kwirthMetricsOptionsRef = useRef<IMetricsOptions>({\r\n depth: props.depth !==undefined? props.depth : 10,\r\n width: props.width !==undefined? props.width : 3,\r\n interval: props.interval !==undefined? props.interval : 15,\r\n chart: props.chart !==undefined? props.chart : 'area',\r\n aggregate:false,\r\n merge:false,\r\n stack:false\r\n })\r\n const [showStatusDialog, setShowStatusDialog] = useState(false)\r\n const [statusLevel, setStatusLevel] = useState<SignalMessageLevelEnum>(SignalMessageLevelEnum.INFO)\r\n const [backendVersion, setBackendVersion ] = useState<string>('')\r\n const [ backendInfo, setBackendInfo ] = useState<IBackendInfo>()\r\n const [_refresh,setRefresh] = useState(0)\r\n const [allMetrics, setAllMetrics] = useState<MetricDefinition[]>(\r\n [\r\n {metric:'kwirth_container_memory_percentage',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_cpu_percentage',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_transmit_percentage',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_receive_percentage',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_transmit_mbps',help:'',eval:'',type:'counter'},\r\n {metric:'kwirth_container_receive_mbps',help:'',eval:'',type:'counter'}\r\n ])\r\n const { loading, error } = useAsync ( async () => {\r\n if (backendVersion==='') setBackendVersion(await kwirthMetricsApi.getVersion())\r\n if (!backendInfo) setBackendInfo(await kwirthMetricsApi.getInfo())\r\n let reqScopes = [InstanceConfigScopeEnum.STREAM]\r\n if (props.enableRestart) reqScopes.push(InstanceConfigScopeEnum.RESTART)\r\n let data = await kwirthMetricsApi.requestAccess(entity,'metrics', reqScopes)\r\n setValidClusters(data)\r\n })\r\n\r\n const colours = [\r\n \"#6e5bb8\", // morado oscuro\r\n \"#4a9076\", // verde oscuro\r\n \"#b56c52\", // naranja oscuro\r\n \"#7f6b97\", // color lavanda oscuro\r\n \"#b0528f\", // rosa oscuro\r\n \"#b0b052\", // amarillo oscuro\r\n \"#b05252\", // rojo oscuro\r\n \"#5285b0\", // azul oscuro\r\n \"#a38ad6\", // morado pastel\r\n \"#89c1a0\", // verde pastel\r\n \"#e4a28a\", // naranja pastel\r\n \"#b09dbd\", // lavanda pastel\r\n \"#e2a4c6\", // rosa pastel\r\n \"#c5c89e\", // amarillo pastel\r\n \"#e2a4a4\", // rojo pastel\r\n \"#90b7e2\", // azul pastel\r\n \"#f8d5e1\", // rosa claro pastel\r\n \"#b2d7f0\", // azul muy claro pastel\r\n \"#f7e1b5\", // amarillo muy claro pastel\r\n \"#d0f0c0\", // verde muy claro pastel\r\n \"#f5b0a1\", // coral pastel\r\n \"#d8a7db\", // lavanda muy claro pastel\r\n \"#f4c2c2\", // rosa suave pastel\r\n \"#e6c7b9\", // marron claro pastel\r\n \"#f0e2b6\", // crema pastel\r\n \"#a7c7e7\", // azul palido pastel\r\n \"#f5e6a5\", // amarillo palido pastel\r\n \"#e3c8f5\", // lilas pastel\r\n \"#d0c4e8\", // lila palido pastel\r\n \"#b8d8b8\", // verde claro pastel\r\n \"#d2ebfa\", // azul muy claro pastel\r\n \"#f1c1d2\" // rosa bebe pastel\r\n ]\r\n \r\n const clickStart = () => {\r\n if (!paused.current) {\r\n setMetricsMessages([])\r\n setStarted(true)\r\n paused.current=false\r\n setStopped(false)\r\n startMetricsViewer()\r\n }\r\n else {\r\n paused.current=false\r\n setStarted(true)\r\n }\r\n }\r\n\r\n const clickPause = () => {\r\n setStarted(false)\r\n paused.current=true\r\n }\r\n\r\n const onClickStop = () => {\r\n setStarted(false)\r\n setStopped(true)\r\n paused.current=false\r\n stopMetricsViewer()\r\n }\r\n\r\n const onSelectCluster = async (clusterName:string|undefined) => {\r\n if (started) onClickStop()\r\n // if (clusterName) {\r\n // setSelectedClusterName(clusterName)\r\n // setSelectedNamespaces([])\r\n // setSelectedPodNames([])\r\n // setSelectedContainerNames([])\r\n // setMetricsMessages([])\r\n // setStatusMessages([])\r\n // let cluster = clusterValidPods.find(cluster => cluster.name === clusterName)\r\n // if (cluster && cluster.metrics) {\r\n // cluster.metrics.sort( (a,_b) => a.metric.startsWith('kwirth')? -1:1)\r\n // setAllMetrics(cluster.metrics)\r\n // }\r\n // }\r\n if (clusterName) {\r\n setSelectedClusterName(clusterName)\r\n setSelectedPodNames([])\r\n setSelectedContainerNames([])\r\n setStatusMessages([])\r\n let cluster = validClusters.find(cluster => cluster.name === clusterName)\r\n\r\n if (cluster && cluster.pods && cluster.metrics) {\r\n cluster.metrics.sort( (a,_b) => a.metric.startsWith('kwirth')? -1:1)\r\n setAllMetrics(cluster.metrics)\r\n\r\n let validNamespaces = Array.from(new Set(cluster.pods.map(pod => pod.namespace)))\r\n if (validNamespaces.length === 1) {\r\n setSelectedNamespaces(validNamespaces)\r\n let podList = getPodList (cluster.pods, validNamespaces)\r\n setSelectedPodNames(podList.map(pod => pod.name))\r\n setSelectedContainerNames(getContainerList(cluster.pods, validNamespaces, podList.map(pod => pod.name)))\r\n }\r\n else {\r\n setSelectedNamespaces([])\r\n }\r\n }\r\n }\r\n }\r\n\r\n const processMetricsMessage = (wsEvent:any) => {\r\n let instanceMessage = JSON.parse(wsEvent.data) as IInstanceMessage\r\n switch (instanceMessage.type) {\r\n case InstanceMessageTypeEnum.DATA:\r\n let metricsMessage = instanceMessage as MetricsMessage\r\n if (metricsMessage.timestamp===0) { // initial metrics values\r\n metricsMessage.timestamp = Date.now()\r\n setMetricsMessages([metricsMessage])\r\n }\r\n else {\r\n setMetricsMessages((prev) => {\r\n while (prev.length>kwirthMetricsOptionsRef.current.depth) {\r\n prev.splice(0,1)\r\n }\r\n if (paused.current)\r\n return prev\r\n else\r\n return [ ...prev, metricsMessage ]\r\n })\r\n }\r\n break\r\n case InstanceMessageTypeEnum.SIGNAL:\r\n if (instanceMessage.flow === InstanceMessageFlowEnum.RESPONSE && instanceMessage.action === InstanceMessageActionEnum.START) {\r\n if (instanceMessage.instance!=='')\r\n setInstance(instanceMessage.instance)\r\n else {\r\n let signalMessage = instanceMessage as ISignalMessage\r\n if (signalMessage.text) {\r\n alertApi.post({ message: signalMessage.text, severity:'error', display:'transient' })\r\n }\r\n }\r\n }\r\n else {\r\n let signalMessage = instanceMessage as ISignalMessage\r\n if (signalMessage.text) {\r\n addMessage(signalMessage.level, signalMessage.text)\r\n switch(signalMessage.level) {\r\n case SignalMessageLevelEnum.INFO:\r\n alertApi.post({ message: signalMessage.text, severity:'info', display:'transient' })\r\n break\r\n case SignalMessageLevelEnum.WARNING:\r\n alertApi.post({ message: signalMessage.text, severity:'warning', display:'transient' })\r\n break\r\n case SignalMessageLevelEnum.ERROR:\r\n alertApi.post({ message: signalMessage.text, severity:'error', display:'transient' })\r\n break\r\n default:\r\n alertApi.post({ message: signalMessage.text, severity:'success', display:'transient' })\r\n break\r\n }\r\n }\r\n }\r\n break\r\n default:\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Invalid message type received: ' + instanceMessage.type)\r\n alertApi.post({ message: 'Invalid message type received: ' + instanceMessage.type, severity:'error', display:'transient' })\r\n break\r\n }\r\n }\r\n \r\n const websocketOnChunk = (wsEvent:any) => {\r\n let instanceMessage:IInstanceMessage\r\n try {\r\n instanceMessage = JSON.parse(wsEvent.data) as IInstanceMessage\r\n }\r\n catch (err) {\r\n console.log(err)\r\n console.log(wsEvent.data)\r\n return\r\n }\r\n\r\n switch(instanceMessage.channel) {\r\n case InstanceMessageChannelEnum.METRICS:\r\n processMetricsMessage(wsEvent)\r\n break\r\n case InstanceMessageChannelEnum.OPS:\r\n let opsMessage = instanceMessage as IOpsMessageResponse\r\n if (opsMessage.data?.data) \r\n addMessage (SignalMessageLevelEnum.WARNING, 'Operations message: '+opsMessage.data.data)\r\n else\r\n addMessage (SignalMessageLevelEnum.WARNING, 'Operations message: '+JSON.stringify(opsMessage))\r\n break\r\n default:\r\n console.log('Invalid channel in message: ', instanceMessage)\r\n break\r\n }\r\n\r\n }\r\n\r\n const websocketOnOpen = (ws:WebSocket) => {\r\n let cluster=validClusters.find(cluster => cluster.name===selectedClusterName)\r\n if (!cluster) {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Cluster not found')\r\n return\r\n }\r\n let pods = cluster.pods.filter(p => selectedNamespaces.includes(p.namespace))\r\n if (!pods || pods.length===0) {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Pod not found')\r\n return\r\n }\r\n\r\n console.log(`WS connected`)\r\n let accessKey = cluster.accessKeys.get(InstanceConfigScopeEnum.STREAM)\r\n if (accessKey) {\r\n let containers:string[] = []\r\n if (selectedContainerNames.length>0) {\r\n for(var p of selectedPodNames) {\r\n for (var c of selectedContainerNames) {\r\n containers.push(p+'+'+c)\r\n }\r\n }\r\n }\r\n var iConfig:InstanceConfig = {\r\n channel: InstanceMessageChannelEnum.METRICS,\r\n objects: InstanceConfigObjectEnum.PODS,\r\n action: InstanceMessageActionEnum.START,\r\n flow: InstanceMessageFlowEnum.REQUEST,\r\n instance: '',\r\n accessKey: accessKeySerialize(accessKey),\r\n scope: InstanceConfigScopeEnum.STREAM,\r\n view: (selectedContainerNames.length > 0 ? InstanceConfigViewEnum.CONTAINER : InstanceConfigViewEnum.POD),\r\n namespace: selectedNamespaces.join(','),\r\n group: '',\r\n pod: selectedPodNames.join(','),\r\n container: containers.join(','),\r\n data: {\r\n mode: MetricsConfigModeEnum.STREAM,\r\n aggregate: kwirthMetricsOptionsRef.current.aggregate,\r\n metrics: selectedMetrics,\r\n interval: kwirthMetricsOptionsRef.current.interval\r\n },\r\n type: InstanceMessageTypeEnum.SIGNAL\r\n }\r\n ws.send(JSON.stringify(iConfig))\r\n }\r\n else {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'AccessKey has not been obtained')\r\n return\r\n }\r\n }\r\n\r\n const startMetricsViewer = () => {\r\n let cluster=validClusters.find(cluster => cluster.name===selectedClusterName)\r\n if (!cluster) {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Cluster not found')\r\n return\r\n }\r\n\r\n try {\r\n let ws = new WebSocket(cluster.url)\r\n ws.onopen = () => websocketOnOpen(ws)\r\n ws.onmessage = (event) => websocketOnChunk(event)\r\n ws.onclose = (event) => websocketOnClose(event)\r\n setWebsocket(ws)\r\n }\r\n catch (err) {\r\n addMessage(SignalMessageLevelEnum.ERROR, 'Error starting websocket')\r\n }\r\n\r\n }\r\n\r\n const websocketOnClose = (_event:any) => {\r\n console.log(`WS disconnected from remote`)\r\n setStarted(false)\r\n paused.current=false\r\n setStopped(true)\r\n }\r\n\r\n const stopMetricsViewer = () => {\r\n websocket?.close()\r\n }\r\n\r\n const onChangeOptions = (options:IMetricsOptions) => {\r\n kwirthMetricsOptionsRef.current=options\r\n setRefresh(Math.random())\r\n }\r\n \r\n const actionButtons = () => {\r\n let hasStreamKey = false, hasRestartKey = false\r\n let cluster=validClusters.find(cluster => cluster.name===selectedClusterName)\r\n if (cluster) {\r\n hasStreamKey = Boolean(cluster.accessKeys.has(InstanceConfigScopeEnum.STREAM))\r\n hasRestartKey = Boolean(cluster.accessKeys.get(InstanceConfigScopeEnum.RESTART))\r\n }\r\n\r\n return <>\r\n { props.enableRestart &&\r\n <IconButton title='Restart' onClick={onClickRestart} disabled={selectedPodNames.length === 0 || !hasRestartKey || !websocket || !started}>\r\n <RefreshIcon />\r\n </IconButton>\r\n }\r\n <IconButton onClick={clickStart} title=\"Play\" disabled={started || !paused || selectedPodNames.length === 0 || selectedMetrics.length==0 || !hasStreamKey}>\r\n <PlayIcon />\r\n </IconButton>\r\n <IconButton onClick={clickPause} title=\"Pause\" disabled={!((started && !paused.current) && selectedPodNames.length === 0)}>\r\n <PauseIcon />\r\n </IconButton>\r\n <IconButton onClick={onClickStop} title=\"Stop\" disabled={stopped || selectedPodNames.length === 0}>\r\n <StopIcon />\r\n </IconButton>\r\n </>\r\n }\r\n\r\n const onMetricsChange = (event:any) => {\r\n setSelectedMetrics(event.target.value)\r\n }\r\n\r\n const statusButtons = (title:string) => {\r\n const show = (level:SignalMessageLevelEnum) => {\r\n setShowStatusDialog(true)\r\n setStatusLevel(level)\r\n }\r\n\r\n const prepareText = (txt:string|undefined) => {\r\n return txt? (txt.length>25? txt.substring(0,25)+\"...\":txt) : 'N/A'\r\n }\r\n\r\n return (\r\n <Grid container direction='row'>\r\n <Grid item>\r\n <Typography variant='h5'>{prepareText(title)}</Typography>\r\n </Grid>\r\n <Grid item style={{marginTop:'-8px'}}>\r\n <IconButton title=\"info\" disabled={!statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.INFO)} onClick={() => show(SignalMessageLevelEnum.INFO)}>\r\n <InfoIcon style={{ color:statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.INFO)?'blue':'#BDBDBD'}}/>\r\n </IconButton>\r\n <IconButton title=\"warning\" disabled={!statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.WARNING)} onClick={() => show(SignalMessageLevelEnum.WARNING)} style={{marginLeft:'-16px'}}>\r\n <WarningIcon style={{ color:statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.WARNING)?'gold':'#BDBDBD'}}/>\r\n </IconButton>\r\n <IconButton title=\"error\" disabled={!statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.ERROR)} onClick={() => show(SignalMessageLevelEnum.ERROR)} style={{marginLeft:'-16px'}}>\r\n <ErrorIcon style={{ color:statusMessages.some(m=>m.type=== InstanceMessageTypeEnum.SIGNAL && m.level=== SignalMessageLevelEnum.ERROR)?'red':'#BDBDBD'}}/>\r\n </IconButton>\r\n </Grid>\r\n </Grid>\r\n )\r\n }\r\n\r\n const statusClear = (level: SignalMessageLevelEnum) => {\r\n setStatusMessages(statusMessages.filter(m=> m.level!==level))\r\n setShowStatusDialog(false)\r\n }\r\n \r\n const mergeSeries = (names:string[], series:any[]) => {\r\n if (!names || names.length===0) return []\r\n var resultSeries:any[] = []\r\n\r\n for (var i=0; i<series[0].length; i++) {\r\n var item: { [key: string]: string|number } = {}\r\n for (var j=0; j<series.length; j++ ) {\r\n if (series[j][i]) {\r\n item['timestamp'] = series[0][i].timestamp\r\n item[names[j]] = series[j][i].value\r\n }\r\n }\r\n resultSeries.push(item)\r\n }\r\n return resultSeries\r\n }\r\n\r\n const addChart = (options: IMetricsOptions, metric:MetricDefinition, names:string[], series:any[], colour:string) => {\r\n var result = <></>\r\n var mergedSeries = mergeSeries(names, series)\r\n\r\n const renderLabel = (data:any) => {\r\n var values:any[] = series.map (s => s[data.index])\r\n var total:number =values.reduce((acc,value) => acc+value.value, 0)\r\n return <text x={data.x + data.width/3.5} y={data.y-10}>{total.toPrecision(3).replace(/0+$/, \"\")}</text>\r\n }\r\n let height=300\r\n\r\n switch (options.chart) {\r\n case 'value':\r\n height=40+series.length*80\r\n result = (\r\n <Grid>\r\n {\r\n <Typography>\r\n { series.map( (serie,index) => {\r\n return (<>\r\n <Typography >\r\n {serie[serie.length-1].value}\r\n </Typography>\r\n <Typography >\r\n {names[index]}\r\n </Typography>\r\n </>)\r\n })}\r\n </Typography>\r\n }\r\n </Grid>\r\n\r\n )\r\n break\r\n case 'line':\r\n result = (\r\n <LineChart data={mergedSeries}>\r\n <CartesianGrid strokeDasharray=\"3 3\"/>\r\n <XAxis dataKey=\"timestamp\" fontSize={8}/>\r\n <YAxis />\r\n <Tooltip />\r\n <Legend/>\r\n { series.map ((_serie,index) => <Line key={index} name={names[index]} type=\"monotone\" dataKey={names[index]} stroke={series.length===1?colour:colours[index]} activeDot={{ r: 8 }} />) }\r\n </LineChart>\r\n )\r\n break\r\n case 'area':\r\n result = (\r\n <AreaChart data={mergedSeries}>\r\n <defs>\r\n {\r\n series.map( (_serie,index) => {\r\n return (\r\n <linearGradient key={index} id={`color${series.length===1?colour:colours[index]}`} x1='0' y1='0' x2='0' y2='1'>\r\n <stop offset='7%' stopColor={series.length===1?colour:colours[index]} stopOpacity={0.8}/>\r\n <stop offset='93%' stopColor={series.length===1?colour:colours[index]} stopOpacity={0}/>\r\n </linearGradient>\r\n )\r\n })\r\n }\r\n </defs>\r\n <CartesianGrid strokeDasharray=\"3 3\"/>\r\n <XAxis dataKey=\"timestamp\" fontSize={8}/>\r\n <YAxis />\r\n <Tooltip />\r\n <Legend/>\r\n { series.map ((_serie,index) => \r\n <Area key={index} name={names[index]} type=\"monotone\" {...(options.stack? {stackId:\"1\"}:{})} dataKey={names[index]} stroke={series.length===1?colour:colours[index]} fill={`url(#color${series.length===1?colour:colours[index]})`}/> )}\r\n </AreaChart>\r\n )\r\n break\r\n case 'bar':\r\n result = (\r\n <BarChart data={mergedSeries}>\r\n <CartesianGrid strokeDasharray=\"3 3\"/>\r\n <XAxis dataKey=\"timestamp\" fontSize={8}/>\r\n <YAxis />\r\n <Tooltip/>\r\n <Legend/>\r\n { series.map ((_serie,index) =>\r\n <Bar name={names[index]} {...(options.stack? {stackId:\"1\"}:{})} dataKey={names[index]} stroke={series.length===1?colour:colours[index]} fill={series.length===1?colour:colours[index]}>\r\n { index === series.length-1 && series.length > 1 ? <LabelList dataKey={names[index]} position='insideTop' content={ renderLabel }/> : null }\r\n </Bar>\r\n )}\r\n </BarChart>\r\n )\r\n break\r\n default:\r\n break\r\n }\r\n\r\n let title = metric.metric.replaceAll('_',' ')\r\n title = title[0].toLocaleUpperCase()+ title.substring(1)\r\n title = title.replaceAll('cpu', 'CPU')\r\n title = title.replaceAll(' fs ', ' FS ')\r\n title = title.replaceAll(' io ', ' IO ')\r\n title = title.replaceAll('oom', 'OOM')\r\n title = title.replaceAll('nvm', 'NVM')\r\n title = title.replaceAll('rss', 'RSS')\r\n title = title.replaceAll('failcnt', 'fail count')\r\n return (\r\n <Grid style={{width:'100%', marginBottom:32}}>\r\n <MUITooltip title={<Typography style={{fontSize:12}}><b>{metric.metric}</b><br/><br/>{metric.help}</Typography>}>\r\n <Typography align='center'>{title}</Typography>\r\n </MUITooltip>\r\n <ResponsiveContainer height={height} key={metric+JSON.stringify(names)}>\r\n {result}\r\n </ResponsiveContainer> \r\n </Grid>\r\n )\r\n }\r\n\r\n const showMetrics = (options: IMetricsOptions) => {\r\n if (!metricsMessages || metricsMessages.length === 0) {\r\n if (selectedNamespaces.length === 0) \r\n return <Typography>Select namespace chip on top.</Typography>\r\n else\r\n return <>\r\n {started?<Typography>Waiting for first data, be patient...</Typography>:<Typography>Configure <b>chart options</b>, select some <b>metrics on top</b>, and <b>press PLAY</b> on top-right button to start viewing.</Typography>}\r\n </>\r\n }\r\n\r\n let cluster = validClusters.find(cluster => cluster.name === selectedClusterName)\r\n if (!cluster) return\r\n\r\n let data:Map<string, Map<string, { timestamp:string, value:number}[]>> = new Map()\r\n for (let metricsMessage of metricsMessages) {\r\n let ts = new Date(metricsMessage.timestamp)\r\n let timestamp = `${ts.getHours().toString().padStart(2,'0')}:${ts.getMinutes().toString().padStart(2,'0')}:${ts.getSeconds().toString().padStart(2,'0')}`\r\n for (var i=0;i<metricsMessage.assets.length;i++) {\r\n var assetName=metricsMessage.assets[i].assetName\r\n for (var metrics of metricsMessage.assets[i].values) {\r\n if (!data.has(assetName)) data.set(assetName, new Map())\r\n if (!data.get(assetName)?.has(metrics.metricName)) data.get(assetName)?.set(metrics.metricName,[])\r\n data.get(assetName)?.get(metrics.metricName)?.push({timestamp, value:metrics.metricValue})\r\n }\r\n } \r\n }\r\n\r\n let allCharts:any[] = []\r\n if (options.merge) {\r\n var assetNames=Array.from(data.keys())\r\n var firstAsset=assetNames[0]\r\n var allMetrics:string[] = Array.from(new Set(data.get(firstAsset)!.keys()))\r\n\r\n for (let metric of allMetrics) {\r\n let metricDefinition = cluster.metrics?.find(m => m.metric === metric)!\r\n var series = assetNames.map(an => {\r\n return data.get(an)!.get(metric)\r\n })\r\n allCharts.push(<>{addChart(options, metricDefinition, assetNames, series, '')}</>)\r\n }\r\n\r\n let rows = []\r\n for (let i = 0; i < allCharts.length; i += options.width) {\r\n rows.push(allCharts.slice(i, i + options.width))\r\n }\r\n return (<>\r\n {rows.map((row, index) => (\r\n <div key={index} style={{ display: 'flex', justifyContent: 'space-around' }}>\r\n {row}\r\n </div>\r\n ))}\r\n </>)\r\n }\r\n else {\r\n let allCharts = Array.from(data.keys()!).map( (asset, index) => {\r\n return Array.from(data.get(asset)?.keys()!).map ( metric => {\r\n var serie:any=data.get(asset)?.get(metric)!\r\n let metricDefinition = cluster.metrics?.find(m => m.metric === metric)!\r\n return (<>{addChart(options, metricDefinition, [asset], [serie], colours[index])}</>)\r\n })\r\n })\r\n\r\n // convert allResults (a list of charts) into a series of rows of charts\r\n let rows = []\r\n for (var resultAsset of allCharts) {\r\n for (let i = 0; i < resultAsset.length; i += options.width) {\r\n rows.push(resultAsset.slice(i, i + options.width))\r\n }\r\n }\r\n return (<>\r\n {rows.map((row, index) => (\r\n <div key={index} style={{ display: 'flex', justifyContent: 'space-around' }}>\r\n {row}\r\n </div>\r\n ))}\r\n </>)\r\n }\r\n }\r\n\r\n const onSelectObject = (namespaces:string[], podNames:string[], containerNames:string[]) => {\r\n setSelectedNamespaces(namespaces)\r\n setSelectedPodNames(podNames)\r\n setSelectedContainerNames(containerNames)\r\n }\r\n\r\n const addMessage = (level:SignalMessageLevelEnum, text:string) => {\r\n setStatusMessages ((prev) => [...prev, {\r\n level,\r\n text,\r\n type: InstanceMessageTypeEnum.SIGNAL\r\n }])\r\n }\r\n\r\n const onClickRestart = () => {\r\n // we perform a route command from channel 'metrics' to channel 'ops'\r\n let cluster=validClusters.find(cluster => cluster.name===selectedClusterName)\r\n if (!cluster) {\r\n addMessage(SignalMessageLevelEnum.ERROR,'No cluster selected')\r\n return\r\n }\r\n let restartKey = cluster.accessKeys.get(InstanceConfigScopeEnum.RESTART)\r\n if (!restartKey) {\r\n addMessage(SignalMessageLevelEnum.ERROR,'No access key present')\r\n return\r\n }\r\n if (!instance) {\r\n addMessage(SignalMessageLevelEnum.ERROR,'No instance has been established')\r\n return\r\n }\r\n\r\n\r\n let pods:PodData[] = (cluster.pods as PodData[]).filter(pod => selectedNamespaces.includes(pod.namespace))\r\n for (let pod of pods) {\r\n let om:IOpsMessage = {\r\n msgtype: 'opsmessage',\r\n action: InstanceMessageActionEnum.COMMAND,\r\n flow: InstanceMessageFlowEnum.IMMEDIATE,\r\n type: InstanceMessageTypeEnum.DATA,\r\n channel: InstanceMessageChannelEnum.OPS,\r\n instance: '',\r\n id: '1',\r\n accessKey: accessKeySerialize(restartKey),\r\n command: OpsCommandEnum.RESTARTPOD,\r\n namespace: pod.namespace,\r\n group: '',\r\n pod: pod.name,\r\n container: ''\r\n }\r\n let rm: IRouteMessage = {\r\n msgtype: 'routemessage',\r\n accessKey: accessKeySerialize(restartKey),\r\n destChannel: InstanceMessageChannelEnum.OPS,\r\n action: InstanceMessageActionEnum.ROUTE,\r\n flow: InstanceMessageFlowEnum.IMMEDIATE,\r\n type: InstanceMessageTypeEnum.SIGNAL,\r\n channel: InstanceMessageChannelEnum.METRICS,\r\n instance: instance,\r\n data: om\r\n }\r\n websocket?.send(JSON.stringify(rm))\r\n }\r\n }\r\n\r\n return (<>\r\n { showError!=='' && <ShowError message={showError} onClose={() => setShowError('')}/> }\r\n\r\n { loading && <Progress/> }\r\n\r\n {!isKwirthAvailable(entity) && !loading && error && (\r\n <WarningPanel title={'An error has ocurred while obtaining data from kuebernetes clusters.'} message={error?.message} />\r\n )}\r\n\r\n {!isKwirthAvailable(entity) && !loading && (\r\n <MissingAnnotationEmptyState readMoreUrl='https://github.com/jfvilas/kwirth' annotation={[ANNOTATION_BACKSTAGE_KUBERNETES_LABELID, ANNOTATION_BACKSTAGE_KUBERNETES_LABELSELECTOR]}/>\r\n )}\r\n\r\n { isKwirthAvailable(entity) && !loading && validClusters && validClusters.length===0 &&\r\n <ComponentNotFound error={ErrorType.NO_CLUSTERS} entity={entity}/>\r\n }\r\n\r\n { isKwirthAvailable(entity) && !loading && validClusters && validClusters.length>0 && validClusters.reduce((sum,cluster) => sum+cluster.pods.length, 0)===0 &&\r\n <ComponentNotFound error={ErrorType.NO_PODS} entity={entity}/>\r\n }\r\n\r\n { isKwirthAvailable(entity) && !loading && validClusters && validClusters.length>0 && validClusters.reduce((sum,cluster) => sum+cluster.pods.length, 0)>0 &&\r\n <Box sx={{ display: 'flex'}}>\r\n <Box sx={{ width: '200px', maxWidth:'200px'}}>\r\n <Grid container direction='column'>\r\n <Grid item>\r\n <Card>\r\n <ClusterList resources={validClusters} selectedClusterName={selectedClusterName} onSelect={onSelectCluster}/>\r\n </Card>\r\n </Grid>\r\n <Grid item>\r\n <Card>\r\n <Options metricsOptions={kwirthMetricsOptionsRef.current!} selectedNamespaces={selectedNamespaces} selectedPodNames={selectedPodNames} selectedContainerNames={selectedContainerNames} onChange={onChangeOptions} disabled={selectedNamespaces.length === 0 || paused.current}/>\r\n </Card>\r\n </Grid>\r\n <Grid item>\r\n <Card>\r\n <KwirthNews latestVersions={backendInfo} backendVersion={backendVersion} ownVersion={VERSION}/>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n\r\n <Box sx={{ flexGrow: 1, p:1, marginLeft:'8px' }}>\r\n\r\n { !selectedClusterName && \r\n <img src={KwirthMetricsLogo} alt=\"No cluster selected\" style={{ left:'40%', marginTop:'10%', width:'20%', position:'relative' }} />\r\n }\r\n\r\n { selectedClusterName && <>\r\n <Card style={{marginTop:-8}}>\r\n <CardHeader title={statusButtons(selectedClusterName)} style={{marginTop:-4, marginBottom:4, flexShrink:0}} action={actionButtons()} />\r\n \r\n <Grid container style={{alignItems:'end'}}>\r\n <Grid item style={{width:'66%'}}>\r\n <Typography style={{marginLeft:14}}>\r\n <ObjectSelector cluster={validClusters.find(cluster => cluster.name === selectedClusterName)!} onSelect={onSelectObject} disabled={selectedClusterName === '' || started || paused.current} selectedNamespaces={selectedNamespaces} selectedPodNames={selectedPodNames} selectedContainerNames={selectedContainerNames} scope={InstanceConfigScopeEnum.STREAM}/>\r\n </Typography>\r\n </Grid>\r\n <Grid item style={{width:'33%', marginLeft:0, marginBottom:6, maxWidth:'33%' }}>\r\n <FormControl style={{width:'100%'}}>\r\n <Select value={selectedMetrics} MenuProps={{variant:'menu'}} multiple onChange={onMetricsChange} renderValue={(selected) => (selected as string[]).join(', ').substring(0,40)+'...'} disabled={selectedClusterName === '' || selectedNamespaces.length === 0 || started}>\r\n {\r\n allMetrics.map(m => \r\n <MenuItem key={m.metric} value={m.metric} style={{marginTop:'-8px', marginBottom:'-8px'}}>\r\n <Checkbox checked={selectedMetrics.includes(m.metric)} style={{marginTop:'-8px', marginBottom:'-8px'}}/>\r\n <Typography style={{marginTop:'-8px', marginBottom:'-8px'}}>{m.metric}</Typography>\r\n </MenuItem>\r\n )\r\n }\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n\r\n <Divider/>\r\n <CardContent style={{ overflow: 'auto' }}>\r\n { showMetrics(kwirthMetricsOptionsRef.current) }\r\n </CardContent>\r\n </Card>\r\n </>}\r\n </Box> \r\n </Box>\r\n }\r\n\r\n { showStatusDialog && <StatusLog level={statusLevel} onClose={() => setShowStatusDialog(false)} statusMessages={statusMessages} onClear={statusClear}/>}\r\n </>)\r\n}\r\n"],"names":["cluster","p","MUITooltip","allMetrics","i","allCharts"],"mappings":"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"}
@@ -8,6 +8,7 @@ import { FormControlLabel, Checkbox, Typography } from '@material-ui/core';
8
8
 
9
9
  const Options = (props) => {
10
10
  const [options, setOptions] = useState(props.metricsOptions);
11
+ console.log(options.interval);
11
12
  const handleChange = (change) => {
12
13
  var a = { ...options, ...change };
13
14
  setOptions(a);
@@ -21,7 +22,7 @@ const Options = (props) => {
21
22
  if (props.selectedContainerNames.length > 1) return true;
22
23
  return false;
23
24
  };
24
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(CardHeader, { title: "Options" }), /* @__PURE__ */ React.createElement(Divider, { style: { marginTop: 8 } }), /* @__PURE__ */ React.createElement(Grid, { container: true, direction: "column", spacing: 1 }, /* @__PURE__ */ React.createElement(Grid, { item: true, style: { marginTop: 16 } }, /* @__PURE__ */ React.createElement(FormControlLabel, { style: { marginLeft: 24 }, label: "Width\xA0\xA0\xA0", labelPlacement: "start", disabled: props.disabled, control: /* @__PURE__ */ React.createElement(Select, { value: options.width, onChange: (evt) => handleChange({ width: evt.target.value }), style: { width: 80, marginLeft: 16 }, disabled: props.disabled }, /* @__PURE__ */ React.createElement(MenuItem, { value: 1 }, "1"), /* @__PURE__ */ React.createElement(MenuItem, { value: 2 }, "2"), /* @__PURE__ */ React.createElement(MenuItem, { value: 3 }, "3"), /* @__PURE__ */ React.createElement(MenuItem, { value: 4 }, "4")) })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { style: { marginLeft: 24 }, label: "Interval", labelPlacement: "start", disabled: props.disabled, control: /* @__PURE__ */ React.createElement(Select, { value: options.interval, onChange: (evt) => handleChange({ interval: evt.target.value }), style: { width: 80, marginLeft: 16 }, disabled: props.disabled }, /* @__PURE__ */ React.createElement(MenuItem, { value: 5 }, "5"), /* @__PURE__ */ React.createElement(MenuItem, { value: 10 }, "10"), /* @__PURE__ */ React.createElement(MenuItem, { value: 30 }, "30"), /* @__PURE__ */ React.createElement(MenuItem, { value: 60 }, "60")) })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { style: { marginLeft: 24 }, label: "Depth\xA0\xA0\xA0\xA0", labelPlacement: "start", disabled: props.disabled, control: /* @__PURE__ */ React.createElement(Select, { value: options.depth, onChange: (evt) => handleChange({ depth: evt.target.value }), style: { width: 80, marginLeft: 8 }, disabled: props.disabled }, /* @__PURE__ */ React.createElement(MenuItem, { value: 10 }, "10"), /* @__PURE__ */ React.createElement(MenuItem, { value: 50 }, "50"), /* @__PURE__ */ React.createElement(MenuItem, { value: 100 }, "100")) })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { style: { marginLeft: 24 }, label: "Chart", labelPlacement: "start", disabled: props.disabled, control: /* @__PURE__ */ React.createElement(Select, { value: options.chart, onChange: (evt) => handleChange({ chart: evt.target.value }), style: { width: 80, marginLeft: 28 }, disabled: props.disabled }, /* @__PURE__ */ React.createElement(MenuItem, { value: "value" }, "Value"), /* @__PURE__ */ React.createElement(MenuItem, { value: "line" }, "Line"), /* @__PURE__ */ React.createElement(MenuItem, { value: "area" }, "Area"), /* @__PURE__ */ React.createElement(MenuItem, { value: "bar" }, "Bar")) })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { control: /* @__PURE__ */ React.createElement(Checkbox, { checked: options.aggregate, onChange: (evt) => handleChange({ aggregate: evt.target.checked }) }), disabled: !multiAssets() || options.merge, label: "Aggregate", style: { marginLeft: 12 } })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { control: /* @__PURE__ */ React.createElement(Checkbox, { checked: options.merge, onChange: (evt) => handleChange({ merge: evt.target.checked }) }), disabled: !multiAssets() || options.aggregate || !"area bar".includes(options.chart), label: "Merge", style: { marginLeft: 12 } })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { control: /* @__PURE__ */ React.createElement(Checkbox, { checked: options.stack, onChange: (evt) => handleChange({ stack: evt.target.checked }) }), disabled: !options.merge || !"area bar".includes(options.chart), label: "Stack", style: { marginLeft: 12, marginBottom: 16 } })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(Typography, { style: { fontSize: 9, marginLeft: 22, marginTop: 4, marginBottom: 6 } }, "Powered by ", /* @__PURE__ */ React.createElement("a", { href: "https://jfvilas.github.io/kwirth/", target: "_blank", style: { color: "blue" } }, "Kwirth")))));
25
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(CardHeader, { title: "Options" }), /* @__PURE__ */ React.createElement(Divider, { style: { marginTop: 8 } }), /* @__PURE__ */ React.createElement(Grid, { container: true, direction: "column", spacing: 1 }, /* @__PURE__ */ React.createElement(Grid, { item: true, style: { marginTop: 16 } }, /* @__PURE__ */ React.createElement(FormControlLabel, { style: { marginLeft: 24 }, label: "Width\xA0\xA0\xA0", labelPlacement: "start", disabled: props.disabled, control: /* @__PURE__ */ React.createElement(Select, { value: options.width, onChange: (evt) => handleChange({ width: evt.target.value }), style: { width: 80, marginLeft: 16 }, disabled: props.disabled }, /* @__PURE__ */ React.createElement(MenuItem, { value: 1 }, "1"), /* @__PURE__ */ React.createElement(MenuItem, { value: 2 }, "2"), /* @__PURE__ */ React.createElement(MenuItem, { value: 3 }, "3"), /* @__PURE__ */ React.createElement(MenuItem, { value: 4 }, "4")) })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { style: { marginLeft: 24 }, label: "Interval", labelPlacement: "start", disabled: props.disabled, control: /* @__PURE__ */ React.createElement(Select, { value: options.interval, onChange: (evt) => handleChange({ interval: evt.target.value }), style: { width: 80, marginLeft: 16 }, disabled: props.disabled }, /* @__PURE__ */ React.createElement(MenuItem, { value: 5 }, "5"), /* @__PURE__ */ React.createElement(MenuItem, { value: 10 }, "10"), /* @__PURE__ */ React.createElement(MenuItem, { value: 15 }, "15"), /* @__PURE__ */ React.createElement(MenuItem, { value: 30 }, "30"), /* @__PURE__ */ React.createElement(MenuItem, { value: 60 }, "60"), /* @__PURE__ */ React.createElement(MenuItem, { value: 300 }, "300")) })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { style: { marginLeft: 24 }, label: "Depth\xA0\xA0\xA0\xA0", labelPlacement: "start", disabled: props.disabled, control: /* @__PURE__ */ React.createElement(Select, { value: options.depth, onChange: (evt) => handleChange({ depth: evt.target.value }), style: { width: 80, marginLeft: 8 }, disabled: props.disabled }, /* @__PURE__ */ React.createElement(MenuItem, { value: 10 }, "10"), /* @__PURE__ */ React.createElement(MenuItem, { value: 50 }, "50"), /* @__PURE__ */ React.createElement(MenuItem, { value: 100 }, "100")) })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { style: { marginLeft: 24 }, label: "Chart", labelPlacement: "start", disabled: props.disabled, control: /* @__PURE__ */ React.createElement(Select, { value: options.chart, onChange: (evt) => handleChange({ chart: evt.target.value }), style: { width: 80, marginLeft: 28 }, disabled: props.disabled }, /* @__PURE__ */ React.createElement(MenuItem, { value: "value" }, "Value"), /* @__PURE__ */ React.createElement(MenuItem, { value: "line" }, "Line"), /* @__PURE__ */ React.createElement(MenuItem, { value: "area" }, "Area"), /* @__PURE__ */ React.createElement(MenuItem, { value: "bar" }, "Bar")) })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { control: /* @__PURE__ */ React.createElement(Checkbox, { checked: options.aggregate, onChange: (evt) => handleChange({ aggregate: evt.target.checked }) }), disabled: !multiAssets() || options.merge, label: "Aggregate", style: { marginLeft: 12 } })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { control: /* @__PURE__ */ React.createElement(Checkbox, { checked: options.merge, onChange: (evt) => handleChange({ merge: evt.target.checked }) }), disabled: !multiAssets() || options.aggregate || !"area bar".includes(options.chart), label: "Merge", style: { marginLeft: 12 } })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(FormControlLabel, { control: /* @__PURE__ */ React.createElement(Checkbox, { checked: options.stack, onChange: (evt) => handleChange({ stack: evt.target.checked }) }), disabled: !options.merge || !"area bar".includes(options.chart), label: "Stack", style: { marginLeft: 12, marginBottom: 16 } })), /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(Typography, { style: { fontSize: 9, marginLeft: 22, marginTop: 4, marginBottom: 6 } }, "Powered by ", /* @__PURE__ */ React.createElement("a", { href: "https://jfvilas.github.io/kwirth/", target: "_blank", style: { color: "blue" } }, "Kwirth")))));
25
26
  };
26
27
 
27
28
  export { Options };
@@ -1 +1 @@
1
- {"version":3,"file":"Options.esm.js","sources":["../../src/components/Options.tsx"],"sourcesContent":["import React, { useState } from 'react'\r\nimport CardHeader from '@material-ui/core/CardHeader'\r\nimport Divider from '@material-ui/core/Divider'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport Select from '@material-ui/core/Select'\r\nimport { Checkbox, FormControlLabel, Typography } from '@material-ui/core'\r\nimport { IMetricsOptions, IOptions } from './IOptions'\r\n\r\nconst Options = (props: IOptions) => {\r\n const [options, setOptions] = useState<IMetricsOptions>(props.metricsOptions)\r\n\r\n const handleChange = (change:any) => {\r\n var a = {...options,...change}\r\n setOptions(a)\r\n props.onChange(a)\r\n }\r\n\r\n const multiAssets = () => {\r\n if (!props.selectedNamespaces) return false\r\n if (!props.selectedPodNames) return false\r\n if (!props.selectedContainerNames) return false\r\n\r\n if (props.selectedPodNames.length>1) return true\r\n if (props.selectedContainerNames.length>1) return true\r\n return false\r\n }\r\n\r\n return (<>\r\n <CardHeader title={'Options'}/>\r\n <Divider style={{marginTop:8}}/>\r\n <Grid container direction='column' spacing={1}>\r\n <Grid item style={{marginTop:16}} >\r\n <FormControlLabel style={{marginLeft:24}} label=\"Width&nbsp;&nbsp;&nbsp;\" labelPlacement='start' disabled={props.disabled} control={\r\n <Select value={options.width} onChange={(evt) => handleChange({width:evt.target.value})} style={{width:80, marginLeft:16}} disabled={props.disabled}>\r\n <MenuItem value={1}>1</MenuItem>\r\n <MenuItem value={2}>2</MenuItem>\r\n <MenuItem value={3}>3</MenuItem>\r\n <MenuItem value={4}>4</MenuItem>\r\n </Select>\r\n } />\r\n </Grid>\r\n\r\n <Grid item >\r\n <FormControlLabel style={{marginLeft:24}} label=\"Interval\" labelPlacement='start' disabled={props.disabled} control={\r\n <Select value={options.interval} onChange={(evt) => handleChange({interval:evt.target.value})} style={{width:80, marginLeft:16}} disabled={props.disabled}>\r\n <MenuItem value={5}>5</MenuItem>\r\n <MenuItem value={10}>10</MenuItem>\r\n <MenuItem value={30}>30</MenuItem>\r\n <MenuItem value={60}>60</MenuItem>\r\n </Select>\r\n } />\r\n </Grid>\r\n\r\n <Grid item>\r\n <FormControlLabel style={{marginLeft:24}} label=\"Depth&nbsp;&nbsp;&nbsp;&nbsp;\" labelPlacement='start' disabled={props.disabled} control={\r\n <Select value={options.depth} onChange={(evt) => handleChange({depth:evt.target.value})} style={{width:80, marginLeft:8}} disabled={props.disabled}>\r\n <MenuItem value={10}>10</MenuItem>\r\n <MenuItem value={50}>50</MenuItem>\r\n <MenuItem value={100}>100</MenuItem>\r\n </Select>\r\n } />\r\n </Grid>\r\n\r\n <Grid item >\r\n <FormControlLabel style={{marginLeft:24}} label=\"Chart\" labelPlacement='start' disabled={props.disabled} control={\r\n <Select value={options.chart} onChange={(evt) => handleChange({chart:evt.target.value})} style={{width:80, marginLeft:28}} disabled={props.disabled}>\r\n <MenuItem value={'value'}>Value</MenuItem>\r\n <MenuItem value={'line'}>Line</MenuItem>\r\n <MenuItem value={'area'}>Area</MenuItem>\r\n <MenuItem value={'bar'}>Bar</MenuItem>\r\n </Select>\r\n } />\r\n </Grid>\r\n <Grid item>\r\n <FormControlLabel control={<Checkbox checked={options.aggregate} onChange={(evt) => handleChange({aggregate:evt.target.checked})}/>} disabled={!multiAssets() || options.merge} label='Aggregate' style={{marginLeft:12}}/>\r\n </Grid>\r\n <Grid item>\r\n <FormControlLabel control={<Checkbox checked={options.merge} onChange={(evt) => handleChange({merge:evt.target.checked})}/>} disabled={!multiAssets() || options.aggregate || !'area bar'.includes(options.chart)} label='Merge' style={{marginLeft:12}}/>\r\n </Grid>\r\n <Grid item>\r\n <FormControlLabel control={<Checkbox checked={options.stack} onChange={(evt) => handleChange({stack:evt.target.checked})}/>} disabled={!options.merge || !('area bar'.includes(options.chart))} label='Stack' style={{marginLeft:12, marginBottom:16}}/>\r\n </Grid>\r\n <Grid item>\r\n <Typography style={{fontSize:9, marginLeft:22, marginTop:4, marginBottom:6}}>Powered by <a href='https://jfvilas.github.io/kwirth/' target='_blank' style={{color:'blue'}}>Kwirth</a></Typography>\r\n </Grid>\r\n </Grid>\r\n </>)\r\n}\r\n\r\nexport { Options }"],"names":[],"mappings":";;;;;;;;AASA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAoB;AACjC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAA,CAA0B,MAAM,cAAc,CAAA;AAE5E,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAAe;AACjC,IAAA,IAAI,CAAA,GAAI,EAAC,GAAG,OAAA,EAAQ,GAAG,MAAA,EAAM;AAC7B,IAAA,UAAA,CAAW,CAAC,CAAA;AACZ,IAAA,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACtB,IAAA,IAAI,CAAC,KAAA,CAAM,kBAAA,EAAoB,OAAO,KAAA;AACtC,IAAA,IAAI,CAAC,KAAA,CAAM,gBAAA,EAAkB,OAAO,KAAA;AACpC,IAAA,IAAI,CAAC,KAAA,CAAM,sBAAA,EAAwB,OAAO,KAAA;AAE1C,IAAA,IAAI,KAAA,CAAM,gBAAA,CAAiB,MAAA,GAAO,CAAA,EAAG,OAAO,IAAA;AAC5C,IAAA,IAAI,KAAA,CAAM,sBAAA,CAAuB,MAAA,GAAO,CAAA,EAAG,OAAO,IAAA;AAClD,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AAEA,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACJ,KAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,SAAA,EAAU,mBAC7B,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,EAAC,SAAA,EAAU,CAAA,IAAG,CAAA,kBAC9B,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,SAAA,EAAU,QAAA,EAAS,OAAA,EAAS,CAAA,EAAA,kBACxC,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,KAAA,EAAO,EAAC,SAAA,EAAU,EAAA,EAAE,EAAA,kBAC3B,KAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAO,EAAC,UAAA,EAAW,EAAA,EAAE,EAAG,KAAA,EAAM,mBAAA,EAA0B,cAAA,EAAe,OAAA,EAAQ,UAAU,KAAA,CAAM,QAAA,EAAU,OAAA,kBACvH,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,EAAC,KAAA,EAAM,IAAI,MAAA,CAAO,KAAA,EAAM,CAAA,EAAG,KAAA,EAAO,EAAC,OAAM,EAAA,EAAI,UAAA,EAAW,EAAA,EAAE,EAAG,QAAA,EAAU,KAAA,CAAM,4BACvI,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,CAAA,EAAA,EAAG,GAAC,CAAA,kBACrB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,CAAA,EAAA,EAAG,GAAC,CAAA,kBACrB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,OAAO,CAAA,EAAA,EAAG,GAAC,CAAA,kBACrB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,CAAA,EAAA,EAAG,GAAC,CACzB,CAAA,EACF,CACN,CAAA,kBAEA,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,MAAI,IAAA,EAAA,kBACN,KAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAO,EAAC,UAAA,EAAW,EAAA,EAAE,EAAG,KAAA,EAAM,UAAA,EAAW,cAAA,EAAe,OAAA,EAAQ,QAAA,EAAU,KAAA,CAAM,UAAU,OAAA,kBACxG,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,OAAA,CAAQ,QAAA,EAAU,UAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,EAAC,QAAA,EAAS,GAAA,CAAI,OAAO,KAAA,EAAM,CAAA,EAAG,KAAA,EAAO,EAAC,KAAA,EAAM,EAAA,EAAI,UAAA,EAAW,EAAA,EAAE,EAAG,QAAA,EAAU,KAAA,CAAM,QAAA,EAAA,kBAC7I,KAAA,CAAA,aAAA,CAAC,YAAS,KAAA,EAAO,CAAA,EAAA,EAAG,GAAC,CAAA,kBACrB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,EAAA,EAAA,EAAI,IAAE,CAAA,kBACvB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,EAAA,EAAA,EAAI,IAAE,CAAA,kBACvB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,EAAA,EAAA,EAAI,IAAE,CAC3B,CAAA,EACF,CACN,CAAA,kBAEA,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAA,sCACL,gBAAA,EAAA,EAAiB,KAAA,EAAO,EAAC,UAAA,EAAW,EAAA,EAAE,EAAG,KAAA,EAAM,uBAAA,EAAgC,cAAA,EAAe,OAAA,EAAQ,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,OAAA,sCAC5H,MAAA,EAAA,EAAO,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,EAAC,KAAA,EAAM,GAAA,CAAI,MAAA,CAAO,KAAA,EAAM,GAAG,KAAA,EAAO,EAAC,KAAA,EAAM,EAAA,EAAI,UAAA,EAAW,CAAA,EAAC,EAAG,QAAA,EAAU,KAAA,CAAM,QAAA,EAAA,kBACtI,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,EAAA,EAAA,EAAI,IAAE,CAAA,kBACvB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,EAAA,EAAA,EAAI,IAAE,CAAA,kBACvB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,GAAA,EAAA,EAAK,KAAG,CAC7B,CAAA,EACF,CACN,CAAA,kBAEA,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAA,kBACN,KAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAO,EAAC,UAAA,EAAW,EAAA,EAAE,EAAG,KAAA,EAAM,SAAQ,cAAA,EAAe,OAAA,EAAQ,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,OAAA,kBACrG,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAC,GAAA,KAAQ,aAAa,EAAC,KAAA,EAAM,GAAA,CAAI,MAAA,CAAO,KAAA,EAAM,CAAA,EAAG,KAAA,EAAO,EAAC,KAAA,EAAM,EAAA,EAAI,UAAA,EAAW,EAAA,EAAE,EAAG,UAAU,KAAA,CAAM,QAAA,EAAA,kBACvI,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,OAAA,EAAA,EAAS,OAAK,CAAA,kBAC/B,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,MAAA,EAAA,EAAQ,MAAI,CAAA,sCAC5B,QAAA,EAAA,EAAS,KAAA,EAAO,MAAA,EAAA,EAAQ,MAAI,CAAA,kBAC7B,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,KAAA,EAAA,EAAO,KAAG,CAC/B,CAAA,EACF,CACN,CAAA,sCACC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAA,kBACN,KAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,kBAAS,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAS,OAAA,CAAQ,SAAA,EAAW,QAAA,EAAU,CAAC,GAAA,KAAQ,aAAa,EAAC,SAAA,EAAU,GAAA,CAAI,MAAA,CAAO,OAAA,EAAQ,CAAA,EAAE,CAAA,EAAI,QAAA,EAAU,CAAC,WAAA,EAAY,IAAK,OAAA,CAAQ,KAAA,EAAO,OAAM,WAAA,EAAY,KAAA,EAAO,EAAC,UAAA,EAAW,EAAA,EAAE,EAAE,CAC7N,CAAA,kBACA,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAA,kBACN,KAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,yBAAS,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,EAAC,KAAA,EAAM,GAAA,CAAI,MAAA,CAAO,SAAQ,CAAA,EAAE,CAAA,EAAI,QAAA,EAAU,CAAC,WAAA,EAAY,IAAK,OAAA,CAAQ,SAAA,IAAa,CAAC,UAAA,CAAW,QAAA,CAAS,OAAA,CAAQ,KAAK,GAAG,KAAA,EAAM,OAAA,EAAQ,KAAA,EAAO,EAAC,UAAA,EAAW,EAAA,EAAE,EAAE,CAC5P,CAAA,kBACI,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAA,kBACd,KAAA,CAAA,aAAA,CAAC,oBAAiB,OAAA,kBAAS,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,EAAC,KAAA,EAAM,GAAA,CAAI,MAAA,CAAO,SAAQ,CAAA,EAAE,CAAA,EAAI,QAAA,EAAU,CAAC,OAAA,CAAQ,KAAA,IAAS,CAAE,UAAA,CAAW,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAI,KAAA,EAAM,SAAQ,KAAA,EAAO,EAAC,UAAA,EAAW,EAAA,EAAI,YAAA,EAAa,EAAA,EAAE,EAAE,CACtP,CAAA,kBACA,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAA,kBACN,KAAA,CAAA,aAAA,CAAC,cAAW,KAAA,EAAO,EAAC,QAAA,EAAS,CAAA,EAAG,UAAA,EAAW,EAAA,EAAI,SAAA,EAAU,CAAA,EAAG,YAAA,EAAa,CAAA,EAAC,EAAA,EAAG,aAAA,kBAAW,KAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,MAAK,mCAAA,EAAoC,MAAA,EAAO,QAAA,EAAS,KAAA,EAAO,EAAC,KAAA,EAAM,MAAA,EAAM,EAAA,EAAG,QAAM,CAAI,CACzL,CACJ,CACJ,CAAA;AACJ;;;;"}
1
+ {"version":3,"file":"Options.esm.js","sources":["../../src/components/Options.tsx"],"sourcesContent":["import React, { useState } from 'react'\r\nimport CardHeader from '@material-ui/core/CardHeader'\r\nimport Divider from '@material-ui/core/Divider'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport Select from '@material-ui/core/Select'\r\nimport { Checkbox, FormControlLabel, Typography } from '@material-ui/core'\r\nimport { IMetricsOptions, IOptions } from './IOptions'\r\n\r\nconst Options = (props: IOptions) => {\r\n const [options, setOptions] = useState<IMetricsOptions>(props.metricsOptions)\r\n\r\n console.log(options.interval)\r\n const handleChange = (change:any) => {\r\n var a = {...options,...change}\r\n setOptions(a)\r\n props.onChange(a)\r\n }\r\n\r\n const multiAssets = () => {\r\n if (!props.selectedNamespaces) return false\r\n if (!props.selectedPodNames) return false\r\n if (!props.selectedContainerNames) return false\r\n\r\n if (props.selectedPodNames.length>1) return true\r\n if (props.selectedContainerNames.length>1) return true\r\n return false\r\n }\r\n\r\n return (<>\r\n <CardHeader title={'Options'}/>\r\n <Divider style={{marginTop:8}}/>\r\n <Grid container direction='column' spacing={1}>\r\n <Grid item style={{marginTop:16}} >\r\n <FormControlLabel style={{marginLeft:24}} label=\"Width&nbsp;&nbsp;&nbsp;\" labelPlacement='start' disabled={props.disabled} control={\r\n <Select value={options.width} onChange={(evt) => handleChange({width:evt.target.value})} style={{width:80, marginLeft:16}} disabled={props.disabled}>\r\n <MenuItem value={1}>1</MenuItem>\r\n <MenuItem value={2}>2</MenuItem>\r\n <MenuItem value={3}>3</MenuItem>\r\n <MenuItem value={4}>4</MenuItem>\r\n </Select>\r\n } />\r\n </Grid>\r\n\r\n <Grid item >\r\n <FormControlLabel style={{marginLeft:24}} label='Interval' labelPlacement='start' disabled={props.disabled} control={\r\n <Select value={options.interval} onChange={(evt) => handleChange({interval:evt.target.value})} style={{width:80, marginLeft:16}} disabled={props.disabled}>\r\n <MenuItem value={5}>5</MenuItem>\r\n <MenuItem value={10}>10</MenuItem>\r\n <MenuItem value={15}>15</MenuItem>\r\n <MenuItem value={30}>30</MenuItem>\r\n <MenuItem value={60}>60</MenuItem>\r\n <MenuItem value={300}>300</MenuItem>\r\n </Select>\r\n } />\r\n </Grid>\r\n\r\n <Grid item>\r\n <FormControlLabel style={{marginLeft:24}} label=\"Depth&nbsp;&nbsp;&nbsp;&nbsp;\" labelPlacement='start' disabled={props.disabled} control={\r\n <Select value={options.depth} onChange={(evt) => handleChange({depth:evt.target.value})} style={{width:80, marginLeft:8}} disabled={props.disabled}>\r\n <MenuItem value={10}>10</MenuItem>\r\n <MenuItem value={50}>50</MenuItem>\r\n <MenuItem value={100}>100</MenuItem>\r\n </Select>\r\n } />\r\n </Grid>\r\n\r\n <Grid item >\r\n <FormControlLabel style={{marginLeft:24}} label=\"Chart\" labelPlacement='start' disabled={props.disabled} control={\r\n <Select value={options.chart} onChange={(evt) => handleChange({chart:evt.target.value})} style={{width:80, marginLeft:28}} disabled={props.disabled}>\r\n <MenuItem value={'value'}>Value</MenuItem>\r\n <MenuItem value={'line'}>Line</MenuItem>\r\n <MenuItem value={'area'}>Area</MenuItem>\r\n <MenuItem value={'bar'}>Bar</MenuItem>\r\n </Select>\r\n } />\r\n </Grid>\r\n <Grid item>\r\n <FormControlLabel control={<Checkbox checked={options.aggregate} onChange={(evt) => handleChange({aggregate:evt.target.checked})}/>} disabled={!multiAssets() || options.merge} label='Aggregate' style={{marginLeft:12}}/>\r\n </Grid>\r\n <Grid item>\r\n <FormControlLabel control={<Checkbox checked={options.merge} onChange={(evt) => handleChange({merge:evt.target.checked})}/>} disabled={!multiAssets() || options.aggregate || !'area bar'.includes(options.chart)} label='Merge' style={{marginLeft:12}}/>\r\n </Grid>\r\n <Grid item>\r\n <FormControlLabel control={<Checkbox checked={options.stack} onChange={(evt) => handleChange({stack:evt.target.checked})}/>} disabled={!options.merge || !('area bar'.includes(options.chart))} label='Stack' style={{marginLeft:12, marginBottom:16}}/>\r\n </Grid>\r\n <Grid item>\r\n <Typography style={{fontSize:9, marginLeft:22, marginTop:4, marginBottom:6}}>Powered by <a href='https://jfvilas.github.io/kwirth/' target='_blank' style={{color:'blue'}}>Kwirth</a></Typography>\r\n </Grid>\r\n </Grid>\r\n </>)\r\n}\r\n\r\nexport { Options }"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,23 +1,19 @@
1
- import * as react from 'react';
2
1
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
3
2
  import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api';
4
3
  import { Entity } from '@backstage/catalog-model';
5
4
  import { InstanceConfigScopeEnum } from '@jfvilas/kwirth-common';
6
- import { ClusterValidPods } from '@jfvilas/plugin-kwirth-common';
5
+ import { ClusterValidPods, IBackendInfo } from '@jfvilas/plugin-kwirth-common';
7
6
 
8
7
  declare const kwirthMetricsPlugin: _backstage_core_plugin_api.BackstagePlugin<{
9
8
  root: _backstage_core_plugin_api.RouteRef<undefined>;
10
9
  }, {}, {}>;
11
- declare const EntityKwirthMetricsContent: (props: {
12
- allMetrics: boolean;
13
- enableRestart: boolean;
14
- }) => react.JSX.Element;
10
+ declare const EntityKwirthMetricsContent: (props: any) => JSX.Element;
15
11
 
16
12
  interface KwirthMetricsApi {
17
13
  requestAccess(entity: Entity, channel: string, scopes: InstanceConfigScopeEnum[]): Promise<ClusterValidPods[]>;
18
14
  getResources(entity: Entity): Promise<ClusterValidPods>;
19
15
  getVersion(): Promise<string>;
20
- getInfo(): any;
16
+ getInfo(): Promise<IBackendInfo>;
21
17
  }
22
18
  declare const kwirthMetricsApiRef: _backstage_core_plugin_api.ApiRef<KwirthMetricsApi>;
23
19
 
@@ -29,13 +25,13 @@ declare class KwirthMetricsClient implements KwirthMetricsApi {
29
25
  private readonly discoveryApi;
30
26
  private readonly fetchApi;
31
27
  constructor(options: KwirthMetricsClientOptions);
32
- getInfo(): Promise<string>;
28
+ getInfo(): Promise<IBackendInfo>;
33
29
  getVersion(): Promise<string>;
34
30
  getResources(entity: Entity): Promise<ClusterValidPods>;
35
31
  requestAccess(entity: Entity, channel: string, scopes: InstanceConfigScopeEnum[]): Promise<ClusterValidPods[]>;
36
32
  }
37
33
 
38
- declare const VERSION = "0.12.9";
34
+ declare const VERSION = "0.13.2";
39
35
 
40
36
  export { EntityKwirthMetricsContent, KwirthMetricsClient, VERSION, kwirthMetricsApiRef, kwirthMetricsPlugin };
41
37
  export type { KwirthMetricsApi, KwirthMetricsClientOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\r\nCopyright 2024 Julio Fernandez\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\nimport { kwirthMetricsApiRef, KwirthMetricsClient } from './api';\r\nimport { createApiFactory, createPlugin, createRoutableExtension } from '@backstage/core-plugin-api';\r\nimport { discoveryApiRef, fetchApiRef } from '@backstage/core-plugin-api';\r\nimport { rootRouteRef } from './routes';\r\n\r\nexport const kwirthMetricsPlugin = createPlugin({\r\n id: 'kwirthmetrics', \r\n apis: [\r\n createApiFactory({\r\n api: kwirthMetricsApiRef,\r\n deps: {\r\n discoveryApi: discoveryApiRef,\r\n fetchApi: fetchApiRef,\r\n },\r\n factory({ discoveryApi, fetchApi }) {\r\n return new KwirthMetricsClient({ discoveryApi, fetchApi });\r\n },\r\n }),\r\n ],\r\n routes: {\r\n root: rootRouteRef\r\n }\r\n});\r\n\r\nexport const EntityKwirthMetricsContent = kwirthMetricsPlugin.provide(\r\n createRoutableExtension({\r\n name: 'EntityKwirthMetricsContent',\r\n component: () =>\r\n import('./components/EntityKwirthMetricsContent').then(m => m.EntityKwirthMetricsContent),\r\n mountPoint: rootRouteRef\r\n })\r\n);\r\n"],"names":[],"mappings":";;;;;AAoBO,MAAM,sBAAsB,YAAA,CAAa;AAAA,EAC9C,EAAA,EAAI,eAAA;AAAA,EACJ,IAAA,EAAM;AAAA,IACJ,gBAAA,CAAiB;AAAA,MACf,GAAA,EAAK,mBAAA;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,YAAA,EAAc,eAAA;AAAA,QACd,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,OAAA,CAAQ,EAAE,YAAA,EAAc,QAAA,EAAS,EAAG;AAClC,QAAA,OAAO,IAAI,mBAAA,CAAoB,EAAE,YAAA,EAAc,UAAU,CAAA;AAAA,MAC3D;AAAA,KACD;AAAA,GACH;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA;AAEV,CAAC;AAEM,MAAM,6BAA6B,mBAAA,CAAoB,OAAA;AAAA,EAC5D,uBAAA,CAAwB;AAAA,IACtB,IAAA,EAAM,4BAAA;AAAA,IACN,SAAA,EAAW,MACT,OAAO,gDAAyC,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,0BAA0B,CAAA;AAAA,IAC1F,UAAA,EAAY;AAAA,GACb;AACH;;;;"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\r\nCopyright 2024 Julio Fernandez\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\nimport { kwirthMetricsApiRef, KwirthMetricsClient } from './api';\r\nimport { createApiFactory, createPlugin, createRoutableExtension } from '@backstage/core-plugin-api';\r\nimport { discoveryApiRef, fetchApiRef } from '@backstage/core-plugin-api';\r\nimport { rootRouteRef } from './routes';\r\nimport { IKwirthMetricsProps } from './components/EntityKwirthMetricsContent';\r\n\r\nexport const kwirthMetricsPlugin = createPlugin({\r\n id: 'kwirthmetrics', \r\n apis: [\r\n createApiFactory({\r\n api: kwirthMetricsApiRef,\r\n deps: {\r\n discoveryApi: discoveryApiRef,\r\n fetchApi: fetchApiRef,\r\n },\r\n factory({ discoveryApi, fetchApi }) {\r\n return new KwirthMetricsClient({ discoveryApi, fetchApi });\r\n },\r\n }),\r\n ],\r\n routes: {\r\n root: rootRouteRef\r\n }\r\n})\r\n\r\nexport const EntityKwirthMetricsContent : (props: IKwirthMetricsProps) => JSX.Element = kwirthMetricsPlugin.provide(\r\n createRoutableExtension({\r\n name: 'EntityKwirthMetricsContent',\r\n component: () =>\r\n import('./components/EntityKwirthMetricsContent').then(m => m.EntityKwirthMetricsContent as (props: IKwirthMetricsProps) => JSX.Element),\r\n mountPoint: rootRouteRef\r\n })\r\n)\r\n"],"names":[],"mappings":";;;;;AAqBO,MAAM,sBAAsB,YAAA,CAAa;AAAA,EAC9C,EAAA,EAAI,eAAA;AAAA,EACJ,IAAA,EAAM;AAAA,IACJ,gBAAA,CAAiB;AAAA,MACf,GAAA,EAAK,mBAAA;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,YAAA,EAAc,eAAA;AAAA,QACd,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,OAAA,CAAQ,EAAE,YAAA,EAAc,QAAA,EAAS,EAAG;AAClC,QAAA,OAAO,IAAI,mBAAA,CAAoB,EAAE,YAAA,EAAc,UAAU,CAAA;AAAA,MAC3D;AAAA,KACD;AAAA,GACH;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA;AAEV,CAAC;AAEM,MAAM,6BAA2E,mBAAA,CAAoB,OAAA;AAAA,EAC1G,uBAAA,CAAwB;AAAA,IACtB,IAAA,EAAM,4BAAA;AAAA,IACN,SAAA,EAAW,MACT,OAAO,gDAAyC,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,0BAAyE,CAAA;AAAA,IACzI,UAAA,EAAY;AAAA,GACb;AACH;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jfvilas/plugin-kwirth-metrics",
3
- "version": "0.13.2",
3
+ "version": "0.13.4",
4
4
  "description": "Frontend plugin for viewing Kubernetes resource usage (metrics) in Backstage",
5
5
  "keywords": [
6
6
  "Backstage",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "repository": {
25
25
  "type": "git",
26
- "url": "https://github.com/jfvilas/plugin-kwirth-metrics"
26
+ "url": "git+https://github.com/jfvilas/plugin-kwirth-metrics.git"
27
27
  },
28
28
  "publishConfig": {
29
29
  "access": "public"