blob: 2549eb9a44f1849d97ce92755c251c58474309a4 [file] [log] [blame]
/*
* =========================================================================
* Copyright (c) 2012-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
* ========================================================================
*/
package com.vmware.gemfire.tools.pulse.internal.service;
import java.text.DecimalFormat;
import javax.servlet.http.HttpServletRequest;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
import com.vmware.gemfire.tools.pulse.internal.data.Repository;
import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
/**
* Class MemberRegionsService
*
* This class contains implementations of getting Memeber's Regions details.
*
* @author Sachin K
* @since version 7.5
*/
@Component
@Service("MemberRegions")
@Scope("singleton")
public class MemberRegionsService implements PulseService {
// String constants used for forming a json response
private final String NAME = "name";
private final String ENTRY_SIZE = "entrySize";
private final String DISC_STORE_NAME = "diskStoreName";
private final String DISC_SYNCHRONOUS = "diskSynchronous";
public JSONObject execute(final HttpServletRequest request) throws Exception {
// get cluster object
Cluster cluster = Repository.get().getCluster();
// json object to be sent as response
JSONObject responseJSON = new JSONObject();
try {
JSONObject requestDataJSON = new JSONObject(
request.getParameter("pulseData"));
String memberName = requestDataJSON.getJSONObject("MemberRegions")
.getString("memberName");
Cluster.Member clusterMember = cluster.getMember(StringUtils
.makeCompliantName(memberName));
if (clusterMember != null) {
responseJSON.put("memberId", clusterMember.getId());
responseJSON.put(this.NAME, clusterMember.getName());
responseJSON.put("host", clusterMember.getHost());
// member's regions
Cluster.Region[] memberRegions = clusterMember.getMemberRegionsList();
JSONArray regionsListJson = new JSONArray();
for (Cluster.Region memberRegion : memberRegions) {
JSONObject regionJSON = new JSONObject();
regionJSON.put(this.NAME, memberRegion.getName());
if (PulseConstants.PRODUCT_NAME_SQLFIRE
.equalsIgnoreCase(PulseController.getPulseProductSupport())) {
// Convert region path to dot separated region path
regionJSON.put("fullPath", StringUtils
.getTableNameFromRegionName(memberRegion.getFullPath()));
} else {
regionJSON.put("fullPath", memberRegion.getFullPath());
}
regionJSON.put("type", memberRegion.getRegionType());
regionJSON
.put("entryCount", memberRegion.getSystemRegionEntryCount());
Long entrySize = memberRegion.getEntrySize();
DecimalFormat form = new DecimalFormat(
PulseConstants.DECIMAL_FORMAT_PATTERN_2);
String entrySizeInMB = form.format(entrySize / (1024f * 1024f));
if (entrySize < 0) {
regionJSON.put(this.ENTRY_SIZE, this.VALUE_NA);
} else {
regionJSON.put(this.ENTRY_SIZE, entrySizeInMB);
}
regionJSON.put("scope", memberRegion.getScope());
String diskStoreName = memberRegion.getDiskStoreName();
if (StringUtils.isNotNullNotEmptyNotWhiteSpace(diskStoreName)) {
regionJSON.put(this.DISC_STORE_NAME, diskStoreName);
regionJSON.put(this.DISC_SYNCHRONOUS,
memberRegion.isDiskSynchronous());
} else {
regionJSON.put(this.DISC_SYNCHRONOUS, this.VALUE_NA);
regionJSON.put(this.DISC_STORE_NAME, "");
}
regionJSON.put("gatewayEnabled", memberRegion.getWanEnabled());
regionsListJson.put(regionJSON);
}
responseJSON.put("memberRegions", regionsListJson);
// response
responseJSON.put("status", "Normal");
}
// Send json response
return responseJSON;
} catch (JSONException e) {
throw new Exception(e);
}
}
}