package com.github.digital_wonderland.sling_metrics.listener; import com.codahale.metrics.Meter; 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/meters", propertyPrivate = true) public class MeterEventListener implements EventHandler { private static final Logger LOG = LoggerFactory.getLogger(MeterEventListener.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)) { final Meter meter = metricService.meter(name); if(StringUtils.isEmpty(value)) { try { meter.mark(Long.parseLong(value)); } catch(NumberFormatException e) { LOG.error(e.getMessage(), e); } } else { meter.mark(); } } else { LOG.warn("Received metric event without name: [{}]", event); } } } }