/*****************************************************************************
*
* Copyright (C) Zenoss, Inc. 2012, all rights reserved.
*
* This content is made available according to terms specified in
* License.zenoss under the directory where your Zenoss product is installed.
*
****************************************************************************/
package org.zenoss.zep.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zenoss.protobufs.zep.Zep.EventSeverity;
import org.zenoss.protobufs.zep.Zep.ZepConfig;
import org.zenoss.zep.Counters;
import org.zenoss.zep.ZepException;
import org.zenoss.zep.ZepMXBean;
import org.zenoss.zep.StatisticsService;
import org.zenoss.zep.dao.ConfigDao;
import org.zenoss.zep.dao.EventIndexQueueDao;
import org.zenoss.zep.dao.EventSummaryDao;
import org.zenoss.zep.index.EventIndexDao;
import javax.management.MBeanAttributeInfo;
import javax.management.StandardMBean;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class StatisticsServiceImpl extends StandardMBean implements StatisticsService {
private static final Logger logger = LoggerFactory.getLogger(StatisticsServiceImpl.class);
private static final Map<String, String> attributeDescriptions = new HashMap<String, String>();
static {
attributeDescriptions.put("ProcessedEventCount", "processed events");
attributeDescriptions.put("DedupedEventCount", "deduped events");
attributeDescriptions.put("EventCount", "processed events");
attributeDescriptions.put("DroppedEventCount", "dropped events");
attributeDescriptions.put("ClearedEventCount", "cleared events");
attributeDescriptions.put("ArchivedEventCount", "archived events");
attributeDescriptions.put("AgedEventCount", "aged events");
attributeDescriptions.put("ArchiveEligibleEventCount", "archive-eligible events");
attributeDescriptions.put("AgeEligibleEventCount", "age-eligible events");
attributeDescriptions.put("SummaryQueueLength", "summary queue length");
attributeDescriptions.put("ArchiveQueueLength", "archive queue length");
attributeDescriptions.put("SummaryIndexSize", "summary index size");
attributeDescriptions.put("ArchiveIndexSize", "archive index size");
attributeDescriptions.put("SummaryIndexDocCount", "summary index doc count");
attributeDescriptions.put("ArchiveIndexDocCount", "archive index doc count");
}
private Counters counters;
private ConfigDao configDao;
private EventSummaryDao eventSummaryDao;
private EventIndexDao eventSummaryIndexDao;
private EventIndexDao eventArchiveIndexDao;
private EventIndexQueueDao eventSummaryIndexQueueDao;
private EventIndexQueueDao eventArchiveIndexQueueDao;
public StatisticsServiceImpl() {
super(ZepMXBean.class, true);
}
@Override
protected String getDescription(MBeanAttributeInfo info) {
return attributeDescriptions.get(info.getName());
}
@Override
public String getAttributeDescription(String name) {
return attributeDescriptions.get(name);
}
public void setCounters(final Counters counters) {
this.counters = counters;
}
public void setConfigDao(final ConfigDao configDao) {
this.configDao = configDao;
}
public void setEventSummaryDao(final EventSummaryDao eventSummaryDao) {
this.eventSummaryDao = eventSummaryDao;
}
public void setEventSummaryIndexDao(final EventIndexDao eventSummaryIndexDao) {
this.eventSummaryIndexDao = eventSummaryIndexDao;
}
public void setEventArchiveIndexDao(final EventIndexDao eventArchiveIndexDao) {
this.eventArchiveIndexDao = eventArchiveIndexDao;
}
public void setEventSummaryIndexQueueDao(final EventIndexQueueDao eventSummaryIndexQueueDao) {
this.eventSummaryIndexQueueDao = eventSummaryIndexQueueDao;
}
public void setEventArchiveIndexQueueDao(final EventIndexQueueDao eventArchiveIndexQueueDao) {
this.eventArchiveIndexQueueDao = eventArchiveIndexQueueDao;
}
@Override
public long getAgedEventCount() {
return counters.getAgedEventCount();
}
@Override
public long getArchivedEventCount() {
return counters.getArchivedEventCount();
}
@Override
public long getClearedEventCount() {
return counters.getClearedEventCount();
}
@Override
public long getDedupedEventCount() {
return counters.getDedupedEventCount();
}
@Override
public long getDroppedEventCount() {
return counters.getDroppedEventCount();
}
@Override
public long getProcessedEventCount() {
return counters.getProcessedEventCount();
}
@Override
public long getArchiveEligibleEventCount() {
try {
long duration = configDao.getConfig().getEventArchiveIntervalMinutes();
return eventSummaryDao.getArchiveEligibleEventCount(duration, TimeUnit.MINUTES);
} catch (ZepException e) {
logger.warn("Cannot get configuration.");
return -1;
}
}
@Override
public long getAgeEligibleEventCount() {
try {
ZepConfig config = configDao.getConfig();
long duration = config.getEventAgeIntervalMinutes();
EventSeverity maxSeverity = config.getEventAgeDisableSeverity();
boolean inclusiveSeverity = config.getEventAgeSeverityInclusive();
return eventSummaryDao.getAgeEligibleEventCount(duration, TimeUnit.MINUTES, maxSeverity, inclusiveSeverity);
} catch (ZepException e) {
logger.warn("Cannot get configuration.");
return -1;
}
}
@Override
public long getSummaryQueueLength() {
return eventSummaryIndexQueueDao.getQueueLength();
}
@Override
public long getArchiveQueueLength() {
return eventArchiveIndexQueueDao.getQueueLength();
}
@Override
public long getSummaryIndexSize() {
return eventSummaryIndexDao.getSize();
}
@Override
public long getArchiveIndexSize() {
return eventArchiveIndexDao.getSize();
}
private static long getNumDocs(EventIndexDao eventIndexDao) {
try {
return eventIndexDao.getNumDocs();
} catch (ZepException e) {
logger.warn(String.format("Cannot get number of docs in index %s", eventIndexDao.getName()));
return -1;
}
}
@Override
public long getSummaryIndexDocCount() {
return getNumDocs(eventSummaryIndexDao);
}
@Override
public long getArchiveIndexDocCount() {
return getNumDocs(eventArchiveIndexDao);
}
}