diff --git a/ui/src/app/components/search/SearchStatus.js b/ui/src/app/components/search/SearchStatus.js index 571bf6a..331d7ce 100644 --- a/ui/src/app/components/search/SearchStatus.js +++ b/ui/src/app/components/search/SearchStatus.js @@ -1,6 +1,9 @@ +import { useMemo } from 'react'; + import moment from 'moment'; - +import { useRouteServersMap } + from 'app/context/route-servers'; import { useApiStatus } from 'app/context/api-status'; import { useRoutesLoading } @@ -12,6 +15,37 @@ import RelativeTime from 'app/components/datetime/RelativeTime'; +const RefreshIncomplete = () => { + const routeServers = useRouteServersMap(); + const status = useApiStatus(); + const sources = status.store?.routes?.sources; + + let notInitialized = useMemo(() => { + let missing = []; + for (const id in sources) { + if (sources[id].initialized) { + continue; + } + missing.push(routeServers[id].name); + } + return missing; + }, [routeServers, sources]); + + + return ( + <> +

+ Routes refresh was incomplete and results are missing + from: +

+ + {notInitialized.map((name) => + {name}
+ )} +
+ + ); +} const RefreshState = () => { @@ -23,7 +57,17 @@ const RefreshState = () => { const cachedAt = moment.utc(status.cachedAt); const cacheTtl = moment.utc(status.ttlTime); + const storeInitialized = status.store?.routes?.initialized === true; + if (cacheTtl.isBefore(moment.utc())) { + if (!storeInitialized) { + return ( +
  • + Routes cache is currently being refreshed. +
  • + ); + } + // This means cache is currently being rebuilt return (
  • @@ -37,6 +81,15 @@ const RefreshState = () => { ); } + if (!storeInitialized) { + return ( +
  • + + Next refresh in . +
  • + ); + } + return (
  • Routes cache was built diff --git a/ui/src/app/context/api-status.js b/ui/src/app/context/api-status.js index 29183b4..5b04407 100644 --- a/ui/src/app/context/api-status.js +++ b/ui/src/app/context/api-status.js @@ -35,6 +35,7 @@ export const ApiStatusProvider = ({children, api}) => { generatedAt: generatedAt, age: age, requestDurationMs: api.request_duration_ms, + store: api.store_status, }; }