blob: 6a2d0850d40dac2ef247d021fb8ee755afc02dd8 [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;
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.lang.management.OperatingSystemMXBean;
import java.lang.management.RuntimeMXBean;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.management.JMRuntimeException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.apache.logging.log4j.Logger;
import com.gemstone.gemfire.Statistics;
import com.gemstone.gemfire.StatisticsType;
import com.gemstone.gemfire.cache.CacheClosedException;
import com.gemstone.gemfire.cache.DiskStore;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.execute.FunctionService;
import com.gemstone.gemfire.cache.hdfs.internal.HDFSStoreImpl;
import com.gemstone.gemfire.cache.persistence.PersistentID;
import com.gemstone.gemfire.cache.wan.GatewayReceiver;
import com.gemstone.gemfire.cache.wan.GatewaySender;
import com.gemstone.gemfire.distributed.Locator;
import com.gemstone.gemfire.distributed.LocatorLauncher;
import com.gemstone.gemfire.distributed.ServerLauncher;
import com.gemstone.gemfire.distributed.internal.DM;
import com.gemstone.gemfire.distributed.internal.DistributionConfig;
import com.gemstone.gemfire.distributed.internal.DistributionManager;
import com.gemstone.gemfire.distributed.internal.DistributionStats;
import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
import com.gemstone.gemfire.distributed.internal.locks.DLockService;
import com.gemstone.gemfire.distributed.internal.locks.DLockStats;
import com.gemstone.gemfire.internal.Assert;
import com.gemstone.gemfire.internal.GemFireStatSampler;
import com.gemstone.gemfire.internal.GemFireVersion;
import com.gemstone.gemfire.internal.HostStatHelper;
import com.gemstone.gemfire.internal.LinuxSystemStats;
import com.gemstone.gemfire.internal.ProcessStats;
import com.gemstone.gemfire.internal.PureJavaMode;
import com.gemstone.gemfire.internal.SocketCreator;
import com.gemstone.gemfire.internal.SolarisSystemStats;
import com.gemstone.gemfire.internal.StatSamplerStats;
import com.gemstone.gemfire.internal.VMStatsContract;
import com.gemstone.gemfire.internal.WindowsSystemStats;
import com.gemstone.gemfire.internal.cache.CachePerfStats;
import com.gemstone.gemfire.internal.cache.CacheServerLauncher;
import com.gemstone.gemfire.internal.cache.DirectoryHolder;
import com.gemstone.gemfire.internal.cache.DiskDirectoryStats;
import com.gemstone.gemfire.internal.cache.DiskRegion;
import com.gemstone.gemfire.internal.cache.DiskStoreImpl;
import com.gemstone.gemfire.internal.cache.DiskStoreStats;
import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
import com.gemstone.gemfire.internal.cache.LocalRegion;
import com.gemstone.gemfire.internal.cache.PartitionedRegion;
import com.gemstone.gemfire.internal.cache.PartitionedRegionStats;
import com.gemstone.gemfire.internal.cache.control.ResourceManagerStats;
import com.gemstone.gemfire.internal.cache.execute.FunctionServiceStats;
import com.gemstone.gemfire.internal.cache.lru.LRUStatistics;
import com.gemstone.gemfire.internal.cache.persistence.BackupManager;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
import com.gemstone.gemfire.internal.logging.LogService;
import com.gemstone.gemfire.internal.logging.ManagerLogWriter;
import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage;
import com.gemstone.gemfire.internal.logging.log4j.LogMarker;
import com.gemstone.gemfire.internal.logging.log4j.LogWriterAppender;
import com.gemstone.gemfire.internal.logging.log4j.LogWriterAppenders;
import com.gemstone.gemfire.internal.offheap.MemoryAllocator;
import com.gemstone.gemfire.internal.offheap.OffHeapMemoryStats;
import com.gemstone.gemfire.internal.process.PidUnavailableException;
import com.gemstone.gemfire.internal.process.ProcessUtils;
import com.gemstone.gemfire.internal.stats50.VMStats50;
import com.gemstone.gemfire.internal.tcp.ConnectionTable;
import com.gemstone.gemfire.management.DependenciesNotFoundException;
import com.gemstone.gemfire.management.DiskBackupResult;
import com.gemstone.gemfire.management.GemFireProperties;
import com.gemstone.gemfire.management.JVMMetrics;
import com.gemstone.gemfire.management.ManagementException;
import com.gemstone.gemfire.management.OSMetrics;
import com.gemstone.gemfire.management.cli.CommandService;
import com.gemstone.gemfire.management.cli.CommandServiceException;
import com.gemstone.gemfire.management.cli.Result;
import com.gemstone.gemfire.management.internal.ManagementConstants;
import com.gemstone.gemfire.management.internal.ManagementStrings;
import com.gemstone.gemfire.management.internal.SystemManagementService;
import com.gemstone.gemfire.management.internal.beans.stats.AggregateRegionStatsMonitor;
import com.gemstone.gemfire.management.internal.beans.stats.GCStatsMonitor;
import com.gemstone.gemfire.management.internal.beans.stats.MBeanStatsMonitor;
import com.gemstone.gemfire.management.internal.beans.stats.MemberLevelDiskMonitor;
import com.gemstone.gemfire.management.internal.beans.stats.StatType;
import com.gemstone.gemfire.management.internal.beans.stats.StatsAverageLatency;
import com.gemstone.gemfire.management.internal.beans.stats.StatsKey;
import com.gemstone.gemfire.management.internal.beans.stats.StatsLatency;
import com.gemstone.gemfire.management.internal.beans.stats.StatsRate;
import com.gemstone.gemfire.management.internal.beans.stats.VMStatsMonitor;
import com.gemstone.gemfire.management.internal.cli.CommandResponseBuilder;
import com.gemstone.gemfire.management.internal.cli.remote.CommandExecutionContext;
import com.gemstone.gemfire.management.internal.cli.remote.MemberCommandService;
import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
/**
* This class acts as an Bridge between MemberMBean and GemFire Cache and
* Distributed System
*
* @author rishim
*
*/
public class MemberMBeanBridge {
private static final Logger logger = LogService.getLogger();
/**
* Static reference to the Platform MBean server
*/
public static MBeanServer mbeanServer = ManagementFactory
.getPlatformMBeanServer();
/**
* Factor converting bytes to MBØØ
*/
private static final long MBFactor = 1024 * 1024;
private static TimeUnit nanoSeconds = TimeUnit.NANOSECONDS;
/** Cache Instance **/
private GemFireCacheImpl cache;
/** Distribution Config **/
private DistributionConfig config;
/** Composite type **/
private GemFireProperties gemFirePropertyData;
/**
* Internal distributed system
*/
private InternalDistributedSystem system;
/**
* Distribution manager
*/
private DM dm;
/**
* Command Service
*/
private CommandService commandService;
private String commandServiceInitError;
/**
* Reference to JDK bean MemoryMXBean
*/
private MemoryMXBean memoryMXBean;
/**
* Reference to JDK bean ThreadMXBean
*/
private ThreadMXBean threadMXBean;
/**
* Reference to JDK bean RuntimeMXBean
*/
private RuntimeMXBean runtimeMXBean;
/**
* Reference to JDK bean OperatingSystemMXBean
*/
private OperatingSystemMXBean osBean;
/**
* Host name of the member
*/
private String hostname;
/**
* The member's process id (pid)
*/
private int processId;
/**
* OS MBean Object name
*/
private ObjectName osObjectName;
/**
* Last CPU usage calculation time
*/
private long lastSystemTime = 0;
/**
* Last ProcessCPU time
*/
private long lastProcessCpuTime = 0;
private MBeanStatsMonitor monitor;
private volatile boolean lockStatsAdded = false;
private SystemManagementService service;
private MemberLevelDiskMonitor diskMonitor;
private AggregateRegionStatsMonitor regionMonitor;
private StatsRate createsRate;
private StatsRate bytesReceivedRate;
private StatsRate bytesSentRate;
private StatsRate destroysRate;
private StatsRate functionExecutionRate;
private StatsRate getsRate;
private StatsRate putAllRate;
private StatsRate putsRate;
private StatsRate transactionCommitsRate;
private StatsRate diskReadsRate;
private StatsRate diskWritesRate;
private StatsAverageLatency listenerCallsAvgLatency;
private StatsAverageLatency writerCallsAvgLatency;
private StatsAverageLatency putsAvgLatency;
private StatsAverageLatency getsAvgLatency;
private StatsAverageLatency putAllAvgLatency;
private StatsAverageLatency loadsAverageLatency;
private StatsAverageLatency netLoadsAverageLatency;
private StatsAverageLatency netSearchAverageLatency;
private StatsAverageLatency transactionCommitsAvgLatency;
private StatsAverageLatency diskFlushAvgLatency;
private StatsAverageLatency deserializationAvgLatency;
private StatsLatency deserializationLatency;
private StatsRate deserializationRate;
private StatsAverageLatency serializationAvgLatency;
private StatsLatency serializationLatency;
private StatsRate serializationRate;
private StatsAverageLatency pdxDeserializationAvgLatency;
private StatsRate pdxDeserializationRate;
private StatsRate lruDestroyRate;
private StatsRate lruEvictionRate;
private String gemFireVersion;
private String classPath;
private String name;
private String id;
private String osName = System.getProperty("os.name", "unknown");
private GCStatsMonitor gcMonitor;
private VMStatsMonitor vmStatsMonitor;
private MBeanStatsMonitor systemStatsMonitor;
private float instCreatesRate = 0;
private float instGetsRate = 0;
private float instPutsRate = 0;
private float instPutAllRate = 0;
private GemFireStatSampler sampler;
private Statistics systemStat;
private static final String MEMBER_LEVEL_DISK_MONITOR = "MemberLevelDiskMonitor";
private static final String MEMBER_LEVEL_REGION_MONITOR = "MemberLevelRegionMonitor";
private boolean cacheServer = false;
private String redundancyZone = "";
private ResourceManagerStats resourceManagerStats;
public MemberMBeanBridge(GemFireCacheImpl cache, SystemManagementService service) {
this.cache = cache;
this.service = service;
this.system = (InternalDistributedSystem) cache.getDistributedSystem();
this.dm = system.getDistributionManager();
if(dm instanceof DistributionManager){
DistributionManager distManager = (DistributionManager)system.getDistributionManager();
this.redundancyZone = distManager.getRedundancyZone(cache.getDistributedSystem().getDistributedMember());
}
this.sampler = system.getStatSampler();
this.config = system.getConfig();
try {
this.commandService = CommandService.createLocalCommandService(cache);
} catch (CacheClosedException e) {
commandServiceInitError = e.getMessage();
// LOG:CONFIG:
logger.info(LogMarker.CONFIG, "Command Service could not be initialized. {}", e.getMessage(), e);
} catch (CommandServiceException e) {
commandServiceInitError = e.getMessage();
// LOG:CONFIG:
logger.info(LogMarker.CONFIG, "Command Service could not be initialized. {}", e.getMessage(), e);
} catch (DependenciesNotFoundException e) {
commandServiceInitError = e.getMessage();
if (CacheServerLauncher.isDedicatedCacheServer) {
// log as error for dedicated cache server - launched through script
// LOG:CONFIG:
logger.info(LogMarker.CONFIG, "Command Service could not be initialized. {}", e.getMessage());
} else {
// LOG:CONFIG:
logger.info(LogMarker.CONFIG, "Command Service could not be initialized. {}", e.getMessage());
}
}
intitGemfireProperties();
try {
InetAddress addr = SocketCreator.getLocalHost();
this.hostname = addr.getHostName();
} catch (UnknownHostException ex) {
this.hostname = ManagementConstants.DEFAULT_HOST_NAME;
}
try {
this.osObjectName = new ObjectName("java.lang:type=OperatingSystem");
} catch (MalformedObjectNameException ex) {
if (logger.isDebugEnabled()) {
logger.debug(ex.getMessage(), ex);
}
} catch (NullPointerException ex) {
if (logger.isDebugEnabled()) {
logger.debug(ex.getMessage(), ex);
}
}
this.memoryMXBean = ManagementFactory.getMemoryMXBean();
this.threadMXBean = ManagementFactory.getThreadMXBean();
this.runtimeMXBean = ManagementFactory.getRuntimeMXBean();
this.osBean = ManagementFactory.getOperatingSystemMXBean();
//Initialize all the Stats Monitors
this.monitor = new MBeanStatsMonitor(ManagementStrings.MEMBER_CACHE_MONITOR
.toLocalizedString());
this.diskMonitor = new MemberLevelDiskMonitor(MEMBER_LEVEL_DISK_MONITOR);
this.regionMonitor = new AggregateRegionStatsMonitor(MEMBER_LEVEL_REGION_MONITOR);
this.gcMonitor = new GCStatsMonitor(ManagementStrings.GC_STATS_MONITOR
.toLocalizedString());
this.vmStatsMonitor = new VMStatsMonitor(ManagementStrings.VM_STATS_MONITOR
.toLocalizedString());
this.systemStatsMonitor = new MBeanStatsMonitor(ManagementStrings.SYSTEM_STATS_MONITOR
.toLocalizedString());
//Initialize Proecess related informations
this.gemFireVersion = GemFireVersion.asString();
this.classPath = runtimeMXBean.getClassPath();
this.name = cache.getDistributedSystem().getDistributedMember().getName();
this.id = cache.getDistributedSystem().getDistributedMember().getId();
try {
this.processId = ProcessUtils.identifyPid();
} catch (PidUnavailableException ex) {
if (logger.isDebugEnabled()) {
logger.debug(ex.getMessage(), ex);
}
}
QueryDataFunction qDataFunction = new QueryDataFunction();
FunctionService.registerFunction(qDataFunction);
this.resourceManagerStats = cache.getResourceManager().getStats();
}
public MemberMBeanBridge(){
this.monitor = new MBeanStatsMonitor(ManagementStrings.MEMBER_CACHE_MONITOR
.toLocalizedString());
this.diskMonitor = new MemberLevelDiskMonitor(MEMBER_LEVEL_DISK_MONITOR);
this.regionMonitor = new AggregateRegionStatsMonitor(MEMBER_LEVEL_REGION_MONITOR);
this.gcMonitor = new GCStatsMonitor(ManagementStrings.GC_STATS_MONITOR
.toLocalizedString());
this.vmStatsMonitor = new VMStatsMonitor(ManagementStrings.VM_STATS_MONITOR
.toLocalizedString());
this.systemStatsMonitor = new MBeanStatsMonitor(ManagementStrings.SYSTEM_STATS_MONITOR
.toLocalizedString());
this.system = InternalDistributedSystem.getConnectedInstance();
initializeStats();
}
public MemberMBeanBridge init() {
CachePerfStats cachePerfStats = ((GemFireCacheImpl) cache)
.getCachePerfStats();
addCacheStats(cachePerfStats);
addFunctionStats(system.getFunctionServiceStats());
if (system.getDistributionManager().getStats() instanceof DistributionStats) {
DistributionStats distributionStats = (DistributionStats) system
.getDistributionManager().getStats();
addDistributionStats(distributionStats);
}
if (PureJavaMode.osStatsAreAvailable()) {
Statistics[] systemStats = null;
if (HostStatHelper.isSolaris()) {
systemStats = system.findStatisticsByType(SolarisSystemStats.getType());
} else if (HostStatHelper.isLinux()) {
systemStats = system.findStatisticsByType(LinuxSystemStats.getType());
} else if (HostStatHelper.isOSX()) {
systemStats = null;//@TODO once OSX stats are implemented
} else if (HostStatHelper.isWindows()) {
systemStats = system.findStatisticsByType(WindowsSystemStats.getType());
}
if (systemStats != null) {
systemStat = systemStats[0];
}
}
MemoryAllocator allocator = ((GemFireCacheImpl) cache).getOffHeapStore();
if((null != allocator) ) {
OffHeapMemoryStats offHeapStats = allocator.getStats();
if(null != offHeapStats) {
addOffHeapStats(offHeapStats);
}
}
addSystemStats();
addVMStats();
initializeStats();
return this;
}
public void addOffHeapStats(OffHeapMemoryStats offHeapStats) {
Statistics offHeapMemoryStatistics = offHeapStats.getStats();
monitor.addStatisticsToMonitor(offHeapMemoryStatistics);
}
public void addCacheStats(CachePerfStats cachePerfStats) {
Statistics cachePerfStatistics = cachePerfStats.getStats();
monitor.addStatisticsToMonitor(cachePerfStatistics);
}
public void addFunctionStats(FunctionServiceStats functionServiceStats) {
Statistics functionStatistics = functionServiceStats.getStats();
monitor.addStatisticsToMonitor(functionStatistics);
}
public void addDistributionStats(DistributionStats distributionStats) {
Statistics dsStats = distributionStats.getStats();
monitor.addStatisticsToMonitor(dsStats);
}
public void addDiskStore(DiskStore dsi) {
DiskStoreImpl impl = (DiskStoreImpl) dsi;
addDiskStoreStats(impl.getStats());
}
public void addDiskStoreStats(DiskStoreStats stats){
diskMonitor.addStatisticsToMonitor(stats.getStats());
}
public void removeDiskStore(DiskStore dsi) {
DiskStoreImpl impl = (DiskStoreImpl) dsi;
removeDiskStoreStats(impl.getStats());
}
public void removeDiskStoreStats(DiskStoreStats stats){
diskMonitor.removeStatisticsFromMonitor(stats.getStats());
}
public void addRegion(Region region ){
if(region.getAttributes().getPartitionAttributes() != null){
addPartionRegionStats(((PartitionedRegion) region).getPrStats());
}
LocalRegion l = (LocalRegion) region;
if(l.getEvictionController() != null){
LRUStatistics stats = l.getEvictionController().getLRUHelper().getStats();
if (stats != null) {
addLRUStats(stats);
}
}
DiskRegion dr = l.getDiskRegion();
if(dr != null){
for(DirectoryHolder dh:dr.getDirectories()){
addDirectoryStats(dh.getDiskDirectoryStats());
}
}
}
public void addPartionRegionStats(PartitionedRegionStats parStats){
regionMonitor.addStatisticsToMonitor(parStats.getStats());
}
public void addLRUStats(LRUStatistics lruStats){
regionMonitor.addStatisticsToMonitor(lruStats.getStats());
}
public void addDirectoryStats(DiskDirectoryStats diskDirStats){
regionMonitor.addStatisticsToMonitor(diskDirStats.getStats());
}
public void removeRegion(Region region ){
if(region.getAttributes().getPartitionAttributes() != null){
removePartionRegionStats(((PartitionedRegion) region).getPrStats());
}
LocalRegion l = (LocalRegion) region;
if(l.getEvictionController() != null){
LRUStatistics stats = l.getEvictionController().getLRUHelper().getStats();
if (stats != null) {
removeLRUStats(stats);
}
}
DiskRegion dr = l.getDiskRegion();
if(dr != null){
for(DirectoryHolder dh:dr.getDirectories()){
removeDirectoryStats(dh.getDiskDirectoryStats());
}
}
}
public void removePartionRegionStats(PartitionedRegionStats parStats) {
regionMonitor.removePartitionStatistics(parStats.getStats());
}
public void removeLRUStats(LRUStatistics lruStats) {
regionMonitor.removeLRUStatistics(lruStats.getStats());
}
public void removeDirectoryStats(DiskDirectoryStats diskDirStats) {
regionMonitor.removeDirectoryStatistics(diskDirStats.getStats());
}
public void addLockServiceStats(DLockService lock){
if(!lockStatsAdded){
DLockStats stats = (DLockStats)lock.getStats();
addLockServiceStats(stats);
lockStatsAdded = true;
}
}
public void addLockServiceStats(DLockStats stats){
monitor.addStatisticsToMonitor(stats.getStats());
}
public void addSystemStats() {
GemFireStatSampler sampler = system.getStatSampler();
ProcessStats processStats = sampler.getProcessStats();
StatSamplerStats samplerStats = sampler.getStatSamplerStats();
if (processStats != null) {
systemStatsMonitor.addStatisticsToMonitor(processStats.getStatistics());
}
if(samplerStats != null){
systemStatsMonitor.addStatisticsToMonitor(samplerStats.getStats());
}
}
public void addVMStats(){
VMStatsContract vmStatsContract = system.getStatSampler().getVMStats();
if (vmStatsContract != null && vmStatsContract instanceof VMStats50){
VMStats50 vmStats50 = (VMStats50) vmStatsContract;
Statistics vmStats = vmStats50.getVMStats();
if (vmStats != null) {
vmStatsMonitor.addStatisticsToMonitor(vmStats);
}
Statistics vmHeapStats = vmStats50.getVMHeapStats();
if (vmHeapStats != null) {
vmStatsMonitor.addStatisticsToMonitor(vmHeapStats);
}
//vmStatsMonitor.addStatisticsToMonitor(vm50.getVMNonHeapStats());
StatisticsType gcType = VMStats50.getGCType();
if (gcType != null) {
Statistics[] gcStats = system.findStatisticsByType(gcType);
if (gcStats != null && gcStats.length > 0){
for (Statistics gcStat : gcStats) {
if (gcStat != null) {
gcMonitor.addStatisticsToMonitor(gcStat);
}
}
}
}
}
}
public Number getMemberLevelStatistic(String statName) {
return monitor.getStatistic(statName);
}
public Number getVMStatistic(String statName) {
return vmStatsMonitor.getStatistic(statName);
}
public Number getGCStatistic(String statName) {
return gcMonitor.getStatistic(statName);
}
public Number getSystemStatistic(String statName) {
return systemStatsMonitor.getStatistic(statName);
}
public void stopMonitor(){
monitor.stopListener();
regionMonitor.stopListener();
gcMonitor.stopListener();
systemStatsMonitor.stopListener();
vmStatsMonitor.stopListener();
}
private void initializeStats(){
createsRate = new StatsRate(StatsKey.CREATES, StatType.INT_TYPE, monitor);
bytesReceivedRate = new StatsRate(StatsKey.RECEIVED_BYTES,
StatType.LONG_TYPE, monitor);
bytesSentRate = new StatsRate(StatsKey.SENT_BYTES, StatType.LONG_TYPE,
monitor);
destroysRate = new StatsRate(StatsKey.DESTROYS, StatType.INT_TYPE, monitor);
functionExecutionRate = new StatsRate(
StatsKey.FUNCTION_EXECUTIONS_COMPLETED, StatType.INT_TYPE, monitor);
getsRate = new StatsRate(
StatsKey.GETS, StatType.INT_TYPE, monitor);
putAllRate = new StatsRate(
StatsKey.PUT_ALLS, StatType.INT_TYPE, monitor);
putsRate = new StatsRate(
StatsKey.PUTS, StatType.INT_TYPE, monitor);
transactionCommitsRate = new StatsRate(
StatsKey.TRANSACTION_COMMITS, StatType.INT_TYPE, monitor);
diskReadsRate = new StatsRate(
StatsKey.DISK_READ_BYTES, StatType.LONG_TYPE, diskMonitor);
diskWritesRate = new StatsRate(
StatsKey.DISK_WRITEN_BYTES, StatType.LONG_TYPE, diskMonitor);
listenerCallsAvgLatency = new StatsAverageLatency(
StatsKey.CACHE_LISTENER_CALLS_COMPLETED, StatType.INT_TYPE,
StatsKey.CACHE_LISTENR_CALL_TIME, monitor);
writerCallsAvgLatency = new StatsAverageLatency(
StatsKey.CACHE_WRITER_CALLS_COMPLETED, StatType.INT_TYPE,
StatsKey.CACHE_WRITER_CALL_TIME, monitor);
getsAvgLatency = new StatsAverageLatency(
StatsKey.GETS, StatType.INT_TYPE,
StatsKey.GET_TIME, monitor);
putAllAvgLatency = new StatsAverageLatency(
StatsKey.PUT_ALLS, StatType.INT_TYPE,
StatsKey.PUT_ALL_TIME, monitor);
putsAvgLatency = new StatsAverageLatency(
StatsKey.PUTS, StatType.INT_TYPE,
StatsKey.PUT_TIME, monitor);
loadsAverageLatency = new StatsAverageLatency(
StatsKey.LOADS_COMPLETED, StatType.INT_TYPE,
StatsKey.LOADS_TIME, monitor);
netLoadsAverageLatency = new StatsAverageLatency(
StatsKey.NET_LOADS_COMPLETED, StatType.INT_TYPE,
StatsKey.NET_LOADS_TIME, monitor);
netSearchAverageLatency = new StatsAverageLatency(
StatsKey.NET_SEARCH_COMPLETED, StatType.INT_TYPE,
StatsKey.NET_SEARCH_TIME, monitor);
transactionCommitsAvgLatency = new StatsAverageLatency(
StatsKey.TRANSACTION_COMMITS, StatType.INT_TYPE,
StatsKey.TRANSACTION_COMMIT_TIME, monitor);
diskFlushAvgLatency = new StatsAverageLatency(
StatsKey.NUM_FLUSHES, StatType.INT_TYPE,
StatsKey.TOTAL_FLUSH_TIME, diskMonitor);
deserializationAvgLatency = new StatsAverageLatency(
StatsKey.DESERIALIZATIONS, StatType.INT_TYPE,
StatsKey.DESERIALIZATION_TIME, monitor);
deserializationLatency = new StatsLatency(StatsKey.DESERIALIZATIONS,
StatType.INT_TYPE, StatsKey.DESERIALIZATION_TIME, monitor);
deserializationRate = new StatsRate(StatsKey.DESERIALIZATIONS,
StatType.INT_TYPE, monitor);
serializationAvgLatency = new StatsAverageLatency(StatsKey.SERIALIZATIONS,
StatType.INT_TYPE, StatsKey.SERIALIZATION_TIME, monitor);
serializationLatency = new StatsLatency(StatsKey.SERIALIZATIONS,
StatType.INT_TYPE, StatsKey.SERIALIZATION_TIME, monitor);
serializationRate = new StatsRate(StatsKey.SERIALIZATIONS,
StatType.INT_TYPE, monitor);
pdxDeserializationAvgLatency = new StatsAverageLatency(
StatsKey.PDX_INSTANCE_DESERIALIZATIONS, StatType.INT_TYPE,
StatsKey.PDX_INSTANCE_DESERIALIZATION_TIME, monitor);
pdxDeserializationRate = new StatsRate(
StatsKey.PDX_INSTANCE_DESERIALIZATIONS, StatType.INT_TYPE, monitor);
lruDestroyRate = new StatsRate(
StatsKey.LRU_DESTROYS, StatType.LONG_TYPE, regionMonitor);
lruEvictionRate = new StatsRate(
StatsKey.LRU_EVICTIONS, StatType.LONG_TYPE, regionMonitor);
}
private void intitGemfireProperties() {
if (gemFirePropertyData == null) {
this.gemFirePropertyData = BeanUtilFuncs.initGemfireProperties(config);
}
}
/**
* @return Some basic JVM metrics at the particular instance
*/
public JVMMetrics fetchJVMMetrics() {
long gcCount = getGCStatistic(StatsKey.VM_GC_STATS_COLLECTIONS)
.longValue();
long gcTimeMillis = getGCStatistic(
StatsKey.VM_GC_STATS_COLLECTION_TIME).longValue();
//Fixed values might not be updated back by Stats monitor. Hence getting it directly
long initMemory = memoryMXBean.getHeapMemoryUsage().getInit();
long committedMemory = memoryMXBean.getHeapMemoryUsage().getCommitted();
long usedMemory = getVMStatistic(StatsKey.VM_USED_MEMORY).longValue();
long maxMemory = memoryMXBean.getHeapMemoryUsage().getMax();
int totalThreads = getVMStatistic(StatsKey.VM_STATS_NUM_THREADS)
.intValue();
return new JVMMetrics(gcCount, gcTimeMillis, initMemory, committedMemory,
usedMemory, maxMemory, totalThreads);
}
/**
* All OS metrics are not present in
* java.lang.management.OperatingSystemMXBean It has to be cast to
* com.sun.management.OperatingSystemMXBean. To avoid the cast using dynamic
* call so that Java platform will take care of the details in a native
* manner;
*
* @return Some basic OS metrics at the particular instance
*/
public OSMetrics fetchOSMetrics() {
OSMetrics metrics = null;
try {
long maxFileDescriptorCount = 0;
long openFileDescriptorCount = 0;
long processCpuTime = 0;
long committedVirtualMemorySize = 0;
long totalPhysicalMemorySize = 0;
long freePhysicalMemorySize = 0;
long totalSwapSpaceSize = 0;
long freeSwapSpaceSize = 0;
String name = osBean.getName();
String version = osBean.getVersion();
String arch = osBean.getArch();
int availableProcessors = osBean.getAvailableProcessors();
double systemLoadAverage = osBean.getSystemLoadAverage();
openFileDescriptorCount = getVMStatistic(
StatsKey.VM_STATS_OPEN_FDS).longValue();
processCpuTime = getVMStatistic(StatsKey.VM_PROCESS_CPU_TIME)
.longValue();
try {
maxFileDescriptorCount = (Long) mbeanServer.getAttribute(osObjectName,
"MaxFileDescriptorCount");
} catch (Exception e) {
maxFileDescriptorCount = -1;
}
try {
committedVirtualMemorySize = (Long) mbeanServer.getAttribute(
osObjectName, "CommittedVirtualMemorySize");
} catch (Exception e) {
committedVirtualMemorySize = -1;
}
//If Linux System type exists
if (PureJavaMode.osStatsAreAvailable() && HostStatHelper.isLinux() && systemStat != null) {
try {
totalPhysicalMemorySize = systemStat.get(
StatsKey.LINUX_SYSTEM_PHYSICAL_MEMORY).longValue();
} catch (Exception e) {
totalPhysicalMemorySize = -1;
}
try {
freePhysicalMemorySize = systemStat.get(
StatsKey.LINUX_SYSTEM_FREE_MEMORY).longValue();
} catch (Exception e) {
freePhysicalMemorySize = -1;
}
try {
totalSwapSpaceSize = systemStat.get(
StatsKey.LINUX_SYSTEM_TOTAL_SWAP_SIZE).longValue();
} catch (Exception e) {
totalSwapSpaceSize = -1;
}
try {
freeSwapSpaceSize = systemStat.get(
StatsKey.LINUX_SYSTEM_FREE_SWAP_SIZE).longValue();
} catch (Exception e) {
freeSwapSpaceSize = -1;
}
} else {
totalPhysicalMemorySize = -1;
freePhysicalMemorySize = -1;
totalSwapSpaceSize = -1;
freeSwapSpaceSize = -1;
}
metrics = new OSMetrics(maxFileDescriptorCount, openFileDescriptorCount,
processCpuTime, committedVirtualMemorySize, totalPhysicalMemorySize,
freePhysicalMemorySize, totalSwapSpaceSize, freeSwapSpaceSize, name,
version, arch, availableProcessors, systemLoadAverage);
} catch (Exception ex) {
if(logger.isTraceEnabled()){
logger.trace(ex.getMessage(), ex);
}
}
return metrics;
}
/**
*
* @return GemFire Properties
*/
public GemFireProperties getGemFireProperty() {
return gemFirePropertyData;
}
/**
* Creates a Manager
* @return successful or not
*/
public boolean createManager() {
if (service.isManager()) {
return false;
}
return service.createManager();
}
/**
* An instruction to members with cache that they should compact their disk
* stores.
*
* @return a list of compacted Disk stores
*/
public String[] compactAllDiskStores() {
GemFireCacheImpl cacheImpl = (GemFireCacheImpl) cache;
List<String> compactedStores = new ArrayList<String>();
if (cache != null && !cache.isClosed()) {
for (DiskStoreImpl store : cacheImpl.listDiskStoresIncludingRegionOwned()) {
if (store.forceCompaction()) {
compactedStores.add(store.getPersistentID().getDirectory());
}
}
}
String[] compactedStoresAr = new String[compactedStores.size()];
return compactedStores.toArray(compactedStoresAr);
}
/**
* List all the disk Stores at member level
*
* @param includeRegionOwned
* indicates whether to show the disk belonging to any particular
* region
* @return list all the disk Stores name at cache level
*/
public String[] listDiskStores(boolean includeRegionOwned) {
GemFireCacheImpl cacheImpl = (GemFireCacheImpl) cache;
String[] retStr = null;
Collection<DiskStoreImpl> diskCollection = null;
if (includeRegionOwned) {
diskCollection = cacheImpl.listDiskStoresIncludingRegionOwned();
} else {
diskCollection = cacheImpl.listDiskStores();
}
if (diskCollection != null && diskCollection.size() > 0) {
retStr = new String[diskCollection.size()];
Iterator<DiskStoreImpl> it = diskCollection.iterator();
int i = 0;
while (it.hasNext()) {
retStr[i] = it.next().getName();
i++;
}
}
return retStr;
}
/**
*
* @return list of disk stores which defaults includeRegionOwned = true;
*/
public String[] getDiskStores() {
return listDiskStores(true);
}
/**
* @return list all the HDFSStore's name at cache level
*/
public String[] getHDFSStores() {
GemFireCacheImpl cacheImpl = (GemFireCacheImpl) cache;
String[] retStr = null;
Collection<HDFSStoreImpl> hdfsStoreCollection = null;
hdfsStoreCollection = cacheImpl.getHDFSStores();
if (hdfsStoreCollection != null && hdfsStoreCollection.size() > 0) {
retStr = new String[hdfsStoreCollection.size()];
Iterator<HDFSStoreImpl> it = hdfsStoreCollection.iterator();
int i = 0;
while (it.hasNext()) {
retStr[i] = it.next().getName();
i++;
}
}
return retStr;
}
/**
*
* @return log of the member.
*/
public String fetchLog(int numLines){
if(numLines > ManagementConstants.MAX_SHOW_LOG_LINES){
numLines = ManagementConstants.MAX_SHOW_LOG_LINES;
}
if(numLines == 0 || numLines < 0){
numLines = ManagementConstants.DEFAULT_SHOW_LOG_LINES;
}
String childTail = null;
String mainTail = null;
try {
InternalDistributedSystem sys = system;
LogWriterAppender lwa = LogWriterAppenders.getAppender(LogWriterAppenders.Identifier.MAIN);
if (lwa != null) {
childTail = BeanUtilFuncs.tailSystemLog(lwa.getChildLogFile(),numLines);
mainTail = BeanUtilFuncs.tailSystemLog(sys.getConfig(), numLines);
if (mainTail == null) {
mainTail = LocalizedStrings.TailLogResponse_NO_LOG_FILE_WAS_SPECIFIED_IN_THE_CONFIGURATION_MESSAGES_WILL_BE_DIRECTED_TO_STDOUT
.toLocalizedString();
}
} else {
Assert
.assertTrue(false,
"TailLogRequest/Response processed in application vm with shared logging.");
}
} catch (IOException e) {
logger.warn(LocalizedMessage.create(LocalizedStrings.TailLogResponse_ERROR_OCCURRED_WHILE_READING_SYSTEM_LOG__0, e));
mainTail = "";
}
if (childTail == null && mainTail == null) {
return LocalizedStrings.SystemMemberImpl_NO_LOG_FILE_CONFIGURED_LOG_MESSAGES_WILL_BE_DIRECTED_TO_STDOUT
.toLocalizedString();
} else {
StringBuffer result = new StringBuffer();
if (mainTail != null) {
result.append(mainTail);
}
if (childTail != null) {
result.append("\n"
+ LocalizedStrings.SystemMemberImpl_TAIL_OF_CHILD_LOG
.toLocalizedString() + "\n");
result.append(childTail);
}
return result.toString();
}
}
/**
* Using async thread. As remote operation will be executed by
* FunctionService. Might cause problems in cleaning up function related
* resources. Aggregate bean DistributedSystemMBean will have to depend on
* GemFire messages to decide whether all the members have been shutdown or
* not before deciding to shut itself down
*/
public void shutDownMember() {
final InternalDistributedSystem ids = dm.getSystem();
if (ids.isConnected()) {
Thread t = new Thread(new Runnable() {
public void run() {
try {
// Allow the Function call to exit
Thread.sleep(1000);
} catch (InterruptedException e) {
}
ConnectionTable.threadWantsSharedResources();
if (ids.isConnected()) {
ids.disconnect();
}
}
});
t.start();
}
}
/**
* backs up all the disk to the targeted directory
*
* @param targetDirPath
* path of the directory where back up is to be taken
* @return array of DiskBackup results which might get aggregated at Managing
* node
*
* Check the validity of this mbean call. When does it make sense to backup a single member of a gemfire system
* in isolation of the other members?
*/
public DiskBackupResult[] backupMember(String targetDirPath) {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
if (cache != null) {
Collection<DiskStoreImpl> diskStores = cache
.listDiskStoresIncludingRegionOwned();
for (DiskStoreImpl store : diskStores) {
store.flush();
}
}
DiskBackupResult[] diskBackUpResult = null;
File targetDir = new File(targetDirPath);
if (cache == null) {
return null;
} else {
try {
BackupManager manager = cache.startBackup(cache.getDistributedSystem()
.getDistributedMember());
Set<PersistentID> existingDataStores = manager.prepareBackup();
Set<PersistentID> successfulDataStores = manager
.finishBackup(targetDir, null/* TODO rishi */);
diskBackUpResult = new DiskBackupResult[existingDataStores.size()];
int j = 0;
for (PersistentID id : existingDataStores) {
if (successfulDataStores.contains(id)) {
diskBackUpResult[j] = new DiskBackupResult(id.getDirectory(), false);
} else {
diskBackUpResult[j] = new DiskBackupResult(id.getDirectory(), true);
}
j++;
}
} catch (IOException e) {
throw new ManagementException(e);
}
}
return diskBackUpResult;
}
/**
*
* @return The name for this member.
*/
public String getName() {
return name;
}
/**
*
* @return The ID for this member.
*/
public String getId() {
return id;
}
/**
*
* @return The name of the member if it's been set, otherwise the ID of the member
*/
public String getMember() {
if (name != null && !name.isEmpty()) {
return name;
}
return id;
}
public String[] getGroups() {
List<String> groups = cache.getDistributedSystem().getDistributedMember().getGroups();
String[] groupsArray = new String[groups.size()];
groupsArray = groups.toArray(groupsArray);
return groupsArray;
}
/**
*
* @return classPath of the VM
*/
public String getClassPath() {
return classPath;
}
/**
*
* @return Connected gateway receivers
*/
public String[] listConnectedGatewayReceivers() {
if ((cache != null && cache.getGatewayReceivers().size() > 0)) {
Set<GatewayReceiver> receivers = cache.getGatewayReceivers();
String[] arr = new String[receivers.size()];
int j = 0;
for (GatewayReceiver recv : receivers) {
arr[j] = recv.getBindAddress();
j++;
}
return arr;
}
return ManagementConstants.NO_DATA_STRING;
}
/**
*
* @return Connected gateway senders
*/
public String[] listConnectedGatewaySenders() {
if ((cache != null && cache.getGatewaySenders().size() > 0)) {
Set<GatewaySender> senders = cache.getGatewaySenders();
String[] arr = new String[senders.size()];
int j = 0;
for (GatewaySender sender : senders) {
arr[j] = sender.getId();
j++;
}
return arr;
}
return ManagementConstants.NO_DATA_STRING;
}
/**
*
* @return approximate usage of CPUs
*/
public float getCpuUsage() {
return vmStatsMonitor.getCpuUsage();
}
/**
*
* @return current time of the system
*/
public long getCurrentTime() {
return System.currentTimeMillis();
}
public String getHost() {
return hostname;
}
/**
* @return the member's process id (pid)
*/
public int getProcessId() {
return processId;
}
/**
* Gets a String describing the GemFire member's status. A GemFire member includes, but is not limited to: Locators,
* Managers, Cache Servers and so on.
* </p>
* @return String description of the GemFire member's status.
* @see #isLocator()
* @see #isServer()
*/
public String status() {
//if (isLocator()) {
if (LocatorLauncher.getInstance() != null) {
return LocatorLauncher.getLocatorState().toJson();
}
//else if (isServer()) {
else if (ServerLauncher.getInstance() != null) {
return ServerLauncher.getServerState().toJson();
}
// TODO implement for non-launcher processes and other GemFire processes (Managers, etc)...
return null;
}
/**
*
* @return total heap usage in bytes
*/
public long getTotalBytesInUse() {
MemoryUsage memHeap = memoryMXBean.getHeapMemoryUsage();
long bytesUsed = memHeap.getUsed();
return bytesUsed;
}
/**
*
* @return Number of availabe CPUs
*/
public int getAvailableCpus() {
Runtime runtime = Runtime.getRuntime();
return runtime.availableProcessors();
}
/**
*
* @return JVM thread list
*/
public String[] fetchJvmThreads() {
long threadIds[] = threadMXBean.getAllThreadIds();
ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadIds, 0);
if (threadInfos == null || threadInfos.length < 1) {
return ManagementConstants.NO_DATA_STRING;
}
String[] thrdStr = new String[threadInfos.length];
int j = 0;
for (ThreadInfo thInfo : threadInfos) {
thrdStr[j] = thInfo.getThreadName();
j++;
}
return thrdStr;
}
/**
*
* @return list of regions
*/
public String[] getListOfRegions() {
Set<LocalRegion> listOfAppRegions = cache.getApplicationRegions();
if (listOfAppRegions != null && listOfAppRegions.size() > 0) {
String[] regionStr = new String[listOfAppRegions.size()];
int j = 0;
for (LocalRegion rg : listOfAppRegions) {
regionStr[j] = rg.getFullPath();
j++;
}
return regionStr;
}
return ManagementConstants.NO_DATA_STRING;
}
/**
*
* @return configuration data lock lease
*/
public long getLockLease() {
return cache.getLockLease();
}
/**
*
* @return configuration data lock time out
*/
public long getLockTimeout() {
return cache.getLockTimeout();
}
/**
*
* @return the duration for which the member is up
*/
public long getMemberUpTime() {
return cache.getUpTime();
}
/**
*
* @return root region names
*/
public String[] getRootRegionNames() {
Set<LocalRegion> listOfRootRegions = cache.rootRegions();
if (listOfRootRegions != null && listOfRootRegions.size() > 0) {
String[] regionStr = new String[listOfRootRegions.size()];
int j = 0;
for (LocalRegion rg : listOfRootRegions) {
regionStr[j] = rg.getFullPath();
j++;
}
return regionStr;
}
return ManagementConstants.NO_DATA_STRING;
}
/**
*
* @return Current GemFire version
*/
public String getVersion() {
return gemFireVersion;
}
/**
*
* @return true if this members has a gateway receiver
*/
public boolean hasGatewayReceiver() {
return (cache != null && cache.getGatewayReceivers().size() > 0);
}
/**
*
* @return true if member has Gateway senders
*/
public boolean hasGatewaySender() {
return (cache != null && cache.getAllGatewaySenders().size() > 0);
}
/**
*
* @return true if member contains one locator. From 7.0 only locator can be
* hosted in a JVM
*/
public boolean isLocator() {
return Locator.hasLocator();
}
/**
*
* @return true if the Federating Manager Thread is running
*/
public boolean isManager() {
GemFireCacheImpl existingCache = GemFireCacheImpl.getInstance();
if (existingCache == null || existingCache.isClosed()) {
return false;
}
try{
boolean isManager = service.isManager();
return isManager;
}catch(Exception e){
return false;
}
}
/**
* Returns true if the manager has been created.
* Note it does not need to be running so this
* method can return true when isManager returns false.
* @return true if the manager has been created.
*/
public boolean isManagerCreated() {
GemFireCacheImpl existingCache = GemFireCacheImpl.getInstance();
if (existingCache == null || existingCache.isClosed()) {
return false;
}
try {
return service.isManagerCreated();
} catch(Exception e) {
return false;
}
}
/**
*
* @return true if member has a server
*/
public boolean isServer() {
return cache.isServer();
}
/** Statistics Related Attributes **/
/*********************************************************************************************************/
public int getInitialImageKeysReceived() {
return getMemberLevelStatistic(StatsKey.GET_INITIAL_IMAGE_KEYS_RECEIVED)
.intValue();
}
public long getInitialImageTime() {
return getMemberLevelStatistic(StatsKey.GET_INITIAL_IMAGE_TIME).longValue();
}
public int getInitialImagesInProgres() {
return getMemberLevelStatistic(StatsKey.GET_INITIAL_IMAGES_INPROGRESS)
.intValue();
}
public long getTotalIndexMaintenanceTime() {
return getMemberLevelStatistic(StatsKey.TOTAL_INDEX_UPDATE_TIME)
.longValue();
}
public float getBytesReceivedRate() {
return bytesReceivedRate.getRate();
}
public float getBytesSentRate() {
return bytesSentRate.getRate();
}
public long getCacheListenerCallsAvgLatency() {
return listenerCallsAvgLatency.getAverageLatency();
}
public long getCacheWriterCallsAvgLatency() {
return writerCallsAvgLatency.getAverageLatency();
}
public float getCreatesRate() {
this.instCreatesRate = createsRate.getRate();
return instCreatesRate;
}
public float getDestroysRate() {
return destroysRate.getRate();
}
public float getDiskReadsRate() {
return diskReadsRate.getRate();
}
public float getDiskWritesRate() {
return diskWritesRate.getRate();
}
public int getTotalBackupInProgress() {
return diskMonitor.getBackupsInProgress();
}
public int getTotalBackupCompleted() {
return diskMonitor.getBackupsCompleted();
}
public long getDiskFlushAvgLatency() {
return diskFlushAvgLatency.getAverageLatency();
}
public float getFunctionExecutionRate() {
return functionExecutionRate.getRate();
}
public long getGetsAvgLatency() {
return getsAvgLatency.getAverageLatency();
}
public float getGetsRate() {
this.instGetsRate = getsRate.getRate();
return instGetsRate;
}
public int getLockWaitsInProgress() {
return getMemberLevelStatistic(StatsKey.LOCK_WAITS_IN_PROGRESS).intValue();
}
public int getNumRunningFunctions() {
return getMemberLevelStatistic(StatsKey.FUNCTION_EXECUTIONS_RUNNING)
.intValue();
}
public int getNumRunningFunctionsHavingResults() {
return getMemberLevelStatistic(
StatsKey.FUNCTION_EXECUTIONS_HASRESULT_RUNNING).intValue();
}
public long getPutAllAvgLatency() {
return putAllAvgLatency.getAverageLatency();
}
public float getPutAllRate() {
this.instPutAllRate = putAllRate.getRate();
return instPutAllRate;
}
public long getPutsAvgLatency() {
return putsAvgLatency.getAverageLatency();
}
public float getPutsRate() {
this.instPutsRate = putsRate.getRate();
return instPutsRate;
}
public int getLockRequestQueues() {
return getMemberLevelStatistic(StatsKey.LOCK_REQUEST_QUEUE).intValue();
}
public int getPartitionRegionCount() {
return getMemberLevelStatistic(StatsKey.PARTITIONED_REGIONS).intValue();
}
public int getTotalPrimaryBucketCount() {
return regionMonitor.getTotalPrimaryBucketCount();
}
public int getTotalBucketCount() {
return regionMonitor.getTotalBucketCount();
}
public int getTotalBucketSize() {
return regionMonitor.getTotalBucketSize();
}
public int getTotalHitCount() {
return getMemberLevelStatistic(StatsKey.GETS).intValue()
- getTotalMissCount();
}
public float getLruDestroyRate() {
return lruDestroyRate.getRate();
}
public float getLruEvictionRate() {
return lruEvictionRate.getRate();
}
public int getTotalLoadsCompleted() {
return getMemberLevelStatistic(StatsKey.LOADS_COMPLETED).intValue();
}
public long getLoadsAverageLatency() {
return loadsAverageLatency.getAverageLatency();
}
public int getTotalNetLoadsCompleted() {
return getMemberLevelStatistic(StatsKey.NET_LOADS_COMPLETED).intValue();
}
public long getNetLoadsAverageLatency() {
return netLoadsAverageLatency.getAverageLatency();
}
public int getTotalNetSearchCompleted() {
return getMemberLevelStatistic(StatsKey.NET_SEARCH_COMPLETED).intValue();
}
public long getNetSearchAverageLatency() {
return netSearchAverageLatency.getAverageLatency();
}
public long getTotalLockWaitTime() {
return getMemberLevelStatistic(StatsKey.LOCK_WAIT_TIME).intValue();
}
public int getTotalMissCount() {
return getMemberLevelStatistic(StatsKey.MISSES).intValue();
}
public int getTotalNumberOfLockService() {
return getMemberLevelStatistic(StatsKey.LOCK_SERVICES).intValue();
}
public int getTotalNumberOfGrantors() {
return getMemberLevelStatistic(StatsKey.LOCK_GRANTORS).intValue();
}
public int getTotalDiskTasksWaiting() {
return getMemberLevelStatistic(StatsKey.TOTAL_DISK_TASK_WAITING).intValue();
}
public int getTotalRegionCount() {
return getMemberLevelStatistic(StatsKey.REGIONS).intValue();
}
public int getTotalRegionEntryCount() {
return getMemberLevelStatistic(StatsKey.ENTRIES).intValue();
}
public int getTotalTransactionsCount() {
return getMemberLevelStatistic(StatsKey.TRANSACTION_COMMITS).intValue()
+ getMemberLevelStatistic(StatsKey.TRANSACTION_ROLLBACKS).intValue();
}
public long getTransactionCommitsAvgLatency() {
return transactionCommitsAvgLatency.getAverageLatency();
}
public float getTransactionCommitsRate() {
return transactionCommitsRate.getRate();
}
public int getTransactionCommittedTotalCount() {
return getMemberLevelStatistic(StatsKey.TRANSACTION_COMMITS).intValue();
}
public int getTransactionRolledBackTotalCount() {
return getMemberLevelStatistic(StatsKey.TRANSACTION_ROLLBACKS).intValue();
}
public long getDeserializationAvgLatency() {
return deserializationAvgLatency.getAverageLatency();
}
public long getDeserializationLatency() {
return deserializationLatency.getLatency();
}
public float getDeserializationRate() {
return deserializationRate.getRate();
}
public long getSerializationAvgLatency() {
return serializationAvgLatency.getAverageLatency();
}
public long getSerializationLatency() {
return serializationLatency.getLatency();
}
public float getSerializationRate() {
return serializationRate.getRate();
}
public long getPDXDeserializationAvgLatency() {
return pdxDeserializationAvgLatency.getAverageLatency();
}
public float getPDXDeserializationRate() {
return pdxDeserializationRate.getRate();
}
/**
* Processes the given command string using the given environment information
* if it's non-empty. Result returned is in a JSON format.
*
* @param commandString
* command string to be processed
* @param env
* environment information to be used for processing the command
* @return result of the processing the given command string.
*/
public String processCommand(String commandString, Map<String, String> env) {
if (commandService == null) {
throw new JMRuntimeException(
"Command can not be processed as Command Service did not get initialized. Reason: "+commandServiceInitError);
}
boolean isGfshRequest = isGfshRequest(env);
if (isGfshRequest) {
CommandExecutionContext.setShellRequest();
}
// System.out.println("isGfshRequest :: "+isGfshRequest);
Result result = ((MemberCommandService)commandService).processCommand(commandString, env);
if (!(result instanceof CommandResult)) {// TODO - Abhishek - Shouldn't be needed
while (result.hasNextLine()) {
result = ResultBuilder.createInfoResult(result.nextLine());
}
}
if (isGfshRequest) {
String responseJson = CommandResponseBuilder.createCommandResponseJson(getMember(), (CommandResult) result);
// System.out.println("responseJson :: "+responseJson);
return responseJson;
} else {
return ResultBuilder.resultAsString(result);
}
}
private boolean isGfshRequest(Map<String, String> env) {
String appName = null;
if (env != null) {
appName = env.get(Gfsh.ENV_APP_NAME);
}
// System.out.println("appName :: "+appName);
return Gfsh.GFSH_APP_NAME.equals(appName);
}
public long getTotalDiskUsage() {
long diskSpaceUsage = regionMonitor.getDiskSpace();
return diskSpaceUsage;
}
public float getAverageReads() {
return instGetsRate;
}
public float getAverageWrites() {
return instCreatesRate + instPutsRate + instPutAllRate;
}
public long getGarbageCollectionTime() {
return getGCStatistic(StatsKey.VM_GC_STATS_COLLECTION_TIME).longValue();
}
public long getGarbageCollectionCount() {
return getGCStatistic(StatsKey.VM_GC_STATS_COLLECTIONS).longValue();
}
public long getJVMPauses() {
return getSystemStatistic(StatsKey.JVM_PAUSES).intValue();
}
public double getLoadAverage() {
return osBean.getSystemLoadAverage();
}
public int getNumThreads() {
return getVMStatistic(StatsKey.VM_STATS_NUM_THREADS).intValue();
}
/**
*
* @return max limit of FD ..Ulimit
*/
public long getFileDescriptorLimit() {
if (!osName.startsWith(ManagementConstants.LINUX_SYSTEM)) {
return -1;
}
long maxFileDescriptorCount = 0;
try {
maxFileDescriptorCount = (Long) mbeanServer.getAttribute(osObjectName,
"MaxFileDescriptorCount");
} catch (Exception e) {
maxFileDescriptorCount = -1;
}
return maxFileDescriptorCount;
}
/**
*
* @return count of currently opened FDs
*/
public long getTotalFileDescriptorOpen() {
if(!osName.startsWith(ManagementConstants.LINUX_SYSTEM)){
return -1;
}
return getVMStatistic(StatsKey.VM_STATS_OPEN_FDS).longValue();
}
public int getOffHeapObjects() {
int objects = 0;
OffHeapMemoryStats stats = getOffHeapStats();
if(null != stats) {
objects = stats.getObjects();
}
return objects;
}
@Deprecated
public long getOffHeapFreeSize() {
return getOffHeapFreeMemory();
}
@Deprecated
public long getOffHeapUsedSize() {
return getOffHeapUsedMemory();
}
public long getOffHeapMaxMemory() {
long usedSize = 0;
OffHeapMemoryStats stats = getOffHeapStats();
if(null != stats) {
usedSize = stats.getMaxMemory();
}
return usedSize;
}
public long getOffHeapFreeMemory() {
long freeSize = 0;
OffHeapMemoryStats stats = getOffHeapStats();
if(null != stats) {
freeSize = stats.getFreeMemory();
}
return freeSize;
}
public long getOffHeapUsedMemory() {
long usedSize = 0;
OffHeapMemoryStats stats = getOffHeapStats();
if(null != stats) {
usedSize = stats.getUsedMemory();
}
return usedSize;
}
public int getOffHeapFragmentation() {
int fragmentation = 0;
OffHeapMemoryStats stats = getOffHeapStats();
if(null != stats) {
fragmentation = stats.getFragmentation();
}
return fragmentation;
}
public long getOffHeapCompactionTime() {
long compactionTime = 0;
OffHeapMemoryStats stats = getOffHeapStats();
if(null != stats) {
compactionTime = stats.getCompactionTime();
}
return compactionTime;
}
/**
* Returns the OffHeapMemoryStats for this VM.
*/
private OffHeapMemoryStats getOffHeapStats() {
OffHeapMemoryStats stats = null;
MemoryAllocator offHeap = this.cache.getOffHeapStore();
if(null != offHeap) {
stats = offHeap.getStats();
}
return stats;
}
public int getHostCpuUsage() {
if (systemStat != null) {
return systemStat.get(StatsKey.SYSTEM_CPU_ACTIVE).intValue();
} else {
return ManagementConstants.NOT_AVAILABLE_INT;
}
}
public boolean isCacheServer() {
return cacheServer;
}
public void setCacheServer(boolean cacheServer) {
this.cacheServer = cacheServer;
}
public String getRedundancyZone() {
return redundancyZone;
}
public int getRebalancesInProgress() {
return resourceManagerStats.getRebalancesInProgress();
}
public int getReplyWaitsInProgress() {
return getMemberLevelStatistic(StatsKey.REPLY_WAITS_IN_PROGRESS).intValue();
}
public int getReplyWaitsCompleted() {
return getMemberLevelStatistic(StatsKey.REPLY_WAITS_COMPLETED).intValue();
}
public int getVisibleNodes() {
return getMemberLevelStatistic(StatsKey.NODES).intValue();
}
public long getMaxMemory() {
Runtime rt = Runtime.getRuntime();
return rt.maxMemory() / MBFactor;
}
public long getFreeMemory() {
Runtime rt = Runtime.getRuntime();
return rt.freeMemory() / MBFactor;
}
public long getUsedMemory() {
return getVMStatistic(StatsKey.VM_USED_MEMORY).longValue() / MBFactor;
}
}