1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-05 05:45:22 +02:00

fix(homepage) move heartbeat logic to backend EE-5317 (#8737)

This commit is contained in:
cmeng 2023-04-06 09:09:22 +12:00 committed by GitHub
parent 8c5edd2c97
commit b00aa68c2b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 52 additions and 70 deletions

View file

@ -1,7 +1,6 @@
import { Activity } from 'lucide-react';
import { isoDateFromTimestamp } from '@/portainer/filters/filters';
import { useHasHeartbeat } from '@/react/edge/hooks/useHasHeartbeat';
import { Environment } from '@/react/portainer/environments/types';
import { EnvironmentStatusBadgeItem } from './EnvironmentStatusBadgeItem';
@ -13,14 +12,9 @@ interface Props {
export function EdgeIndicator({
environment,
showLastCheckInDate = false,
}: Props) {
const isValid = useHasHeartbeat(environment);
if (isValid === null) {
return null;
}
const heartbeat = environment.Heartbeat;
const associated = !!environment.EdgeID;
if (!associated) {
@ -40,8 +34,8 @@ export function EdgeIndicator({
className="flex items-center gap-1"
>
<EnvironmentStatusBadgeItem
color={isValid ? 'success' : 'danger'}
icon={isValid ? 'svg-heartbeatup' : 'svg-heartbeatdown'}
color={heartbeat ? 'success' : 'danger'}
icon={heartbeat ? 'svg-heartbeatup' : 'svg-heartbeatdown'}
aria-label="edge-heartbeat"
>
heartbeat

View file

@ -1,61 +0,0 @@
import { Environment } from '@/react/portainer/environments/types';
import { usePublicSettings } from '@/react/portainer/settings/queries';
import { PublicSettingsResponse } from '@/react/portainer/settings/types';
export function useHasHeartbeat(environment: Environment) {
const associated = !!environment.EdgeID;
const settingsQuery = usePublicSettings({ enabled: associated });
if (!associated) {
return false;
}
const { LastCheckInDate, QueryDate } = environment;
const settings = settingsQuery.data;
if (!settings) {
return null;
}
const checkInInterval = getCheckinInterval(environment, settings);
if (checkInInterval && QueryDate && LastCheckInDate) {
return QueryDate - LastCheckInDate <= checkInInterval * 2 + 20;
}
return false;
}
function getCheckinInterval(
environment: Environment,
settings: PublicSettingsResponse
) {
const asyncMode = environment.Edge.AsyncMode;
if (asyncMode) {
const intervals = [
environment.Edge.PingInterval > 0
? environment.Edge.PingInterval
: settings.Edge.PingInterval,
environment.Edge.SnapshotInterval > 0
? environment.Edge.SnapshotInterval
: settings.Edge.SnapshotInterval,
environment.Edge.CommandInterval > 0
? environment.Edge.CommandInterval
: settings.Edge.CommandInterval,
].filter((n) => n > 0);
return intervals.length > 0 ? Math.min(...intervals) : 60;
}
if (
!environment.EdgeCheckinInterval ||
environment.EdgeCheckinInterval === 0
) {
return settings.Edge.CheckinInterval;
}
return environment.EdgeCheckinInterval;
}

View file

@ -144,6 +144,7 @@ export type Environment = {
EdgeKey: string;
EdgeCheckinInterval?: number;
QueryDate?: number;
Heartbeat?: boolean;
LastCheckInDate?: number;
Name: string;
Status: EnvironmentStatus;