/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.monitoring.system.api;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import de.rcenvironment.core.communication.common.InstanceNodeSessionId;
import de.rcenvironment.core.communication.common.ResolvableNodeId;
import de.rcenvironment.core.monitoring.system.api.model.SystemLoadInformation;
/**
* Local query methods for aggregated monitoring data.
*
* @author Robert Mischke
*/
public interface LocalSystemMonitoringAggregationService {
/**
* The polling interval for CPU and RAM load data; currently hard-coded.
*/
int SYSTEM_LOAD_INFORMATION_COLLECTION_INTERVAL_MSEC = 1000;
/**
* The default minimum time in msec that should be accepted between two subsequent update events; if update events arrive faster than
* that, the later ones should be ignored.
*/
int MINIMUM_TIME_DELTA_TO_ACCEPT_BETWEEN_UPDATES = 500;
/**
* The default maximum time in msec that is allowed to pass between two subsequent update events before a collector should consider the
* data sequence "broken" and start over, ie discard all previous data.
*/
int MAXIMUM_TIME_DELTA_TO_ACCEPT_BEFORE_STARTING_OVER = 5000;
/**
* Fetches {@link SystemLoadInformation} objects from the specified nodes, while limiting their response times to a specified value. If
* a node does not respond within this time, the returned map will not contain any data for it.
*
* @param <T> the node id type to use
* @param nodes the {@link InstanceNodeSessionId}s of the nodes to query
* @param timeSpanMsec the maximum time span to aggregate monitoring data (e.g. CPU load) over, in msec
* @param timeLimitMsec the maximum time to wait for an individual node's response, in msec
* @return a map of the nodes that responded in time to their returned {@link SystemLoadInformation} objects
* @throws TimeoutException on unexpected errors during asynchronous task execution
* @throws ExecutionException on unexpected errors during asynchronous task execution
* @throws InterruptedException on interruption while waiting for asynchronous task execution
*/
<T extends ResolvableNodeId> Map<T, SystemLoadInformation> collectSystemMonitoringDataWithTimeLimit(
Set<T> nodes, int timeSpanMsec, int timeLimitMsec) throws InterruptedException, ExecutionException, TimeoutException;
}