package com.github.digital_wonderland.sling_metrics.listener; import com.codahale.metrics.Histogram; import com.github.digital_wonderland.sling_metrics.service.MetricService; import org.apache.commons.lang.StringUtils; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.Service; import org.apache.sling.event.EventUtil; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Component(metatype = false, immediate = true) @Service(value = EventHandler.class) @Property(name="event.topics", value = "metric/histograms", propertyPrivate = true) public class HistogramEventListener implements EventHandler { private static final Logger LOG = LoggerFactory.getLogger(HistogramEventListener.class); @Reference protected MetricService metricService; @Override public void handleEvent(final Event event) { if(EventUtil.isLocal(event) && metricService.isEnabled()) { final String name = (String) event.getProperty(MetricEvent.NAME); final String value = (String) event.getProperty(MetricEvent.VALUE); if(StringUtils.isNotEmpty(name)) { Histogram histogram = metricService.histogram(name); try { histogram.update(Long.parseLong(value)); } catch(NumberFormatException e) { LOG.error("Received histogram metric event without value: [{}] - {}", e.getMessage(), e); } } else { LOG.warn("Received metric event without name: [{}]", event); } } } }