1+ import React from 'react' ;
2+
13import {
24 CircleCheck ,
35 CircleInfo ,
@@ -15,7 +17,7 @@ import {useClusterBaseInfo} from '../../../../../store/reducers/cluster/cluster'
1517import { healthcheckApi } from '../../../../../store/reducers/healthcheckInfo/healthcheckInfo' ;
1618import { SelfCheckResult } from '../../../../../types/api/healthcheck' ;
1719import { cn } from '../../../../../utils/cn' ;
18- import { useAutoRefreshInterval } from '../../../../../utils/hooks' ;
20+ import { useAutoRefreshInterval , useTypedSelector } from '../../../../../utils/hooks' ;
1921
2022import i18n from './i18n' ;
2123
@@ -42,34 +44,57 @@ export function HealthcheckPreview(props: HealthcheckPreviewProps) {
4244 const { tenantName, active} = props ;
4345 const [ autoRefreshInterval ] = useAutoRefreshInterval ( ) ;
4446
47+ const { metricsTab} = useTypedSelector ( ( state ) => state . tenant ) ;
48+
4549 const { name} = useClusterBaseInfo ( ) ;
46- const healthcheckPreviewAutorefreshDisabled = name === 'ydb_ru' ;
50+
51+ const healthcheckPreviewDisabled = name === 'ydb_ru' ;
4752
4853 const {
4954 currentData : data ,
5055 isFetching,
5156 error,
5257 } = healthcheckApi . useGetHealthcheckInfoQuery (
53- { database : tenantName } ,
58+ { database : tenantName , disabled : healthcheckPreviewDisabled } ,
5459 {
5560 //FIXME https://github.com/ydb-platform/ydb-embedded-ui/issues/1889
56- pollingInterval : healthcheckPreviewAutorefreshDisabled
57- ? undefined
58- : autoRefreshInterval ,
61+ pollingInterval : healthcheckPreviewDisabled ? undefined : autoRefreshInterval ,
5962 } ,
6063 ) ;
6164
62- const loading = isFetching && data === undefined ;
65+ const [ getHealthcheckQuery , { currentData : manualData , isFetching : isFetchingManually } ] =
66+ healthcheckApi . useLazyGetHealthcheckInfoQuery ( ) ;
67+
68+ React . useEffect ( ( ) => {
69+ if ( metricsTab === 'healthcheck' && healthcheckPreviewDisabled ) {
70+ getHealthcheckQuery ( { database : tenantName } ) ;
71+ }
72+ } , [ metricsTab , healthcheckPreviewDisabled , tenantName , getHealthcheckQuery ] ) ;
73+
74+ React . useEffect ( ( ) => {
75+ const fetchHealthcheck = ( ) => {
76+ if ( healthcheckPreviewDisabled ) {
77+ getHealthcheckQuery ( { database : tenantName } ) ;
78+ }
79+ } ;
80+ document . addEventListener ( 'diagnosticsRefresh' , fetchHealthcheck ) ;
81+ return ( ) => {
82+ document . removeEventListener ( 'diagnosticsRefresh' , fetchHealthcheck ) ;
83+ } ;
84+ } , [ tenantName , healthcheckPreviewDisabled , getHealthcheckQuery ] ) ;
85+
86+ const loading =
87+ ( isFetching && data === undefined ) || ( isFetchingManually && manualData === undefined ) ;
6388
6489 const renderHeader = ( ) => {
6590 return (
6691 < div className = { b ( 'preview-header' ) } >
6792 < div className = { b ( 'preview-title-wrapper' ) } >
6893 < div className = { b ( 'preview-title' ) } > { i18n ( 'title.healthcheck' ) } </ div >
6994 { /* FIXME https://github.com/ydb-platform/ydb-embedded-ui/issues/1889 */ }
70- { autoRefreshInterval && healthcheckPreviewAutorefreshDisabled ? (
95+ { healthcheckPreviewDisabled ? (
7196 < Popover
72- content = { 'Autorefresh is disabled. Please update healthcheck manually.' }
97+ content = { 'Healthcheck is disabled. Please update healthcheck manually.' }
7398 placement = { [ 'top' ] }
7499 className = { b ( 'icon-wrapper' ) }
75100 >
@@ -96,7 +121,8 @@ export function HealthcheckPreview(props: HealthcheckPreviewProps) {
96121 return < Loader size = "m" /> ;
97122 }
98123
99- const selfCheckResult = data ?. self_check_result || SelfCheckResult . UNSPECIFIED ;
124+ const selfCheckResult =
125+ data ?. self_check_result || manualData ?. self_check_result || SelfCheckResult . UNSPECIFIED ;
100126 const modifier = selfCheckResult . toLowerCase ( ) ;
101127 return (
102128 < div className = { b ( 'preview-content' ) } >
0 commit comments