/** ® * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.ambari.server.state.alert; import java.util.HashSet; import org.apache.commons.lang.StringUtils; import com.google.gson.annotations.SerializedName; /** * The {@link AlertDefinition} class represents all of the necessary information * to schedule, run, and collect alerts. * <p/> * Although all members of this class must define a complex {@code equals} and * {@code hashCode} method, this class itself does not. Instead, * {@link #equals(Object)} is defined as a name comparison only since name is * unique to a definition. This allows us to easily insert instances of this * class into a {@link HashSet} if necessary. * <p/> * When making comparisons for equality for things like stack/database merging, * use {@link #deeplyEquals(Object)}. */ public class AlertDefinition { private long clusterId; private long definitionId; private String serviceName = null; private String componentName = null; private String name = null; private Scope scope = Scope.ANY; private int interval = 1; private boolean enabled = true; private Source source = null; private String label = null; private String description = null; private String uuid = null; @SerializedName("ignore_host") private boolean ignoreHost = false; @SerializedName("help_url") private String helpURL = null; /** * Gets the cluster ID for this definition. * * @return */ public long getClusterId() { return clusterId; } /** * Sets the cluster ID for this definition. * * @param clusterId */ public void setClusterId(long clusterId) { this.clusterId = clusterId; } /** * @return the definitionId */ public long getDefinitionId() { return definitionId; } /** * @param definitionId * the definitionId to set */ public void setDefinitionId(long definitionId) { this.definitionId = definitionId; } /** * @return the service name */ public String getServiceName() { return serviceName; } /** * @param name the service name */ public void setServiceName(String name) { serviceName = name; } /** * @return the component name */ public String getComponentName() { return componentName; } /** * * @param name the component name */ public void setComponentName(String name) { componentName = name; } /** * @return the name */ public String getName() { return name; } /** * @param definitionName * the definition name. */ public void setName(String definitionName) { name = definitionName; } /** * @return the scope */ public Scope getScope() { return scope; } public void setScope(Scope definitionScope) { if (null == definitionScope) { definitionScope = Scope.ANY; } scope = definitionScope; } /** * @return the interval */ public int getInterval() { return interval; } public void setInterval(int definitionInterval) { interval = definitionInterval; } /** * @return {@code true} if enabled */ public boolean isEnabled() { return enabled; } public void setEnabled(boolean definitionEnabled) { enabled = definitionEnabled; } /** * @return {@code true} if the host is ignored. */ public boolean isHostIgnored() { return ignoreHost; } public void setHostIgnored(boolean definitionHostIgnored) { ignoreHost = definitionHostIgnored; } public Source getSource() { return source; } public void setSource(Source definitionSource) { source = definitionSource; } /** * @return the label for the definition or {@code null} if none. */ public String getLabel() { return label; } /** * Sets the label for this definition. * * @param definitionLabel */ public void setLabel(String definitionLabel) { label = definitionLabel; } /** * @return the help url for this definition or {@code null} if none. */ public String getHelpURL() { return helpURL; } /** * Sets the help url for this definition. * * @param helpURL */ public void setHelpURL(String helpURL) { this.helpURL = helpURL; } /** * @return the description */ public String getDescription() { return description; } /** * @param description * the description to set */ public void setDescription(String description) { this.description = description; } /** * Sets the UUID of the definition * * @param definitionUuid */ public void setUuid(String definitionUuid) { uuid = definitionUuid; } /** * Gets the UUID of the definition. The UUID is a unique identifier that is * generated every time the definition's state changes. * * @return the UUID */ public String getUuid() { return uuid; } /** * Compares {@link #equals(Object)} of every field. This is used mainly for * reconciling the stack versus the database. * * @param obj * @return */ public boolean deeplyEquals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } AlertDefinition other = (AlertDefinition) obj; if (componentName == null) { if (other.componentName != null) { return false; } } else if (!componentName.equals(other.componentName)) { return false; } if (enabled != other.enabled) { return false; } if (ignoreHost != other.ignoreHost) { return false; } if (interval != other.interval) { return false; } if (label == null) { if (other.label != null) { return false; } } else if (!label.equals(other.label)) { return false; } if (!StringUtils.equals(helpURL, other.helpURL)) { return false; } if (description == null) { if (other.description != null) { return false; } } else if (!description.equals(other.description)) { return false; } if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } if (null == scope) { scope = Scope.ANY; } if (scope != other.scope) { return false; } if (serviceName == null) { if (other.serviceName != null) { return false; } } else if (!serviceName.equals(other.serviceName)) { return false; } if (source == null) { if (other.source != null) { return false; } } else if (!source.equals(other.source)) { return false; } return true; } /** * Gets equality based on name only. * * @see #deeplyEquals(Object) */ @Override public boolean equals(Object obj) { if (null == obj || !obj.getClass().equals(AlertDefinition.class)) { return false; } return name.equals(((AlertDefinition) obj).name); } /** * Gets a hash based on name only. */ @Override public int hashCode() { return name.hashCode(); } @Override public String toString() { return name; } }