package com.cloudera.sa.node360.service.utils; import com.cloudera.sa.node360.constant.TopLevelConst; import com.cloudera.sa.node360.model.EventPojo; import com.cloudera.sa.node360.model.NetFlowPojo; import com.cloudera.sa.node360.model.NotificationPojo; import com.cloudera.sa.node360.model.SamplePojo; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.hbase.client.BufferedMutator; import org.apache.hadoop.hbase.client.Row; import org.apache.mina.util.ConcurrentHashSet; import java.util.List; import java.util.concurrent.ConcurrentHashMap; /** * Created by ted.malaska on 6/13/15. */ public class GlobalStatsUtil { public static long totalEvents; public static ConcurrentHashMap<byte[], TotalWrapper> nodeTotals = new ConcurrentHashMap<byte[], TotalWrapper>(); public static void processEvents(List<Row> increments, List<EventPojo> events) { for (EventPojo event : events) { //TODO check for time pass if (event.getType().equals(EventPojo.NETFLOW_TYPE)) { TotalWrapper totalWrapper = nodeTotals.get(convertIpToBytes(event.getNode())); for (NetFlowPojo netFlowPojo : event.getNetFlowPojoList()) { totalWrapper.totalOutputNetwork += netFlowPojo.getNumberOfBytes(); totalEvents ++; } } else if (event.getType().equals(EventPojo.LINE_TYPE) && event.getGroup().equals(TopLevelConst.DRIVES_LINE_CHART_DATA)) { TotalWrapper totalWrapper = nodeTotals.get(convertIpToBytes(event.getNode())); boolean updateMaxDiskSpace = totalWrapper.totalDiskSpace == 0; for (SamplePojo samplePojo : event.getSamples()) { totalWrapper.diskUsed += Long.parseLong(samplePojo.getValue()); if (updateMaxDiskSpace) { totalWrapper.totalDiskSpace = Long.parseLong(samplePojo.getMax()); } } } } } private static class TotalWrapper { long diskUsed = 0; long totalDiskSpace = 0; long totalOutputNetwork; } /* long totalDiskUsed = 0; long totalDiskCap = 0; long totalOutputNetwork; long maxOutputNetwork; long minOutputNetwork; */ public static byte[] convertIpToBytes(String node) { String[] parts = StringUtils.split(node, ','); byte[] nodeBytes = new byte[4]; nodeBytes[0] = Byte.parseByte(parts[0]); nodeBytes[1] = Byte.parseByte(parts[1]); nodeBytes[2] = Byte.parseByte(parts[2]); nodeBytes[3] = Byte.parseByte(parts[3]); return nodeBytes; } }