| /* |
| * 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 |
| + "]"; |
| } |
| |
| } |