/** * 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 info.ganglia.gmetric4j.Publisher; import info.ganglia.gmetric4j.gmetric.GMetricSlope; import info.ganglia.gmetric4j.gmetric.GMetricType; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.impl.DefaultProducer; public class GangliaProducer extends DefaultProducer { private final Publisher publisher; private final GangliaEndpoint gangliaEndpoint; public GangliaProducer(GangliaEndpoint endpoint, Publisher publisher) { super(endpoint); this.gangliaEndpoint = endpoint; this.publisher = publisher; } public void process(Exchange exchange) throws Exception { Message message = exchange.getIn(); GangliaConfiguration conf = gangliaEndpoint.getConfiguration(); String groupName = conf.getGroupName(); if (message.getHeaders().containsKey(GangliaConstants.GROUP_NAME)) { groupName = message.getHeader(GangliaConstants.GROUP_NAME, String.class); } String prefix = conf.getPrefix(); String metricName = conf.getMetricName(); if (message.getHeaders().containsKey(GangliaConstants.METRIC_NAME)) { metricName = message.getHeader(GangliaConstants.METRIC_NAME, String.class); } if (prefix != null && prefix.length() > 0) { metricName = prefix + "_" + metricName; } GMetricType type = conf.getType(); if (message.getHeaders().containsKey(GangliaConstants.METRIC_TYPE)) { type = message.getHeader(GangliaConstants.METRIC_TYPE, GMetricType.class); } GMetricSlope slope = conf.getSlope(); if (message.getHeaders().containsKey(GangliaConstants.METRIC_SLOPE)) { slope = message.getHeader(GangliaConstants.METRIC_SLOPE, GMetricSlope.class); } String units = conf.getUnits(); if (message.getHeaders().containsKey(GangliaConstants.METRIC_UNITS)) { units = message.getHeader(GangliaConstants.METRIC_UNITS, String.class); } int tmax = conf.getTmax(); if (message.getHeaders().containsKey(GangliaConstants.METRIC_TMAX)) { tmax = message.getHeader(GangliaConstants.METRIC_TMAX, Integer.class); } int dmax = conf.getDmax(); if (message.getHeaders().containsKey(GangliaConstants.METRIC_DMAX)) { dmax = message.getHeader(GangliaConstants.METRIC_DMAX, Integer.class); } String value = message.getBody(String.class); if ((value == null || value.length() == 0) && (type == GMetricType.FLOAT || type == GMetricType.DOUBLE)) { log.debug("Metric {} string value was null, using NaN", metricName); value = "NaN"; } if (log.isDebugEnabled()) { log.debug("Sending metric {} to Ganglia: {}", metricName, value); } publisher.publish(groupName, metricName, value, type, slope, tmax, dmax, units); log.trace("Sending metric done"); } }