package com.thinkbiganalytics.servicemonitor.model; /*- * #%L * thinkbig-service-monitor-api * %% * Copyright (C) 2017 ThinkBig Analytics * %% * 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. * #L% */ import java.util.Date; import java.util.List; import java.util.Map; /** * A service can monitor 1 or more components. * Each component has its own health status along with the overal Service health status */ public interface ServiceComponent { String DEFAULT_CLUSTER = "Default"; /** * Returns the Highest/Most severe alert state for alerts found on this component */ ServiceAlert.STATE getHighestAlertState(); /** * Get any additional properties to display on the Kylo UI for the service component */ Map<String, Object> getProperties(); /** * @return the associated service name for this component */ String getServiceName(); void setServiceName(String serviceName); /** * @return the name for this component */ String getName(); /** * @return true if healthy, false if unhealthy */ boolean isHealthy(); /** * @return the date last checked */ Date getCheckDate(); /** * @return a message indicating some description of this component and alert status */ String getMessage(); /** * Get the state of this component * * @return the state of the component */ STATE getState(); /** * Get associated alerts for this component * * @return a list of alert objects */ List<ServiceAlert> getAlerts(); /** * if there are any error alerts */ boolean isContainsErrorAlerts(); /** * if associated with a cluster, provide the cluster name the component is on * * @return the name of the cluster */ String getClusterName(); /** * find any error alerts * * @return a list of alerts marked as errors */ List<ServiceAlert> getErrorAlerts(); /** * find the latest alert time for this component * * @return the latest timestamp for this alert */ Date getLatestAlertTimestamp(); /** * find the earliest alert time for the list of alerts on this component * * @return the earliest date for the alerts on this component */ Date getEarliestAlertTimestamp(); /** * Return the most severe alert state */ ServiceAlert.STATE getMaxAlertState(); /** * The state of a given Component */ public enum STATE { UP(1), STARTING(2), DOWN(3), UNKNOWN(4); private int severity; STATE(int severity) { this.severity = severity; } public int getSeverity() { return this.severity; } public boolean isError() { return this.severity > 2; } public boolean isHealthy() { return this.severity <= 2; } } public enum TIMESTAMP_TYPE { EARLIEST, LATEST } }