blob: 3471bf9e4c621365b1bc12b6eec7aff6f2169992 [file] [log] [blame]
/*
* ========================================================================
* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
* ========================================================================
*/
package com.gemstone.gemfire.management.internal.beans.stats;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import com.gemstone.gemfire.management.internal.FederationComponent;
/**
*
* @author rishim
*
*/
public class MemberClusterStatsMonitor {
private static final String SYSTEM_DISK_STORE_COUNT = "DiskStores";
private static final String DISK_READS_RATE = "DiskReadsRate";
private static final String DISK_WRITES_RATE = "DiskWritesRate";
private static final String DISK_FLUSH_AVG_LATENCY = "DiskFlushAvgLatency";
private static final String TOTAL_BACKUP_IN_PROGRESS = "TotalBackupInProgress";
private static final String TOTAL_HIT_COUNT = "TotalHitCount";
private static final String TOTAL_MISS_COUNT = "TotalMissCount";
private static final String NUM_INITIAL_IMAGE_IN_PROGRESSS = "numInitialImagesInProgress";
private static final String TOTAL_DISK_USAGE = "TotalDiskUsage";
private static final String NUM_RUNNING_FUNCTIONS = "NumRunningFunctions";
private static final String AVERAGE_READS = "AverageReads";
private static final String AVERAGE_WRITES = "AverageWrites";
private static final String GARBAGE_COLL_COUNT = "GarbageCollectionCount";
private static final String JVM_PAUSES = "JVMPauses";
private static final String OFF_HEAP_MAX_MEMORY = "OffHeapMaxMemory";
private static final String OFF_HEAP_USED_MEMORY = "OffHeapUsedMemory";
private static final String OFF_HEAP_FREE_MEMORY = "OffHeapFreeMemory";
private static final String TXN_COMMITTED_TOTAL_COUNT = "TransactionCommittedTotalCount";
private static final String TXN_ROLLEDBACK_TOTAL_COUNT = "TransactionRolledBackTotalCount";
private static final String MAX_MEMORY = "MaxMemory";
private static final String USED_MEMORY = "UsedMemory";
private static final String FREE_MEMORY = "FreeMemory";
private AtomicInteger systemDiskStoreCount = new AtomicInteger(0);
private StatsAggregator aggregator;
private IntegerStatsDeltaAggregator deltas;
private Map<String, Class<?>> typeMap;
public void aggregate(FederationComponent newState,
FederationComponent oldState) {
aggregator.aggregate(newState, oldState);
// Special Aggregations
incSystemDiskStoreCount(newState, oldState);
deltas.aggregate(newState,oldState);
}
public MemberClusterStatsMonitor() {
this.typeMap = new HashMap<String, Class<?>>();
intTypeMap();
this.aggregator = new StatsAggregator(typeMap);
List<String> keysList = new ArrayList<String>();
keysList.add(TXN_COMMITTED_TOTAL_COUNT);
keysList.add(TXN_ROLLEDBACK_TOTAL_COUNT);
deltas = new IntegerStatsDeltaAggregator(keysList);
}
private void intTypeMap() {
typeMap.put(DISK_FLUSH_AVG_LATENCY, Long.TYPE);
typeMap.put(DISK_READS_RATE, Float.TYPE);
typeMap.put(DISK_WRITES_RATE, Float.TYPE);
typeMap.put(TOTAL_BACKUP_IN_PROGRESS, Integer.TYPE);
typeMap.put(TOTAL_HIT_COUNT, Integer.TYPE);
typeMap.put(TOTAL_MISS_COUNT, Integer.TYPE);
typeMap.put(NUM_INITIAL_IMAGE_IN_PROGRESSS, Integer.TYPE);
typeMap.put(TOTAL_DISK_USAGE, Long.TYPE);
typeMap.put(NUM_RUNNING_FUNCTIONS, Integer.TYPE);
typeMap.put(AVERAGE_READS, Float.TYPE);
typeMap.put(AVERAGE_WRITES, Float.TYPE);
typeMap.put(GARBAGE_COLL_COUNT, Long.TYPE);
typeMap.put(JVM_PAUSES, Long.TYPE);
typeMap.put(MAX_MEMORY, Long.TYPE);
typeMap.put(USED_MEMORY, Long.TYPE);
typeMap.put(FREE_MEMORY, Long.TYPE);
typeMap.put(OFF_HEAP_MAX_MEMORY, Long.TYPE);
typeMap.put(OFF_HEAP_USED_MEMORY, Long.TYPE);
typeMap.put(OFF_HEAP_FREE_MEMORY, Long.TYPE);
}
public float getDiskReadsRate() {
return aggregator.getFloatValue(DISK_READS_RATE);
}
public float getDiskWritesRate() {
return aggregator.getFloatValue(DISK_WRITES_RATE);
}
public long getDiskFlushAvgLatency() {
return aggregator.getLongValue(DISK_FLUSH_AVG_LATENCY);
}
public int getSystemDiskStoreCount() {
return systemDiskStoreCount.get();
}
public int getTotalBackupInProgress() {
return aggregator.getIntValue(TOTAL_BACKUP_IN_PROGRESS);
}
public long getTotalHeapSize() {
return getMaxMemory();
}
public int getTotalHitCount() {
return aggregator.getIntValue(TOTAL_HIT_COUNT);
}
public int getTotalMissCount() {
return aggregator.getIntValue(TOTAL_MISS_COUNT);
}
public int getNumInitialImagesInProgress() {
return aggregator.getIntValue(NUM_INITIAL_IMAGE_IN_PROGRESSS);
}
public void incSystemDiskStoreCount(FederationComponent newState, FederationComponent oldState) {
if (oldState != null) {
if (oldState.getValue(SYSTEM_DISK_STORE_COUNT) != null) {
String[] diskStores = (String[]) oldState.getValue(SYSTEM_DISK_STORE_COUNT);
if (diskStores != null) {
systemDiskStoreCount.addAndGet(-diskStores.length);// Used Atomic
// Integer to avoid
// race condition
// between
// different
// members
}
}
}
if (newState != null) {
if (newState.getValue(SYSTEM_DISK_STORE_COUNT) != null) {
String[] diskStores = (String[]) newState.getValue(SYSTEM_DISK_STORE_COUNT);
if (diskStores != null) {
systemDiskStoreCount.addAndGet(diskStores.length);// Used Atomic
// Integer to
// avoid race
// condition
// between
// different
// members
}
}
}
}
public int getNumRunningFunctions() {
return aggregator.getIntValue(NUM_RUNNING_FUNCTIONS);
}
public long getTotalDiskUsage() {
return aggregator.getLongValue(TOTAL_DISK_USAGE);
}
public float getAverageReads() {
return aggregator.getFloatValue(AVERAGE_READS);
}
public float getAverageWrites() {
return aggregator.getFloatValue(AVERAGE_WRITES);
}
public long getUsedHeapSize() {
return getUsedMemory();
}
public long getGarbageCollectionCount() {
return aggregator.getLongValue(GARBAGE_COLL_COUNT);
}
public long getJVMPauses() {
return aggregator.getLongValue(JVM_PAUSES);
}
public long getOffHeapFreeMemory() {
return aggregator.getLongValue(OFF_HEAP_FREE_MEMORY);
}
public long getOffHeapUsedMemory() {
return aggregator.getLongValue(OFF_HEAP_USED_MEMORY);
}
public int getTransactionCommitted() {
return deltas.getDelta(TXN_COMMITTED_TOTAL_COUNT);
}
public int getTransactionRolledBack() {
return deltas.getDelta(TXN_ROLLEDBACK_TOTAL_COUNT);
}
public long getMaxMemory() {
return aggregator.getLongValue(MAX_MEMORY);
}
public long getFreeMemory() {
return aggregator.getLongValue(FREE_MEMORY);
}
public long getUsedMemory() {
return aggregator.getLongValue(USED_MEMORY);
}
}