package org.hyperic.hq.notifications; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import org.hyperic.hq.authz.server.session.Resource; import org.hyperic.hq.context.Bootstrap; import org.hyperic.hq.measurement.server.session.Category; import org.hyperic.hq.measurement.server.session.Measurement; import org.hyperic.hq.measurement.server.session.MeasurementTemplate; import org.hyperic.hq.measurement.server.session.MeasurementZevent; import org.hyperic.hq.measurement.server.session.MeasurementZevent.MeasurementZeventPayload; import org.hyperic.hq.measurement.server.session.MeasurementZevent.MeasurementZeventSource; import org.hyperic.hq.measurement.shared.MeasurementManager; import org.hyperic.hq.notifications.filtering.DestinationEvaluator; import org.hyperic.hq.notifications.filtering.MetricDestinationEvaluator; import org.hyperic.hq.notifications.model.MetricNotification; import org.hyperic.hq.product.Metric; import org.hyperic.hq.product.MetricValue; import org.hyperic.hq.stats.ConcurrentStatsCollector; import org.hyperic.hq.zevents.ZeventListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component("OutgoingMetricZeventListener") public class OutgoingMetricZeventListener extends BaseNotificationsZeventListener<MeasurementZevent,MetricNotification> { @Autowired MetricDestinationEvaluator evaluator; @Autowired protected MeasurementManager msmtMgr; @PostConstruct public void init() { zEventManager.addBufferedListener(MeasurementZevent.class, (ZeventListener<MeasurementZevent>) Bootstrap.getBean(getListenersBeanName())); concurrentStatsCollector.register(getConcurrentStatsCollectorType()); } public List<MetricNotification> extract(List<MeasurementZevent> events) { List<MetricNotification> ns = new ArrayList<MetricNotification>(); for(MeasurementZevent measurementZevent:events) { MeasurementZeventSource zEventSource = (MeasurementZeventSource) measurementZevent.getSourceId(); MeasurementZeventPayload zEventPayload = (MeasurementZeventPayload) measurementZevent.getPayload(); int measurementId = 0; if (zEventSource!=null) { measurementId = zEventSource.getId(); } MetricValue metricVal = null; if (zEventPayload!=null) { metricVal = zEventPayload.getValue(); } Integer mid = Integer.valueOf(measurementId); Measurement msmt = this.msmtMgr.getMeasurement(mid); if (msmt==null) { // the measurement was erased since the event was sent continue; } MeasurementTemplate tmpl = msmt.getTemplate(); String msmtType = tmpl.getAlias().equals(Metric.ATTR_AVAIL)?Metric.ATTR_AVAIL:null; Category cat = tmpl.getCategory(); String catName = null; if (cat!=null) { catName=cat.getName(); } Resource rsc = msmt.getResource(); MetricNotification n = new MetricNotification(rsc.getId(),mid,tmpl.getName(),msmtType,catName,tmpl.getUnits(),metricVal); ns.add(n); } return ns; } @Override public String getListenersBeanName() { return "OutgoingMetricZeventListener"; } @Override public String getConcurrentStatsCollectorType() { return ConcurrentStatsCollector.METRIC_NOTIFICATION_FILTERING_TIME; } @Override public DestinationEvaluator<MetricNotification> getEvaluator() { return this.evaluator; } }