All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.sovaj.heartbeat.monitors.HTTPMonitor Maven / Gradle / Ivy

The newest version!

package io.sovaj.heartbeat.monitors;

import io.sovaj.heartbeat.api.AbstractMonitor;
import io.sovaj.heartbeat.api.TestElement;
import io.sovaj.heartbeat.api.Type;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;

/**
 * Cette classe teste une ressource HTTP.
 */
public class HTTPMonitor extends AbstractMonitor {

    /**
     * Time out par d�faut.
     */
    private static final int DEFAULT_TIMEOUT = 10000;

    /**
     * Message d'erreur.
     */
    private static final String MSG_HTTP_RESOURCE_NOT_FOUND = "HTTP resource not found: ";

    /**
     * Message d'erreur.
     */
    private static final String MSG_NO_URL = "no URL set for HTTPMonitor";

    /**
     * URL de la ressource HTTP � tester.
     */
    private String url;

    /**
     * Liste de code retour HTTP valides pour le test.
     */
    private Set okCodes;

    /**
     * Temps d'attente maximum pour �tablir une connexion. Une valeur de 0
     * indique un temps infini. Valeur en milliseconds.
     */
    private int connectionTimeout = DEFAULT_TIMEOUT;

    /**
     * Temps d'attente maximum pour recevoir des donn�es. Une valeur de 0
     * indique un temps infini. Valeur en milliseconds.
     */
    private int socketTimeout = DEFAULT_TIMEOUT;

    /**
     * Constructeur par d�faut. Il n'est pas conseill� de l'utiliser, sauf via
     * Spring.
     */
    public HTTPMonitor() {
        super("HTTP lookup", Type.URL);
    }

    /**
     * Cr�ation d'un {@link HTTPMonitor}
     * 
     * @param aURL URL de la ressource HTTP � tester
     * @param aOKCodes proprit�t�s d'environnement de la queue JMS
     */
    public HTTPMonitor(String aURL, Set aOKCodes) {
        this(aURL, aOKCodes, null);
    }

    /**
     * Cr�ation d'un {@link HTTPMonitor}
     * 
     * @param aURL URL de la ressource HTTP � tester
     * @param aOKCodes proprit�t�s d'environnement de la queue JMS
     * @param desc description du test
     */
    public HTTPMonitor(String aURL, Set aOKCodes, String desc) {
        super("HTTP lookup,URL=" + aURL, Type.URL, desc);
        this.url = aURL;
        this.okCodes = aOKCodes;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void doMonitor(TestElement monitoredElement) {

        // V�rification du param�trage du monitor :
        if (this.url == null || this.url.length() == 0) {
            monitoredElement.setTestIsKo(MSG_NO_URL);
        } else {

            // initialisation par d�faut des codes retours valides
            // si non d�finis
            if (okCodes == null || okCodes.isEmpty()) {
                okCodes = new HashSet();
                okCodes.add("200");
            }

            HttpURLConnection urlConn = null;
            try {
                final URL myUrl = new URL(url);
                urlConn = (HttpURLConnection ) myUrl.openConnection();
                urlConn.setConnectTimeout(connectionTimeout);
                urlConn.setReadTimeout(socketTimeout);
                urlConn.connect();

                if (okCodes.contains(String.valueOf(urlConn.getResponseCode()))) {
                    monitoredElement.setTestIsOk();
                } else {
                    monitoredElement.setTestIsKo(getResourceNotFoundErrorMsg());
                }

            } catch (SocketTimeoutException ex) {
                monitoredElement.setTestIsKo(getResourceNotFoundErrorMsg(), ex);
            } catch (IOException ex) {
                monitoredElement.setTestIsKo(getResourceNotFoundErrorMsg(), ex);
            } finally {
                if (urlConn != null) {
                    urlConn.disconnect();
                }
            }
        }
    }

    /**
     * Construction d'un message d'erreur de type "resource not found".
     * 
     * @return message d'erreur
     */
    private String getResourceNotFoundErrorMsg() {
        return String.format(MSG_HTTP_RESOURCE_NOT_FOUND + "'%s'", url);
    }

    /**
     * @param url the url to set
     */
    public void setUrl(String url) {
        this.url = url;
    }

    /**
     * @param okCodes the okCodes to set
     */
    public void setOkCodes(Set okCodes) {
        this.okCodes = okCodes;
    }

    /**
     * @param connectionTimeout the connectionTimeout to set
     */
    public void setConnectionTimeout(int connectionTimeout) {
        this.connectionTimeout = connectionTimeout;
    }

    /**
     * @param socketTimeout the socketTimeout to set
     */
    public void setSocketTimeout(int socketTimeout) {
        this.socketTimeout = socketTimeout;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy