/**
* 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.ganglia;
import java.io.IOException;
import java.net.URI;
import info.ganglia.gmetric4j.gmetric.GMetric;
import info.ganglia.gmetric4j.gmetric.GMetricSlope;
import info.ganglia.gmetric4j.gmetric.GMetricType;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.apache.camel.spi.UriPath;
@UriParams
public class GangliaConfiguration implements Cloneable {
public static final String DEFAULT_DESTINATION = "239.2.11.71";
public static final int DEFAULT_PORT = 8649;
public static final GMetric.UDPAddressingMode DEFAULT_MODE = GMetric.UDPAddressingMode.MULTICAST;
public static final int DEFAULT_TTL = 5;
public static final boolean DEFAULT_WIRE_FORMAT_31X = true;
public static final String DEFAULT_GROUP_NAME = "Java";
public static final String DEFAULT_METRIC_NAME = "metric";
public static final GMetricType DEFAULT_TYPE = GMetricType.STRING;
public static final GMetricSlope DEFAULT_SLOPE = GMetricSlope.BOTH;
public static final String DEFAULT_UNITS = "";
public static final int DEFAULT_TMAX = 60;
public static final int DEFAULT_DMAX = 0;
@UriPath(defaultValue = DEFAULT_DESTINATION)
private String host = DEFAULT_DESTINATION;
@UriPath(defaultValue = "" + DEFAULT_PORT)
private int port = DEFAULT_PORT;
@UriParam(defaultValue = "MULTICAST")
private GMetric.UDPAddressingMode mode = DEFAULT_MODE;
@UriParam(defaultValue = "5")
private int ttl = DEFAULT_TTL;
@UriParam(defaultValue = "true")
private boolean wireFormat31x = DEFAULT_WIRE_FORMAT_31X;
@UriParam
private String spoofHostname;
@UriParam(defaultValue = "java")
private String groupName = DEFAULT_GROUP_NAME;
@UriParam
private String prefix;
@UriParam(defaultValue = "metric")
private String metricName = DEFAULT_METRIC_NAME;
@UriParam(defaultValue = "STRING")
private GMetricType type = DEFAULT_TYPE;
@UriParam(defaultValue = "BOTH")
private GMetricSlope slope = DEFAULT_SLOPE;
@UriParam
private String units = DEFAULT_UNITS;
@UriParam(defaultValue = "60")
private int tmax = DEFAULT_TMAX;
@UriParam(defaultValue = "0")
private int dmax = DEFAULT_DMAX;
/**
* Returns a copy of this configuration
*/
public GangliaConfiguration copy() {
try {
GangliaConfiguration copy = (GangliaConfiguration) 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 GMetric createGMetric() {
try {
return new GMetric(host, port, mode, ttl, wireFormat31x, null, spoofHostname);
} catch (IOException ex) {
throw new RuntimeCamelException("Failed to initialize Ganglia", ex);
}
}
public String getHost() {
return host;
}
/**
* Host name for Ganglia server
*/
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
/**
* Port for Ganglia server
*/
public void setPort(int port) {
this.port = port;
}
public GMetric.UDPAddressingMode getMode() {
return mode;
}
/**
* Send the UDP metric packets using MULTICAST or UNICAST
*/
public void setMode(GMetric.UDPAddressingMode mode) {
this.mode = mode;
}
public int getTtl() {
return ttl;
}
/**
* If using multicast, set the TTL of the packets
*/
public void setTtl(int ttl) {
this.ttl = ttl;
}
public boolean getWireFormat31x() {
return wireFormat31x;
}
/**
* Use the wire format of Ganglia 3.1.0 and later versions. Set this to false to use Ganglia 3.0.x or earlier.
*/
public void setWireFormat31x(boolean wireFormat31x) {
this.wireFormat31x = wireFormat31x;
}
public String getSpoofHostname() {
return spoofHostname;
}
/**
* Spoofing information IP:hostname
*/
public void setSpoofHostname(String spoofHostname) {
this.spoofHostname = spoofHostname;
}
public String getGroupName() {
return groupName;
}
/**
* The group that the metric belongs to.
*/
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getPrefix() {
return prefix;
}
/**
* Prefix the metric name with this string and an underscore.
*/
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getMetricName() {
return metricName;
}
/**
* The name to use for the metric.
*/
public void setMetricName(String metricName) {
this.metricName = metricName;
}
public GMetricType getType() {
return type;
}
/**
* The type of value
*/
public void setType(GMetricType type) {
this.type = type;
}
public GMetricSlope getSlope() {
return slope;
}
/**
* The slope
*/
public void setSlope(GMetricSlope slope) {
this.slope = slope;
}
public String getUnits() {
return units;
}
/**
* Any unit of measurement that qualifies the metric, e.g. widgets, litres, bytes.
* Do not include a prefix such as k (kilo) or m (milli), other tools may scale the units later.
* The value should be unscaled.
*/
public void setUnits(String units) {
this.units = units;
}
public boolean isWireFormat31x() {
return wireFormat31x;
}
public int getTmax() {
return tmax;
}
/**
* Maximum time in seconds that the value can be considered current.
* After this, Ganglia considers the value to have expired.
*/
public void setTmax(int tmax) {
this.tmax = tmax;
}
public int getDmax() {
return dmax;
}
/**
* Minumum time in seconds before Ganglia will purge the metric value if it expires.
* Set to 0 and the value will remain in Ganglia indefinitely until a gmond agent restart.
*/
public void setDmax(int dmax) {
this.dmax = dmax;
}
@Override
public String toString() {
return "GangliaConfiguration["
+ "host=" + host + ":" + port
+ ", mode=" + mode
+ ", ttl=" + ttl
+ ", wireFormat31x=" + wireFormat31x
+ ", spoofHostname=" + spoofHostname
+ ", groupName=" + groupName
+ ", prefix=" + prefix
+ ", metricName=" + metricName
+ ", type=" + type
+ ", slope=" + slope
+ ", units=" + units
+ ", tmax=" + tmax
+ ", dmax=" + dmax
+ "]";
}
}