/** * 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 com.google.gson.annotations.SerializedName; /** * The {@link AlertUri} class is used to represent a complex URI structure where * there can be both a plaintext and SSL URI. This is used in cases where the * alert definition needs a way to expose which URL (http or https) should be * used to gather data. Currently, only {@link MetricSource} uses this, but it * can be swapped out in other source types where a plain string is used for the * URI. */ public class AlertUri { /** * The HTTP URI to use. */ @SerializedName("http") private String m_httpUri; /** * The HTTPS URI to use. */ @SerializedName("https") private String m_httpsUri; /** * The configuration property to check to determine if HTTP or HTTPS should be * used. */ @SerializedName("https_property") private String m_httpsProperty; /** * The value to check {@link #m_httpsProperty} against to determine if HTTPS * should be used. */ @SerializedName("https_property_value") private String m_httpsPropertyValue; /** * Kerberos keytab path to use. */ @SerializedName("kerberos_keytab") private String m_kerberosKeytab; /** * Kerberos principal name to use. */ @SerializedName("kerberos_principal") private String m_kerberosPrincipal; /** * A default port to use on the host running the alert if no URLs can be * found. */ @SerializedName("default_port") private Number m_port = 0; /** * An optional timeout value for connections. */ @SerializedName("connection_timeout") private float m_connectionTimeout = 5.0f; /** * If present, then the component supports HA mode and the properties * contained within need to be checked to see if an HA URI is required to be * constructed instead of using {@link #m_httpProperty} and * {@link #m_httpsProperty}. */ @SerializedName("high_availability") private HighAvailability m_highAvailability; /** * Gets the plaintext (HTTP) URI that can be used to retrieve alert * information. * * @return the httpUri the URI (or {@code null} to always use the secure URL). */ public String getHttpUri() { return m_httpUri; } /** * Sets the plaintext (HTTP) URI that can be used to retrieve alert * information. * * @param httpUri * the plaintext URI or {@code null} for none. */ public void setHttpUri(String httpUri) { m_httpUri = httpUri; } /** * Gets the default port to use on the host running the alert if none of the * http properties are available. * * @return the default port if none of the http properties are found. */ public Number getDefaultPort() { return m_port; } /** * Gets the secure (HTTPS) URI that can be used to retrieve alert information. * * @return the httpsUri the URI (or {@code null} to always use the insecure * URL). */ public String getHttpsUri() { return m_httpsUri; } /** * The configuration property that can be used to determine if the secure URL * should be used. * * @return the httpsProperty the configuration property, or {@code null} for * none. */ public String getHttpsProperty() { return m_httpsProperty; } /** * The literal value to use when comparing to the result from * {@link #getHttpsProperty()}. * * @return the httpsPropertyValue the literal value that indicates SSL mode is * enabled, or {@code null} for none. */ public String getHttpsPropertyValue() { return m_httpsPropertyValue; } /** * The configuration property with kerberos keytab path. * * @return the configuration property, or {@code null} for none. */ public String getKerberosKeytab() { return m_kerberosKeytab; } /** * The configuration property with kerberos principal name. * * @return the configuration property, or {@code null} for none. */ public String getKerberosPrincipal() { return m_kerberosPrincipal; } /** * Gets the HA structure to use when determining if the component is in HA * mode and requires the URL to be built dynamically. * * @return the HA structure or {@code null} if the component does not support * HA mode. */ public HighAvailability getHighAvailability() { return m_highAvailability; } /** * The {@link HighAvailability} structure is used to hold information about * how HA URIs are constructed if the service supports HA mode. For example * * <pre> * high_availability": { * "nameservice": "{{hdfs-site/dfs.internal.nameservices}}", * "alias_key" : "dfs.ha.namenodes.{{ha-nameservice}}", * "http_pattern" : "dfs.namenode.http-address.{{ha-nameservice}}.{{alias}}", * "https_pattern" : "dfs.namenode.https-address.{{ha-nameservice}}.{{alias}}" * } * </pre> * * Where the nameservice is {@code c1ha} and the alias key is * {@code dfs.ha.namenodes.c1ha}. In this case the http pattern is defined as * dfs.namenode.http-address.{{ha-nameservice}}.{{alias}} */ public class HighAvailability { /** * The key that represents the name service. The alert will use the * existance of this key as the marker for HA mode. */ @SerializedName("nameservice") private String m_nameservice; /** * The key that will be used to retrieve the aliases for each host. */ @SerializedName("alias_key") private String m_aliasKey; /** * The parameterized pattern for determining the HTTP URL to use. */ @SerializedName("http_pattern") private String m_httpPattern; /** * The parameterized pattern for determining the HTTPS URL to use. */ @SerializedName("https_pattern") private String m_httpsPattern; /** * Gets the nameservice name. * * @return the nameservice */ public String getNameservice() { return m_nameservice; } /** * Gets the parameterized key to use when retrieving the host aliases. * * @return the alias key */ public String getAliasKey() { return m_aliasKey; } /** * Get the parameterized HTTP pattern to use. * * @return the httpPattern */ public String getHttpPattern() { return m_httpPattern; } /** * Get the parameterized HTTPS pattern to use. * * @return the httpsPattern */ public String getHttpsPattern() { return m_httpsPattern; } } /** * {@inheritDoc} */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((m_httpUri == null) ? 0 : m_httpUri.hashCode()); result = prime * result + ((m_httpsProperty == null) ? 0 : m_httpsProperty.hashCode()); result = prime * result + ((m_httpsPropertyValue == null) ? 0 : m_httpsPropertyValue.hashCode()); result = prime * result + ((m_httpsUri == null) ? 0 : m_httpsUri.hashCode()); result = prime * result + m_port.intValue(); return result; } /** * {@inheritDoc} */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } AlertUri other = (AlertUri) obj; if (m_httpUri == null) { if (other.m_httpUri != null) { return false; } } else if (!m_httpUri.equals(other.m_httpUri)) { return false; } if (m_httpsProperty == null) { if (other.m_httpsProperty != null) { return false; } } else if (!m_httpsProperty.equals(other.m_httpsProperty)) { return false; } if (m_httpsPropertyValue == null) { if (other.m_httpsPropertyValue != null) { return false; } } else if (!m_httpsPropertyValue.equals(other.m_httpsPropertyValue)) { return false; } if (m_httpsUri == null) { if (other.m_httpsUri != null) { return false; } } else if (!m_httpsUri.equals(other.m_httpsUri)) { return false; } if (m_port != other.m_port) { return false; } return true; } }