/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.agent.server;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.core.model.machine.Machine;
import org.eclipse.che.api.workspace.shared.dto.WsAgentHealthStateDto;
/**
* Describes a mechanism for checking ws agent's state.
* It needs when Workspace Agent (WS Agent) stops to respond and projects disappear from the project tree,
* and the page shows 'Cannot get project types' error.
* It may happens for example, when OOM happens in a WS Agent and kernel kills WS Agent process.
* Problem here that we can't detect properly OOM error but we can check if WS Agent is alive for user.
* <p>
* If client (IDE) lost WebSocket connection to the WS Agent - in this case IDE will request some other service in our infrastructure to
* check WS Agent state, here we have two ways:
* <p>
* 1/ WS Agent was shutdown by OS. If it not available for this service too, a user should be notified that the workspace is broken
* probably because of OOM (it will be just suggest because we not sure about reason).
* <p>
* 2/ WS Agent is working well and is accessible for our infrastructure, in this case user has networking problem. It can be not
* well configured proxy server or other problems which are not related to our responsibility.
*
* @author Vitalii Parfonov
*/
public interface WsAgentHealthChecker {
/**
* Verifies if ws agent is alive.
*
* @param machine
* machine instance
* @return state of the ws agent
* @throws ServerException
* if internal server error occurred
*/
WsAgentHealthStateDto check(Machine machine) throws ServerException;
}