11import React , { useEffect , useState } from 'react'
22import { ClusterOverviewProps , DescriptionDataType , ERROR_TYPE } from './types'
33import { ReactComponent as Error } from '../../assets/icons/ic-error-exclamation.svg'
4+ import { ReactComponent as QuestionFilled } from '../../assets/icons/ic-help.svg'
5+ import { ReactComponent as TippyIcon } from '../../assets/icons/ic-help-outline.svg'
46import { getClusterNote } from './clusterNodes.service'
57import { generatePath , useHistory , useParams , useRouteMatch } from 'react-router-dom'
68import GenericDescription from '../common/Description/GenericDescription'
79import { defaultClusterNote } from './constants'
810import moment from 'moment'
9- import { Moment12HourFormat } from '../../config'
10- import { ErrorScreenManager , Progressing , showError } from '@devtron-labs/devtron-fe-common-lib'
11+ import { Moment12HourFormat , URLS } from '../../config'
12+ import {
13+ ErrorScreenManager ,
14+ Progressing ,
15+ TippyCustomized ,
16+ TippyTheme ,
17+ showError ,
18+ } from '@devtron-labs/devtron-fe-common-lib'
1119import { K8S_EMPTY_GROUP , SIDEBAR_KEYS } from '../ResourceBrowser/Constants'
1220import { unauthorizedInfoText } from '../ResourceBrowser/ResourceList/ClusterSelector'
1321
@@ -32,7 +40,20 @@ export default function ClusterOverview({
3240 const history = useHistory ( )
3341 const { path } = useRouteMatch ( )
3442 const [ errorCode , setErrorCode ] = useState ( 0 )
35-
43+ const metricsApiTippyContent = ( ) => (
44+ < div className = "dc__align-left dc__word-break dc__hyphens-auto fs-13 fw-4 lh-20 p-12" >
45+ Devtron uses Kubernetes’s
46+ < a
47+ href = "https://kubernetes.io/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#metrics-api"
48+ rel = "noreferrer noopener"
49+ target = "_blank"
50+ >
51+ Metrics API
52+ </ a >
53+ to show CPU and Memory Capacity. Please install metrics-server in this cluster to display CPU and
54+ Memory Capacity.
55+ </ div >
56+ )
3657 useEffect ( ( ) => {
3758 setIsLoading ( true )
3859 if ( errorStatusCode > 0 ) return
@@ -141,54 +162,81 @@ export default function ClusterOverview({
141162 )
142163 }
143164
165+ const tippyForMetricsApi = ( ) => {
166+ return (
167+ < >
168+ < span > NA</ span >
169+ < TippyCustomized
170+ theme = { TippyTheme . white }
171+ className = "w-300 h-100 fcv-5 dc__align-left"
172+ placement = "bottom"
173+ Icon = { QuestionFilled }
174+ heading = 'Metrics API is not available'
175+ showCloseButton = { true }
176+ trigger = "click"
177+ additionalContent = { metricsApiTippyContent ( ) }
178+ interactive = { true }
179+ documentationLinkText = "View metrics-server helm chart"
180+ documentationLink = { `/dashboard/${ URLS . CHARTS_DISCOVER } /?appStoreName=metrics-server` }
181+ >
182+ < TippyIcon className = "icon-dim-20 ml-8 cursor fcn-5" />
183+ </ TippyCustomized >
184+ </ >
185+ )
186+ }
187+
144188 const renderCardDetails = ( ) => {
145189 return (
146190 < div className = "flexbox dc__content-space pb-16" >
147191 < div className = "flexbox dc__content-space mr-16 w-50 p-16 bcn-0 br-4 en-2 bw-1" >
148192 < div className = "mr-16 w-25" >
149- < div className = "dc__align-center fs-13 fw-4 cn-7" > CPU Usage</ div >
150- < div className = "dc__align-center fs-24 fw-4 cn-9" >
151- { clusterCapacityData ?. cpu ?. usagePercentage }
193+ < div className = "dc__align-left fs-13 fw-4 cn-7" > CPU Usage</ div >
194+ < div className = "dc__align-left fs-24 fw-4 cn-9" >
195+ { clusterCapacityData ?. cpu ?. usagePercentage
196+ ? clusterCapacityData ?. cpu ?. usagePercentage
197+ : tippyForMetricsApi ( ) }
152198 </ div >
153199 </ div >
154200 < div className = "mr-16 w-25" >
155- < div className = "dc__align-center fs-13 fw-4 cn-7" > CPU Capacity</ div >
156- < div className = "dc__align-center fs-24 fw-4 cn-9" > { clusterCapacityData ?. cpu ?. capacity } </ div >
201+ < div className = "dc__align-left fs-13 fw-4 cn-7" > CPU Capacity</ div >
202+ < div className = "dc__align-left fs-24 fw-4 cn-9" > { clusterCapacityData ?. cpu ?. capacity } </ div >
157203 </ div >
158204 < div className = "mr-16 w-25" >
159- < div className = "dc__align-center fs-13 fw-4 cn-7" > CPU Requests</ div >
160- < div className = "dc__align-center fs-24 fw-4 cn-9" >
205+ < div className = "dc__align-left fs-13 fw-4 cn-7" > CPU Requests</ div >
206+ < div className = "dc__align-left fs-24 fw-4 cn-9" >
161207 { clusterCapacityData ?. cpu ?. requestPercentage }
162208 </ div >
163209 </ div >
164210 < div className = "w-25" >
165- < div className = "dc__align-center fs-13 fw-4 cn-7" > CPU Limits</ div >
166- < div className = "dc__align-center fs-24 fw-4 cn-9" >
211+ < div className = "dc__align-left fs-13 fw-4 cn-7" > CPU Limits</ div >
212+ < div className = "dc__align-left fs-24 fw-4 cn-9" >
167213 { clusterCapacityData ?. cpu ?. limitPercentage }
168214 </ div >
169215 </ div >
170216 </ div >
171217
172218 < div className = "flexbox dc__content-space w-50 p-16 bcn-0 br-4 en-2 bw-1" >
173219 < div className = "mr-16 w-25" >
174- < div className = "dc__align-center fs-13 fw-4 cn-7" > Memory Usage</ div >
175- < div className = "dc__align-center fs-24 fw-4 cn-9" >
176- { clusterCapacityData ?. memory ?. usagePercentage }
220+ < div className = "dc__align-left fs-13 fw-4 cn-7" > Memory Usage</ div >
221+ < div className = "dc__align-left fs-24 fw-4 cn-9" >
222+ { clusterCapacityData ?. memory ?. usagePercentage
223+ ? clusterCapacityData ?. memory ?. usagePercentage
224+ : tippyForMetricsApi ( ) }
177225 </ div >
178226 </ div >
179227 < div className = "mr-16 w-25" >
180- < div className = "dc__align-center fs-13 fw-4 cn-7" > Memory Capacity</ div >
181- < div className = "dc__align-center fs-24 fw-4 cn-9" > { clusterCapacityData ?. memory ?. capacity } </ div >
228+ < div className = "dc__align-left fs-13 fw-4 cn-7" > Memory Capacity</ div >
229+ < div className = "dc__align-left fs-24 fw-4 cn-9" > { clusterCapacityData ?. memory ?. capacity } </ div >
182230 </ div >
183231 < div className = "mr-16 w-25" >
184- < div className = "dc__align-center fs-13 fw-4 cn-7" > Memory Requests</ div >
185- < div className = "dc__align-center fs-24 fw-4 cn-9" >
232+ < div className = "dc__align-left fs-13 fw-4 cn-7" > Memory Requests</ div >
233+ < div className = "dc__align-left fs-24 fw-4 cn-9" >
186234 { clusterCapacityData ?. memory ?. requestPercentage }
187235 </ div >
188236 </ div >
189237 < div className = "w-25" >
190- < div className = "dc__align-center fs-13 fw-4 cn-7" > Memory Limits</ div >
191- < div className = "dc__align-center fs-24 fw-4 cn-9" >
238+ < div className = "dc__align-left fs-13 fw-4 cn-7" > Memory Limits</ div >
239+ < div className = "dc__align-left fs-24 fw-4 cn-9" >
192240 { clusterCapacityData ?. memory ?. limitPercentage }
193241 </ div >
194242 </ div >
0 commit comments