/*
* Copyright 2002-2013 the original author or authors.
*
* Licensed 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.springframework.xd.analytics.metrics.integration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessagingException;
import org.springframework.util.Assert;
import org.springframework.xd.analytics.metrics.core.RichGaugeRepository;
/**
* @author David Turanski
*
*/
public class RichGaugeHandler extends AbstractMetricHandler {
private final RichGaugeRepository richGaugeRepository;
private final double alpha;
public RichGaugeHandler(RichGaugeRepository richGaugeRepository, String nameExpression, double alpha) {
super(nameExpression);
this.alpha = alpha;
Assert.notNull(richGaugeRepository, "Rich Gauge Repository can not be null");
this.richGaugeRepository = richGaugeRepository;
}
@ServiceActivator
public void process(Message<?> message) {
if (message != null) {
double value = convertToDouble(message.getPayload());
this.richGaugeRepository.recordValue(computeMetricName(message), value, alpha);
}
}
/**
* @param payload
* @return double value
*/
double convertToDouble(Object payload) {
if (payload != null) {
if (payload instanceof Number) {
return ((Number) payload).doubleValue();
}
else if (payload instanceof String) {
try {
return Double.parseDouble((String) payload);
}
catch (Exception e) {
throw new MessagingException("cannot convert payload to double", e);
}
}
}
throw new MessagingException("cannot convert "
+ (payload == null ? "null" : payload.getClass().getName() + " to double"));
}
}