You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2016/01/21 23:55:16 UTC
[35/96] [abbrv] [partial] incubator-geode git commit: GEODE-12:
rename pulse to gemfire-pulse and make build pass
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
new file mode 100644
index 0000000..29a533c
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
@@ -0,0 +1,88 @@
+/*
+ * =========================================================================
+ * 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 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.data.Cluster;
+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 MemberKeyStatisticsService
+ *
+ * This class contains implementations of getting Member's CPU, Memory and Read
+ * Write details
+ *
+ * @author Sachin K
+ * @since version 7.5
+ */
+@Component
+@Service("MemberKeyStatistics")
+@Scope("singleton")
+public class MemberKeyStatisticsService implements PulseService {
+
+ 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("MemberKeyStatistics")
+ .getString("memberName");
+
+ Cluster.Member clusterMember = cluster.getMember(StringUtils
+ .makeCompliantName(memberName));
+ if (clusterMember != null) {
+ // response
+ responseJSON
+ .put(
+ "cpuUsageTrend",
+ new JSONArray(
+ clusterMember
+ .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_CPU_USAGE_SAMPLE)));
+ responseJSON
+ .put(
+ "memoryUsageTrend",
+ new JSONArray(
+ clusterMember
+ .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_HEAP_USAGE_SAMPLE)));
+ responseJSON
+ .put(
+ "readPerSecTrend",
+ new JSONArray(
+ clusterMember
+ .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_GETS_PER_SECOND)));
+ responseJSON
+ .put(
+ "writePerSecTrend",
+ new JSONArray(
+ clusterMember
+ .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_PUTS_PER_SECOND)));
+ }
+ // Send json response
+ return responseJSON;
+ } catch (JSONException e) {
+ throw new Exception(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
new file mode 100644
index 0000000..2549eb9
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
@@ -0,0 +1,130 @@
+/*
+ * =========================================================================
+ * 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);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
new file mode 100644
index 0000000..67ff368
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
@@ -0,0 +1,68 @@
+/*
+ * =========================================================================
+ * 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 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.data.Cluster;
+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;
+
+/**
+ * Class MembersListService
+ *
+ * This class contains implementations of getting list of Cluster Members.
+ *
+ * @author Sachin K
+ * @since version 7.5
+ */
+@Component
+@Service("MembersList")
+@Scope("singleton")
+public class MembersListService implements PulseService {
+
+ 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();
+
+ // members list
+ JSONArray memberListJson = new JSONArray();
+ Cluster.Member[] memberSet = cluster.getMembers();
+
+ try {
+ for (Cluster.Member member : memberSet) {
+ JSONObject memberJSON = new JSONObject();
+ memberJSON.put("memberId", member.getId());
+ memberJSON.put("name", member.getName());
+ memberJSON.put("host", member.getHost());
+
+ memberListJson.put(memberJSON);
+ }
+
+ // Response JSON
+ responseJSON.put("clusterMembers", memberListJson);
+ responseJSON.put("clusterName", cluster.getServerName());
+ // Send json response
+ return responseJSON;
+ } catch (JSONException e) {
+ throw new Exception(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
new file mode 100644
index 0000000..e936ec1
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
@@ -0,0 +1,32 @@
+/*
+ * =========================================================================
+ * 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 javax.servlet.http.HttpServletRequest;
+
+import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+
+/**
+ * Abstract class PulseService
+ *
+ * This is a base class for all services in pulse.
+ *
+ * @author azambare
+ * @since version 7.5
+ */
+public interface PulseService {
+
+ String VALUE_NA = "NA";
+ String VALUE_ON = "ON";
+ String VALUE_OFF = "OFF";
+
+ JSONObject execute(HttpServletRequest httpServletRequest)
+ throws Exception;
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseServiceFactory.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseServiceFactory.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseServiceFactory.java
new file mode 100644
index 0000000..08d12fe
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseServiceFactory.java
@@ -0,0 +1,46 @@
+/*
+ * =========================================================================
+ * 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 org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+/**
+ * Class PulseServiceFactory
+ *
+ * @author azambare
+ * @since version 7.5
+ */
+@Component
+@Scope("singleton")
+public class PulseServiceFactory implements ApplicationContextAware {
+
+ static final long serialVersionUID = 02L;
+ ApplicationContext applicationContext = null;
+
+ public PulseService getPulseServiceInstance(final String servicename) {
+
+ if (applicationContext != null
+ && applicationContext.containsBean(servicename)) {
+ return (PulseService) applicationContext.getBean(servicename);
+ }
+ return null;
+ }
+
+ @Override
+ public void setApplicationContext(final ApplicationContext applicationContext)
+ throws BeansException {
+
+ this.applicationContext = applicationContext;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
new file mode 100644
index 0000000..5b5ae57
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
@@ -0,0 +1,64 @@
+/*
+ * =========================================================================
+ * 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 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.json.JSONException;
+import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+
+/**
+ * Class PulseVersionService
+ *
+ * This class contains implementations of getting Pulse Applications Version's
+ * details (like version details, build details, source details, etc) from
+ * properties file
+ *
+ * @author Sachin K
+ * @since version 7.0.Beta
+ */
+
+@Component
+@Service("PulseVersion")
+@Scope("singleton")
+public class PulseVersionService implements PulseService {
+
+ public JSONObject execute(final HttpServletRequest request) throws Exception {
+
+ // json object to be sent as response
+ JSONObject responseJSON = new JSONObject();
+
+ try {
+ // Response
+ responseJSON.put("pulseVersion",
+ PulseController.pulseVersion.getPulseVersion());
+ responseJSON.put("buildId",
+ PulseController.pulseVersion.getPulseBuildId());
+ responseJSON.put("buildDate",
+ PulseController.pulseVersion.getPulseBuildDate());
+ responseJSON.put("sourceDate",
+ PulseController.pulseVersion.getPulseSourceDate());
+ responseJSON.put("sourceRevision",
+ PulseController.pulseVersion.getPulseSourceRevision());
+ responseJSON.put("sourceRepository",
+ PulseController.pulseVersion.getPulseSourceRepository());
+ } catch (JSONException e) {
+ throw new Exception(e);
+ }
+ // Send json response
+ return responseJSON;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
new file mode 100644
index 0000000..30ec856
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
@@ -0,0 +1,142 @@
+/*
+ * =========================================================================
+ * 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 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.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;
+
+/**
+ * Class QueryStatisticsService
+ *
+ * This class returns top N queries based on pagination and filtering criteria
+ * if any
+ *
+ * @author Riya Bhandekar
+ * @since version 7.5
+ */
+@Component
+@Service("QueryStatistics")
+@Scope("singleton")
+public class QueryStatisticsService implements PulseService {
+
+ @Override
+ 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 {
+ Cluster.Statement[] stmts = cluster.getStatements();
+
+ JSONObject queryJSON;
+ JSONArray queryListJson = new JSONArray();
+ for (int i = 0; i < stmts.length; ++i) {
+ queryJSON = new JSONObject();
+ queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_QUERYDEFINITION,
+ stmts[i].getQueryDefinition());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_NUMTIMESCOMPILED,
+ (stmts[i].getNumTimesCompiled() < 0) ? this.VALUE_NA : stmts[i]
+ .getNumTimesCompiled());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_NUMEXECUTION,
+ (stmts[i].getNumExecution() < 0) ? this.VALUE_NA : stmts[i]
+ .getNumExecution());
+ queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMEXECUTIONSINPROGRESS,
+ (stmts[i].getNumExecutionsInProgress() < 0) ? this.VALUE_NA
+ : stmts[i].getNumExecutionsInProgress());
+ queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMTIMESGLOBALINDEXLOOKUP,
+ (stmts[i].getNumTimesGlobalIndexLookup() < 0) ? this.VALUE_NA
+ : stmts[i].getNumTimesGlobalIndexLookup());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_NUMROWSMODIFIED,
+ (stmts[i].getNumRowsModified() < 0) ? this.VALUE_NA : stmts[i]
+ .getNumRowsModified());
+ queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_PARSETIME, (stmts[i]
+ .getParseTime() < 0) ? this.VALUE_NA : stmts[i].getParseTime());
+ queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_BINDTIME, (stmts[i]
+ .getBindTime() < 0) ? this.VALUE_NA : stmts[i].getBindTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_OPTIMIZETIME,
+ (stmts[i].getOptimizeTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getOptimizeTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_ROUTINGINFOTIME,
+ (stmts[i].getRoutingInfoTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getRoutingInfoTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_GENERATETIME,
+ (stmts[i].getGenerateTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getGenerateTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_TOTALCOMPILATIONTIME,
+ (stmts[i].getTotalCompilationTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getTotalCompilationTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_EXECUTIONTIME,
+ (stmts[i].getExecutionTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getExecutionTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_PROJECTIONTIME,
+ (stmts[i].getProjectionTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getProjectionTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_TOTALEXECUTIONTIME,
+ (stmts[i].getTotalExecutionTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getTotalExecutionTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_ROWSMODIFICATIONTIME,
+ (stmts[i].getRowsModificationTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getRowsModificationTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_QNNUMROWSSEEN,
+ (stmts[i].getqNNumRowsSeen() < 0) ? this.VALUE_NA : stmts[i]
+ .getqNNumRowsSeen());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_QNMSGSENDTIME,
+ (stmts[i].getqNMsgSendTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getqNMsgSendTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_QNMSGSERTIME,
+ (stmts[i].getqNMsgSerTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getqNMsgSerTime());
+ queryJSON.put(
+ PulseConstants.MBEAN_ATTRIBUTE_QNRESPDESERTIME,
+ (stmts[i].getqNRespDeSerTime() < 0) ? this.VALUE_NA : stmts[i]
+ .getqNRespDeSerTime());
+ queryListJson.put(queryJSON);
+ }
+ responseJSON.put("queriesList", queryListJson);
+
+ // return jmx status
+ responseJSON.put("connectedFlag", cluster.isConnectedFlag());
+ responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
+
+ // Send json response
+ return responseJSON;
+
+ } catch (JSONException e) {
+ throw new Exception(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
new file mode 100644
index 0000000..2d089e4
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
@@ -0,0 +1,124 @@
+/*
+ * =========================================================================
+ * 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 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.data.Cluster;
+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 SystemAlertsService
+ *
+ * This class contains implementations of getting system's alerts details (like
+ * errors, warnings and severe errors).
+ *
+ * @author Anchal G
+ * @since version 7.5
+ */
+
+@Component
+@Service("SystemAlerts")
+@Scope("singleton")
+public class SystemAlertsService implements PulseService {
+
+ 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"));
+ int pageNumber = 1; // Default
+ String strPageNumber = requestDataJSON.getJSONObject("SystemAlerts")
+ .getString("pageNumber");
+ if (StringUtils.isNotNullNotEmptyNotWhiteSpace(strPageNumber)) {
+ try {
+ pageNumber = Integer.valueOf(strPageNumber);
+ } catch (NumberFormatException e) {
+ }
+ }
+
+ // clucter's Members
+ responseJSON.put("systemAlerts", getAlertsJson(cluster, pageNumber));
+ responseJSON.put("pageNumber", cluster.getNotificationPageNumber());
+ responseJSON.put("connectedFlag", cluster.isConnectedFlag());
+ responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
+
+ } catch (JSONException e) {
+ throw new Exception(e);
+ }
+
+ // Send json response
+ return responseJSON;
+ }
+
+ /**
+ * function used for getting all members details in format of JSON Object
+ * array defined under a cluster
+ *
+ * @param cluster
+ * @return JSONObject Array list
+ */
+ public static JSONObject getAlertsJson(Cluster cluster, int pageNumber)
+ throws JSONException {
+ // getting list of all types of alerts
+ Cluster.Alert[] alertsList = cluster.getAlertsList();
+
+ // create alerts json
+ JSONObject alertsJsonObject = new JSONObject();
+
+ if ((alertsList != null) && (alertsList.length > 0)) {
+ JSONArray errorJsonArray = new JSONArray();
+ JSONArray severeJsonArray = new JSONArray();
+ JSONArray warningJsonArray = new JSONArray();
+ JSONArray infoJsonArray = new JSONArray();
+
+ cluster.setNotificationPageNumber(pageNumber);
+ for (Cluster.Alert alert : alertsList) {
+ JSONObject objAlertJson = new JSONObject();
+ objAlertJson.put("description", alert.getDescription());
+ objAlertJson.put("memberName", alert.getMemberName());
+ objAlertJson.put("severity", alert.getSeverity());
+ objAlertJson.put("isAcknowledged", alert.isAcknowledged());
+ objAlertJson.put("timestamp", alert.getTimestamp().toString());
+ objAlertJson.put("iso8601Ts", alert.getIso8601Ts());
+ objAlertJson.put("id", alert.getId());
+
+ if (alert.getSeverity() == Cluster.Alert.SEVERE) {
+ severeJsonArray.put(objAlertJson);
+ } else if (alert.getSeverity() == Cluster.Alert.ERROR) {
+ errorJsonArray.put(objAlertJson);
+ } else if (alert.getSeverity() == Cluster.Alert.WARNING) {
+ warningJsonArray.put(objAlertJson);
+ } else {
+ infoJsonArray.put(objAlertJson);
+ }
+ }
+ alertsJsonObject.put("info", infoJsonArray);
+ alertsJsonObject.put("warnings", warningJsonArray);
+ alertsJsonObject.put("errors", errorJsonArray);
+ alertsJsonObject.put("severe", severeJsonArray);
+ }
+ return alertsJsonObject;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/ConnectionUtil.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/ConnectionUtil.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/ConnectionUtil.java
new file mode 100644
index 0000000..f1defe0
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/ConnectionUtil.java
@@ -0,0 +1,36 @@
+/*=========================================================================
+ * 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
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.vmware.gemfire.tools.pulse.internal.util;
+
+import java.io.IOException;
+
+import javax.net.SocketFactory;
+import javax.net.ssl.SSLSocketFactory;
+
+
+/**
+ *
+ * @author rishim
+ *
+ */
+public class ConnectionUtil {
+
+
+
+ public static SocketFactory getSocketFactory(boolean usessl)
+ throws IOException
+ {
+ if(usessl){
+ return (SSLSocketFactory)SSLSocketFactory.getDefault();
+ }else{
+ return SocketFactory.getDefault();
+ }
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/IPAddressUtil.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/IPAddressUtil.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/IPAddressUtil.java
new file mode 100644
index 0000000..0c2b63e
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/IPAddressUtil.java
@@ -0,0 +1,56 @@
+/*
+ * =========================================================================
+ * 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.util;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+/* [ NOTE:
+ * This class supposed to be removed, if required, after discussing with
+ * VMware team ]
+ */
+/**
+ * Class IPAddressUtil This is utility class for checking whether ip address is
+ * versions i.e. IPv4 or IPv6 address
+ *
+ * @author Sachin K
+ *
+ * @since version 7.0.1
+ */
+public class IPAddressUtil {
+
+ private static Pattern VALID_IPV4_PATTERN = null;
+ private static Pattern VALID_IPV6_PATTERN = null;
+ private static final String ipv4Pattern = "(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])";
+ private static final String ipv6Pattern = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}";
+
+ static {
+ try {
+ VALID_IPV4_PATTERN = Pattern.compile(ipv4Pattern,
+ Pattern.CASE_INSENSITIVE);
+ VALID_IPV6_PATTERN = Pattern.compile(ipv6Pattern,
+ Pattern.CASE_INSENSITIVE);
+ } catch (PatternSyntaxException e) {
+
+ }
+ }
+
+ public static Boolean isIPv4LiteralAddress(String IPAddress) {
+ Matcher matcher = IPAddressUtil.VALID_IPV4_PATTERN.matcher(IPAddress);
+ return matcher.matches();
+ }
+
+ public static Boolean isIPv6LiteralAddress(String IPAddress) {
+
+ Matcher matcher = IPAddressUtil.VALID_IPV6_PATTERN.matcher(IPAddress);
+ return matcher.matches();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/StringUtils.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/StringUtils.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/StringUtils.java
new file mode 100644
index 0000000..d9d75c3
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/StringUtils.java
@@ -0,0 +1,76 @@
+/*
+ * =========================================================================
+ * 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.util;
+
+/**
+ * Class StringUtils This is utility class for string.
+ *
+ * @author Sachin K
+ *
+ * @since version 7.0.1
+ */
+public class StringUtils {
+ /**
+ * Checks the string if it is not null, not empty, and not white space only
+ * using standard Java classes.
+ *
+ * @param string
+ * String to be checked.
+ * @return {@code true} if provided String is not null, is not empty, and has
+ * at least one character that is not considered white space.
+ */
+ public static boolean isNotNullNotEmptyNotWhiteSpace(final String string) {
+ return string != null && !string.isEmpty() && !string.trim().isEmpty();
+ }
+
+ /**
+ * Checking for String that is not null, not empty, and not white space only
+ * using standard Java classes.
+ *
+ * @param value
+ * String to be made compliant.
+ * @return string compliant string.
+ */
+ public static String makeCompliantName(String value) {
+ value = value.replace(':', '-');
+ value = value.replace(',', '-');
+ value = value.replace('=', '-');
+ value = value.replace('*', '-');
+ value = value.replace('?', '-');
+ if (value.length() < 1) {
+ value = "nothing";
+ }
+ return value;
+ }
+
+ /**
+ * Function to get table name derived from region name/full path
+ *
+ * @param regionName
+ * String to be made compliant.
+ * @return string compliant string.
+ */
+ public static String getTableNameFromRegionName(String regionName) {
+ String tableName = regionName.replaceFirst("/", "").replace('/', '.');
+ return tableName;
+ }
+
+ /**
+ * Function to get region name/full path derived from table name
+ *
+ * @param regionName
+ * String to be made compliant.
+ * @return string compliant string.
+ */
+ public static String getRegionNameFromTableName(String tableName) {
+ String regionName = "/" + tableName.replace('.', '/');
+ return regionName;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/TimeUtils.java
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/TimeUtils.java b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/TimeUtils.java
new file mode 100644
index 0000000..27cd16b
--- /dev/null
+++ b/gemfire-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/TimeUtils.java
@@ -0,0 +1,111 @@
+/*
+ * =========================================================================
+ * 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.util;
+
+/**
+ * Class TimeUtils
+ *
+ * This is utility class used for conversions of time.
+ *
+ * @author Sachin K
+ *
+ * @since version 7.0.1
+ */
+public class TimeUtils {
+
+ /**
+ * Method to converts time given in milliseconds to string representation in
+ * days, hours, minutes and seconds
+ *
+ * @param longMilliSecs
+ * Time in milliseconds.
+ * @return String
+ */
+ public static String convertTimeMillisecondsToHMS(long longMilliSecs) {
+
+ long days = longMilliSecs / (1000 * 60 * 60 * 24);
+ long remainder = longMilliSecs % (1000 * 60 * 60 * 24);
+
+ long hours = remainder / (1000 * 60 * 60);
+ remainder = remainder % (1000 * 60 * 60);
+
+ long mins = remainder / (1000 * 60);
+ remainder = remainder % (1000 * 60);
+
+ long secs = remainder / 1000;
+
+ String strDaysHrsMinsSecs = "";
+
+ if (days > 0) {
+ strDaysHrsMinsSecs += days + " Days ";
+ }
+
+ if (hours > 0) {
+ strDaysHrsMinsSecs += hours + " Hours ";
+ } else {
+ strDaysHrsMinsSecs += "0 Hours ";
+ }
+
+ if (mins > 0) {
+ strDaysHrsMinsSecs += mins + " Mins ";
+ } else {
+ strDaysHrsMinsSecs += "0 Mins ";
+ }
+
+ strDaysHrsMinsSecs += secs + " Secs";
+
+ return strDaysHrsMinsSecs;
+ }
+
+ /**
+ * Method to converts time given in seconds to string representation in days,
+ * hours, minutes and seconds
+ *
+ * @param longSecs
+ * Time in seconds.
+ * @return String
+ */
+ public static String convertTimeSecondsToHMS(long longSecs) {
+
+ long days = longSecs / (60 * 60 * 24);
+ long remainder = longSecs % (60 * 60 * 24);
+
+ long hours = remainder / (60 * 60);
+ remainder = remainder % (60 * 60);
+
+ long mins = remainder / (60);
+ remainder = remainder % (60);
+
+ long secs = remainder;
+
+ String strDaysHrsMinsSecs = "";
+
+ if (days > 0) {
+ strDaysHrsMinsSecs += days + " Days ";
+ }
+
+ if (hours > 0) {
+ strDaysHrsMinsSecs += hours + " Hours ";
+ } else {
+ strDaysHrsMinsSecs += "0 Hours ";
+ }
+
+ if (mins > 0) {
+ strDaysHrsMinsSecs += mins + " Mins ";
+ } else {
+ strDaysHrsMinsSecs += "0 Mins ";
+ }
+
+ strDaysHrsMinsSecs += secs + " Secs";
+
+ return strDaysHrsMinsSecs;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/resources/LogMessages_en_US.properties
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/resources/LogMessages_en_US.properties b/gemfire-pulse/src/main/resources/LogMessages_en_US.properties
new file mode 100644
index 0000000..b721b6d
--- /dev/null
+++ b/gemfire-pulse/src/main/resources/LogMessages_en_US.properties
@@ -0,0 +1,78 @@
+#Log message for English, United State
+LOG_MSG_PULSE_VERSION = Pulse Version:
+LOG_MSG_CONTEXT_INITIALIZED = Context Initialized..
+LOG_MSG_CONTEXT_DESTROYED = Context Destroyed..
+LOG_MSG_CHECK_LOG_PROPERTIES_IN_FILE = Checking whether log configurations provided in properties file..
+LOG_MSG_CHECK_LOG_PROPERTIES_IN_SYSTEM_PROPERTIES = Checking whether log configurations provided through system properties..
+LOG_MSG_LOG_PROPERTIES_FOUND_IN_FILE = Some/All Log properties provided in properties file
+LOG_MSG_LOG_PROPERTIES_NOT_FOUND_IN_FILE = None of the log properties provided in properties file
+LOG_MSG_LOG_PROPERTIES_FOUND_IN_SYSTEM_PROPERTIES = Some/All Log properties provided through system properties
+LOG_MSG_LOG_PROPERTIES_NOT_FOUND_IN_SYSTEM_PROPERTIES = None of the log properties provided through system properties
+LOG_MSG_CHECK_APP_RUNNING_MODE = Checking whether Pulse is running in embedded mode..
+LOG_MSG_APP_RUNNING_EMBEDDED_MODE = Pulse is running in Embedded Mode..
+LOG_MSG_APP_RUNNING_NONEMBEDDED_MODE = Pulse is running in Non-Embedded Mode..
+LOG_MSG_APP_RUNNING_EMBEDDED_SQLF_MODE = Pulse is running in Embedded SQLF system
+LOG_MSG_GET_JMX_USER_DETAILS = Getting JMX User details from properties
+LOG_MSG_JMX_USER_DETAILS_FOUND = JMX User Details Found..
+LOG_MSG_JMX_USER_DETAILS_NOT_FOUND = JMX User Details Not Found..
+LOG_MSG_GET_LOCATOR_DETAILS_1 = Getting locator/manager details through System Properties..
+LOG_MSG_GET_LOCATOR_DETAILS_2 = Getting locator/Manager details from Properties File..
+LOG_MSG_LOCATOR_DETAILS_FOUND = Locator/Manager Properties Found..
+LOG_MSG_LOCATOR_DETAILS_NOT_FOUND = Locator/Manager Properties NOT Found..
+
+################Property File Related #####################
+LOG_MSG_PROPERTIES_FOUND = Pulse properties found in properties file
+LOG_MSG_PROPERTIES_NOT_FOUND = Pulse properties not found
+LOG_MSG_FILE_FOUND = File Found
+LOG_MSG_COULD_NOT_READ_FILE = Could not read Properties File
+LOG_MSG_REASON_FILE_NOT_FOUND = Reason: could not find Properties File..
+LOG_MSG_REASON_COULD_NOT_READ_FILE = Reason: could not read Properties File..
+LOG_MSG_REASON_USER_DETAILS_NOT_FOUND = Reason: jmx user details not present in Properties File..
+LOG_MSG_EXCEPTION_CLOSING_INPUT_STREAM = Exception while closing input stream for file
+LOG_MSG_EXCEPTION_LOADING_PROPERTIES_FILE = Exception while loading properties from properties file
+
+###################################################################################
+
+LOG_MSG_REASON_LOCATOR_DETAILS_NOT_FOUND_1 = Reason: System Properties Not Found..
+LOG_MSG_REASON_LOCATOR_DETAILS_NOT_FOUND_2 = Reason: Properties not found in Properties File..
+
+
+LOG_MSG_CREATE_NEW_THREAD = Creating New Cluster Thread...
+LOG_MSG_REMOVE_THREAD = Removing Cluster Thread...
+LOG_MSG_START_THREAD_UPDATES = Starting update thread for cluster
+LOG_MSG_STOP_THREAD_UPDATES = Stopping update thread for cluster
+LOG_MSG_CLUSTER_DATA_IS_UPDATING = Updating Cluster data for Cluster
+
+LOG_MSG_USE_LOCATOR_VALUE = Use Locator is set
+LOG_MSG_HOST = Host
+LOG_MSG_PORT = Port
+LOG_MSG_WITH_SSL = with SSL
+LOG_MSG_WITHOUT_SSL = without SSL
+LOG_MSG_LOCATOR_COULD_NOT_FIND_MANAGER = Locator could not find a jmx manager
+LOG_MSG_LOCATOR_FOUND_MANAGER = Locator has found a jmx manager
+LOG_MSG_REGISTERING_APP_URL_TO_MANAGER = Registering Pulse App URL to JMX Manager..
+LOG_MSG_SETTING_APP_URL_TO_MANAGER = Setting Pulse App URL to JMX Manager..
+LOG_MSG_APP_URL_ALREADY_PRESENT_IN_MANAGER = Pulse App URL is already present in JMX Manager..
+LOG_MSG_JMX_GET_NEW_CONNECTION = Get new JMX connection..
+LOG_MSG_JMX_GETTING_NEW_CONNECTION = Getting new JMX connection..
+LOG_MSG_JMX_CONNECTION_NOT_FOUND = JMX Connection Not Found..
+LOG_MSG_JMX_CONNECTION_IS_AVAILABLE = JMX Connection is available..
+LOG_MSG_JMX_CONNECTION_UNKNOWN_HOST = Unknown Host
+LOG_MSG_JMX_CONNECTION_IPv6_ADDRESS = Host has IPv6 Address
+LOG_MSG_JMX_CONNECTION_BAD_ADDRESS = Bad Host Address
+LOG_MSG_JMX_CONNECTION_TIME_OUT = Connection Timed Out
+
+LOG_MSG_LOCATOR_IPV4_ADDRESS = Locator has IPv4 Address
+LOG_MSG_LOCATOR_IPV6_ADDRESS = Locator has IPv6 Address
+LOG_MSG_LOCATOR_BAD_ADDRESS = Locator address is badly formed
+# For Data Browser
+LOG_MSG_DATA_BROWSER_QUERY_HISTORY_FILE_NOT_FOUND = Pulse Query History log file not found..
+LOG_MSG_DATA_BROWSER_QUERY_HISTORY_FILE_DESCRIPTION = Pulse Data Browser Query logs ..
+
+# For MOCK data
+LOG_MSG_REFRESHING_MEMBER_DATA = Refreshing data for member
+
+
+# For SSL messages
+LOG_MSG_GET_SSL_DETAILS = Setting SSL properties
+LOG_MSG_SSL_NOT_SET = SSL properties are not mentioned in Pulse.properties while either pulse.useSSL.locator or pulse.useSSL.manager property is marked as true. Connection wont be successful.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/resources/LogMessages_fr_FR.properties
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/resources/LogMessages_fr_FR.properties b/gemfire-pulse/src/main/resources/LogMessages_fr_FR.properties
new file mode 100644
index 0000000..bb76fd6
--- /dev/null
+++ b/gemfire-pulse/src/main/resources/LogMessages_fr_FR.properties
@@ -0,0 +1,72 @@
+#Log message for English, United State
+LOG_MSG_PULSE_VERSION = Pulse Version: french
+LOG_MSG_CONTEXT_INITIALIZED = Context Initialized..french
+LOG_MSG_CONTEXT_DESTROYED = Context Destroyed..french
+LOG_MSG_CHECK_LOG_PROPERTIES_IN_FILE = Checking whether log configurations provided in properties file..
+LOG_MSG_CHECK_LOG_PROPERTIES_IN_SYSTEM_PROPERTIES = Checking whether log configurations provided through system properties..
+LOG_MSG_LOG_PROPERTIES_FOUND_IN_FILE = Some/All Log properties provided in properties file
+LOG_MSG_LOG_PROPERTIES_NOT_FOUND_IN_FILE = None of the log properties provided in properties file
+LOG_MSG_LOG_PROPERTIES_FOUND_IN_SYSTEM_PROPERTIES = Some/All Log properties provided through system properties
+LOG_MSG_LOG_PROPERTIES_NOT_FOUND_IN_SYSTEM_PROPERTIES = None of the log properties provided through system properties
+LOG_MSG_CHECK_APP_RUNNING_MODE = Checking whether Pulse is running in embedded mode..
+LOG_MSG_APP_RUNNING_EMBEDDED_MODE = Pulse is running in Embedded Mode..
+LOG_MSG_APP_RUNNING_NONEMBEDDED_MODE = Pulse is running in Non-Embedded Mode..
+LOG_MSG_APP_RUNNING_EMBEDDED_SQLF_MODE = Pulse is running in Embedded SQLF system
+LOG_MSG_GET_JMX_USER_DETAILS = Getting JMX User details from properties
+LOG_MSG_JMX_USER_DETAILS_FOUND = JMX User Details Found..
+LOG_MSG_JMX_USER_DETAILS_NOT_FOUND = JMX User Details Not Found..
+LOG_MSG_GET_LOCATOR_DETAILS_1 = Getting locator/manager details through System Properties..
+LOG_MSG_GET_LOCATOR_DETAILS_2 = Getting locator/Manager details from Properties File..
+LOG_MSG_LOCATOR_DETAILS_FOUND = Locator/Manager Properties Found..
+LOG_MSG_LOCATOR_DETAILS_NOT_FOUND = Locator/Manager Properties NOT Found..
+LOG_MSG_PROPERTIES_FOUND = Pulse properties found in properties file
+LOG_MSG_PROPERTIES_NOT_FOUND = Pulse properties not found
+LOG_MSG_PROPERTIES_FILE_FOUND = Properties File Found
+LOG_MSG_COULD_NOT_READ_FILE = Could not read Properties File..
+
+LOG_MSG_REASON_FILE_NOT_FOUND = Reason: could not find Properties File..
+LOG_MSG_REASON_COULD_NOT_READ_FILE = Reason: could not read Properties File..
+LOG_MSG_REASON_USER_DETAILS_NOT_FOUND = Reason: jmx user details not present in Properties File..
+LOG_MSG_REASON_LOCATOR_DETAILS_NOT_FOUND_1 = Reason: System Properties Not Found..
+LOG_MSG_REASON_LOCATOR_DETAILS_NOT_FOUND_2 = Reason: Properties not found in Properties File..
+LOG_MSG_EXCEPTION_CLOSING_INPUT_STREAM = Exception while closing input stream
+LOG_MSG_EXCEPTION_LOADING_PROPERTIES_FILE = Exception while loading properties from properties file
+
+LOG_MSG_CREATE_NEW_THREAD = Creating New Cluster Thread...
+LOG_MSG_REMOVE_THREAD = Removing Cluster Thread...
+LOG_MSG_START_THREAD_UPDATES = Starting update thread for cluster
+LOG_MSG_STOP_THREAD_UPDATES = Stopping update thread for cluster
+LOG_MSG_CLUSTER_DATA_IS_UPDATING = Updating Cluster data for Cluster
+
+LOG_MSG_USE_LOCATOR_VALUE = Use Locator is set
+LOG_MSG_HOST = Host
+LOG_MSG_PORT = Port
+LOG_MSG_WITH_SSL = with SSL
+LOG_MSG_WITHOUT_SSL = without SSL
+LOG_MSG_LOCATOR_COULD_NOT_FIND_MANAGER = Locator could not find a jmx manager
+LOG_MSG_LOCATOR_FOUND_MANAGER = Locator has found a jmx manager
+LOG_MSG_REGISTERING_APP_URL_TO_MANAGER = Registering Pulse App URL to JMX Manager..
+LOG_MSG_SETTING_APP_URL_TO_MANAGER = Setting Pulse App URL to JMX Manager..
+LOG_MSG_APP_URL_ALREADY_PRESENT_IN_MANAGER = Pulse App URL is already present in JMX Manager..
+LOG_MSG_JMX_GET_NEW_CONNECTION = Get new JMX connection..
+LOG_MSG_JMX_GETTING_NEW_CONNECTION = Getting new JMX connection..
+LOG_MSG_JMX_CONNECTION_NOT_FOUND = JMX Connection Not Found..
+LOG_MSG_JMX_CONNECTION_IS_AVAILABLE = JMX Connection is available..
+LOG_MSG_JMX_CONNECTION_UNKNOWN_HOST = Unknown Host
+LOG_MSG_JMX_CONNECTION_IPv6_ADDRESS = Host has IPv6 Address
+LOG_MSG_JMX_CONNECTION_BAD_ADDRESS = Bad Host Address
+LOG_MSG_JMX_CONNECTION_TIME_OUT = Connection Timed Out
+
+LOG_MSG_LOCATOR_IPV4_ADDRESS = Locator has IPv4 Address
+LOG_MSG_LOCATOR_IPV6_ADDRESS = Locator has IPv6 Address
+LOG_MSG_LOCATOR_BAD_ADDRESS = Locator address is badly formed
+# For Data Browser
+LOG_MSG_DATA_BROWSER_QUERY_HISTORY_FILE_NOT_FOUND = Pulse Query History log file not found..
+LOG_MSG_DATA_BROWSER_QUERY_HISTORY_FILE_DESCRIPTION = Pulse Data Browser Query logs ..
+
+# For MOCK data
+LOG_MSG_REFRESHING_MEMBER_DATA = Refreshing data for member
+
+# For SSL messages
+LOG_MSG_GET_SSL_DETAILS = Setting SSL properties
+LOG_MSG_SSL_NOT_SET = SSL properties are not mentioned in Pulse.properties while either pulse.useSSL.locator or pulse.useSSL.manager property is marked as true. Connection wont be successful.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/resources/default.properties
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/resources/default.properties b/gemfire-pulse/src/main/resources/default.properties
new file mode 100644
index 0000000..46903d7
--- /dev/null
+++ b/gemfire-pulse/src/main/resources/default.properties
@@ -0,0 +1,4 @@
+# All properties which are common between GemFire & SQLFire are to be added here.
+# No property to repeat in specific files of GemFire and SQLFire products
+
+
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/resources/gemfire.properties
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/resources/gemfire.properties b/gemfire-pulse/src/main/resources/gemfire.properties
new file mode 100644
index 0000000..9ee4fc6
--- /dev/null
+++ b/gemfire-pulse/src/main/resources/gemfire.properties
@@ -0,0 +1,28 @@
+# All properties for GemFire are to be added here.
+# No property to repeat from default file
+pulse-writeputpersec-custom=Write/Sec.
+pulse-readgetpersec-custom=Read/Sec.
+pulse-writes-custom=Writes
+pulse-reads-custom=Reads
+pulse-monitoring-custom=images/pulse-monitoring.png
+pulse-aboutimg-custom=images/about.png
+pulse-help-custom=http://gemfire.docs.pivotal.io/latest/userguide/index.html#tools_modules/pulse/chapter_overview.html
+pulse-about-custom=The Pulse tool monitors Pivotal™ GemFire© system in real time. It provides health information, detailed operational and configuration data, system alerts, throughput performance and statistics for system members and connected clients.
+pulse-regionstableCaps-custom=Regions
+pulse-rtSummaryBySize-custom=Regions Summary - By Entry Count
+pulse-regionstablePath-custom=Region Path:
+pulse-regionstableType-custom=Region Type:
+pulse-regionstableMembers-custom=Region Members
+pulse-memberRegionsTables-custom=Member Regions
+pulse-regionstableInvolved-custom=Regions Involved
+pulse-regiontabletooltip-custom=Regions
+pulse-writesRate-custom=Writes Rate
+pulse-readsRate-custom=Reads Rate
+pulse-regiontablePathColName-custom=Region Path
+pulse-regiontableName-custom=Region Name
+pulse-regionMemoryUsage-custom=Memory Usage
+pulse-regionDiskReadsWrites-custom=Disk Reads/Writes
+pulse-regionMemoryReadsWrites-custom=Reads/Writes
+pulse-entrysize-custom=Entry Size
+pulse-entrycount-custom=Entry Count
+pulse-functionprocedureCaps-custom=Functions
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/resources/pulse-users.properties
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/resources/pulse-users.properties b/gemfire-pulse/src/main/resources/pulse-users.properties
new file mode 100644
index 0000000..22a58ba
--- /dev/null
+++ b/gemfire-pulse/src/main/resources/pulse-users.properties
@@ -0,0 +1,11 @@
+#Pulse-Users Properties File
+#Tue, 09 Oct 2012 16:39:00
+
+# Currently none of the users should have role as "ROLE_RESTRICTED"
+
+jim=jimbob,ROLE_USER,enabled
+#admin=admin,ROLE_USER,enabled
+
+user1=user1,ROLE_USER,enabled
+user2=user2,ROLE_USER,enabled
+user3=user3,ROLE_USER,enabled
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/resources/pulse.properties
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/resources/pulse.properties b/gemfire-pulse/src/main/resources/pulse.properties
new file mode 100644
index 0000000..25c19bc
--- /dev/null
+++ b/gemfire-pulse/src/main/resources/pulse.properties
@@ -0,0 +1,35 @@
+#Pulse JMX Locator/Manager Properties File
+#Tue, 09 Oct 2012 16:39:00
+
+# JMX Locator/Manager Properties
+#pulse.useLocator=true
+#pulse.host=SachinK.clarice.com
+#pulse.useLocator=true
+#pulse.host=pnq-pratik.vmware.com
+#pulse.port=10334
+
+pulse.useLocator=false
+pulse.host=localhost
+pulse.port=9999
+
+#pulse.useSSL.locator=true
+#pulse.useSSL.manager=true
+
+# JMX User Properties
+pulse.jmxUserName=controlRole
+pulse.jmxUserPassword=R&D
+
+# Logging Configurations Properties
+pulse.Log-File-Name=PULSELOG
+#pulse.Log-File-Location=F:\\PulseLogs
+pulse.Log-File-Size=1048576
+pulse.Log-File-Count=3
+pulse.Log-Date-Pattern=yyyy/MM/dd HH:mm:ss.SSS z
+pulse.Log-Level=info
+pulse.Log-Append=true
+
+# For supporting gemfire and sqlfire both in pulse
+# valid values are as follows
+# for GemFire "gemfire"
+# for GemFireXD "gemfirexd"
+pulse.product=gemfire
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/resources/pulsesecurity.properties
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/resources/pulsesecurity.properties b/gemfire-pulse/src/main/resources/pulsesecurity.properties
new file mode 100644
index 0000000..dbb4117
--- /dev/null
+++ b/gemfire-pulse/src/main/resources/pulsesecurity.properties
@@ -0,0 +1,7 @@
+########### SSL Related Properties to be set in an SSL enabled environment ######################
+#javax.net.ssl.keyStore={KeyStorePath}
+#javax.net.ssl.keyStorePassword={KeyStorePassword}
+#javax.net.ssl.trustStore={TrustStorePath}
+#javax.net.ssl.trustStorePassword={TrustStorePassword}
+
+##################################################################################################
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/resources/sqlfire.properties
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/resources/sqlfire.properties b/gemfire-pulse/src/main/resources/sqlfire.properties
new file mode 100644
index 0000000..e80fc45
--- /dev/null
+++ b/gemfire-pulse/src/main/resources/sqlfire.properties
@@ -0,0 +1,28 @@
+# All properties for SQLFire are to be added here.
+# No property to repeat from default file
+pulse-writeputpersec-custom=Put/Sec.
+pulse-readgetpersec-custom=Get/Sec.
+pulse-writes-custom=Writes
+pulse-reads-custom=Reads
+pulse-monitoring-custom=images/sqlfire.png
+pulse-aboutimg-custom=images/about-sqlfire.png
+pulse-help-custom=http://pubs.vmware.com/vfabricNoSuite/topic/com.vmware.vfabric.gemfire.7.0/tools_modules/pulse/chapter_overview.html
+pulse-about-custom=The Pulse tool monitors vFabric™ SQLFire© system in real time. It provides health information, detailed operational and configuration data, system alerts, throughput performance and statistics for system members and connected clients.
+pulse-regionstableCaps-custom=Tables
+pulse-rtSummaryBySize-custom=Tables Summary - By Row Count
+pulse-regionstablePath-custom=Table Path:
+pulse-regionstableType-custom=Table Type:
+pulse-regionstableMembers-custom=Table Members
+pulse-memberRegionsTables-custom=Member Tables
+pulse-regionstableInvolved-custom=Tables Involved
+pulse-regiontabletooltip-custom=Tables
+pulse-writesRate-custom=Puts Rate
+pulse-readsRate-custom=Gets Rate
+pulse-regiontablePathColName-custom=Table Path
+pulse-regiontableName-custom=Table Name
+pulse-regionMemoryUsage-custom=Memory Usage
+pulse-regionDiskReadsWrites-custom=Disk Reads/Writes
+pulse-regionMemoryReadsWrites-custom=Reads/Writes
+pulse-entrysize-custom=Table Size
+pulse-entrycount-custom=Row Count
+pulse-functionprocedureCaps-custom=Procedures
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/webapp/DataBrowser.html
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/webapp/DataBrowser.html b/gemfire-pulse/src/main/webapp/DataBrowser.html
new file mode 100644
index 0000000..6a68077
--- /dev/null
+++ b/gemfire-pulse/src/main/webapp/DataBrowser.html
@@ -0,0 +1,350 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<meta http-equiv="CACHE-CONTROL" content="NO-CACHE,NO-STORE" />
+<meta http-equiv="PRAGMA" content="NO-CACHE" />
+<meta http-equiv="EXPIRES" content="-1">
+<title>Pulse</title>
+<link href="css/common.css" rel="stylesheet" type="text/css" />
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+
+<!-- fix IE Ui issues-->
+<!--[if IE 7]>
+ <link href="css/ie/ie7.css" type="text/css" rel="stylesheet"/>
+ <![endif]-->
+<!--[if IE 8]>
+ <link href="css/ie/ie8.css" type="text/css" rel="stylesheet"/>
+ <![endif]-->
+<!--[if IE 9]>
+ <link href="css/ie/ie9.css" type="text/css" rel="stylesheet"/>
+ <![endif]-->
+<!-- IE Fix for HTML5 Tags -->
+<!--[if lt IE 9]>
+ <script src='scripts/lib/html5.js'></script>
+ <script type="text/javascript" src="scripts/lib/excanvas.js"></script>
+ <script type="text/javascript"> if (!window.console) console = {log: function() {}}; </script>
+ <![endif]-->
+
+<script type="text/javascript" src='scripts/lib/jquery-1.7.2.js'></script>
+<script type="text/javascript" src='scripts/lib/common.js'></script>
+
+<!--Splitter-->
+<script src="scripts/lib/jquery.splitter-0.5.js"></script>
+<link href="css/jquery.splitter.css" rel="stylesheet" />
+
+<!--Custom Scroll Bar-->
+<!-- styles needed by jScrollPane - include in your own sites -->
+<link type="text/css" href="css/jquery.jscrollpane.css" rel="stylesheet"
+ media="all" />
+<!-- the mousewheel plugin -->
+<script type="text/javascript" src="scripts/lib/jquery.mousewheel.js"></script>
+<!-- the jScrollPane script -->
+<script type="text/javascript" src="scripts/lib/jquery.jscrollpane.js"></script>
+<!--Place Holder tag-->
+<script type="text/javascript" src="scripts/lib/jquery.placeholder.js"></script>
+
+<!-- Grid view CSS and js-->
+<link rel="stylesheet" type="text/css" media="screen" href="css/grid/ui.jqgrid.css" />
+<script src="scripts/lib/grid.locale-en.js" type="text/javascript"></script>
+<script src="scripts/lib/jquery.jqGrid.src.js" type="text/javascript"></script>
+<script src="scripts/lib/jquery.tablednd.js" type="text/javascript"></script>
+<!-- -->
+<!--Tree View-->
+<link type="text/css" href="css/treeView/Treemap.css" rel="stylesheet" />
+<script type="text/javascript" src="scripts/lib/jit.js"></script>
+
+<!-- popups-->
+<link href="css/popup.css" rel="stylesheet" type="text/css" />
+<!-- Customize checkbox & radiobutton -->
+<script type="text/javascript" src="scripts/lib/checkBox-RadioButton.js"></script>
+<!-- Treeview JSON -->
+<script type="text/javascript" src="scripts/lib/jquery.ztree.core-3.5.js"></script>
+<script type="text/javascript" src="scripts/lib/jquery.ztree.excheck-3.5.js"></script>
+<link rel="stylesheet" href="css/jquery.ztreestyle.css" type="text/css">
+
+<!-- jQuery plugin to support automatically updating fuzzy timestamps
+(e.g. "4 minutes ago" or "about 1 day ago") -->
+<script type="text/javascript" src="scripts/lib/jquery.timeago.js"></script>
+
+<!-- start:Data Browser widget based js files -->
+<script type="text/javascript" src="scripts/pulsescript/PulseCallbacks.js"></script>
+<script type="text/javascript" src="scripts/pulsescript/PulseFunctions.js"></script>
+<script type="text/javascript" src='scripts/pulsescript/common.js'></script>
+<!-- end:Data Browser widget based js files -->
+
+<!-- end:Data Browser Page JS files -->
+
+<script type="text/javascript" src="scripts/pulsescript/pages/DataBrowser.js"></script>
+<script type="text/javascript" src="scripts/pulsescript/pages/DataBrowserQuery.js"></script>
+<script type="text/javascript" src="scripts/pulsescript/pages/DataBrowserQueryHistory.js"></script>
+
+<!-- Jquery based plugin for exporting data to a file -->
+<script type="text/javascript" src="scripts/lib/jquery.generateFile.js"></script>
+
+</head>
+
+<body>
+ <!-- Connection lost-->
+ <div class="connectionLostMasterBlock hide" id="connectionStatusDiv">
+ <div class="connectionLostInnerBlock">
+ <label class="left">Connecting ...</label>
+ <div class="clear"></div>
+ <div id="connectionErrorMsgDiv" class="right"></div>
+ </div>
+ </div>
+
+ <div id="canvasWidth">
+ <!--Top Links-->
+ <div class="headerTopLinksMaster">
+ <div class="right">
+ <div class="left position-relative"><a href="#." class="left headerTopLinks aboutClicked-Off">About</a>
+ <!-- About Dropdown-->
+ <div id="detailsAbout" class="aboutBlock display-none">
+ <div class="aboutDetailsBlock">
+ <div class="left widthfull-100per marginBottom30">
+ <div class="left"><img src="images/about.png">
+ <div>
+ <div class="aboutVersionBlock left" id="pulseVersion"></div>
+ <div class="left termsBlock"> <a id="pulseVersionDetailsLink" href="#dialog1" class="display-none" >Version Details</a></div>
+ </div>
+ </div>
+ <div class="right aboutText">The Pulse tool monitors Pivotal™ GemFire© system in real time. It provides health information, detailed operational and configuration data, system alerts, throughput performance and statistics for system members and connected clients.</div>
+ </div>
+ <div class="left widthfull-100per">
+ <div class="left copyright">
+ Copyright © 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
+ one or more patents listed at <a href="http://www.pivotal.io/patents"
+ target="_blank" class="termsBlockLink text-center">http://www.pivotal.io/patents</a>.
+ </div>
+
+ <div class="left copyright">Pivotal is a registered
+ trademark or trademark of Pivotal Software, Inc. in the United States and
+ other jurisdictions. All other marks and names mentioned herein
+ may be trademarks of their respective companies.</div>
+
+ <div class="left termsBlock">
+ <a href="oslicenses.txt" target="_blank">Open Source
+ Licenses</a>
+ </div>
+ <!-- <div class="right termsBlock">
+ Pulse <a href="#.">Terms of Service</a>
+ </div>-->
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="left headerTopSeperator"></div>
+ <div class="left"><a target="_blank" href="http://gemfire.docs.pivotal.io/latest/userguide/index.html#tools_modules/pulse/chapter_overview.html" class="left headerTopLinks">Help</a></div>
+ <div class="left headerTopSeperator"></div>
+ <div class="left headerTopLinks welcomeLabelPRZero">Welcome</div>
+ <div class="left headerTopLinks textbold font-size12" id="userName"></div>
+ <div class="left headerTopSeperator"></div>
+ <div class="left"><a href="pulse/clusterLogout" class="left headerTopLinks">Sign Out</a></div>
+ </div>
+ </div>
+ <!-- Header block-->
+ <header>
+ <div class="left">
+ <a id="clusterNameLink" href="#." class="left textbold HeaderLink HeaderLinkActive" onclick="openClusterDetail();">Cluster View</a>
+ </div>
+ <div class="textbold right logoBlock">
+ <a href="#.">[LOGO]</a>
+ </div>
+ </header>
+ <div class="clear"></div>
+ <div class="subHeader">
+ <ul>
+ <li><a href="#." onclick="openClusterDetail();">Cluster View</a></li>
+ <li><a href="#." class="active" onclick="openDataBrowser();">Data Browser</a></li>
+ <!-- Hide Query Statistics tab for gemfire -->
+ <li id="subTabQueryStatistics"><a href="#." onclick="openQueryStatistics();">Query Statistics</a></li>
+ </ul>
+ <div class="clear"></div>
+ </div>
+ <!-- Middle block-->
+ <div class="left widthfull-100per">
+ <!--Top Right Block 1-->
+ <div class="right widthfull-100per marginTB10">
+
+ <!-- Tab-->
+ <div id="notificationsPanel" class="right marginL10 TabTopPanel position-relative"
+ data-role="widget" data-widgetid="CluserAlertNotification" data-active ="yes" data-timeline="5000">
+ </div>
+ <!-- <div class="right marginL10"><a href="dataView.html" class="left linkButton">Cluster View</a></div>-->
+ <div class="left position-relative breadCrumbs">
+ <label class="font-size20">Data Browser</label>
+ </div>
+ </div>
+ <!--Middle Block 1-->
+ <div class="left leftBlockCanvas">
+ <!-- Splitter Master-->
+ <div class="splitterMaster">
+ <div class="splitterInnerBlock">
+ <div id="widget">
+ <!-- Left splitter-->
+ <div id="leftBlock">
+ <div class="leftTopSplitterSpacing">
+ <div class="rightInnerBlocks">
+ <a class="active" href="#.">Data Regions</a>
+ </div>
+ <!-- Search Block 1-->
+ <div class="left widthfull-100per canvasBlockInnerBlock">
+ <!-- Search-->
+ <div class="regionNameSearch position-relative">
+ <div class="searchBlockRegion">
+ <input type="button" class="searchButtonRegion"> <input
+ type="text" id="filterTextRegion" placeholder="Type a Name"
+ class="searchBoxRegion" onKeyUp="applyFilterOnRegions();">
+ </div>
+ </div>
+ </div>
+ <!-- Block 2-->
+ <div class="pointGridHeading">
+ <a id="linkColocatedRegions" href="#."
+ class="colocatedRegionsLink disabledLink"
+ onclick="showColocatedRegions();">Colocated Regions</a>
+ <a id="linkAllRegions" href="#."
+ class="colocatedRegionsLink disabledLink"
+ onclick="showAllRegions();">All Regions</a>
+ <input type="hidden" id="selectedRegion" value=""/>
+ </div>
+ <!-- Block 3 with scroll-->
+ <div class="ScrollPaneBlock leftSliderScrollRegion">
+ <div class="splitterScrollRegionInnerBlock">
+ <!-- Tree View-->
+ <ul id="treeDemo" class="ztree">
+ </ul>
+ </div>
+ <div style="clear: both"></div>
+ </div>
+ </div>
+ <!-- Members List Block-->
+ <div class="">
+ <div class="rightInnerBlocks btm_pnl">
+ <a href="#." class="active">Region Members</a>
+ </div>
+ <div class="ScrollPaneBlock leftSliderScrollMembers" style="background:#132634;">
+ <div class="splitterScrollMembersInnerBlock">
+ <ul id="membersList">
+ </ul>
+ </div>
+ <div style="clear:both"></div>
+ </div>
+ </div>
+ </div>
+ <!--Right splitter -->
+ <div id="rightBlock">
+ <!-- Tab links-->
+ <div class="rightInnerBlocks ">
+ <a href="#." class="active">Queries</a>
+ </div>
+ <!-- Query Block-->
+ <div class="queryMasterBlock">
+ <a href="#." class="historyClicked-Off" id="historyIcon">History</a>
+ <!-- Query Block-->
+ <div class="queryHistoryScroll-pane" id="detailsHistory">
+ <div id="detailsHistoryList"></div>
+ </div>
+ <div class="queryInnerBlock queriesblock marginTB15-10">
+ <div class="queryHistoryBlock">
+ <label class="queryBlocklabel">Query Editor</label>
+ </div>
+ <div class="quertTextaremargin textareadiv">
+ <!-- Textarea-->
+ <textarea class="queryTextarea" id="dataBrowserQueryText" onkeyup="onQueryTextChange();"
+ placeholder="Write query here"></textarea>
+ <!-- Buttons-->
+
+ </div>
+ <input type="reset" value="Clear" class="right buttonCss blue" onclick="clearDBQuery()">
+ <input type="button" id="btnExecuteQuery" disabled="disabled" value="Execute" class="right buttonCss grey" onclick="executeDBQuery()">
+ </div>
+ </div>
+ <div class="queryInnerBlock marginBottomResult">
+ <label class="queryBlocklabel marginResult left">Result</label>
+ <div id="loaderSymbolWrapper" class="loaderParent">
+ <div id="loadingSymbol" class="loader"></div>
+ </div>
+ </div>
+ <div class="ScrollPaneBlock" style="height: 460px;">
+ <div class="expCollMaster">
+ <!-- Accordion-->
+ <div class="accordion" id="memberAccordion">
+ </div>
+ <div style="clear: both"></div>
+ </div>
+ </div>
+ <div class="quertTextaremargin">
+ <!-- Buttons-->
+ <input type="button" value="Export Result"
+ class="right buttonCss blue" onclick="exportResult();">
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!--Popups Block-->
+ <div id="boxes">
+ <!-- Version Details popup-->
+ <div id="dialog1" class="window width345">
+ <div class="popup_heading">
+ <span>Version Details</span><a href="#" class="closePopup"> </a>
+ </div>
+ <div class="popup_contentBlock">
+ <div class="popup-innerblock">
+ <ul class="widthfull-100per left">
+ <li class="left widthfull-100per"><label
+ class="width-40 display-inline-block">Pulse Version:</label> <label
+ class="width-58 display-inline-block" id="pulseVer"></label></li>
+ <li class="left widthfull-100per"><label
+ class="width-40 display-inline-block">Build Id:</label> <label
+ class="width-58 display-inline-block" id="buildId"></label></li>
+ <li class="left widthfull-100per"><label
+ class="width-40 display-inline-block">Build Date:</label> <label
+ class="width-58 display-inline-block" id="buildDate"></label></li>
+ <li class="left widthfull-100per"><label
+ class="width-40 display-inline-block">Source Date:</label> <label
+ class="width-58 display-inline-block" id="sourceDate"></label></li>
+ <li class="left widthfull-100per"><label
+ class="width-40 display-inline-block">Source Revision:</label> <label
+ class="width-58 display-inline-block" id="sourceRevision"></label>
+ </li>
+ <li class="left widthfull-100per"><label
+ class="width-40 display-inline-block">Source Repository:</label>
+ <label class="width-58 display-inline-block"
+ id="sourceRepository"></label></li>
+ </ul>
+ <div class="clear"></div>
+ </div>
+ </div>
+ </div>
+ <!-- Grid Details popup-->
+ <div id="gridPopup" class="window width700" >
+ <div class="popup_heading"><span>Object Explorer</span><a href="#" class="closePopup"> </a></div>
+ <div class="popup_contentBlock">
+ <div class="popup-innerblock">
+ <table id="treegrid"><tr><td/></tr></table>
+ </div>
+ <div class="popup-innerblock">
+ <table id="popUpExplorer"><tr><td/></tr></table>
+ </div>
+ </div>
+ </div>
+ <!-- Mask to cover the whole screen -->
+ <div id="mask"></div>
+ </div>
+ <div id="tooltip" class="tooltip"></div>
+ <!-- Placeholder-->
+ <script>
+$('input[placeholder], textarea[placeholder]').placeholder();
+</script>
+
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/webapp/Login.html
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/webapp/Login.html b/gemfire-pulse/src/main/webapp/Login.html
new file mode 100644
index 0000000..da68a87
--- /dev/null
+++ b/gemfire-pulse/src/main/webapp/Login.html
@@ -0,0 +1,125 @@
+<!doctype html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<meta http-equiv="CACHE-CONTROL" content="NO-CACHE,NO-STORE" />
+<meta http-equiv="PRAGMA" content="NO-CACHE" />
+<meta http-equiv="EXPIRES" content="-1">
+<title>Pulse</title>
+
+<!-- CSS Files -->
+<link href="css/common.css" rel="stylesheet" type="text/css" />
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+<!-- fix IE Ui issues-->
+<!--[if IE]>
+ <link href="css/ie/ie.css" type="text/css" rel="stylesheet"/>
+ <![endif]-->
+<!--[if IE 7]>
+ <link href="css/ie/ie7.css" type="text/css" rel="stylesheet"/>
+ <![endif]-->
+<!--[if IE 8]>
+ <link href="css/ie/ie8.css" type="text/css" rel="stylesheet"/>
+ <![endif]-->
+<!--[if IE 9]>
+ <link href="css/ie/ie9.css" type="text/css" rel="stylesheet"/>
+ <![endif]-->
+<!-- END CSS FILES -->
+
+<!-- JS FILES -->
+<!-- IE Fix for HTML5 Tags -->
+<!--[if lt IE 9]>
+<script src='js/html5.js'></script>
+ <![endif]-->
+<script type="text/javascript" src="scripts/lib/jquery-1.7.2.js"></script>
+<script type="text/javascript" src="scripts/lib/jquery.i18n.properties.js"></script>
+<script type="text/javascript" src="scripts/pulsescript/PulseCallbacks.js"></script>
+<script type="text/javascript" src="scripts/pulsescript/PulseFunctions.js"></script>
+<script type="text/javascript" src="scripts/pulsescript/common.js"></script>
+<script type="text/javascript" src="scripts/pulsescript/pages/Login.js"></script>
+
+<!--Place Holder tag-->
+<script type="text/javascript" src="scripts/lib/jquery.placeholder.js"></script>
+<!-- END JS FILES -->
+
+<script type="text/javascript">
+$(function(){
+ $("#loginForm").submit(function(){
+ if(!validate())
+ return false;
+ });
+});
+</script>
+</head>
+
+<body onload="pageOnLoad();" class="bodyLoginBg">
+<div id="loginWidth">
+ <!-- Header block-->
+ <header>
+ <div class="textbold right logoBlock"><a href="#.">[LOGO]</a></div>
+ </header>
+ <div class="clear"></div>
+ <!-- Middle block-->
+ <div class="loginMasterBlock">
+ <div class="pulseBottomSpace"><img data-prod-custom="pulse-monitoring-custom" src="images/pulse-monitoring.png">
+ <div class="text-center" id="pulseVersion"></div>
+ </div>
+ <!-- error Block-->
+ <div id="errorMasterBlock" class="errorMasterBlock" style="display:none;">
+ <div id="errorText" class="errorInnerIcon"> </div>
+ </div>
+ <div class="loginInnerBlock">
+ <form method="POST" action="j_spring_security_check" name="loginForm" id="loginForm" autocomplete="off">
+ <input class="inputUserName" type="text" name="j_username" id="user_name" placeholder="Username" autofocus="autofocus" autocomplete="off">
+ <input style="display:none;" type="password" id="fool_password" autocomplete="off">
+ <input class="inputPassword" type="password" name="j_password" id="user_password" placeholder="Password" autocomplete="off">
+ <!-- Locator host and port are removed for a time -->
+ <!-- <input class="inputUserName" type="text" name="locator_host" id="locator_host" placeholder="Host">
+ <input class="inputUserName" type="text" name="locator_port" id="locator_port" placeholder="Port">-->
+ <input type="submit" value="Sign In" class="signInButton">
+ </form>
+ </div>
+ <br>
+ <div class="text-center copyright">Copyright © 2012-2014 Piovtal Software, Inc. All rights reserved.</div>
+ </div>
+</div>
+<!-- Placeholder-->
+<script>
+$('input[placeholder], textarea[placeholder]').placeholder();
+</script>
+
+ <!-- <div style="width:100%; padding-top: 20%; padding-bottom: 20%;">
+ <div style="margin-left: 30%;">
+ <div style="float:left; border-right: medium solid #CCCCCC;">
+ <form method="POST" action="ClusterLogin" name="loginForm" id="loginForm">
+ <div style="width: 300px; padding-top: 10px;">
+ <span style="width:50px;">User Name:</span>
+ <input type="text" name="user_name" id="user_name" style="float: right; margin-right: 10px;" />
+ </div>
+ <div style="width: 300px; padding-top: 10px;">
+ <span style="width:50px;">Password:</span>
+ <input type="password" name="user_password" id="user_password" style="float: right; margin-right: 10px;" />
+ </div>
+ <div id="locatorHostDiv" style="width: 300px; padding-top: 10px;">
+ <span style="width:50px;">Locator Host:</span>
+ <input type="text" name="locator_host" id="locator_host" style="float: right; margin-right: 10px;" />
+ </div>
+ <div id="locatorPortDiv" style="width: 300px; padding-top: 10px;">
+ <span style="width:50px;">Locator Port:</span>
+ <input type="text" name="locator_port" id="locator_port" style="float: right; margin-right: 10px;" />
+ </div>
+ <div style="width: 300px; padding-top: 10px;">
+ <input type="reset" value="Cancel" style="float: right; margin-right: 10px;" />
+ <input type="submit" value="Submit" style="float: right; margin-right: 10px;" />
+ </div>
+ </form>
+ <label id="errorText" style="color: #FF0000;"></label>
+ </div>
+ <div style="float:left; margin: 40px; ">
+ <div style="font-size: xx-large; text-align: center;"><label>Pulse</label></div>
+ <div><label>GemFire Monitoring</label></div>
+ </div>
+ </div>
+ </div> -->
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/446f451a/gemfire-pulse/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/gemfire-pulse/src/main/webapp/META-INF/MANIFEST.MF b/gemfire-pulse/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5e94951
--- /dev/null
+++ b/gemfire-pulse/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+