diff --git a/.release-please-manifest.json b/.release-please-manifest.json index a23c78a67..158771a16 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "8.9.0" + ".": "8.10.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c93e70b9..c545255dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [8.10.0](https://github.com/ydb-platform/ydb-embedded-ui/compare/v8.9.0...v8.10.0) (2025-02-12) + + +### Features + +* **HealthcheckPreview:** manual fetch for ydb_ru ([#1937](https://github.com/ydb-platform/ydb-embedded-ui/issues/1937)) ([6b1cac8](https://github.com/ydb-platform/ydb-embedded-ui/commit/6b1cac892e8afa5f06c9cf6437c76fe7ba13ac18)) + + +### Bug Fixes + +* add monaco-yql-languages to peer deps ([#1932](https://github.com/ydb-platform/ydb-embedded-ui/issues/1932)) ([40b803c](https://github.com/ydb-platform/ydb-embedded-ui/commit/40b803cce83414078a22518ac6183ed0b544099b)) + ## [8.9.0](https://github.com/ydb-platform/ydb-embedded-ui/compare/v8.8.0...v8.9.0) (2025-02-11) diff --git a/package-lock.json b/package-lock.json index 0c140737c..d02cc5a1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ydb-embedded-ui", - "version": "8.9.0", + "version": "8.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ydb-embedded-ui", - "version": "8.9.0", + "version": "8.10.0", "dependencies": { "@bem-react/classname": "^1.6.0", "@ebay/nice-modal-react": "^1.2.13", diff --git a/package.json b/package.json index 71fcce2a8..7c52d8c67 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ydb-embedded-ui", - "version": "8.9.0", + "version": "8.10.0", "files": [ "dist" ], @@ -165,7 +165,8 @@ "peerDependencies": { "prop-types": "^15.8.1", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "monaco-yql-languages": ">=1.3.0" }, "overrides": { "fork-ts-checker-webpack-plugin": "^9.0.2", diff --git a/src/components/AutoRefreshControl/AutoRefreshControl.tsx b/src/components/AutoRefreshControl/AutoRefreshControl.tsx index ce24725ae..c26ea3425 100644 --- a/src/components/AutoRefreshControl/AutoRefreshControl.tsx +++ b/src/components/AutoRefreshControl/AutoRefreshControl.tsx @@ -13,9 +13,10 @@ const b = cn('auto-refresh-control'); interface AutoRefreshControlProps { className?: string; + onManualRefresh?: () => void; } -export function AutoRefreshControl({className}: AutoRefreshControlProps) { +export function AutoRefreshControl({className, onManualRefresh}: AutoRefreshControlProps) { const dispatch = useTypedDispatch(); const [autoRefreshInterval, setAutoRefreshInterval] = useAutoRefreshInterval(); return ( @@ -24,6 +25,7 @@ export function AutoRefreshControl({className}: AutoRefreshControlProps) { view="flat-secondary" onClick={() => { dispatch(api.util.invalidateTags(['All'])); + onManualRefresh?.(); }} extraProps={{'aria-label': i18n('Refresh')}} > diff --git a/src/containers/Tenant/Diagnostics/Diagnostics.tsx b/src/containers/Tenant/Diagnostics/Diagnostics.tsx index 98cddb400..ead4ae3a4 100644 --- a/src/containers/Tenant/Diagnostics/Diagnostics.tsx +++ b/src/containers/Tenant/Diagnostics/Diagnostics.tsx @@ -174,7 +174,13 @@ function Diagnostics(props: DiagnosticsProps) { }} allowNotSelected={true} /> - <AutoRefreshControl /> + <AutoRefreshControl + onManualRefresh={() => { + //this is needed to collect healthcheck if it is disabled by default https://github.com/ydb-platform/ydb-embedded-ui/issues/1889 + const event = new CustomEvent('diagnosticsRefresh'); + document.dispatchEvent(event); + }} + /> </div> </div> ); diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx index 3bcf03adc..a5ea1043e 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { CircleCheck, CircleInfo, @@ -15,7 +17,7 @@ import {useClusterBaseInfo} from '../../../../../store/reducers/cluster/cluster' import {healthcheckApi} from '../../../../../store/reducers/healthcheckInfo/healthcheckInfo'; import {SelfCheckResult} from '../../../../../types/api/healthcheck'; import {cn} from '../../../../../utils/cn'; -import {useAutoRefreshInterval} from '../../../../../utils/hooks'; +import {useAutoRefreshInterval, useTypedSelector} from '../../../../../utils/hooks'; import i18n from './i18n'; @@ -42,8 +44,11 @@ export function HealthcheckPreview(props: HealthcheckPreviewProps) { const {tenantName, active} = props; const [autoRefreshInterval] = useAutoRefreshInterval(); + const {metricsTab} = useTypedSelector((state) => state.tenant); + const {name} = useClusterBaseInfo(); - const healthcheckPreviewAutorefreshDisabled = name === 'ydb_ru'; + + const healthcheckPreviewDisabled = name === 'ydb_ru'; const { currentData: data, @@ -53,13 +58,34 @@ export function HealthcheckPreview(props: HealthcheckPreviewProps) { {database: tenantName}, { //FIXME https://github.com/ydb-platform/ydb-embedded-ui/issues/1889 - pollingInterval: healthcheckPreviewAutorefreshDisabled - ? undefined - : autoRefreshInterval, + pollingInterval: healthcheckPreviewDisabled ? undefined : autoRefreshInterval, + skip: healthcheckPreviewDisabled, }, ); - const loading = isFetching && data === undefined; + const [getHealthcheckQuery, {currentData: manualData, isFetching: isFetchingManually}] = + healthcheckApi.useLazyGetHealthcheckInfoQuery(); + + React.useEffect(() => { + if (metricsTab === 'healthcheck' && healthcheckPreviewDisabled) { + getHealthcheckQuery({database: tenantName}); + } + }, [metricsTab, healthcheckPreviewDisabled, tenantName, getHealthcheckQuery]); + + React.useEffect(() => { + const fetchHealthcheck = () => { + if (healthcheckPreviewDisabled) { + getHealthcheckQuery({database: tenantName}); + } + }; + document.addEventListener('diagnosticsRefresh', fetchHealthcheck); + return () => { + document.removeEventListener('diagnosticsRefresh', fetchHealthcheck); + }; + }, [tenantName, healthcheckPreviewDisabled, getHealthcheckQuery]); + + const loading = + (isFetching && data === undefined) || (isFetchingManually && manualData === undefined); const renderHeader = () => { return ( @@ -67,9 +93,9 @@ export function HealthcheckPreview(props: HealthcheckPreviewProps) { <div className={b('preview-title-wrapper')}> <div className={b('preview-title')}>{i18n('title.healthcheck')}</div> {/* FIXME https://github.com/ydb-platform/ydb-embedded-ui/issues/1889 */} - {autoRefreshInterval && healthcheckPreviewAutorefreshDisabled ? ( + {healthcheckPreviewDisabled ? ( <Popover - content={'Autorefresh is disabled. Please update healthcheck manually.'} + content={'Healthcheck is disabled. Please update healthcheck manually.'} placement={['top']} className={b('icon-wrapper')} > @@ -96,7 +122,8 @@ export function HealthcheckPreview(props: HealthcheckPreviewProps) { return <Loader size="m" />; } - const selfCheckResult = data?.self_check_result || SelfCheckResult.UNSPECIFIED; + const selfCheckResult = + data?.self_check_result || manualData?.self_check_result || SelfCheckResult.UNSPECIFIED; const modifier = selfCheckResult.toLowerCase(); return ( <div className={b('preview-content')}>