de.openknowledge.cdi.monitoring.HealthStatusQueryCommand.java Source code

Java tutorial

Introduction

Here is the source code for de.openknowledge.cdi.monitoring.HealthStatusQueryCommand.java

Source

/*
 * Copyright open knowledge GmbH
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package de.openknowledge.cdi.monitoring;

import org.apache.commons.lang.SystemUtils;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * This event collects the current health status of valid server
 * components. Observers should add their status.
 * <p/>
 * Tested components should register their current status using {@link #reportStatus(ComponentStatus)}.
 *
 * @author Jens Schumann - OpenKnowledge GmbH
 * @version $Revision: 7797 $
 */
public class HealthStatusQueryCommand {

    private Map<ComponentStatusType, Set<ComponentStatus>> status = new HashMap<ComponentStatusType, Set<ComponentStatus>>();

    public HealthStatusQueryCommand() {
        status.put(ComponentStatusType.ERROR, new HashSet<ComponentStatus>());
        status.put(ComponentStatusType.WARNING, new HashSet<ComponentStatus>());
        status.put(ComponentStatusType.OK, new HashSet<ComponentStatus>());
    }

    public void reportStatus(ComponentStatus aStatus) {
        status.get(aStatus.getStatus()).add(aStatus);
    }

    public boolean hasErrors() {
        return status.get(ComponentStatusType.ERROR).size() > 0;
    }

    public boolean hasWarnings() {
        return status.get(ComponentStatusType.WARNING).size() > 0;
    }

    public boolean isOK() {
        return !hasErrors() && !hasWarnings();
    }

    public Map<ComponentStatusType, Set<ComponentStatus>> getStatus() {
        return Collections.unmodifiableMap(status);
    }

    public String toString() {
        StringBuffer buffer = new StringBuffer();
        if (isOK()) {
            buffer.append("OK");
        } else {
            appendAll(buffer, status.get(ComponentStatusType.ERROR));
            appendAll(buffer, status.get(ComponentStatusType.WARNING));
            appendAll(buffer, status.get(ComponentStatusType.OK));
        }
        return buffer.toString();
    }

    private void appendAll(StringBuffer aBuffer, Set<ComponentStatus> aComponentStatuses) {
        for (ComponentStatus status : aComponentStatuses) {
            aBuffer.append(status);
            aBuffer.append(SystemUtils.LINE_SEPARATOR);
        }
    }
}