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