This is an automated email from the ASF dual-hosted git repository.
prhomberg pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 69143c1 GEODE-3961: Refactor ShowMetricsCommand to handle
--categories uniformly
69143c1 is described below
commit 69143c14f43f8cee514e36630bb495b3c106bcec
Author: Patrick Rhomberg <[email protected]>
AuthorDate: Tue Nov 14 10:02:44 2017 -0800
GEODE-3961: Refactor ShowMetricsCommand to handle --categories uniformly
* GEODE-3961: Refactor ShowMetricsCommand to behave uniformly when
--categories is provided.
* The ShowMetricsCommand has been almost entirely refactored, but with
minimal change to existing behavior.
* The category "cache-server" has been renamed to "cacheserver"
* The "query" category now only lists once instead of twice.
* Category checking is now performed by the client, not the server.
* Alphabetized excludedClasses.txt
---
.../geode/management/internal/cli/GfshParser.java | 2 +-
.../internal/cli/commands/ShowMetricsCommand.java | 1456 ++++++++------------
.../cli/commands/ShowMetricsInterceptor.java | 107 ++
.../management/internal/cli/i18n/CliStrings.java | 7 +-
.../geode/internal/cache/ha/Bug48571DUnitTest.java | 96 +-
.../ShowMetricsCommandIntegrationTest.java | 171 +++
.../cli/commands/ShowMetricsDUnitTest.java | 4 +-
...andJUnitTest.java => ShowMetricsJUnitTest.java} | 8 +-
.../test/junit/assertions/CommandResultAssert.java | 38 +-
.../apache/geode/codeAnalysis/excludedClasses.txt | 215 +--
.../cli/commands/golden-help-offline.properties | 10 +-
11 files changed, 1057 insertions(+), 1057 deletions(-)
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
index 9cebc63..4fc7d4e 100755
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
@@ -282,7 +282,7 @@ public class GfshParser extends SimpleParser {
/**
* @param buffer use the buffer to find the completion candidates
*
- * Note the cursor maynot be the size the buffer
+ * Note the cursor may not be the size the buffer
*/
private List<Completion> getCandidates(String buffer) {
List<Completion> candidates = new ArrayList<>();
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommand.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommand.java
index 6783925..bf303f5 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommand.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommand.java
@@ -15,21 +15,22 @@
package org.apache.geode.management.internal.cli.commands;
-import java.util.Collections;
-import java.util.HashMap;
+import java.util.Arrays;
import java.util.HashSet;
-import java.util.Map;
+import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.management.ObjectName;
-import org.apache.logging.log4j.Logger;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.CacheServerMXBean;
import org.apache.geode.management.DistributedRegionMXBean;
import org.apache.geode.management.DistributedSystemMXBean;
@@ -42,8 +43,6 @@ import org.apache.geode.management.cli.ConverterHint;
import org.apache.geode.management.cli.Result;
import org.apache.geode.management.internal.MBeanJMXAdapter;
import org.apache.geode.management.internal.SystemManagementService;
-import org.apache.geode.management.internal.cli.AbstractCliAroundInterceptor;
-import org.apache.geode.management.internal.cli.GfshParseResult;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
import org.apache.geode.management.internal.cli.result.CompositeResultData;
import org.apache.geode.management.internal.cli.result.ErrorResultData;
@@ -55,11 +54,51 @@ import
org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.ResourcePermission;
public class ShowMetricsCommand implements GfshCommand {
- private static final Logger logger = LogService.getLogger();
+ enum Category {
+ cache,
+ cacheserver,
+ callback,
+ cluster,
+ communication,
+ diskstore,
+ distribution,
+ eviction,
+ function,
+ jvm,
+ lock,
+ offheap,
+ member,
+ notification,
+ partition,
+ query,
+ region,
+ serialization,
+ transaction
+ }
+
+ static final List<Category> REGION_METRIC_CATEGORIES =
Arrays.asList(Category.callback,
+ Category.diskstore, Category.eviction, Category.partition,
Category.region);
+
+ static final List<Category> SYSTEM_METRIC_CATEGORIES =
+ Arrays.asList(Category.cache, Category.cluster, Category.diskstore,
Category.query);
+
+ static final List<Category> SYSTEM_REGION_METRIC_CATEGORIES =
Arrays.asList(Category.callback,
+ Category.cluster, Category.diskstore, Category.eviction,
Category.partition, Category.region);
+
+ static final List<Category> MEMBER_METRIC_CATEGORIES =
+ Arrays.asList(Category.communication, Category.diskstore,
Category.distribution,
+ Category.eviction, Category.function, Category.jvm, Category.lock,
Category.member,
+ Category.offheap, Category.region, Category.serialization,
Category.transaction);
+
+ static final List<Category> MEMBER_WITH_PORT_METRIC_CATEGORIES =
+ Arrays.asList(Category.cacheserver, Category.communication,
Category.diskstore,
+ Category.distribution, Category.eviction, Category.function,
Category.jvm, Category.lock,
+ Category.member, Category.notification, Category.offheap,
Category.query, Category.region,
+ Category.serialization, Category.transaction);
@CliCommand(value = CliStrings.SHOW_METRICS, help =
CliStrings.SHOW_METRICS__HELP)
@CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_STATISTICS},
- interceptor =
"org.apache.geode.management.internal.cli.commands.ShowMetricsCommand$Interceptor")
+ interceptor =
"org.apache.geode.management.internal.cli.commands.ShowMetricsInterceptor")
@ResourceOperation(resource = ResourcePermission.Resource.CLUSTER,
operation = ResourcePermission.Operation.READ)
public Result showMetrics(
@@ -70,71 +109,30 @@ public class ShowMetricsCommand implements GfshCommand {
@CliOption(key = {CliStrings.SHOW_METRICS__FILE},
help = CliStrings.SHOW_METRICS__FILE__HELP) String
export_to_report_to,
@CliOption(key = {CliStrings.SHOW_METRICS__CACHESERVER__PORT},
- help = CliStrings.SHOW_METRICS__CACHESERVER__PORT__HELP) String
cacheServerPortString,
+ help = CliStrings.SHOW_METRICS__CACHESERVER__PORT__HELP) Integer
rawCacheServerPort,
@CliOption(key = {CliStrings.SHOW_METRICS__CATEGORY},
help = CliStrings.SHOW_METRICS__CATEGORY__HELP) String[] categories)
{
- Result result;
- DistributedMember member = null;
- if (memberNameOrId != null) {
- member = getMember(memberNameOrId);
- }
-
- if (regionName != null) {
- if (memberNameOrId != null) {
- result = ResultBuilder.buildResult(
- getRegionMetricsFromMember(regionName, member,
export_to_report_to, categories));
- } else {
- result = ResultBuilder
- .buildResult(getDistributedRegionMetrics(regionName,
export_to_report_to, categories));
- }
+ DistributedMember member = memberNameOrId == null ? null :
getMember(memberNameOrId);
+ StringBuilder csvBuilder =
+ StringUtils.isEmpty(export_to_report_to) ? null : prepareCsvBuilder();
+
+ ResultData resultData;
+ if (regionName != null && memberNameOrId != null) {
+ resultData = getRegionMetricsFromMember(regionName, member,
export_to_report_to, categories,
+ csvBuilder);
+ } else if (regionName != null) {
+ resultData =
+ getDistributedRegionMetrics(regionName, export_to_report_to,
categories, csvBuilder);
} else if (memberNameOrId != null) {
- int cacheServerPort = -1;
- if (cacheServerPortString != null) {
- cacheServerPort = Integer.parseInt(cacheServerPortString);
- }
- result = ResultBuilder
- .buildResult(getMemberMetrics(member, export_to_report_to,
categories, cacheServerPort));
+ int cacheServerPort = rawCacheServerPort == null ? -1 :
rawCacheServerPort;
+ resultData =
+ getMemberMetrics(member, export_to_report_to, categories,
cacheServerPort, csvBuilder);
} else {
- result =
ResultBuilder.buildResult(getSystemWideMetrics(export_to_report_to,
categories));
+ resultData = getSystemWideMetrics(export_to_report_to, categories,
csvBuilder);
}
- return result;
- }
-
- public static class Interceptor extends AbstractCliAroundInterceptor {
- @Override
- public Result preExecution(GfshParseResult parseResult) {
- String export_to_report_to =
parseResult.getParamValueAsString(CliStrings.SHOW_METRICS__FILE);
- if (export_to_report_to != null &&
!export_to_report_to.endsWith(".csv")) {
- return ResultBuilder
-
.createUserErrorResult(CliStrings.format(CliStrings.INVALID_FILE_EXTENSION,
".csv"));
- }
-
- String regionName =
parseResult.getParamValueAsString(CliStrings.SHOW_METRICS__REGION);
- String port =
parseResult.getParamValueAsString(CliStrings.SHOW_METRICS__CACHESERVER__PORT);
-
- if (port != null) {
- try {
- Integer.parseInt(port);
- } catch (NumberFormatException nfe) {
- return ResultBuilder.createUserErrorResult("Invalid port");
- }
- }
-
- if (regionName != null && port != null) {
- return ResultBuilder.createUserErrorResult(
-
CliStrings.SHOW_METRICS__CANNOT__USE__REGION__WITH__CACHESERVERPORT);
- }
-
- String member = parseResult.getParamValueAsString(CliStrings.MEMBER);
- if (port != null && member == null) {
- return ResultBuilder
-
.createUserErrorResult(CliStrings.SHOW_METRICS__CANNOT__USE__CACHESERVERPORT);
- }
-
- return ResultBuilder.createInfoResult("OK");
- }
+ return ResultBuilder.buildResult(resultData);
}
/**
@@ -143,101 +141,33 @@ public class ShowMetricsCommand implements GfshCommand {
* @return ResultData with required System wide statistics or
ErrorResultData if DS MBean is not
* found to gather metrics
*/
- private ResultData getSystemWideMetrics(String export_to_report_to, String[]
categoriesArr) {
+ private ResultData getSystemWideMetrics(String export_to_report_to, String[]
categoriesArr,
+ StringBuilder csvBuilder) {
final InternalCache cache = getCache();
final ManagementService managementService =
ManagementService.getManagementService(cache);
DistributedSystemMXBean dsMxBean =
managementService.getDistributedSystemMXBean();
- StringBuilder csvBuilder = null;
- if (dsMxBean != null) {
-
- if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
- csvBuilder = new StringBuilder();
- csvBuilder.append("Category");
- csvBuilder.append(',');
- csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
- csvBuilder.append(',');
- csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
- csvBuilder.append('\n');
- }
-
- CompositeResultData crd = ResultBuilder.createCompositeResultData();
- CompositeResultData.SectionResultData section = crd.addSection();
- TabularResultData metricsTable = section.addTable();
- Map<String, Boolean> categoriesMap = getSystemMetricsCategories();
-
- if (categoriesArr != null && categoriesArr.length != 0) {
- Set<String> categories = createSet(categoriesArr);
- Set<String> checkSet = new HashSet<>(categoriesMap.keySet());
- Set<String> userCategories = getSetDifference(categories, checkSet);
-
- // Checking if the categories specified by the user are valid or not
-
- if (userCategories.isEmpty()) {
- for (String category : checkSet) {
- categoriesMap.put(category, false);
- }
- for (String category : categories) {
- categoriesMap.put(category.toLowerCase(), true);
- }
- } else {
- StringBuilder sb = new StringBuilder();
- sb.append("Invalid Categories\n");
-
- for (String category : userCategories) {
- sb.append(category);
- sb.append('\n');
- }
- return ResultBuilder.createErrorResultData().addLine(sb.toString());
- }
- }
- metricsTable.setHeader("Cluster-wide Metrics");
-
- if (categoriesMap.get("cluster")) {
- writeToTableAndCsv(metricsTable, "cluster", "totalHeapSize",
dsMxBean.getTotalHeapSize(),
- csvBuilder);
- }
+ if (dsMxBean == null) {
+ String errorMessage =
+ CliStrings.format(CliStrings.SHOW_METRICS__ERROR, "Distributed
System MBean not found");
+ return ResultBuilder.createErrorResultData().addLine(errorMessage);
+ }
- if (categoriesMap.get("cache")) {
- writeToTableAndCsv(metricsTable, "cache", "totalRegionEntryCount",
- dsMxBean.getTotalRegionEntryCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalRegionCount",
dsMxBean.getTotalRegionCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalMissCount",
dsMxBean.getTotalMissCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalHitCount",
dsMxBean.getTotalHitCount(),
- csvBuilder);
- }
+ CompositeResultData crd = ResultBuilder.createCompositeResultData();
+ CompositeResultData.SectionResultData section = crd.addSection();
+ TabularResultData metricsTable = section.addTable();
- if (categoriesMap.get("diskstore")) {
- writeToTableAndCsv(metricsTable, "diskstore", "totalDiskUsage",
- dsMxBean.getTotalDiskUsage(), csvBuilder); // deadcoded to
workaround bug 46397
- writeToTableAndCsv(metricsTable, ""/* 46608 */, "diskReadsRate",
- dsMxBean.getDiskReadsRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "diskWritesRate",
dsMxBean.getDiskWritesRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "flushTimeAvgLatency",
- dsMxBean.getDiskFlushAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalBackupInProgress",
- dsMxBean.getTotalBackupInProgress(), csvBuilder);
- }
+ Set<Category> categoriesToDisplay = ArrayUtils.isNotEmpty(categoriesArr)
+ ? getCategorySet(categoriesArr) : new
HashSet<>(SYSTEM_METRIC_CATEGORIES);
- if (categoriesMap.get("query")) {
- writeToTableAndCsv(metricsTable, "query", "activeCQCount",
dsMxBean.getActiveCQCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "queryRequestRate",
dsMxBean.getQueryRequestRate(),
- csvBuilder);
- }
- if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
- crd.addAsFile(export_to_report_to, csvBuilder.toString(),
- "Cluster wide metrics exported to {0}.", false);
- }
+ metricsTable.setHeader("Cluster-wide Metrics");
- return crd;
- } else {
- String errorMessage =
- CliStrings.format(CliStrings.SHOW_METRICS__ERROR, "Distributed
System MBean not found");
- return ResultBuilder.createErrorResultData().addLine(errorMessage);
+ writeSystemWideMetricValues(dsMxBean, csvBuilder, metricsTable,
categoriesToDisplay);
+ if (StringUtils.isNotEmpty(export_to_report_to)) {
+ crd.addAsFile(export_to_report_to, csvBuilder.toString(),
+ "Cluster wide metrics exported to {0}.", false);
}
+
+ return crd;
}
/**
@@ -248,8 +178,8 @@ public class ShowMetricsCommand implements GfshCommand {
* @throws ResultDataException if building result fails
*/
private ResultData getMemberMetrics(DistributedMember distributedMember,
- String export_to_report_to, String[] categoriesArr, int cacheServerPort)
- throws ResultDataException {
+ String export_to_report_to, String[] categoriesArr, int cacheServerPort,
+ StringBuilder csvBuilder) throws ResultDataException {
final InternalCache cache = getCache();
final SystemManagementService managementService =
(SystemManagementService)
ManagementService.getManagementService(cache);
@@ -260,352 +190,48 @@ public class ShowMetricsCommand implements GfshCommand {
ObjectName csMxBeanName;
CacheServerMXBean csMxBean = null;
- if (memberMxBean != null) {
-
- if (cacheServerPort != -1) {
- csMxBeanName =
- managementService.getCacheServerMBeanName(cacheServerPort,
distributedMember);
- csMxBean = managementService.getMBeanInstance(csMxBeanName,
CacheServerMXBean.class);
-
- if (csMxBean == null) {
- ErrorResultData erd = ResultBuilder.createErrorResultData();
-
erd.addLine(CliStrings.format(CliStrings.SHOW_METRICS__CACHE__SERVER__NOT__FOUND,
- cacheServerPort,
MBeanJMXAdapter.getMemberNameOrId(distributedMember)));
- return erd;
- }
- }
-
- JVMMetrics jvmMetrics = memberMxBean.showJVMMetrics();
-
- CompositeResultData crd = ResultBuilder.createCompositeResultData();
- CompositeResultData.SectionResultData section = crd.addSection();
- TabularResultData metricsTable = section.addTable();
- metricsTable.setHeader("Member Metrics");
- StringBuilder csvBuilder = null;
-
- if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
- csvBuilder = new StringBuilder();
- csvBuilder.append("Category");
- csvBuilder.append(',');
- csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
- csvBuilder.append(',');
- csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
- csvBuilder.append('\n');
- }
-
- Map<String, Boolean> categoriesMap = getMemberMetricsCategories();
-
- if (categoriesArr != null && categoriesArr.length != 0) {
- Set<String> categories = createSet(categoriesArr);
- Set<String> checkSet = new HashSet<>(categoriesMap.keySet());
- Set<String> userCategories = getSetDifference(categories, checkSet);
-
- // Checking if the categories specified by the user are valid or not
- if (userCategories.isEmpty()) {
- for (String category : checkSet) {
- categoriesMap.put(category, false);
- }
- for (String category : categories) {
- categoriesMap.put(category.toLowerCase(), true);
- }
- } else {
- StringBuilder sb = new StringBuilder();
- sb.append("Invalid Categories\n");
-
- for (String category : userCategories) {
- sb.append(category);
- sb.append('\n');
- }
- return ResultBuilder.createErrorResultData().addLine(sb.toString());
- }
- }
-
- /*
- * Member Metrics
- */
- // member, jvm, region, serialization, communication, function,
transaction, diskstore, lock,
- // eviction, distribution
- if (categoriesMap.get("member")) {
- writeToTableAndCsv(metricsTable, "member", "upTime",
memberMxBean.getMemberUpTime(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "cpuUsage",
memberMxBean.getCpuUsage(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "currentHeapSize",
memberMxBean.getCurrentHeapSize(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "maximumHeapSize",
memberMxBean.getMaximumHeapSize(),
- csvBuilder);
- }
- /*
- * JVM Metrics
- */
- if (categoriesMap.get("jvm")) {
- writeToTableAndCsv(metricsTable, "jvm ", "jvmThreads ",
jvmMetrics.getTotalThreads(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "fileDescriptorLimit",
- memberMxBean.getFileDescriptorLimit(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalFileDescriptorOpen",
- memberMxBean.getTotalFileDescriptorOpen(), csvBuilder);
- }
- /*
- * Member wide region metrics
- */
- if (categoriesMap.get("region")) {
- writeToTableAndCsv(metricsTable, "region ", "totalRegionCount ",
- memberMxBean.getTotalRegionCount(), csvBuilder);
- String[] regionNames = memberMxBean.listRegions();
- if (regionNames != null) {
- for (int i = 0; i < regionNames.length; i++) {
- if (i == 0) {
- writeToTableAndCsv(metricsTable, "listOfRegions",
regionNames[i].substring(1),
- csvBuilder);
- } else {
- writeToTableAndCsv(metricsTable, "",
regionNames[i].substring(1), csvBuilder);
- }
- }
- }
-
- String[] rootRegionNames = memberMxBean.getRootRegionNames();
- if (rootRegionNames != null) {
- for (int i = 0; i < rootRegionNames.length; i++) {
- if (i == 0) {
- writeToTableAndCsv(metricsTable, "rootRegions",
rootRegionNames[i], csvBuilder);
- } else {
- writeToTableAndCsv(metricsTable, "", rootRegionNames[i],
csvBuilder);
- }
- }
- }
- writeToTableAndCsv(metricsTable, "", "totalRegionEntryCount",
- memberMxBean.getTotalRegionEntryCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalBucketCount",
memberMxBean.getTotalBucketCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalPrimaryBucketCount",
- memberMxBean.getTotalPrimaryBucketCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "getsAvgLatency",
memberMxBean.getGetsAvgLatency(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putsAvgLatency",
memberMxBean.getPutsAvgLatency(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "createsRate",
memberMxBean.getCreatesRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "destroyRate",
memberMxBean.getDestroysRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putAllAvgLatency",
memberMxBean.getPutAllAvgLatency(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalMissCount",
memberMxBean.getTotalMissCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalHitCount",
memberMxBean.getTotalHitCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "getsRate",
memberMxBean.getGetsRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putsRate",
memberMxBean.getPutsRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "cacheWriterCallsAvgLatency",
- memberMxBean.getCacheWriterCallsAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency",
- memberMxBean.getCacheListenerCallsAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalLoadsCompleted",
- memberMxBean.getTotalLoadsCompleted(), csvBuilder);
- }
-
- /*
- * SERIALIZATION
- */
- if (categoriesMap.get("serialization")) {
- writeToTableAndCsv(metricsTable, "serialization", "serializationRate",
- memberMxBean.getSerializationRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "serializationLatency",
- memberMxBean.getSerializationRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "deserializationRate",
- memberMxBean.getDeserializationRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "deserializationLatency",
- memberMxBean.getDeserializationLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "deserializationAvgLatency",
- memberMxBean.getDeserializationAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "PDXDeserializationAvgLatency",
- memberMxBean.getPDXDeserializationAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "PDXDeserializationRate",
- memberMxBean.getPDXDeserializationRate(), csvBuilder);
- }
+ if (memberMxBean == null) {
+ String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR,
"Member MBean for "
+ + MBeanJMXAdapter.getMemberNameOrId(distributedMember) + " not
found");
+ return ResultBuilder.createErrorResultData().addLine(errorMessage);
+ }
- /*
- * Communication Metrics
- */
- if (categoriesMap.get("communication")) {
- writeToTableAndCsv(metricsTable, "communication", "bytesSentRate",
- memberMxBean.getBytesSentRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "bytesReceivedRate",
- memberMxBean.getBytesReceivedRate(), csvBuilder);
- String[] connectedGatewayReceivers =
memberMxBean.listConnectedGatewayReceivers();
- writeToTableAndCsv(metricsTable, "connectedGatewayReceivers",
connectedGatewayReceivers,
- csvBuilder);
-
- String[] connectedGatewaySenders =
memberMxBean.listConnectedGatewaySenders();
- writeToTableAndCsv(metricsTable, "connectedGatewaySenders",
connectedGatewaySenders,
- csvBuilder);
- }
+ if (cacheServerPort != -1) {
+ csMxBeanName =
managementService.getCacheServerMBeanName(cacheServerPort, distributedMember);
+ csMxBean = managementService.getMBeanInstance(csMxBeanName,
CacheServerMXBean.class);
- /*
- * Member wide function metrics
- */
- if (categoriesMap.get("function")) {
- writeToTableAndCsv(metricsTable, "function", "numRunningFunctions",
- memberMxBean.getNumRunningFunctions(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "functionExecutionRate",
- memberMxBean.getFunctionExecutionRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "",
"numRunningFunctionsHavingResults",
- memberMxBean.getNumRunningFunctionsHavingResults(), csvBuilder);
+ if (csMxBean == null) {
+ ErrorResultData erd = ResultBuilder.createErrorResultData();
+
erd.addLine(CliStrings.format(CliStrings.SHOW_METRICS__CACHE__SERVER__NOT__FOUND,
+ cacheServerPort,
MBeanJMXAdapter.getMemberNameOrId(distributedMember)));
+ return erd;
}
+ }
- /*
- * totalTransactionsCount currentTransactionalThreadIds
transactionCommitsAvgLatency
- * transactionCommittedTotalCount transactionRolledBackTotalCount
transactionCommitsRate
- */
- if (categoriesMap.get("transaction")) {
- writeToTableAndCsv(metricsTable, "transaction",
"totalTransactionsCount",
- memberMxBean.getTotalTransactionsCount(), csvBuilder);
-
- writeToTableAndCsv(metricsTable, "", "transactionCommitsAvgLatency",
- memberMxBean.getTransactionCommitsAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "transactionCommittedTotalCount",
- memberMxBean.getTransactionCommittedTotalCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "transactionRolledBackTotalCount",
- memberMxBean.getTransactionRolledBackTotalCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "transactionCommitsRate",
- memberMxBean.getTransactionCommitsRate(), csvBuilder);
- }
- /*
- * Member wide disk metrics
- */
- if (categoriesMap.get("diskstore")) {
- writeToTableAndCsv(metricsTable, "diskstore", "totalDiskUsage",
- memberMxBean.getTotalDiskUsage(), csvBuilder); // deadcoded to
workaround bug 46397
- writeToTableAndCsv(metricsTable, ""/* 46608 */, "diskReadsRate",
- memberMxBean.getDiskReadsRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "diskWritesRate",
memberMxBean.getDiskWritesRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "flushTimeAvgLatency",
- memberMxBean.getDiskFlushAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalQueueSize",
- memberMxBean.getTotalDiskTasksWaiting(), csvBuilder); // deadcoded
to workaround bug
- // 46397
- writeToTableAndCsv(metricsTable, "", "totalBackupInProgress",
- memberMxBean.getTotalBackupInProgress(), csvBuilder);
- }
- /*
- * Member wide Lock
- */
- if (categoriesMap.get("lock")) {
- writeToTableAndCsv(metricsTable, "lock", "lockWaitsInProgress",
- memberMxBean.getLockWaitsInProgress(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalLockWaitTime",
- memberMxBean.getTotalLockWaitTime(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalNumberOfLockService",
- memberMxBean.getTotalNumberOfLockService(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "requestQueues",
memberMxBean.getLockRequestQueues(),
- csvBuilder);
- }
- /*
- * Eviction
- */
- if (categoriesMap.get("eviction")) {
- writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate",
- memberMxBean.getLruEvictionRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "lruDestroyRate",
memberMxBean.getLruDestroyRate(),
- csvBuilder);
- }
- /*
- * Distribution
- */
- if (categoriesMap.get("distribution")) {
- writeToTableAndCsv(metricsTable, "distribution",
"getInitialImagesInProgress",
- memberMxBean.getInitialImagesInProgress(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "getInitialImageTime",
- memberMxBean.getInitialImageTime(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "getInitialImageKeysReceived",
- memberMxBean.getInitialImageKeysReceived(), csvBuilder);
- }
+ JVMMetrics jvmMetrics = memberMxBean.showJVMMetrics();
- /*
- * OffHeap
- */
- if (categoriesMap.get("offheap")) {
- writeToTableAndCsv(metricsTable, "offheap", "maxMemory",
memberMxBean.getOffHeapMaxMemory(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "freeMemory",
memberMxBean.getOffHeapFreeMemory(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "usedMemory",
memberMxBean.getOffHeapUsedMemory(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "objects",
memberMxBean.getOffHeapObjects(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "fragmentation",
- memberMxBean.getOffHeapFragmentation(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "compactionTime",
- memberMxBean.getOffHeapCompactionTime(), csvBuilder);
- }
+ CompositeResultData crd = ResultBuilder.createCompositeResultData();
+ CompositeResultData.SectionResultData section = crd.addSection();
+ TabularResultData metricsTable = section.addTable();
+ metricsTable.setHeader("Member Metrics");
- /*
- * CacheServer stats
- */
- if (csMxBean != null) {
- writeToTableAndCsv(metricsTable, "cache-server",
"clientConnectionCount",
- csMxBean.getClientConnectionCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "hostnameForClients",
csMxBean.getHostNameForClients(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "getRequestAvgLatency",
- csMxBean.getGetRequestAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putRequestAvgLatency",
- csMxBean.getPutRequestAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalConnectionsTimedOut",
- csMxBean.getTotalConnectionsTimedOut(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "threadQueueSize",
csMxBean.getPutRequestAvgLatency(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "connectionThreads",
csMxBean.getConnectionThreads(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "connectionLoad",
csMxBean.getConnectionLoad(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "loadPerConnection",
csMxBean.getLoadPerConnection(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "queueLoad",
csMxBean.getQueueLoad(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "loadPerQueue",
csMxBean.getLoadPerQueue(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "getRequestRate",
csMxBean.getGetRequestRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putRequestRate",
csMxBean.getPutRequestRate(),
- csvBuilder);
-
- /*
- * Notification
- */
- writeToTableAndCsv(metricsTable, "notification",
"numClientNotificationRequests",
- csMxBean.getNumClientNotificationRequests(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "clientNotificationRate",
- csMxBean.getClientNotificationRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "clientNotificationAvgLatency",
- csMxBean.getClientNotificationAvgLatency(), csvBuilder);
-
- /*
- * Query
- */
- writeToTableAndCsv(metricsTable, "query", "activeCQCount",
csMxBean.getActiveCQCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "query", "queryRequestRate",
- csMxBean.getQueryRequestRate(), csvBuilder);
-
- writeToTableAndCsv(metricsTable, "", "indexCount",
csMxBean.getIndexCount(), csvBuilder);
-
- String[] indexList = csMxBean.getIndexList();
- writeToTableAndCsv(metricsTable, "index list", indexList, csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalIndexMaintenanceTime",
- csMxBean.getTotalIndexMaintenanceTime(), csvBuilder);
- }
+ List<Category> fullCategories =
+ csMxBean != null ? MEMBER_WITH_PORT_METRIC_CATEGORIES :
MEMBER_METRIC_CATEGORIES;
+ Set<Category> categoriesToDisplay = ArrayUtils.isNotEmpty(categoriesArr)
+ ? getCategorySet(categoriesArr) : new HashSet<>(fullCategories);
- if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
- crd.addAsFile(export_to_report_to, csvBuilder != null ?
csvBuilder.toString() : null,
- "Member metrics exported to {0}.", false);
- }
- return crd;
+ writeMemberMetricValues(memberMxBean, jvmMetrics, metricsTable, csvBuilder,
+ categoriesToDisplay);
+ if (csMxBean != null) {
+ writeCacheServerMetricValues(csMxBean, metricsTable, csvBuilder,
categoriesToDisplay);
+ }
- } else {
- String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR,
"Member MBean for "
- + MBeanJMXAdapter.getMemberNameOrId(distributedMember) + " not
found");
- return ResultBuilder.createErrorResultData().addLine(errorMessage);
+ if (StringUtils.isNotEmpty(export_to_report_to)) {
+ crd.addAsFile(export_to_report_to, csvBuilder != null ?
csvBuilder.toString() : null,
+ "Member metrics exported to {0}.", false);
}
+ return crd;
+
}
/**
@@ -615,155 +241,37 @@ public class ShowMetricsCommand implements GfshCommand {
* @throws ResultDataException if building result fails
*/
private ResultData getDistributedRegionMetrics(String regionName, String
export_to_report_to,
- String[] categoriesArr) throws ResultDataException {
+ String[] categoriesArr, StringBuilder csvBuilder) throws
ResultDataException {
final InternalCache cache = getCache();
final ManagementService managementService =
ManagementService.getManagementService(cache);
DistributedRegionMXBean regionMxBean =
managementService.getDistributedRegionMXBean(regionName);
- if (regionMxBean != null) {
- CompositeResultData crd = ResultBuilder.createCompositeResultData();
- CompositeResultData.SectionResultData section = crd.addSection();
- TabularResultData metricsTable = section.addTable();
- metricsTable.setHeader("Cluster-wide Region Metrics");
- StringBuilder csvBuilder = null;
-
- if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
- csvBuilder = new StringBuilder();
- csvBuilder.append("Category");
- csvBuilder.append(',');
- csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
- csvBuilder.append(',');
- csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
- csvBuilder.append('\n');
- }
-
- Map<String, Boolean> categoriesMap = getSystemRegionMetricsCategories();
-
- if (categoriesArr != null && categoriesArr.length != 0) {
- Set<String> categories = createSet(categoriesArr);
- Set<String> checkSet = new HashSet<>(categoriesMap.keySet());
- Set<String> userCategories = getSetDifference(categories, checkSet);
-
- // Checking if the categories specified by the user are valid or not
- if (userCategories.isEmpty()) {
- for (String category : checkSet) {
- categoriesMap.put(category, false);
- }
- for (String category : categories) {
- categoriesMap.put(category.toLowerCase(), true);
- }
- } else {
- StringBuilder sb = new StringBuilder();
- sb.append("Invalid Categories\n");
-
- for (String category : userCategories) {
- sb.append(category);
- sb.append('\n');
- }
- return ResultBuilder.createErrorResultData().addLine(sb.toString());
- }
- }
- /*
- * General System metrics
- */
- // cluster, region, partition , diskstore, callback, eviction
- if (categoriesMap.get("cluster")) {
- writeToTableAndCsv(metricsTable, "cluster", "member count",
regionMxBean.getMemberCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "region entry count",
- regionMxBean.getSystemRegionEntryCount(), csvBuilder);
- }
-
- if (categoriesMap.get("region")) {
- writeToTableAndCsv(metricsTable, "region", "lastModifiedTime",
- regionMxBean.getLastModifiedTime(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "lastAccessedTime",
regionMxBean.getLastAccessedTime(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "missCount",
regionMxBean.getMissCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "hitCount",
regionMxBean.getHitCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "hitRatio",
regionMxBean.getHitRatio(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "getsRate",
regionMxBean.getGetsRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putsRate",
regionMxBean.getPutsRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "createsRate",
regionMxBean.getCreatesRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "destroyRate",
regionMxBean.getDestroyRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putAllRate",
regionMxBean.getPutAllRate(),
- csvBuilder);
- }
-
- if (categoriesMap.get("partition")) {
- writeToTableAndCsv(metricsTable, "partition", "putLocalRate",
- regionMxBean.getPutLocalRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putRemoteRate",
regionMxBean.getPutRemoteRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putRemoteLatency",
regionMxBean.getPutRemoteLatency(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putRemoteAvgLatency",
- regionMxBean.getPutRemoteAvgLatency(), csvBuilder);
-
- writeToTableAndCsv(metricsTable, "", "bucketCount",
regionMxBean.getBucketCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "primaryBucketCount",
- regionMxBean.getPrimaryBucketCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "numBucketsWithoutRedundancy",
- regionMxBean.getNumBucketsWithoutRedundancy(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalBucketSize",
regionMxBean.getTotalBucketSize(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "averageBucketSize",
regionMxBean.getAvgBucketSize(),
- csvBuilder);
- }
- /*
- * Disk store
- */
- if (categoriesMap.get("diskstore")) {
- writeToTableAndCsv(metricsTable, "diskstore", "totalEntriesOnlyOnDisk",
- regionMxBean.getTotalEntriesOnlyOnDisk(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "diskReadsRate",
regionMxBean.getDiskReadsRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "diskWritesRate",
regionMxBean.getDiskWritesRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalDiskWriteInProgress",
- regionMxBean.getTotalDiskWritesProgress(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "diskTaskWaiting",
regionMxBean.getDiskTaskWaiting(),
- csvBuilder);
-
- }
- /*
- * LISTENER
- */
- if (categoriesMap.get("callback")) {
- writeToTableAndCsv(metricsTable, "callback",
"cacheWriterCallsAvgLatency",
- regionMxBean.getCacheWriterCallsAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency",
- regionMxBean.getCacheListenerCallsAvgLatency(), csvBuilder);
- }
-
- /*
- * Eviction
- */
- if (categoriesMap.get("eviction")) {
- writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate",
- regionMxBean.getLruEvictionRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "lruDestroyRate",
regionMxBean.getLruDestroyRate(),
- csvBuilder);
- }
-
- if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
- crd.addAsFile(export_to_report_to, csvBuilder != null ?
csvBuilder.toString() : null,
- "Aggregate Region Metrics exported to {0}.", false);
- }
-
- return crd;
- } else {
+ if (regionMxBean == null) {
ErrorResultData erd = ResultBuilder.createErrorResultData();
String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR,
"Distributed Region MBean for " + regionName + " not found");
erd.addLine(errorMessage);
return erd;
}
+
+ CompositeResultData crd = ResultBuilder.createCompositeResultData();
+ CompositeResultData.SectionResultData section = crd.addSection();
+ TabularResultData metricsTable = section.addTable();
+ metricsTable.setHeader("Cluster-wide Region Metrics");
+
+ Set<Category> categoriesToDisplay = ArrayUtils.isNotEmpty(categoriesArr)
+ ? getCategorySet(categoriesArr) : new
HashSet<>(SYSTEM_REGION_METRIC_CATEGORIES);
+
+ writeSystemRegionMetricValues(regionMxBean, metricsTable, csvBuilder,
categoriesToDisplay);
+
+ if (StringUtils.isNotEmpty(export_to_report_to)) {
+ crd.addAsFile(export_to_report_to, csvBuilder != null ?
csvBuilder.toString() : null,
+ "Aggregate Region Metrics exported to {0}.", false);
+ }
+
+ return crd;
}
/**
@@ -774,8 +282,8 @@ public class ShowMetricsCommand implements GfshCommand {
* @throws ResultDataException if building result fails
*/
private ResultData getRegionMetricsFromMember(String regionName,
- DistributedMember distributedMember, String export_to_report_to,
String[] categoriesArr)
- throws ResultDataException {
+ DistributedMember distributedMember, String export_to_report_to,
String[] categoriesArr,
+ StringBuilder csvBuilder) throws ResultDataException {
final InternalCache cache = getCache();
final SystemManagementService managementService =
@@ -786,136 +294,7 @@ public class ShowMetricsCommand implements GfshCommand {
RegionMXBean regionMxBean =
managementService.getMBeanInstance(regionMBeanName,
RegionMXBean.class);
- if (regionMxBean != null) {
- CompositeResultData crd = ResultBuilder.createCompositeResultData();
- CompositeResultData.SectionResultData section = crd.addSection();
- TabularResultData metricsTable = section.addTable();
- metricsTable.setHeader("Metrics for region:" + regionName + " On Member "
- + MBeanJMXAdapter.getMemberNameOrId(distributedMember));
- StringBuilder csvBuilder = null;
-
- if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
- csvBuilder = new StringBuilder();
- csvBuilder.append("Category");
- csvBuilder.append(',');
- csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
- csvBuilder.append(',');
- csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
- csvBuilder.append('\n');
- }
-
- /*
- * Region Metrics
- */
- Map<String, Boolean> categoriesMap = getRegionMetricsCategories();
-
- if (categoriesArr != null && categoriesArr.length != 0) {
- Set<String> categories = createSet(categoriesArr);
- Set<String> checkSet = new HashSet<>(categoriesMap.keySet());
- Set<String> userCategories = getSetDifference(categories, checkSet);
-
- // Checking if the categories specified by the user are valid or not
- if (userCategories.isEmpty()) {
- for (String category : checkSet) {
- categoriesMap.put(category, false);
- }
- for (String category : categories) {
- categoriesMap.put(category.toLowerCase(), true);
- }
- } else {
- StringBuilder sb = new StringBuilder();
- sb.append("Invalid Categories\n");
-
- for (String category : userCategories) {
- sb.append(category);
- sb.append('\n');
- }
- return ResultBuilder.createErrorResultData().addLine(sb.toString());
- }
- }
-
- if (categoriesMap.get("region")) {
- writeToTableAndCsv(metricsTable, "region", "lastModifiedTime",
- regionMxBean.getLastModifiedTime(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "lastAccessedTime",
regionMxBean.getLastAccessedTime(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "missCount",
regionMxBean.getMissCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "hitCount",
regionMxBean.getHitCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "hitRatio",
regionMxBean.getHitRatio(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "getsRate",
regionMxBean.getGetsRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putsRate",
regionMxBean.getPutsRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "createsRate",
regionMxBean.getCreatesRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "destroyRate",
regionMxBean.getDestroyRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putAllRate",
regionMxBean.getPutAllRate(),
- csvBuilder);
- }
-
- if (categoriesMap.get("partition")) {
- writeToTableAndCsv(metricsTable, "partition", "putLocalRate",
- regionMxBean.getPutLocalRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putRemoteRate",
regionMxBean.getPutRemoteRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putRemoteLatency",
regionMxBean.getPutRemoteLatency(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "putRemoteAvgLatency",
- regionMxBean.getPutRemoteAvgLatency(), csvBuilder);
-
- writeToTableAndCsv(metricsTable, "", "bucketCount",
regionMxBean.getBucketCount(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "primaryBucketCount",
- regionMxBean.getPrimaryBucketCount(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "configuredRedundancy",
- regionMxBean.getConfiguredRedundancy(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "actualRedundancy",
regionMxBean.getActualRedundancy(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "numBucketsWithoutRedundancy",
- regionMxBean.getNumBucketsWithoutRedundancy(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalBucketSize",
regionMxBean.getTotalBucketSize(),
- csvBuilder);
- }
- /*
- * Disk store
- */
- if (categoriesMap.get("diskstore")) {
- writeToTableAndCsv(metricsTable, "diskstore", "totalEntriesOnlyOnDisk",
- regionMxBean.getTotalEntriesOnlyOnDisk(), csvBuilder);
- writeToTableAndCsv(metricsTable, "diskReadsRate", "" +
regionMxBean.getDiskReadsRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "diskWritesRate",
regionMxBean.getDiskWritesRate(),
- csvBuilder);
- writeToTableAndCsv(metricsTable, "", "totalDiskWriteInProgress",
- regionMxBean.getTotalDiskWritesProgress(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "diskTaskWaiting",
regionMxBean.getDiskTaskWaiting(),
- csvBuilder);
- }
- /*
- * LISTENER
- */
- if (categoriesMap.get("callback")) {
- writeToTableAndCsv(metricsTable, "callback",
"cacheWriterCallsAvgLatency",
- regionMxBean.getCacheWriterCallsAvgLatency(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency",
- regionMxBean.getCacheListenerCallsAvgLatency(), csvBuilder);
- }
-
- /*
- * Eviction
- */
- if (categoriesMap.get("eviction")) {
- writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate",
- regionMxBean.getLruEvictionRate(), csvBuilder);
- writeToTableAndCsv(metricsTable, "", "lruDestroyRate",
regionMxBean.getLruDestroyRate(),
- csvBuilder);
- }
- if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
- crd.addAsFile(export_to_report_to, csvBuilder != null ?
csvBuilder.toString() : null,
- "Region Metrics exported to {0}.", false);
- }
-
- return crd;
- } else {
+ if (regionMxBean == null) {
ErrorResultData erd = ResultBuilder.createErrorResultData();
String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR,
"Region MBean for " + regionName + " on member "
@@ -923,154 +302,469 @@ public class ShowMetricsCommand implements GfshCommand {
erd.addLine(errorMessage);
return erd;
}
- }
- /***
- * Writes an entry to a TabularResultData and writes a comma separated entry
to a string builder
- */
- private void writeToTableAndCsv(TabularResultData metricsTable, String type,
String metricName,
- long metricValue, StringBuilder csvBuilder) {
- metricsTable.accumulate(CliStrings.SHOW_METRICS__TYPE__HEADER, type);
- metricsTable.accumulate(CliStrings.SHOW_METRICS__METRIC__HEADER,
metricName);
- metricsTable.accumulate(CliStrings.SHOW_METRICS__VALUE__HEADER,
metricValue);
+ CompositeResultData crd = ResultBuilder.createCompositeResultData();
+ CompositeResultData.SectionResultData section = crd.addSection();
+ TabularResultData metricsTable = section.addTable();
+ metricsTable.setHeader("Metrics for region:" + regionName + " On Member "
+ + MBeanJMXAdapter.getMemberNameOrId(distributedMember));
- if (csvBuilder != null) {
- csvBuilder.append(type);
- csvBuilder.append(',');
- csvBuilder.append(metricName);
- csvBuilder.append(',');
- csvBuilder.append(metricValue);
- csvBuilder.append('\n');
+ Set<Category> categoriesToDisplay = ArrayUtils.isNotEmpty(categoriesArr)
+ ? getCategorySet(categoriesArr) : new
HashSet<>(REGION_METRIC_CATEGORIES);
+
+ writeRegionMetricValues(regionMxBean, metricsTable, csvBuilder,
categoriesToDisplay);
+ if (StringUtils.isNotEmpty(export_to_report_to)) {
+ crd.addAsFile(export_to_report_to, csvBuilder != null ?
csvBuilder.toString() : null,
+ "Region Metrics exported to {0}.", false);
}
+
+ return crd;
}
- private void writeToTableAndCsv(TabularResultData metricsTable, String type,
String metricName,
- double metricValue, StringBuilder csvBuilder) {
- metricsTable.accumulate(CliStrings.SHOW_METRICS__TYPE__HEADER, type);
- metricsTable.accumulate(CliStrings.SHOW_METRICS__METRIC__HEADER,
metricName);
- metricsTable.accumulate(CliStrings.SHOW_METRICS__VALUE__HEADER,
metricValue);
+ private void writeSystemWideMetricValues(DistributedSystemMXBean dsMxBean,
+ StringBuilder csvBuilder, TabularResultData metricsTable, Set<Category>
categoriesToDisplay) {
+ if (categoriesToDisplay.contains(Category.cluster)) {
+ writeToTableAndCsv(metricsTable, "cluster", "totalHeapSize",
dsMxBean.getTotalHeapSize(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.cache)) {
+ writeToTableAndCsv(metricsTable, "cache", "totalRegionEntryCount",
+ dsMxBean.getTotalRegionEntryCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalRegionCount",
dsMxBean.getTotalRegionCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalMissCount",
dsMxBean.getTotalMissCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalHitCount",
dsMxBean.getTotalHitCount(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.diskstore)) {
+ writeToTableAndCsv(metricsTable, "diskstore", "totalDiskUsage",
dsMxBean.getTotalDiskUsage(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskReadsRate",
dsMxBean.getDiskReadsRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskWritesRate",
dsMxBean.getDiskWritesRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "flushTimeAvgLatency",
dsMxBean.getDiskFlushAvgLatency(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalBackupInProgress",
+ dsMxBean.getTotalBackupInProgress(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.query)) {
+ writeToTableAndCsv(metricsTable, "query", "activeCQCount",
dsMxBean.getActiveCQCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "queryRequestRate",
dsMxBean.getQueryRequestRate(),
+ csvBuilder);
+ }
+ }
- if (csvBuilder != null) {
- csvBuilder.append(type);
- csvBuilder.append(',');
- csvBuilder.append(metricName);
- csvBuilder.append(',');
- csvBuilder.append(metricValue);
- csvBuilder.append('\n');
+ private void writeMemberMetricValues(MemberMXBean memberMxBean, JVMMetrics
jvmMetrics,
+ TabularResultData metricsTable, StringBuilder csvBuilder, Set<Category>
categoriesToDisplay) {
+ if (categoriesToDisplay.contains(Category.member)) {
+ writeToTableAndCsv(metricsTable, "member", "upTime",
memberMxBean.getMemberUpTime(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "cpuUsage",
memberMxBean.getCpuUsage(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "currentHeapSize",
memberMxBean.getCurrentHeapSize(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "maximumHeapSize",
memberMxBean.getMaximumHeapSize(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.jvm)) {
+ writeToTableAndCsv(metricsTable, "jvm", "jvmThreads ",
jvmMetrics.getTotalThreads(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "fileDescriptorLimit",
+ memberMxBean.getFileDescriptorLimit(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalFileDescriptorOpen",
+ memberMxBean.getTotalFileDescriptorOpen(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.region)) {
+ writeToTableAndCsv(metricsTable, "region", "totalRegionCount ",
+ memberMxBean.getTotalRegionCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "listOfRegions",
+ Arrays.stream(memberMxBean.listRegions()).map(s ->
s.substring(1)).toArray(String[]::new),
+ csvBuilder);
+
+ writeToTableAndCsv(metricsTable, "", "rootRegions",
memberMxBean.getRootRegionNames(),
+ csvBuilder);
+
+ writeToTableAndCsv(metricsTable, "", "totalRegionEntryCount",
+ memberMxBean.getTotalRegionEntryCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalBucketCount",
memberMxBean.getTotalBucketCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalPrimaryBucketCount",
+ memberMxBean.getTotalPrimaryBucketCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "getsAvgLatency",
memberMxBean.getGetsAvgLatency(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putsAvgLatency",
memberMxBean.getPutsAvgLatency(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "createsRate",
memberMxBean.getCreatesRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "destroyRate",
memberMxBean.getDestroysRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putAllAvgLatency",
memberMxBean.getPutAllAvgLatency(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalMissCount",
memberMxBean.getTotalMissCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalHitCount",
memberMxBean.getTotalHitCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "getsRate",
memberMxBean.getGetsRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putsRate",
memberMxBean.getPutsRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "cacheWriterCallsAvgLatency",
+ memberMxBean.getCacheWriterCallsAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency",
+ memberMxBean.getCacheListenerCallsAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalLoadsCompleted",
+ memberMxBean.getTotalLoadsCompleted(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.serialization)) {
+ writeToTableAndCsv(metricsTable, "serialization", "serializationRate",
+ memberMxBean.getSerializationRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "serializationLatency",
+ memberMxBean.getSerializationRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "deserializationRate",
+ memberMxBean.getDeserializationRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "deserializationLatency",
+ memberMxBean.getDeserializationLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "deserializationAvgLatency",
+ memberMxBean.getDeserializationAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "PDXDeserializationAvgLatency",
+ memberMxBean.getPDXDeserializationAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "PDXDeserializationRate",
+ memberMxBean.getPDXDeserializationRate(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.communication)) {
+ writeToTableAndCsv(metricsTable, "communication", "bytesSentRate",
+ memberMxBean.getBytesSentRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "bytesReceivedRate",
memberMxBean.getBytesReceivedRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "connectedGatewayReceivers",
+ memberMxBean.listConnectedGatewayReceivers(), csvBuilder);
+
+ writeToTableAndCsv(metricsTable, "", "connectedGatewaySenders",
+ memberMxBean.listConnectedGatewaySenders(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.function)) {
+ writeToTableAndCsv(metricsTable, "function", "numRunningFunctions",
+ memberMxBean.getNumRunningFunctions(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "functionExecutionRate",
+ memberMxBean.getFunctionExecutionRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "numRunningFunctionsHavingResults",
+ memberMxBean.getNumRunningFunctionsHavingResults(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.transaction)) {
+ writeToTableAndCsv(metricsTable, "transaction", "totalTransactionsCount",
+ memberMxBean.getTotalTransactionsCount(), csvBuilder);
+
+ writeToTableAndCsv(metricsTable, "", "transactionCommitsAvgLatency",
+ memberMxBean.getTransactionCommitsAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "transactionCommittedTotalCount",
+ memberMxBean.getTransactionCommittedTotalCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "transactionRolledBackTotalCount",
+ memberMxBean.getTransactionRolledBackTotalCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "transactionCommitsRate",
+ memberMxBean.getTransactionCommitsRate(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.diskstore)) {
+ writeToTableAndCsv(metricsTable, "diskstore", "totalDiskUsage",
+ memberMxBean.getTotalDiskUsage(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskReadsRate",
memberMxBean.getDiskReadsRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskWritesRate",
memberMxBean.getDiskWritesRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "flushTimeAvgLatency",
+ memberMxBean.getDiskFlushAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalQueueSize",
+ memberMxBean.getTotalDiskTasksWaiting(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalBackupInProgress",
+ memberMxBean.getTotalBackupInProgress(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.lock)) {
+ writeToTableAndCsv(metricsTable, "lock", "lockWaitsInProgress",
+ memberMxBean.getLockWaitsInProgress(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalLockWaitTime",
memberMxBean.getTotalLockWaitTime(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalNumberOfLockService",
+ memberMxBean.getTotalNumberOfLockService(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "requestQueues",
memberMxBean.getLockRequestQueues(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.eviction)) {
+ writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate",
+ memberMxBean.getLruEvictionRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "lruDestroyRate",
memberMxBean.getLruDestroyRate(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.distribution)) {
+ writeToTableAndCsv(metricsTable, "distribution",
"getInitialImagesInProgress",
+ memberMxBean.getInitialImagesInProgress(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "getInitialImageTime",
+ memberMxBean.getInitialImageTime(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "getInitialImageKeysReceived",
+ memberMxBean.getInitialImageKeysReceived(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.offheap)) {
+ writeToTableAndCsv(metricsTable, "offheap", "maxMemory",
memberMxBean.getOffHeapMaxMemory(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "freeMemory",
memberMxBean.getOffHeapFreeMemory(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "usedMemory",
memberMxBean.getOffHeapUsedMemory(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "objects",
memberMxBean.getOffHeapObjects(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "fragmentation",
memberMxBean.getOffHeapFragmentation(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "compactionTime",
+ memberMxBean.getOffHeapCompactionTime(), csvBuilder);
}
}
- private Set<String> createSet(String[] categories) {
- Set<String> categoriesSet = new HashSet<>();
- Collections.addAll(categoriesSet, categories);
- return categoriesSet;
+ private void writeCacheServerMetricValues(CacheServerMXBean csMxBean,
+ TabularResultData metricsTable, StringBuilder csvBuilder, Set<Category>
categoriesToDisplay) {
+ if (categoriesToDisplay.contains(Category.cacheserver)) {
+
+ writeToTableAndCsv(metricsTable, "cacheserver", "clientConnectionCount",
+ csMxBean.getClientConnectionCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "hostnameForClients",
csMxBean.getHostNameForClients(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "getRequestAvgLatency",
+ csMxBean.getGetRequestAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putRequestAvgLatency",
+ csMxBean.getPutRequestAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalConnectionsTimedOut",
+ csMxBean.getTotalConnectionsTimedOut(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "threadQueueSize",
csMxBean.getPutRequestAvgLatency(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "connectionThreads",
csMxBean.getConnectionThreads(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "connectionLoad",
csMxBean.getConnectionLoad(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "loadPerConnection",
csMxBean.getLoadPerConnection(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "queueLoad",
csMxBean.getQueueLoad(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "loadPerQueue",
csMxBean.getLoadPerQueue(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "getRequestRate",
csMxBean.getGetRequestRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putRequestRate",
csMxBean.getPutRequestRate(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.notification)) {
+ writeToTableAndCsv(metricsTable, "notification",
"numClientNotificationRequests",
+ csMxBean.getNumClientNotificationRequests(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "clientNotificationRate",
+ csMxBean.getClientNotificationRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "clientNotificationAvgLatency",
+ csMxBean.getClientNotificationAvgLatency(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.query)) {
+ writeToTableAndCsv(metricsTable, "query", "activeCQCount",
csMxBean.getActiveCQCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "queryRequestRate",
csMxBean.getQueryRequestRate(),
+ csvBuilder);
+
+ writeToTableAndCsv(metricsTable, "", "indexCount",
csMxBean.getIndexCount(), csvBuilder);
+
+ writeToTableAndCsv(metricsTable, "", "index list",
csMxBean.getIndexList(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalIndexMaintenanceTime",
+ csMxBean.getTotalIndexMaintenanceTime(), csvBuilder);
+ }
}
- private Set<String> getSetDifference(Set<String> set1, Set<String> set2) {
- Set<String> setDifference = new HashSet<>();
- for (String element : set1) {
- if (!(set2.contains(element.toLowerCase()))) {
- setDifference.add(element);
- }
+ private void writeSystemRegionMetricValues(DistributedRegionMXBean
regionMxBean,
+ TabularResultData metricsTable, StringBuilder csvBuilder, Set<Category>
categoriesToDisplay) {
+ if (categoriesToDisplay.contains(Category.cluster)) {
+ writeToTableAndCsv(metricsTable, "cluster", "member count",
regionMxBean.getMemberCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "region entry count",
+ regionMxBean.getSystemRegionEntryCount(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.region)) {
+ writeToTableAndCsv(metricsTable, "region", "lastModifiedTime",
+ regionMxBean.getLastModifiedTime(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "lastAccessedTime",
regionMxBean.getLastAccessedTime(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "missCount",
regionMxBean.getMissCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "hitCount",
regionMxBean.getHitCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "hitRatio",
regionMxBean.getHitRatio(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "getsRate",
regionMxBean.getGetsRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putsRate",
regionMxBean.getPutsRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "createsRate",
regionMxBean.getCreatesRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "destroyRate",
regionMxBean.getDestroyRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putAllRate",
regionMxBean.getPutAllRate(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.partition)) {
+ writeToTableAndCsv(metricsTable, "partition", "putLocalRate",
regionMxBean.getPutLocalRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putRemoteRate",
regionMxBean.getPutRemoteRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putRemoteLatency",
regionMxBean.getPutRemoteLatency(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putRemoteAvgLatency",
+ regionMxBean.getPutRemoteAvgLatency(), csvBuilder);
+
+ writeToTableAndCsv(metricsTable, "", "bucketCount",
regionMxBean.getBucketCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "primaryBucketCount",
+ regionMxBean.getPrimaryBucketCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "numBucketsWithoutRedundancy",
+ regionMxBean.getNumBucketsWithoutRedundancy(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalBucketSize",
regionMxBean.getTotalBucketSize(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "averageBucketSize",
regionMxBean.getAvgBucketSize(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.diskstore)) {
+ writeToTableAndCsv(metricsTable, "diskstore", "totalEntriesOnlyOnDisk",
+ regionMxBean.getTotalEntriesOnlyOnDisk(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskReadsRate",
regionMxBean.getDiskReadsRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskWritesRate",
regionMxBean.getDiskWritesRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalDiskWriteInProgress",
+ regionMxBean.getTotalDiskWritesProgress(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskTaskWaiting",
regionMxBean.getDiskTaskWaiting(),
+ csvBuilder);
+
+ }
+ if (categoriesToDisplay.contains(Category.callback)) {
+ writeToTableAndCsv(metricsTable, "callback",
"cacheWriterCallsAvgLatency",
+ regionMxBean.getCacheWriterCallsAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency",
+ regionMxBean.getCacheListenerCallsAvgLatency(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.eviction)) {
+ writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate",
+ regionMxBean.getLruEvictionRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "lruDestroyRate",
regionMxBean.getLruDestroyRate(),
+ csvBuilder);
}
- return setDifference;
}
- private void writeToTableAndCsv(TabularResultData metricsTable, String
metricName,
- String[] metricValue, StringBuilder csvBuilder) {
- if (metricValue != null) {
- for (int i = 0; i < metricValue.length; i++) {
- if (i == 0) {
- writeToTableAndCsv(metricsTable, metricName, metricValue[i],
csvBuilder);
- } else {
- writeToTableAndCsv(metricsTable, "", metricValue[i], csvBuilder);
- }
- }
+ private void writeRegionMetricValues(RegionMXBean regionMxBean,
TabularResultData metricsTable,
+ StringBuilder csvBuilder, Set<Category> categoriesToDisplay) {
+ if (categoriesToDisplay.contains(Category.region)) {
+ writeToTableAndCsv(metricsTable, "region", "lastModifiedTime",
+ regionMxBean.getLastModifiedTime(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "lastAccessedTime",
regionMxBean.getLastAccessedTime(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "missCount",
regionMxBean.getMissCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "hitCount",
regionMxBean.getHitCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "hitRatio",
regionMxBean.getHitRatio(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "getsRate",
regionMxBean.getGetsRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putsRate",
regionMxBean.getPutsRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "createsRate",
regionMxBean.getCreatesRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "destroyRate",
regionMxBean.getDestroyRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putAllRate",
regionMxBean.getPutAllRate(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.partition)) {
+ writeToTableAndCsv(metricsTable, "partition", "putLocalRate",
regionMxBean.getPutLocalRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putRemoteRate",
regionMxBean.getPutRemoteRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putRemoteLatency",
regionMxBean.getPutRemoteLatency(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "putRemoteAvgLatency",
+ regionMxBean.getPutRemoteAvgLatency(), csvBuilder);
+
+ writeToTableAndCsv(metricsTable, "", "bucketCount",
regionMxBean.getBucketCount(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "primaryBucketCount",
+ regionMxBean.getPrimaryBucketCount(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "configuredRedundancy",
+ regionMxBean.getConfiguredRedundancy(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "actualRedundancy",
regionMxBean.getActualRedundancy(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "numBucketsWithoutRedundancy",
+ regionMxBean.getNumBucketsWithoutRedundancy(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalBucketSize",
regionMxBean.getTotalBucketSize(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.diskstore)) {
+ writeToTableAndCsv(metricsTable, "diskstore", "totalEntriesOnlyOnDisk",
+ regionMxBean.getTotalEntriesOnlyOnDisk(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskReadsRate", "" +
regionMxBean.getDiskReadsRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskWritesRate",
regionMxBean.getDiskWritesRate(),
+ csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "totalDiskWriteInProgress",
+ regionMxBean.getTotalDiskWritesProgress(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "diskTaskWaiting",
regionMxBean.getDiskTaskWaiting(),
+ csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.callback)) {
+ writeToTableAndCsv(metricsTable, "callback",
"cacheWriterCallsAvgLatency",
+ regionMxBean.getCacheWriterCallsAvgLatency(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency",
+ regionMxBean.getCacheListenerCallsAvgLatency(), csvBuilder);
+ }
+ if (categoriesToDisplay.contains(Category.eviction)) {
+ writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate",
+ regionMxBean.getLruEvictionRate(), csvBuilder);
+ writeToTableAndCsv(metricsTable, "", "lruDestroyRate",
regionMxBean.getLruDestroyRate(),
+ csvBuilder);
}
}
- /**
- * Writes to a TabularResultData and also appends a CSV string to a String
builder
- */
- private void writeToTableAndCsv(TabularResultData metricsTable, String
metricName,
+ private void writeToTableAndCsv(TabularResultData metricsTable, String type,
String metricName,
String metricValue, StringBuilder csvBuilder) {
- metricsTable.accumulate(CliStrings.SHOW_METRICS__TYPE__HEADER, "");
+ metricsTable.accumulate(CliStrings.SHOW_METRICS__TYPE__HEADER, type);
metricsTable.accumulate(CliStrings.SHOW_METRICS__METRIC__HEADER,
metricName);
metricsTable.accumulate(CliStrings.SHOW_METRICS__VALUE__HEADER,
metricValue);
- if (csvBuilder != null) {
- csvBuilder.append("");
- csvBuilder.append(',');
- csvBuilder.append(metricName);
- csvBuilder.append(',');
- csvBuilder.append(metricValue);
- csvBuilder.append('\n');
+ writeToCsvIfNecessary(type, metricName, String.valueOf(metricValue),
csvBuilder);
+ }
+
+ private void writeToTableAndCsv(TabularResultData metricsTable, String type,
String metricName,
+ String[] metricValue, StringBuilder csvBuilder) {
+ if (ArrayUtils.isEmpty(metricValue)) {
+ return;
+ }
+
+ for (int i = 0; i < metricValue.length; i++) {
+ if (i == 0) {
+ writeToTableAndCsv(metricsTable, type, metricName, metricValue[i],
csvBuilder);
+ } else {
+ writeToTableAndCsv(metricsTable, "", "", metricValue[i], csvBuilder);
+ }
}
}
- /**
- * Defines and returns map of categories for Region Metrics
- *
- * @return map with categories for region metrics and display flag set to
true
- */
- private Map<String, Boolean> getRegionMetricsCategories() {
- Map<String, Boolean> categories = new HashMap<>();
-
- categories.put("region", true);
- categories.put("partition", true);
- categories.put("diskstore", true);
- categories.put("callback", true);
- categories.put("gatewayreceiver", true);
- categories.put("distribution", true);
- categories.put("query", true);
- categories.put("eviction", true);
- return categories;
+ private void writeToTableAndCsv(TabularResultData metricsTable, String type,
String metricName,
+ long metricValue, StringBuilder csvBuilder) {
+ writeToTableAndCsv(metricsTable, type, metricName,
String.valueOf(metricValue), csvBuilder);
}
- /**
- * Defines and returns map of categories for System metrics.
- *
- * @return map with categories for system metrics and display flag set to
true
- */
- private Map<String, Boolean> getSystemMetricsCategories() {
- Map<String, Boolean> categories = new HashMap<>();
- categories.put("cluster", true);
- categories.put("cache", true);
- categories.put("diskstore", true);
- categories.put("query", true);
- return categories;
+ private void writeToTableAndCsv(TabularResultData metricsTable, String type,
String metricName,
+ double metricValue, StringBuilder csvBuilder) {
+ writeToTableAndCsv(metricsTable, type, metricName,
String.valueOf(metricValue), csvBuilder);
}
- /**
- * Defines and returns map of categories for system-wide region metrics
- *
- * @return map with categories for system wide region metrics and display
flag set to true
- */
- private Map<String, Boolean> getSystemRegionMetricsCategories() {
- Map<String, Boolean> categories = getRegionMetricsCategories();
- categories.put("cluster", true);
- return categories;
+ private StringBuilder prepareCsvBuilder() {
+ StringBuilder csvBuilder = new StringBuilder();
+ csvBuilder.append(CliStrings.SHOW_METRICS__TYPE__HEADER);
+ csvBuilder.append(',');
+ csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
+ csvBuilder.append(',');
+ csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
+ csvBuilder.append('\n');
+ return csvBuilder;
}
- /**
- * Defines and returns map of categories for member metrics
- *
- * @return map with categories for member metrics and display flag set to
true
- */
- private Map<String, Boolean> getMemberMetricsCategories() {
- Map<String, Boolean> categories = new HashMap<>();
- categories.put("member", true);
- categories.put("jvm", true);
- categories.put("region", true);
- categories.put("serialization", true);
- categories.put("communication", true);
- categories.put("function", true);
- categories.put("transaction", true);
- categories.put("diskstore", true);
- categories.put("lock", true);
- categories.put("eviction", true);
- categories.put("distribution", true);
- categories.put("offheap", true);
- return categories;
+ private void writeToCsvIfNecessary(String type, String metricName, String
metricValue,
+ StringBuilder csvBuilder) {
+ if (csvBuilder != null) {
+ csvBuilder.append(type);
+ csvBuilder.append(',');
+ csvBuilder.append(metricName);
+ csvBuilder.append(',');
+ csvBuilder.append(metricValue);
+ csvBuilder.append('\n');
+ }
+ }
+
+ private Set<Category> getCategorySet(String[] categories) {
+ return
Stream.of(categories).map(String::toLowerCase).map(Category::valueOf)
+ .collect(Collectors.toSet());
}
}
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMetricsInterceptor.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMetricsInterceptor.java
new file mode 100644
index 0000000..97a49a5
--- /dev/null
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMetricsInterceptor.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express
+ * or implied. See the License for the specific language governing permissions
and limitations under
+ * the License.
+ */
+package org.apache.geode.management.internal.cli.commands;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang.StringUtils;
+
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.cli.AbstractCliAroundInterceptor;
+import org.apache.geode.management.internal.cli.GfshParseResult;
+import
org.apache.geode.management.internal.cli.commands.ShowMetricsCommand.Category;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+import org.apache.geode.management.internal.cli.result.CommandResult;
+import org.apache.geode.management.internal.cli.result.ResultBuilder;
+
+public class ShowMetricsInterceptor extends AbstractCliAroundInterceptor {
+ @Override
+ public Result preExecution(GfshParseResult parseResult) {
+ String export_to_report_to =
parseResult.getParamValueAsString(CliStrings.SHOW_METRICS__FILE);
+ if (export_to_report_to != null && !export_to_report_to.endsWith(".csv")) {
+ return ResultBuilder
+
.createUserErrorResult(CliStrings.format(CliStrings.INVALID_FILE_EXTENSION,
".csv"));
+ }
+
+ String regionName =
parseResult.getParamValueAsString(CliStrings.SHOW_METRICS__REGION);
+ String port =
parseResult.getParamValueAsString(CliStrings.SHOW_METRICS__CACHESERVER__PORT);
+ String member = parseResult.getParamValueAsString(CliStrings.MEMBER);
+ String[] categoryArgs = (String[])
parseResult.getParamValue(CliStrings.SHOW_METRICS__CATEGORY);
+
+ if (regionName != null && port != null) {
+ return ResultBuilder.createUserErrorResult(
+ CliStrings.SHOW_METRICS__CANNOT__USE__REGION__WITH__CACHESERVERPORT);
+ }
+
+ if (port != null && member == null) {
+ return ResultBuilder
+
.createUserErrorResult(CliStrings.SHOW_METRICS__CANNOT__USE__CACHESERVERPORT);
+ }
+
+ if (categoryArgs != null) {
+ boolean regionProvided = regionName != null;
+ boolean portProvided = port != null;
+ boolean memberProvided = member != null;
+ List<String> validCategories =
+ getValidCategoriesAsStrings(regionProvided, memberProvided,
portProvided);
+ Set<String> userCategories = new HashSet<>(Arrays.asList(categoryArgs));
+ userCategories.removeAll(validCategories);
+ if (!userCategories.isEmpty()) {
+ return getInvalidCategoryResult(userCategories);
+ }
+ }
+
+ return ResultBuilder.createInfoResult("OK");
+ }
+
+ static List<Category> getValidCategories(boolean regionProvided, boolean
memberProvided,
+ boolean portProvided) {
+ if (regionProvided && memberProvided) {
+ return ShowMetricsCommand.REGION_METRIC_CATEGORIES;
+ }
+ if (regionProvided) {
+ return ShowMetricsCommand.SYSTEM_REGION_METRIC_CATEGORIES;
+ }
+ if (memberProvided && portProvided) {
+ return ShowMetricsCommand.MEMBER_WITH_PORT_METRIC_CATEGORIES;
+ }
+ if (memberProvided) {
+ return ShowMetricsCommand.MEMBER_METRIC_CATEGORIES;
+ }
+ return ShowMetricsCommand.SYSTEM_METRIC_CATEGORIES;
+ }
+
+ static List<String> getValidCategoriesAsStrings(boolean regionProvided,
boolean memberProvided,
+ boolean portProvided) {
+
+ return getValidCategories(regionProvided, memberProvided,
portProvided).stream().map(Enum::name)
+ .collect(Collectors.toList());
+ }
+
+
+ private CommandResult getInvalidCategoryResult(Set<String>
invalidCategories) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Invalid Categories\n");
+ for (String category : invalidCategories) {
+ sb.append(category);
+ sb.append('\n');
+ }
+ return ResultBuilder.createUserErrorResult(sb.toString());
+ }
+}
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
index 69dfc31..0e27fba 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
@@ -2033,9 +2033,10 @@ public class CliStrings {
public static final String SHOW_METRICS__CATEGORY__HELP =
"Categories available based upon the parameters specified are:\n"
+ "- no parameters specified: cluster, cache, diskstore, query\n"
- + "- region specified: cluster, region, partition, diskstore,
callback, eviction\n"
- + "- member specified: member, jvm, region, serialization,
communication, function, transaction, diskstore, lock, eviction, distribution,
offheap\n"
- + "- member and region specified: region, partition, diskstore,
callback, eviction";
+ + "- region specified: callback, cluster, diskstore, eviction,
partition, region\n"
+ + "- member specified: communication, diskstore, distribution,
eviction, function, jvm, lock, member, offheap, region, serialization,
transaction\n"
+ + "- member and port specified: cacheserver, communication,
diskstore, distribution, eviction, function, jvm, lock, member, notification,
offheap, query, region, serialization, transaction\n"
+ + "- member and region specified: callback, diskstore, eviction,
partition, region";
public static final String SHOW_METRICS__FILE = "file";
public static final String SHOW_METRICS__FILE__HELP =
"Name of the file to which metrics will be written.";
diff --git
a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/Bug48571DUnitTest.java
b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/Bug48571DUnitTest.java
index 2d15649..65110ff 100644
---
a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/Bug48571DUnitTest.java
+++
b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/Bug48571DUnitTest.java
@@ -82,11 +82,11 @@ public class Bug48571DUnitTest extends
JUnit4DistributedTestCase {
@Override
public final void preTearDown() throws Exception {
reset();
- server.invoke(() -> Bug48571DUnitTest.reset());
- client.invoke(() -> Bug48571DUnitTest.reset());
+ server.invoke(Bug48571DUnitTest::reset);
+ client.invoke(Bug48571DUnitTest::reset);
}
- public static void reset() throws Exception {
+ private static void reset() {
lastKeyReceived = false;
numOfCreates = 0;
numOfUpdates = 0;
@@ -97,49 +97,47 @@ public class Bug48571DUnitTest extends
JUnit4DistributedTestCase {
}
}
- private static void verifyProxyHasBeenPaused() {
- Awaitility.await().atMost(60, TimeUnit.SECONDS).until(() -> {
- CacheClientNotifier ccn = CacheClientNotifier.getInstance();
- Collection<CacheClientProxy> ccProxies = ccn.getClientProxies();
- boolean pausedFlag = false;
- Iterator<CacheClientProxy> itr = ccProxies.iterator();
-
- while (itr.hasNext()) {
- CacheClientProxy ccp = itr.next();
- System.out.println("proxy status " + ccp.getState());
- if (ccp.isPaused()) {
- pausedFlag = true;
- break;
- }
- }
- assertEquals("Proxy has not been paused in 1 minute", true, pausedFlag);
- });
- }
-
@Test
public void testStatsMatchWithSize() throws Exception {
IgnoredException.addIgnoredException("Unexpected IOException||Connection
reset");
// start a server
- int port = (Integer) server.invoke(() ->
Bug48571DUnitTest.createServerCache());
+ int port = server.invoke(Bug48571DUnitTest::createServerCache);
// create durable client, with durable RI
client.invoke(() -> Bug48571DUnitTest.createClientCache(client.getHost(),
port));
// do puts on server from three different threads, pause after 500 puts
each.
- server.invoke(() -> Bug48571DUnitTest.doPuts());
+ server.invoke(Bug48571DUnitTest::doPuts);
// close durable client
- client.invoke(() -> Bug48571DUnitTest.closeClientCache());
+ client.invoke(Bug48571DUnitTest::closeClientCache);
- server.invoke("verifyProxyHasBeenPaused", () ->
verifyProxyHasBeenPaused());
+ server.invoke("verifyProxyHasBeenPaused",
Bug48571DUnitTest::verifyProxyHasBeenPaused);
// resume puts on server, add another 100.
- server.invoke(() -> Bug48571DUnitTest.resumePuts());
+ server.invoke(Bug48571DUnitTest::resumePuts);
// start durable client
client.invoke(() -> Bug48571DUnitTest.createClientCache(client.getHost(),
port));
// wait for full queue dispatch
- client.invoke(() -> Bug48571DUnitTest.waitForLastKey());
+ client.invoke(Bug48571DUnitTest::waitForLastKey);
// verify the stats
- server.invoke(() -> Bug48571DUnitTest.verifyStats());
+ server.invoke(Bug48571DUnitTest::verifyStats);
}
- public static int createServerCache() throws Exception {
+ private static void verifyProxyHasBeenPaused() {
+ Awaitility.await().atMost(60, TimeUnit.SECONDS).until(() -> {
+ CacheClientNotifier ccn = CacheClientNotifier.getInstance();
+ Collection<CacheClientProxy> ccProxies = ccn.getClientProxies();
+ boolean pausedFlag = false;
+
+ for (CacheClientProxy ccp : ccProxies) {
+ System.out.println("proxy status " + ccp.getState());
+ if (ccp.isPaused()) {
+ pausedFlag = true;
+ break;
+ }
+ }
+ assertEquals("Proxy has not been paused in 1 minute", true, pausedFlag);
+ });
+ }
+
+ private static int createServerCache() throws Exception {
Properties props = new Properties();
props.setProperty(LOCATORS, "localhost[" +
DistributedTestUtils.getDUnitLocatorPort() + "]");
props.setProperty(LOG_FILE, "server_" + OSProcess.getId() + ".log");
@@ -163,11 +161,11 @@ public class Bug48571DUnitTest extends
JUnit4DistributedTestCase {
return server1.getPort();
}
- public static void closeClientCache() throws Exception {
+ private static void closeClientCache() {
cache.close(true);
}
- public static void createClientCache(Host host, Integer port) throws
Exception {
+ private static void createClientCache(Host host, Integer port) {
Properties props = new Properties();
props.setProperty(MCAST_PORT, "0");
@@ -203,7 +201,7 @@ public class Bug48571DUnitTest extends
JUnit4DistributedTestCase {
}
public void afterCreate(EntryEvent<String, String> event) {
- if (((String) event.getKey()).equals("last_key")) {
+ if (event.getKey().equals("last_key")) {
lastKeyReceived = true;
}
cache.getLoggerI18n().fine("Create Event: " + event.getKey() + ", " +
event.getNewValue());
@@ -221,27 +219,21 @@ public class Bug48571DUnitTest extends
JUnit4DistributedTestCase {
cache.readyForEvents();
}
- public static void doPuts() throws Exception {
+ private static void doPuts() throws Exception {
final Region<String, String> r = cache.getRegion(region);
- Thread t1 = new Thread(new Runnable() {
- public void run() {
- for (int i = 0; i < 500; i++) {
- r.put("T1_KEY_" + i, "VALUE_" + i);
- }
+ Thread t1 = new Thread(() -> {
+ for (int i = 0; i < 500; i++) {
+ r.put("T1_KEY_" + i, "VALUE_" + i);
}
});
- Thread t2 = new Thread(new Runnable() {
- public void run() {
- for (int i = 0; i < 500; i++) {
- r.put("T2_KEY_" + i, "VALUE_" + i);
- }
+ Thread t2 = new Thread(() -> {
+ for (int i = 0; i < 500; i++) {
+ r.put("T2_KEY_" + i, "VALUE_" + i);
}
});
- Thread t3 = new Thread(new Runnable() {
- public void run() {
- for (int i = 0; i < 500; i++) {
- r.put("T3_KEY_" + i, "VALUE_" + i);
- }
+ Thread t3 = new Thread(() -> {
+ for (int i = 0; i < 500; i++) {
+ r.put("T3_KEY_" + i, "VALUE_" + i);
}
});
@@ -254,7 +246,7 @@ public class Bug48571DUnitTest extends
JUnit4DistributedTestCase {
t3.join();
}
- public static void resumePuts() {
+ private static void resumePuts() {
Region<String, String> r = cache.getRegion(region);
for (int i = 0; i < 100; i++) {
r.put("NEWKEY_" + i, "NEWVALUE_" + i);
@@ -262,7 +254,7 @@ public class Bug48571DUnitTest extends
JUnit4DistributedTestCase {
r.put("last_key", "last_value");
}
- public static void waitForLastKey() {
+ private static void waitForLastKey() {
WaitCriterion wc = new WaitCriterion() {
@Override
public boolean done() {
@@ -277,7 +269,7 @@ public class Bug48571DUnitTest extends
JUnit4DistributedTestCase {
Wait.waitForCriterion(wc, 60 * 1000, 500, true);
}
- public static void verifyStats() throws Exception {
+ private static void verifyStats() {
Awaitility.await().atMost(60, TimeUnit.SECONDS).until(() -> {
CacheClientNotifier ccn = CacheClientNotifier.getInstance();
CacheClientProxy ccp = ccn.getClientProxies().iterator().next();
diff --git
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommandIntegrationTest.java
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommandIntegrationTest.java
new file mode 100644
index 0000000..f17c681
--- /dev/null
+++
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommandIntegrationTest.java
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional
information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express
+ * or implied. See the License for the specific language governing permissions
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.management.internal.cli.commands;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.logging.log4j.Logger;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import org.apache.geode.cache.RegionShortcut;
+import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.apache.geode.test.junit.rules.GfshShellConnectionRule;
+import org.apache.geode.test.junit.rules.GfshShellConnectionRule.PortType;
+import org.apache.geode.test.junit.rules.ServerStarterRule;
+
+@Category(IntegrationTest.class)
+public class ShowMetricsCommandIntegrationTest {
+ private static final Logger logger = LogService.getLogger();
+ private static final String REGION_NAME = "test-region";
+ private static final String MEMBER_NAME = "testServer";
+
+ @ClassRule
+ public static ServerStarterRule server =
+ new ServerStarterRule().withRegion(RegionShortcut.REPLICATE, REGION_NAME)
+
.withName(MEMBER_NAME).withJMXManager().withEmbeddedLocator().withAutoStart();
+
+ @Rule
+ public GfshShellConnectionRule gfsh = new GfshShellConnectionRule();
+
+ @Test
+ public void everyCategoryHasAUseCase() throws Exception {
+ Set<ShowMetricsCommand.Category> categoriesUsed = new HashSet<>();
+ categoriesUsed.addAll(ShowMetricsCommand.REGION_METRIC_CATEGORIES);
+ categoriesUsed.addAll(ShowMetricsCommand.MEMBER_METRIC_CATEGORIES);
+
categoriesUsed.addAll(ShowMetricsCommand.MEMBER_WITH_PORT_METRIC_CATEGORIES);
+ categoriesUsed.addAll(ShowMetricsCommand.SYSTEM_METRIC_CATEGORIES);
+ categoriesUsed.addAll(ShowMetricsCommand.SYSTEM_REGION_METRIC_CATEGORIES);
+
+ Set<ShowMetricsCommand.Category> categoriesSpecified =
+
Arrays.stream(ShowMetricsCommand.Category.values()).collect(Collectors.toSet());
+
+ assertThat(categoriesSpecified)
+ .containsExactlyInAnyOrder(categoriesUsed.toArray(new
ShowMetricsCommand.Category[0]));
+ }
+
+ @Test
+ public void commandFailsWhenNotConnected() throws Exception {
+ gfsh.executeAndAssertThat("show metrics")
+ .containsOutput("was found but is not currently available");
+ }
+
+ @Test
+ public void getRegionMetricsShowsExactlyDefaultCategories() throws Exception
{
+ // Use --region and --member to get RegionMetricsFromMember
+ String cmd = "show metrics --region=/" + REGION_NAME + " --member=" +
MEMBER_NAME;
+ List<String> expectedCategories =
+ ShowMetricsInterceptor.getValidCategoriesAsStrings(true, true, false);
+ // Blank lines are permitted for grouping.
+ expectedCategories.add("");
+ logger.info("Expecting categories: " + String.join(", ",
expectedCategories));
+
+ gfsh.connectAndVerify(server.getEmbeddedLocatorPort(), PortType.locator);
+ gfsh.executeAndAssertThat(cmd).tableHasColumnOnlyWithValues("Category",
+ expectedCategories.toArray(new String[0]));
+ }
+
+ @Test
+ public void getSystemRegionMetricsShowsExactlyDefaultCategories() throws
Exception {
+ // Use --region alone to get SystemRegionMetrics
+ String cmd = "show metrics --region=/" + REGION_NAME;
+ List<String> expectedCategories =
+ ShowMetricsInterceptor.getValidCategoriesAsStrings(true, false, false);
+ // Blank lines are permitted for grouping.
+ expectedCategories.add("");
+ logger.info("Expecting categories: " + String.join(", ",
expectedCategories));
+
+ gfsh.connectAndVerify(server.getEmbeddedLocatorPort(), PortType.locator);
+ gfsh.executeAndAssertThat(cmd).tableHasColumnOnlyWithValues("Category",
+ expectedCategories.toArray(new String[0]));
+ }
+
+ @Test
+ public void getMemberMetricsShowsExactlyDefaultCategories() throws Exception
{
+ // Use --member to get member metrics
+ String cmd = "show metrics --member=" + MEMBER_NAME;
+ List<String> expectedCategories =
+ ShowMetricsInterceptor.getValidCategoriesAsStrings(false, true, false);
+ // Blank lines are permitted for grouping.
+ expectedCategories.add("");
+ logger.info("Expecting categories: " + String.join(", ",
expectedCategories));
+
+ gfsh.connectAndVerify(server.getEmbeddedLocatorPort(), PortType.locator);
+ gfsh.executeAndAssertThat(cmd).tableHasColumnOnlyWithValues("Category",
+ expectedCategories.toArray(new String[0]));
+ }
+
+ @Test
+ public void getMemberWithPortMetricsShowsExactlyDefaultCategories() throws
Exception {
+ // Use --member and --port to get member metrics with port info
+ String cmd = "show metrics --member=" + MEMBER_NAME + " --port=" +
server.getPort();
+ List<String> expectedCategories =
+ ShowMetricsInterceptor.getValidCategoriesAsStrings(false, true, true);
+ // Blank lines are permitted for grouping.
+ expectedCategories.add("");
+ logger.info("Expecting categories: " + String.join(", ",
expectedCategories));
+
+ gfsh.connectAndVerify(server.getEmbeddedLocatorPort(), PortType.locator);
+ gfsh.executeAndAssertThat(cmd).tableHasColumnOnlyWithValues("Category",
+ expectedCategories.toArray(new String[0]));
+ }
+
+ @Test
+ public void getSystemMetricsShowsExactlyDefaultCategories() throws Exception
{
+ // No specified options yield system-wide metrics
+ String cmd = "show metrics";
+ List<String> expectedCategories =
+ ShowMetricsInterceptor.getValidCategoriesAsStrings(false, false,
false);
+ // Blank lines are permitted for grouping.
+ expectedCategories.add("");
+ logger.info("Expecting categories: " + String.join(", ",
expectedCategories));
+
+ gfsh.connectAndVerify(server.getEmbeddedLocatorPort(), PortType.locator);
+ gfsh.executeAndAssertThat(cmd).tableHasColumnOnlyWithValues("Category",
+ expectedCategories.toArray(new String[0]));
+ }
+
+ @Test
+ public void invalidCategoryGetsReported() throws Exception {
+ String cmd =
+ "show metrics
--categories=\"cluster,cache,some_invalid_category,another_invalid_category\"";
+
+ gfsh.connectAndVerify(server.getEmbeddedLocatorPort(), PortType.locator);
+ gfsh.executeAndAssertThat(cmd).containsOutput("Invalid Categories")
+
.containsOutput("some_invalid_category").containsOutput("another_invalid_category")
+ .doesNotContainOutput("cache").doesNotContainOutput("cluster");
+ }
+
+ @Test
+ public void categoryOptionAbridgesOutput() throws Exception {
+ String cmd = "show metrics --categories=\"cluster,cache\"";
+ List<String> expectedCategories = Arrays.asList("cluster", "cache", "");
+ logger.info("Expecting categories: " + String.join(", ",
expectedCategories));
+
+ gfsh.connectAndVerify(server.getEmbeddedLocatorPort(), PortType.locator);
+ gfsh.executeAndAssertThat(cmd).tableHasColumnOnlyWithValues("Category",
+ expectedCategories.toArray(new String[0]));
+ }
+}
diff --git
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsDUnitTest.java
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsDUnitTest.java
index 151d396..ea2a489 100644
---
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsDUnitTest.java
+++
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsDUnitTest.java
@@ -131,7 +131,7 @@ public class ShowMetricsDUnitTest {
public void testShowMetricsMember() throws Exception {
gfsh.executeAndAssertThat(
"show metrics --member=" + server.getName() + " --port=" +
server.getPort())
- .statusIsSuccess().containsOutput("Member
Metrics").containsOutput("cache-server");
+ .statusIsSuccess().containsOutput("Member
Metrics").containsOutput("cacheserver");
}
@Test
@@ -141,7 +141,7 @@ public class ShowMetricsDUnitTest {
gfsh.executeAndAssertThat("show metrics --member=" + server.getName() + "
--port="
+ server.getPort() + " --file=" +
output.getAbsolutePath()).statusIsSuccess()
- .containsOutput("Member Metrics").containsOutput("cache-server")
+ .containsOutput("Member Metrics").containsOutput("cacheserver")
.containsOutput("Member metrics exported to " +
output.getAbsolutePath());
assertThat(output).exists();
diff --git
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommandJUnitTest.java
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsJUnitTest.java
similarity index 92%
rename from
geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommandJUnitTest.java
rename to
geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsJUnitTest.java
index e3c91b8..e6f15e4 100644
---
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsCommandJUnitTest.java
+++
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMetricsJUnitTest.java
@@ -1,7 +1,7 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
contributor license
* agreements. See the NOTICE file distributed with this work for additional
information regarding
- * copyright ownership. The ASF licenses this file to you under the Apache
License, Version 2.0 (the
+ * copyright ownership. The ASF licenses this file to You under the Apache
License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
License. You may obtain a
* copy of the License at
*
@@ -12,7 +12,6 @@
* or implied. See the License for the specific language governing permissions
and limitations under
* the License.
*/
-
package org.apache.geode.management.internal.cli.commands;
import static org.assertj.core.api.Assertions.assertThat;
@@ -28,7 +27,7 @@ import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.test.junit.rules.GfshParserRule;
@Category(UnitTest.class)
-public class ShowMetricsCommandJUnitTest {
+public class ShowMetricsJUnitTest {
@Rule
public GfshParserRule parser = new GfshParserRule();
@@ -57,6 +56,7 @@ public class ShowMetricsCommandJUnitTest {
ShowMetricsCommand command = spy(ShowMetricsCommand.class);
CommandResult result = parser.executeCommandWithInstance(command, "show
metrics --port=abc");
assertThat(result.getStatus()).isEqualTo(Result.Status.ERROR);
- assertThat(result.getContent().toString()).contains("Invalid port");
+ // When relying on Spring's converters, any command that does not parse is
"Invalid"
+ assertThat(result.getContent().toString()).contains("Invalid command");
}
}
diff --git
a/geode-core/src/test/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
b/geode-core/src/test/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
index f23326b..97c72dc 100644
---
a/geode-core/src/test/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
+++
b/geode-core/src/test/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
@@ -132,7 +132,7 @@ public class CommandResultAssert
public CommandResultAssert tableHasColumnWithExactValuesInExactOrder(String
header,
Object... expectedValues) {
GfJsonObject resultContentJSON = actual.getCommandResult().getContent();
- Object content = resultContentJSON.get(header);
+ Object content = getColumnContent(header, resultContentJSON);
if (content == null) {
failWithMessage(
@@ -168,7 +168,7 @@ public class CommandResultAssert
public CommandResultAssert tableHasColumnWithExactValuesInAnyOrder(String
header,
Object... expectedValues) {
GfJsonObject resultContentJSON = actual.getCommandResult().getContent();
- Object content = resultContentJSON.get(header);
+ Object content = getColumnContent(header, resultContentJSON);
if (content == null) {
failWithMessage("Command result did not contain a table with column
header <" + header + ">: "
@@ -188,7 +188,7 @@ public class CommandResultAssert
public CommandResultAssert tableHasColumnWithValuesContaining(String header,
String... expectedValues) {
GfJsonObject resultContentJSON = actual.getCommandResult().getContent();
- Object content = resultContentJSON.get(header);
+ Object content = getColumnContent(header, resultContentJSON);
if (content == null) {
failWithMessage("Command result did not contain a table with column
header <" + header + ">: "
@@ -210,6 +210,38 @@ public class CommandResultAssert
return this;
}
+
+ /**
+ * Verifies that each of the actual values in the column with the given
header contains at least
+ * one of the expectedValues.
+ */
+ public CommandResultAssert tableHasColumnOnlyWithValues(String header,
String... expectedValues) {
+ GfJsonObject resultContentJSON = actual.getCommandResult().getContent();
+ Object content = getColumnContent(header, resultContentJSON);
+
+ if (content == null) {
+ failWithMessage("Command result did not contain a table with column
header <" + header + ">: "
+ + resultContentJSON.toString());
+ }
+
+ Object[] actualValues = toArray((JSONArray) content);
+ assertThat(actualValues).containsOnly(expectedValues);
+ return this;
+ }
+
+ private Object getColumnContent(String header, GfJsonObject
resultContentJSON) {
+ if (resultContentJSON.get(header) != null) {
+ return resultContentJSON.get(header);
+ }
+ try {
+ // Sometimes, the output is buried in a most questionable way.
+ return
resultContentJSON.getJSONObject("__sections__-0").getJSONObject("__tables__-0")
+ .getJSONObject("content").get(header);
+ } catch (NullPointerException ignored) {
+ }
+ return null;
+ }
+
public CommandResultAssert hasResult() {
containsKeyValuePair("Result", "true");
diff --git
a/geode-core/src/test/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
b/geode-core/src/test/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
index 583f77e..481a7d6 100644
---
a/geode-core/src/test/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
+++
b/geode-core/src/test/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
@@ -1,20 +1,63 @@
+org.apache.geode.internal.security.SecurableCommunicationChannel
+org/apache/geode/admin/internal/BackupStatusImpl
+org/apache/geode/cache/operations/CloseCQOperationContext
+org/apache/geode/cache/operations/DestroyOperationContext
+org/apache/geode/cache/operations/ExecuteCQOperationContext
+org/apache/geode/cache/operations/ExecuteFunctionOperationContext
+org/apache/geode/cache/operations/GetDurableCQsOperationContext
+org/apache/geode/cache/operations/GetOperationContext
+org/apache/geode/cache/operations/InterestOperationContext
+org/apache/geode/cache/operations/InvalidateOperationContext
+org/apache/geode/cache/operations/KeyOperationContext
+org/apache/geode/cache/operations/KeySetOperationContext
+org/apache/geode/cache/operations/KeyValueOperationContext
+org/apache/geode/cache/operations/OperationContext
+org/apache/geode/cache/operations/PutAllOperationContext
+org/apache/geode/cache/operations/PutOperationContext
+org/apache/geode/cache/operations/QueryOperationContext
+org/apache/geode/cache/operations/RegionClearOperationContext
+org/apache/geode/cache/operations/RegionCreateOperationContext
+org/apache/geode/cache/operations/RegionDestroyOperationContext
+org/apache/geode/cache/operations/RegionOperationContext
+org/apache/geode/cache/operations/RegisterInterestOperationContext
+org/apache/geode/cache/operations/RemoveAllOperationContext
+org/apache/geode/cache/operations/StopCQOperationContext
+org/apache/geode/cache/operations/UnregisterInterestOperationContext
+org/apache/geode/cache/operations/internal/GetOperationContextImpl
+org/apache/geode/cache/operations/internal/UpdateOnlyMap
org/apache/geode/cache/query/CqAttributesFactory
org/apache/geode/cache/query/internal/index/CompactRangeIndex
org/apache/geode/cache/query/internal/index/CompactRangeIndex$1
org/apache/geode/cache/query/internal/index/CompactRangeIndex$IMQEvaluator$1
-org/apache/geode/internal/cache/tier/CommunicationMode
org/apache/geode/distributed/LocatorLauncher
org/apache/geode/distributed/LocatorLauncher$Command
org/apache/geode/distributed/ServerLauncher
org/apache/geode/distributed/ServerLauncher$Command
+org/apache/geode/distributed/internal/DistributionConfigImpl
org/apache/geode/distributed/internal/DistributionManager
+org/apache/geode/distributed/internal/tcpserver/LocatorCancelException
+org/apache/geode/internal/AvailablePort$Keeper
org/apache/geode/internal/ExitCode
org/apache/geode/internal/JarDeployer
org/apache/geode/internal/cache/BackupLock
+org/apache/geode/internal/cache/DiskStoreAttributesCreation
+org/apache/geode/internal/cache/DiskStoreMonitor$DiskState
+org/apache/geode/internal/cache/EventStateHelper
+org/apache/geode/internal/cache/InitialImageOperation$GIITestHook
+org/apache/geode/internal/cache/Oplog$OPLOG_TYPE
+org/apache/geode/internal/cache/UserSpecifiedDiskStoreAttributes
+org/apache/geode/internal/cache/client/protocol/exception/ServiceLoadingFailureException
+org/apache/geode/internal/cache/client/protocol/exception/ServiceVersionNotFoundException
+org/apache/geode/internal/cache/operations/ContainsKeyOperationContext
+org/apache/geode/internal/cache/tier/CommunicationMode
+org/apache/geode/internal/cache/tier/InternalClientMembership$EventType
+org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl$ClientCqConcurrentMap
+org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl$CqNameToOpHashMap
+org/apache/geode/internal/datasource/FacetsJCAConnectionManagerImpl
org/apache/geode/internal/exception/InvalidExecutionContextException
org/apache/geode/internal/logging/GemFireLevel
-org/apache/geode/internal/logging/LoggingThreadGroup
org/apache/geode/internal/logging/LogWriterImpl
+org/apache/geode/internal/logging/LoggingThreadGroup
org/apache/geode/internal/logging/log4j/ConfigurableLogger
org/apache/geode/internal/logging/log4j/CustomGemFireLogger
org/apache/geode/internal/logging/log4j/ExtendedGemFireLogger
@@ -25,17 +68,76 @@
org/apache/geode/internal/logging/log4j/LogWriterAppenders$Identifier
org/apache/geode/internal/logging/log4j/LogWriterLogger
org/apache/geode/internal/logging/log4j/message/GemFireParameterizedMessage
org/apache/geode/internal/logging/log4j/message/GemFireParameterizedMessageFactory
+org/apache/geode/internal/memcached/Command
+org/apache/geode/internal/memcached/Command$1
+org/apache/geode/internal/memcached/Command$10
+org/apache/geode/internal/memcached/Command$11
+org/apache/geode/internal/memcached/Command$12
+org/apache/geode/internal/memcached/Command$13
+org/apache/geode/internal/memcached/Command$14
+org/apache/geode/internal/memcached/Command$15
+org/apache/geode/internal/memcached/Command$16
+org/apache/geode/internal/memcached/Command$17
+org/apache/geode/internal/memcached/Command$18
+org/apache/geode/internal/memcached/Command$19
+org/apache/geode/internal/memcached/Command$2
+org/apache/geode/internal/memcached/Command$20
+org/apache/geode/internal/memcached/Command$21
+org/apache/geode/internal/memcached/Command$22
+org/apache/geode/internal/memcached/Command$23
+org/apache/geode/internal/memcached/Command$24
+org/apache/geode/internal/memcached/Command$25
+org/apache/geode/internal/memcached/Command$26
+org/apache/geode/internal/memcached/Command$27
+org/apache/geode/internal/memcached/Command$28
+org/apache/geode/internal/memcached/Command$29
+org/apache/geode/internal/memcached/Command$3
+org/apache/geode/internal/memcached/Command$30
+org/apache/geode/internal/memcached/Command$31
+org/apache/geode/internal/memcached/Command$32
+org/apache/geode/internal/memcached/Command$33
+org/apache/geode/internal/memcached/Command$34
+org/apache/geode/internal/memcached/Command$4
+org/apache/geode/internal/memcached/Command$5
+org/apache/geode/internal/memcached/Command$6
+org/apache/geode/internal/memcached/Command$7
+org/apache/geode/internal/memcached/Command$8
+org/apache/geode/internal/memcached/Command$9
org/apache/geode/internal/offheap/RefCountChangeInfo
org/apache/geode/internal/process/BlockingProcessStreamReader
+org/apache/geode/internal/process/ClusterConfigurationNotAvailableException
org/apache/geode/internal/process/NonBlockingProcessStreamReader
org/apache/geode/internal/process/ProcessStreamReader
org/apache/geode/internal/process/ProcessStreamReader$ReadingMode
org/apache/geode/internal/process/ProcessTerminatedAbnormallyException
org/apache/geode/internal/process/ProcessType
org/apache/geode/internal/process/ProcessUtils
+org/apache/geode/internal/process/SharedConfigurationNotAvailableException
org/apache/geode/internal/process/UnableToControlProcessException
+org/apache/geode/internal/ra/GFConnectionFactoryImpl
+org/apache/geode/internal/ra/GFConnectionImpl
+org/apache/geode/internal/ra/spi/JCAManagedConnectionFactory
org/apache/geode/internal/redis/RegionCreationException
-org/apache/geode/redis/internal/RedisCommandType,false
+org/apache/geode/internal/security/GeodeSecurityUtil
+org/apache/geode/internal/security/IntegratedSecurityService
+org/apache/geode/internal/security/IntegratedSecurityService$SerializationProxy
+org/apache/geode/internal/security/SecurityService
+org/apache/geode/internal/security/shiro/GeodeAuthenticationToken
+org/apache/geode/internal/shared/NativeErrorException
+org/apache/geode/internal/shared/OSType
+org/apache/geode/internal/shared/OSType$1
+org/apache/geode/internal/shared/OSType$2
+org/apache/geode/internal/shared/OSType$3
+org/apache/geode/internal/shared/OSType$4
+org/apache/geode/internal/shared/OSType$5
+org/apache/geode/internal/shared/TCPSocketOptions
+org/apache/geode/internal/statistics/platform/LinuxProcFsStatistics$CPU
+org/apache/geode/internal/util/concurrent/StoppableReadWriteLock
+org/apache/geode/management/internal/BackupStatusImpl
+org/apache/geode/management/internal/cli/commands/ShowMetricsCommand$Category
+org/apache/geode/management/internal/cli/exceptions/UserErrorException
+org/apache/geode/pdx/JSONFormatter$states
+org/apache/geode/redis/internal/RedisCommandType
org/apache/geode/redis/internal/RedisCommandType$1
org/apache/geode/redis/internal/RedisCommandType$10
org/apache/geode/redis/internal/RedisCommandType$100
@@ -149,6 +251,7 @@ org/apache/geode/redis/internal/RedisCommandType$96
org/apache/geode/redis/internal/RedisCommandType$97
org/apache/geode/redis/internal/RedisCommandType$98
org/apache/geode/redis/internal/RedisCommandType$99
+org/apache/geode/redis/internal/RedisCommandType,false
org/apache/geode/redis/internal/RedisDataType
org/apache/geode/redis/internal/RedisDataType$1
org/apache/geode/redis/internal/RedisDataType$2
@@ -212,117 +315,15 @@ org/apache/geode/redis/internal/executor/SortedSetQuery$6
org/apache/geode/redis/internal/executor/SortedSetQuery$7
org/apache/geode/redis/internal/executor/SortedSetQuery$8
org/apache/geode/redis/internal/executor/SortedSetQuery$9
-org/apache/geode/internal/shared/NativeErrorException
-org/apache/geode/internal/shared/OSType
-org/apache/geode/internal/shared/OSType$1
-org/apache/geode/internal/shared/OSType$2
-org/apache/geode/internal/shared/OSType$3
-org/apache/geode/internal/shared/OSType$4
-org/apache/geode/internal/shared/OSType$5
-org/apache/geode/internal/shared/TCPSocketOptions
-org/apache/geode/internal/process/SharedConfigurationNotAvailableException
-org/apache/geode/internal/cache/tier/InternalClientMembership$EventType
-org/apache/geode/internal/util/concurrent/StoppableReadWriteLock
-org/apache/geode/rest/internal/web/exception.GemfireRestException
+org/apache/geode/redis/internal/executor/list/ListExecutor$ListDirection
org/apache/geode/rest/internal/web/controllers/support/JSONTypes
org/apache/geode/rest/internal/web/controllers/support/QueryResultTypes
org/apache/geode/rest/internal/web/controllers/support/UpdateOp
+org/apache/geode/rest/internal/web/exception.GemfireRestException
org/apache/geode/rest/internal/web/exception/MalformedJsonException
org/apache/geode/rest/internal/web/exception/RegionNotFoundException
org/apache/geode/rest/internal/web/exception/ResourceNotFoundException
-org/apache/geode/distributed/internal/DistributionConfigImpl
-org/apache/geode/internal/cache/EventStateHelper
-org/apache/geode/internal/cache/DiskStoreMonitor$DiskState
-org/apache/geode/internal/cache/UserSpecifiedDiskStoreAttributes
-org/apache/geode/internal/cache/DiskStoreAttributesCreation
-org/apache/geode/internal/cache/Oplog$OPLOG_TYPE
-org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl$ClientCqConcurrentMap
-org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl$CqNameToOpHashMap
-org/apache/geode/internal/datasource/FacetsJCAConnectionManagerImpl
-org/apache/geode/internal/process/ClusterConfigurationNotAvailableException
-org/apache/geode/internal/security/GeodeSecurityUtil
-org/apache/geode/internal/security/IntegratedSecurityService
-org/apache/geode/internal/security/IntegratedSecurityService$SerializationProxy
-org/apache/geode/internal/security/SecurityService
-org/apache/geode/internal/statistics/platform/LinuxProcFsStatistics$CPU
-org/apache/geode/internal/ra/GFConnectionFactoryImpl
-org/apache/geode/internal/ra/GFConnectionImpl
-org/apache/geode/internal/ra/spi/JCAManagedConnectionFactory
-org/apache/geode/cache/operations/internal/UpdateOnlyMap
-org/apache/geode/cache/operations/CloseCQOperationContext
-org/apache/geode/cache/operations/DestroyOperationContext
-org/apache/geode/cache/operations/ExecuteCQOperationContext
-org/apache/geode/cache/operations/ExecuteFunctionOperationContext
-org/apache/geode/cache/operations/GetDurableCQsOperationContext
-org/apache/geode/cache/operations/GetOperationContext
-org/apache/geode/cache/operations/InterestOperationContext
-org/apache/geode/cache/operations/InvalidateOperationContext
-org/apache/geode/cache/operations/KeyOperationContext
-org/apache/geode/cache/operations/KeySetOperationContext
-org/apache/geode/cache/operations/KeyValueOperationContext
-org/apache/geode/cache/operations/OperationContext
-org/apache/geode/cache/operations/PutAllOperationContext
-org/apache/geode/cache/operations/PutOperationContext
-org/apache/geode/cache/operations/QueryOperationContext
-org/apache/geode/cache/operations/RegionClearOperationContext
-org/apache/geode/cache/operations/RegionCreateOperationContext
-org/apache/geode/cache/operations/RegionDestroyOperationContext
-org/apache/geode/cache/operations/RegionOperationContext
-org/apache/geode/cache/operations/RegisterInterestOperationContext
-org/apache/geode/cache/operations/RemoveAllOperationContext
-org/apache/geode/cache/operations/StopCQOperationContext
-org/apache/geode/cache/operations/UnregisterInterestOperationContext
-org/apache/geode/cache/operations/internal/GetOperationContextImpl
-org/apache/geode/internal/cache/client/protocol/exception/ServiceLoadingFailureException
-org/apache/geode/internal/cache/client/protocol/exception/ServiceVersionNotFoundException
-org/apache/geode/internal/cache/operations/ContainsKeyOperationContext
org/apache/geode/security/ResourcePermission
org/apache/geode/security/ResourcePermission$Operation
org/apache/geode/security/ResourcePermission$Resource
org/apache/geode/security/ResourcePermission$Target
-org/apache/geode/distributed/internal/tcpserver/LocatorCancelException
-org.apache.geode.internal.security.SecurableCommunicationChannel
-org/apache/geode/internal/security/shiro/GeodeAuthenticationToken
-org/apache/geode/internal/cache/InitialImageOperation$GIITestHook
-org/apache/geode/internal/AvailablePort$Keeper
-org/apache/geode/admin/internal/BackupStatusImpl
-org/apache/geode/management/internal/BackupStatusImpl
-org/apache/geode/management/internal/cli/exceptions/UserErrorException
-org/apache/geode/pdx/JSONFormatter$states
-org/apache/geode/internal/memcached/Command
-org/apache/geode/internal/memcached/Command$1
-org/apache/geode/internal/memcached/Command$10
-org/apache/geode/internal/memcached/Command$11
-org/apache/geode/internal/memcached/Command$12
-org/apache/geode/internal/memcached/Command$13
-org/apache/geode/internal/memcached/Command$14
-org/apache/geode/internal/memcached/Command$15
-org/apache/geode/internal/memcached/Command$16
-org/apache/geode/internal/memcached/Command$17
-org/apache/geode/internal/memcached/Command$18
-org/apache/geode/internal/memcached/Command$19
-org/apache/geode/internal/memcached/Command$2
-org/apache/geode/internal/memcached/Command$20
-org/apache/geode/internal/memcached/Command$21
-org/apache/geode/internal/memcached/Command$22
-org/apache/geode/internal/memcached/Command$23
-org/apache/geode/internal/memcached/Command$24
-org/apache/geode/internal/memcached/Command$25
-org/apache/geode/internal/memcached/Command$26
-org/apache/geode/internal/memcached/Command$27
-org/apache/geode/internal/memcached/Command$28
-org/apache/geode/internal/memcached/Command$29
-org/apache/geode/internal/memcached/Command$3
-org/apache/geode/internal/memcached/Command$30
-org/apache/geode/internal/memcached/Command$31
-org/apache/geode/internal/memcached/Command$32
-org/apache/geode/internal/memcached/Command$33
-org/apache/geode/internal/memcached/Command$34
-org/apache/geode/internal/memcached/Command$4
-org/apache/geode/internal/memcached/Command$5
-org/apache/geode/internal/memcached/Command$6
-org/apache/geode/internal/memcached/Command$7
-org/apache/geode/internal/memcached/Command$8
-org/apache/geode/internal/memcached/Command$9
-org/apache/geode/redis/internal/RedisCommandType
-org/apache/geode/redis/internal/executor/list/ListExecutor$ListDirection
diff --git
a/geode-core/src/test/resources/org/apache/geode/management/internal/cli/commands/golden-help-offline.properties
b/geode-core/src/test/resources/org/apache/geode/management/internal/cli/commands/golden-help-offline.properties
index eb0a719..8199dbf 100644
---
a/geode-core/src/test/resources/org/apache/geode/management/internal/cli/commands/golden-help-offline.properties
+++
b/geode-core/src/test/resources/org/apache/geode/management/internal/cli/commands/golden-help-offline.properties
@@ -2257,10 +2257,12 @@ PARAMETERS\n\
\ \ \ \ categories\n\
\ \ \ \ \ \ \ \ Categories available based upon the parameters specified
are:\n\
\ \ \ \ \ \ \ \ - no parameters specified: cluster, cache, diskstore, query\n\
-\ \ \ \ \ \ \ \ - region specified: cluster, region, partition, diskstore,
callback, eviction\n\
-\ \ \ \ \ \ \ \ - member specified: member, jvm, region, serialization,
communication, function,\n\
-\ \ \ \ \ \ \ \ transaction, diskstore, lock, eviction, distribution,
offheap\n\
-\ \ \ \ \ \ \ \ - member and region specified: region, partition, diskstore,
callback, eviction\n\
+\ \ \ \ \ \ \ \ - region specified: callback, cluster, diskstore, eviction,
partition, region\n\
+\ \ \ \ \ \ \ \ - member specified: communication, diskstore, distribution,
eviction, function, jvm, lock, member,\n\
+\ \ \ \ \ \ \ \ offheap, region, serialization, transaction\n\
+\ \ \ \ \ \ \ \ - member and port specified: cacheserver, communication,
diskstore, distribution, eviction, function,\n\
+\ \ \ \ \ \ \ \ jvm, lock, member, notification, offheap, query, region,
serialization, transaction\n\
+\ \ \ \ \ \ \ \ - member and region specified: callback, diskstore, eviction,
partition, region\n\
\ \ \ \ \ \ \ \ Required: false\n\
show-missing-disk-stores.help=\
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].