You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kh...@apache.org on 2018/12/03 21:04:12 UTC
[geode] branch develop updated: GEODE-5971: Refactor ShowMetricsCommand to extend GfshCommand and ret… (#2928)
This is an automated email from the ASF dual-hosted git repository.
khowe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 9ea9f15 GEODE-5971: Refactor ShowMetricsCommand to extend GfshCommand and ret… (#2928)
9ea9f15 is described below
commit 9ea9f1525d28a085c3f0e042a413e686465e4925
Author: Jens Deppe <jd...@pivotal.io>
AuthorDate: Mon Dec 3 13:04:02 2018 -0800
GEODE-5971: Refactor ShowMetricsCommand to extend GfshCommand and ret… (#2928)
* GEODE-5971: Refactor ShowMetricsCommand to extend GfshCommand and return ResultModel
* Applied updates from reviews
Signed-off-by: Jens Deppe <jd...@pivotal.io>
---
.../cli/commands/ShowMetricsDUnitTest.java | 2 +-
.../internal/cli/commands/ShowMetricsCommand.java | 117 +++++++++------------
.../cli/commands/ShowMetricsInterceptor.java | 21 ++++
.../internal/cli/result/model/FileResultModel.java | 9 ++
4 files changed, 83 insertions(+), 66 deletions(-)
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/ShowMetricsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/ShowMetricsDUnitTest.java
index f8daf1b..7db9a3d 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/ShowMetricsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/ShowMetricsDUnitTest.java
@@ -139,7 +139,7 @@ public class ShowMetricsDUnitTest {
gfsh.executeAndAssertThat("show metrics --member=" + server.getName() + " --port="
+ server.getPort() + " --file=" + output.getAbsolutePath()).statusIsSuccess()
.containsOutput("Member Metrics").containsOutput("cacheserver")
- .containsOutput("Member metrics exported to " + output.getAbsolutePath());
+ .containsOutput("Metrics saved to: " + output.getAbsolutePath());
assertThat(output).exists();
}
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 8055d79..fc0351c 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
@@ -39,20 +39,17 @@ import org.apache.geode.management.MemberMXBean;
import org.apache.geode.management.RegionMXBean;
import org.apache.geode.management.cli.CliMetaData;
import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.cli.GfshCommand;
import org.apache.geode.management.internal.MBeanJMXAdapter;
import org.apache.geode.management.internal.SystemManagementService;
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;
-import org.apache.geode.management.internal.cli.result.ResultBuilder;
-import org.apache.geode.management.internal.cli.result.ResultData;
import org.apache.geode.management.internal.cli.result.ResultDataException;
-import org.apache.geode.management.internal.cli.result.TabularResultData;
+import org.apache.geode.management.internal.cli.result.model.ResultModel;
+import org.apache.geode.management.internal.cli.result.model.TabularResultModel;
import org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.ResourcePermission;
-public class ShowMetricsCommand extends InternalGfshCommand {
+public class ShowMetricsCommand extends GfshCommand {
enum Category {
cache,
cacheserver,
@@ -100,7 +97,7 @@ public class ShowMetricsCommand extends InternalGfshCommand {
interceptor = "org.apache.geode.management.internal.cli.commands.ShowMetricsInterceptor")
@ResourceOperation(resource = ResourcePermission.Resource.CLUSTER,
operation = ResourcePermission.Operation.READ)
- public Result showMetrics(
+ public ResultModel showMetrics(
@CliOption(key = {CliStrings.MEMBER}, optionContext = ConverterHint.ALL_MEMBER_IDNAME,
help = CliStrings.SHOW_METRICS__MEMBER__HELP) String memberNameOrId,
@CliOption(key = {CliStrings.SHOW_METRICS__REGION}, optionContext = ConverterHint.REGION_PATH,
@@ -116,22 +113,22 @@ public class ShowMetricsCommand extends InternalGfshCommand {
StringBuilder csvBuilder =
StringUtils.isEmpty(export_to_report_to) ? null : prepareCsvBuilder();
- ResultData resultData;
+ ResultModel result;
if (regionName != null && memberNameOrId != null) {
- resultData = getRegionMetricsFromMember(regionName, member, export_to_report_to, categories,
+ result = getRegionMetricsFromMember(regionName, member, export_to_report_to, categories,
csvBuilder);
} else if (regionName != null) {
- resultData =
+ result =
getDistributedRegionMetrics(regionName, export_to_report_to, categories, csvBuilder);
} else if (memberNameOrId != null) {
int cacheServerPort = rawCacheServerPort == null ? -1 : rawCacheServerPort;
- resultData =
+ result =
getMemberMetrics(member, export_to_report_to, categories, cacheServerPort, csvBuilder);
} else {
- resultData = getSystemWideMetrics(export_to_report_to, categories, csvBuilder);
+ result = getSystemWideMetrics(export_to_report_to, categories, csvBuilder);
}
- return ResultBuilder.buildResult(resultData);
+ return result;
}
/**
@@ -140,19 +137,18 @@ public class ShowMetricsCommand extends InternalGfshCommand {
* @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 ResultModel getSystemWideMetrics(String export_to_report_to, String[] categoriesArr,
StringBuilder csvBuilder) {
final ManagementService managementService = getManagementService();
DistributedSystemMXBean dsMxBean = managementService.getDistributedSystemMXBean();
if (dsMxBean == null) {
String errorMessage =
CliStrings.format(CliStrings.SHOW_METRICS__ERROR, "Distributed System MBean not found");
- return ResultBuilder.createErrorResultData().addLine(errorMessage);
+ return ResultModel.createError(errorMessage);
}
- CompositeResultData crd = ResultBuilder.createCompositeResultData();
- CompositeResultData.SectionResultData section = crd.addSection();
- TabularResultData metricsTable = section.addTable();
+ ResultModel result = new ResultModel();
+ TabularResultModel metricsTable = result.addTable("cluster-metrics");
Set<Category> categoriesToDisplay = ArrayUtils.isNotEmpty(categoriesArr)
? getCategorySet(categoriesArr) : new HashSet<>(SYSTEM_METRIC_CATEGORIES);
@@ -161,11 +157,10 @@ public class ShowMetricsCommand extends InternalGfshCommand {
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);
+ result.addFile(export_to_report_to, csvBuilder.toString());
}
- return crd;
+ return result;
}
/**
@@ -175,7 +170,7 @@ public class ShowMetricsCommand extends InternalGfshCommand {
* found to gather metrics
* @throws ResultDataException if building result fails
*/
- private ResultData getMemberMetrics(DistributedMember distributedMember,
+ private ResultModel getMemberMetrics(DistributedMember distributedMember,
String export_to_report_to, String[] categoriesArr, int cacheServerPort,
StringBuilder csvBuilder) throws ResultDataException {
final SystemManagementService managementService =
@@ -190,7 +185,7 @@ public class ShowMetricsCommand extends InternalGfshCommand {
if (memberMxBean == null) {
String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR, "Member MBean for "
+ MBeanJMXAdapter.getMemberNameOrId(distributedMember) + " not found");
- return ResultBuilder.createErrorResultData().addLine(errorMessage);
+ return ResultModel.createError(errorMessage);
}
if (cacheServerPort != -1) {
@@ -198,18 +193,16 @@ public class ShowMetricsCommand extends InternalGfshCommand {
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;
+ return ResultModel.createError(
+ CliStrings.format(CliStrings.SHOW_METRICS__CACHE__SERVER__NOT__FOUND,
+ cacheServerPort, MBeanJMXAdapter.getMemberNameOrId(distributedMember)));
}
}
JVMMetrics jvmMetrics = memberMxBean.showJVMMetrics();
- CompositeResultData crd = ResultBuilder.createCompositeResultData();
- CompositeResultData.SectionResultData section = crd.addSection();
- TabularResultData metricsTable = section.addTable();
+ ResultModel result = new ResultModel();
+ TabularResultModel metricsTable = result.addTable("member-metrics");
metricsTable.setHeader("Member Metrics");
List<Category> fullCategories =
@@ -224,11 +217,10 @@ public class ShowMetricsCommand extends InternalGfshCommand {
}
if (StringUtils.isNotEmpty(export_to_report_to)) {
- crd.addAsFile(export_to_report_to, csvBuilder != null ? csvBuilder.toString() : null,
- "Member metrics exported to {0}.", false);
+ result.addFile(export_to_report_to, csvBuilder != null ? csvBuilder.toString() : null);
}
- return crd;
+ return result;
}
/**
@@ -237,7 +229,7 @@ public class ShowMetricsCommand extends InternalGfshCommand {
* @return ResultData containing the table
* @throws ResultDataException if building result fails
*/
- private ResultData getDistributedRegionMetrics(String regionName, String export_to_report_to,
+ private ResultModel getDistributedRegionMetrics(String regionName, String export_to_report_to,
String[] categoriesArr, StringBuilder csvBuilder) throws ResultDataException {
final ManagementService managementService = getManagementService();
@@ -245,16 +237,13 @@ public class ShowMetricsCommand extends InternalGfshCommand {
DistributedRegionMXBean regionMxBean = managementService.getDistributedRegionMXBean(regionName);
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;
+ return ResultModel.createError(errorMessage);
}
- CompositeResultData crd = ResultBuilder.createCompositeResultData();
- CompositeResultData.SectionResultData section = crd.addSection();
- TabularResultData metricsTable = section.addTable();
+ ResultModel result = new ResultModel();
+ TabularResultModel metricsTable = result.addTable("metrics");
metricsTable.setHeader("Cluster-wide Region Metrics");
Set<Category> categoriesToDisplay = ArrayUtils.isNotEmpty(categoriesArr)
@@ -263,11 +252,10 @@ public class ShowMetricsCommand extends InternalGfshCommand {
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);
+ result.addFile(export_to_report_to, csvBuilder != null ? csvBuilder.toString() : null);
}
- return crd;
+ return result;
}
/**
@@ -277,12 +265,11 @@ public class ShowMetricsCommand extends InternalGfshCommand {
* found to gather metrics
* @throws ResultDataException if building result fails
*/
- private ResultData getRegionMetricsFromMember(String regionName,
+ private ResultModel getRegionMetricsFromMember(String regionName,
DistributedMember distributedMember, String export_to_report_to, String[] categoriesArr,
StringBuilder csvBuilder) throws ResultDataException {
- final SystemManagementService managementService =
- (SystemManagementService) getManagementService();
+ final SystemManagementService managementService = getManagementService();
ObjectName regionMBeanName =
managementService.getRegionMBeanName(distributedMember, regionName);
@@ -290,17 +277,14 @@ public class ShowMetricsCommand extends InternalGfshCommand {
managementService.getMBeanInstance(regionMBeanName, RegionMXBean.class);
if (regionMxBean == null) {
- ErrorResultData erd = ResultBuilder.createErrorResultData();
String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR,
"Region MBean for " + regionName + " on member "
+ MBeanJMXAdapter.getMemberNameOrId(distributedMember) + " not found");
- erd.addLine(errorMessage);
- return erd;
+ return ResultModel.createError(errorMessage);
}
- CompositeResultData crd = ResultBuilder.createCompositeResultData();
- CompositeResultData.SectionResultData section = crd.addSection();
- TabularResultData metricsTable = section.addTable();
+ ResultModel result = new ResultModel();
+ TabularResultModel metricsTable = result.addTable("metrics");
metricsTable.setHeader("Metrics for region:" + regionName + " On Member "
+ MBeanJMXAdapter.getMemberNameOrId(distributedMember));
@@ -309,15 +293,15 @@ public class ShowMetricsCommand extends InternalGfshCommand {
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);
+ result.addFile(export_to_report_to, csvBuilder != null ? csvBuilder.toString() : null);
}
- return crd;
+ return result;
}
private void writeSystemWideMetricValues(DistributedSystemMXBean dsMxBean,
- StringBuilder csvBuilder, TabularResultData metricsTable, Set<Category> categoriesToDisplay) {
+ StringBuilder csvBuilder, TabularResultModel metricsTable,
+ Set<Category> categoriesToDisplay) {
if (categoriesToDisplay.contains(Category.cluster)) {
writeToTableAndCsv(metricsTable, "cluster", "totalHeapSize", dsMxBean.getTotalHeapSize(),
csvBuilder);
@@ -353,7 +337,8 @@ public class ShowMetricsCommand extends InternalGfshCommand {
}
private void writeMemberMetricValues(MemberMXBean memberMxBean, JVMMetrics jvmMetrics,
- TabularResultData metricsTable, StringBuilder csvBuilder, Set<Category> categoriesToDisplay) {
+ TabularResultModel metricsTable, StringBuilder csvBuilder,
+ Set<Category> categoriesToDisplay) {
if (categoriesToDisplay.contains(Category.member)) {
writeToTableAndCsv(metricsTable, "member", "upTime", memberMxBean.getMemberUpTime(),
csvBuilder);
@@ -512,7 +497,8 @@ public class ShowMetricsCommand extends InternalGfshCommand {
}
private void writeCacheServerMetricValues(CacheServerMXBean csMxBean,
- TabularResultData metricsTable, StringBuilder csvBuilder, Set<Category> categoriesToDisplay) {
+ TabularResultModel metricsTable, StringBuilder csvBuilder,
+ Set<Category> categoriesToDisplay) {
if (categoriesToDisplay.contains(Category.cacheserver)) {
writeToTableAndCsv(metricsTable, "cacheserver", "clientConnectionCount",
@@ -563,7 +549,8 @@ public class ShowMetricsCommand extends InternalGfshCommand {
}
private void writeSystemRegionMetricValues(DistributedRegionMXBean regionMxBean,
- TabularResultData metricsTable, StringBuilder csvBuilder, Set<Category> categoriesToDisplay) {
+ TabularResultModel metricsTable, StringBuilder csvBuilder,
+ Set<Category> categoriesToDisplay) {
if (categoriesToDisplay.contains(Category.cluster)) {
writeToTableAndCsv(metricsTable, "cluster", "member count", regionMxBean.getMemberCount(),
csvBuilder);
@@ -634,7 +621,7 @@ public class ShowMetricsCommand extends InternalGfshCommand {
}
}
- private void writeRegionMetricValues(RegionMXBean regionMxBean, TabularResultData metricsTable,
+ private void writeRegionMetricValues(RegionMXBean regionMxBean, TabularResultModel metricsTable,
StringBuilder csvBuilder, Set<Category> categoriesToDisplay) {
if (categoriesToDisplay.contains(Category.region)) {
writeToTableAndCsv(metricsTable, "region", "lastModifiedTime",
@@ -701,7 +688,7 @@ public class ShowMetricsCommand extends InternalGfshCommand {
}
}
- private void writeToTableAndCsv(TabularResultData metricsTable, String type, String metricName,
+ private void writeToTableAndCsv(TabularResultModel metricsTable, String type, String metricName,
String metricValue, StringBuilder csvBuilder) {
metricsTable.accumulate(CliStrings.SHOW_METRICS__TYPE__HEADER, type);
metricsTable.accumulate(CliStrings.SHOW_METRICS__METRIC__HEADER, metricName);
@@ -710,7 +697,7 @@ public class ShowMetricsCommand extends InternalGfshCommand {
writeToCsvIfNecessary(type, metricName, String.valueOf(metricValue), csvBuilder);
}
- private void writeToTableAndCsv(TabularResultData metricsTable, String type, String metricName,
+ private void writeToTableAndCsv(TabularResultModel metricsTable, String type, String metricName,
String[] metricValue, StringBuilder csvBuilder) {
if (ArrayUtils.isEmpty(metricValue)) {
return;
@@ -725,12 +712,12 @@ public class ShowMetricsCommand extends InternalGfshCommand {
}
}
- private void writeToTableAndCsv(TabularResultData metricsTable, String type, String metricName,
+ private void writeToTableAndCsv(TabularResultModel metricsTable, String type, String metricName,
long metricValue, StringBuilder csvBuilder) {
writeToTableAndCsv(metricsTable, type, metricName, String.valueOf(metricValue), csvBuilder);
}
- private void writeToTableAndCsv(TabularResultData metricsTable, String type, String metricName,
+ private void writeToTableAndCsv(TabularResultModel metricsTable, String type, String metricName,
double metricValue, StringBuilder csvBuilder) {
writeToTableAndCsv(metricsTable, type, metricName, String.valueOf(metricValue), csvBuilder);
}
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
index e189d1d..739dc6c 100644
--- 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
@@ -14,9 +14,12 @@
*/
package org.apache.geode.management.internal.cli.commands;
+import java.io.IOException;
+import java.nio.file.Path;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@@ -27,6 +30,8 @@ import org.apache.geode.management.internal.cli.commands.ShowMetricsCommand.Cate
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;
+import org.apache.geode.management.internal.cli.result.model.FileResultModel;
+import org.apache.geode.management.internal.cli.result.model.ResultModel;
public class ShowMetricsInterceptor extends AbstractCliAroundInterceptor {
@Override
@@ -102,4 +107,20 @@ public class ShowMetricsInterceptor extends AbstractCliAroundInterceptor {
}
return ResultBuilder.createUserErrorResult(sb.toString());
}
+
+ @Override
+ public ResultModel postExecution(GfshParseResult parseResult, ResultModel resultModel,
+ Path tempFile) {
+ try {
+ for (Map.Entry<String, FileResultModel> entry : resultModel.getFiles().entrySet()) {
+ entry.getValue().saveFile();
+ resultModel.addInfo().addLine("Metrics saved to: " + entry.getKey());
+ }
+ } catch (IOException e) {
+ resultModel.addInfo().addLine("Unable to save file: " + e.getMessage());
+ resultModel.setStatus(Result.Status.ERROR);
+ }
+
+ return resultModel;
+ }
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/model/FileResultModel.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/model/FileResultModel.java
index 22ec9e8..89721e1 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/model/FileResultModel.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/model/FileResultModel.java
@@ -92,6 +92,15 @@ public class FileResultModel {
}
/**
+ * Save the file to the current working directory
+ *
+ * @return the message you would like to return to the user.
+ */
+ public String saveFile() throws IOException {
+ return saveFile(null);
+ }
+
+ /**
* at this point, the dir should already exist and is confirmed as a directory
* filename in this instance should be file name only. no path in the file name
*