/* * 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.RichGauge; import org.springframework.xd.analytics.metrics.core.RichGaugeRepository; /** * @author David Turanski * */ public class RichGaugeHandler { private final RichGaugeRepository richGaugeRepository; private final String name; public RichGaugeHandler(RichGaugeRepository richGaugeRepository, String name, double alpha) { Assert.notNull(richGaugeRepository, "Rich Gauge Service can not be null"); Assert.notNull(name, "Rich Gauge Name can not be null"); this.richGaugeRepository = richGaugeRepository; this.name = name; this.richGaugeRepository.save(new RichGauge(name).setAlpha(alpha)); } @ServiceActivator public void process(Message<?> message) { if (message != null) { double value = convertToDouble(message.getPayload()); this.richGaugeRepository.setValue(name, value); } } /** * @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")); } }