mirror of https://github.com/portainer/portainer
				
				
				
			
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
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;
 | 
						|
}
 |