[
https://issues.apache.org/jira/browse/GEODE-3961?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16251842#comment-16251842
]
ASF GitHub Bot commented on GEODE-3961:
---------------------------------------
PurelyApplied closed pull request #1046: GEODE-3961: Refactor
ShowMetricsCommand to behave uniformly...
URL: https://github.com/apache/geode/pull/1046
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
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 9cebc63c34..4fc7d4e8b0 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 @@ else if (!userInput.endsWith("=")) {
/**
* @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 6783925533..bf303f5a63 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.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.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 Result showMetrics(
@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 Result preExecution(GfshParseResult parseResult) {
* @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 @@ private ResultData getSystemWideMetrics(String
export_to_report_to, String[] cat
* @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 @@ private ResultData getMemberMetrics(DistributedMember
distributedMember,
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 @@ private ResultData getMemberMetrics(DistributedMember
distributedMember,
* @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 @@ private ResultData getDistributedRegionMetrics(String
regionName, String export_
* @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 @@ private ResultData getRegionMetricsFromMember(String
regionName,
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 @@ private ResultData getRegionMetricsFromMember(String
regionName,
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 0000000000..97a49a5d8b
--- /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 69dfc31e85..0e27fba208 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 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 2d1564927b..65110ffc03 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 final void postSetUp() throws Exception {
@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 static void reset() 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;
- 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 static int createServerCache() throws Exception {
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 void afterInvalidate(EntryEvent<String, String>
event) {
}
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 void afterUpdate(EntryEvent<String, String> event)
{
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 void run() {
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 static void resumePuts() {
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 String description() {
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 0000000000..f17c681250
--- /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 1a34a3e69a..467002fc19 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 void testShowMetricsRegion() throws Exception {
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 void testShowMetricsMemberWithFileOutput() throws
Exception {
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 e3c91b810b..e6f15e4dcd 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.rules.GfshParserRule;
@Category(UnitTest.class)
-public class ShowMetricsCommandJUnitTest {
+public class ShowMetricsJUnitTest {
@Rule
public GfshParserRule parser = new GfshParserRule();
@@ -57,6 +56,7 @@ public void invalidPortNumber() throws Exception {
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 f23326ba67..97c72dcdf3 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 CommandResultAssert statusIsError() {
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 CommandResultAssert
tableHasColumnWithExactValuesInExactOrder(String head
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 CommandResultAssert
tableHasColumnWithExactValuesInAnyOrder(String header
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 CommandResultAssert
tableHasColumnWithValuesContaining(String header,
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 583f77e2d4..481a7d6ef1 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 eb0a719f52..8199dbf123 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=\
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Show metrics disregards specified --categories for CacheServer (--port option
> related) metrics
> -----------------------------------------------------------------------------------------------
>
> Key: GEODE-3961
> URL: https://issues.apache.org/jira/browse/GEODE-3961
> Project: Geode
> Issue Type: Bug
> Reporter: Patrick Rhomberg
>
> Those CacheServer metric categories ({{query}}, {{notification}}, and
> {{cache-server}}) are not checked against those categories specified by the
> user and are only checked against the cache server bean being non-null
> (implicitly: that the port was provided and valid).
> For unification and consistency, these categories should not be displayed
> when the {{--categories}} option is specified and excludes them.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)