/**
* 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.camel.component.nagios;
import java.net.URI;
import com.googlecode.jsendnsca.core.Encryption;
import com.googlecode.jsendnsca.core.NagiosSettings;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.apache.camel.spi.UriPath;
import org.apache.camel.util.ObjectHelper;
/**
* @version
*/
@UriParams
public class NagiosConfiguration implements Cloneable {
private transient NagiosSettings nagiosSettings;
@UriPath @Metadata(required = "true")
private String host;
@UriPath @Metadata(required = "true")
private int port;
@UriParam(defaultValue = "5000")
private int connectionTimeout = 5000;
@UriParam(defaultValue = "5000")
private int timeout = 5000;
@UriParam(label = "security", secret = true)
private String password;
@UriParam(label = "security")
private NagiosEncryptionMethod encryptionMethod;
/**
* Returns a copy of this configuration
*/
public NagiosConfiguration copy() {
try {
NagiosConfiguration copy = (NagiosConfiguration) clone();
return copy;
} catch (CloneNotSupportedException e) {
throw new RuntimeCamelException(e);
}
}
public void configure(URI uri) {
String value = uri.getHost();
if (value != null) {
setHost(value);
}
int port = uri.getPort();
if (port > 0) {
setPort(port);
}
}
public synchronized NagiosSettings getNagiosSettings() {
if (nagiosSettings == null) {
// validate parameters
ObjectHelper.notEmpty(host, "host", this);
if (port <= 0) {
throw new IllegalArgumentException("Port must be a positive number on " + this);
}
// create settings
nagiosSettings = new NagiosSettings();
nagiosSettings.setConnectTimeout(getConnectionTimeout());
nagiosSettings.setTimeout(getTimeout());
nagiosSettings.setNagiosHost(getHost());
nagiosSettings.setPort(getPort());
nagiosSettings.setPassword(getPassword());
if (encryptionMethod != null) {
if (NagiosEncryptionMethod.No == encryptionMethod) {
nagiosSettings.setEncryptionMethod(Encryption.NO_ENCRYPTION);
} else if (NagiosEncryptionMethod.Xor == encryptionMethod) {
nagiosSettings.setEncryptionMethod(Encryption.XOR_ENCRYPTION);
} else if (NagiosEncryptionMethod.TripleDes == encryptionMethod) {
nagiosSettings.setEncryptionMethod(Encryption.TRIPLE_DES_ENCRYPTION);
} else {
throw new IllegalArgumentException("Unknown encryption method: " + encryptionMethod);
}
}
}
return nagiosSettings;
}
public void setNagiosSettings(NagiosSettings nagiosSettings) {
this.nagiosSettings = nagiosSettings;
}
public String getHost() {
return host;
}
/**
* This is the address of the Nagios host where checks should be send.
*/
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
/**
* The port number of the host.
*/
public void setPort(int port) {
this.port = port;
}
public int getConnectionTimeout() {
return connectionTimeout;
}
/**
* Connection timeout in millis.
*/
public void setConnectionTimeout(int connectionTimeout) {
this.connectionTimeout = connectionTimeout;
}
public int getTimeout() {
return timeout;
}
/**
* Sending timeout in millis.
*/
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public String getPassword() {
return password;
}
/**
* Password to be authenticated when sending checks to Nagios.
*/
public void setPassword(String password) {
this.password = password;
}
public NagiosEncryptionMethod getEncryptionMethod() {
return encryptionMethod;
}
/**
* To specify an encryption method.
*/
public void setEncryptionMethod(NagiosEncryptionMethod encryptionMethod) {
this.encryptionMethod = encryptionMethod;
}
@Override
public String toString() {
return "NagiosConfiguration[host=" + host + ":" + port + ", connectionTimeout=" + connectionTimeout
+ ", timeout=" + timeout + ", encryptionMethod=" + encryptionMethod + "]";
}
}