You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2017/05/18 19:39:40 UTC
[02/13] geode git commit: GEODE-2927: fix pulse logging and
useLocator, SSL flags
GEODE-2927: fix pulse logging and useLocator, SSL flags
* using local mbs server connection will bypass all the mbean security checks
* do not update the mbean attribute since pulse user has no cluster:write privilege at all
* Created EmbeddedPulseRule for tests
* simplify PulseAppListener
* use log4j2 logging configurations
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/0f978a6d
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/0f978a6d
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/0f978a6d
Branch: refs/heads/feature/GEODE-2929-1
Commit: 0f978a6df711d04e0c7c1926fb1e297d07c21aa3
Parents: b3fc0c8
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Wed Mar 22 19:45:19 2017 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu May 18 07:46:54 2017 -0700
----------------------------------------------------------------------
.../test/dunit/rules/EmbeddedPulseRule.java | 39 +-
.../geode/tools/pulse/PulseSecurityTest.java | 34 +-
.../tools/pulse/PulseSecurityWithSSLTest.java | 1 -
.../tools/pulse/PulseVerificationTest.java | 70 +++
.../management/internal/ManagementAgent.java | 8 +-
.../cli/commands/LauncherLifecycleCommands.java | 1 -
.../tools/pulse/internal/PulseAppListener.java | 583 ++-----------------
.../internal/controllers/PulseController.java | 8 -
.../tools/pulse/internal/data/Cluster.java | 43 +-
.../pulse/internal/data/IClusterUpdater.java | 6 +
.../pulse/internal/data/JMXDataUpdater.java | 157 +----
.../tools/pulse/internal/data/Repository.java | 127 +---
.../security/GemFireAuthenticationProvider.java | 33 +-
.../pulse/internal/security/LogoutHandler.java | 22 +-
.../internal/service/ClusterMemberService.java | 2 -
.../service/ClusterMembersRGraphService.java | 20 +-
geode-pulse/src/main/resources/log4j2.xml | 31 +
geode-pulse/src/main/resources/pulse.properties | 23 +-
.../controllers/PulseControllerJUnitTest.java | 6 -
19 files changed, 325 insertions(+), 889 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java b/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
index 0ed5403..f81d7f4 100644
--- a/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
+++ b/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
@@ -18,37 +18,58 @@ package org.apache.geode.test.dunit.rules;
import org.apache.geode.tools.pulse.internal.data.Repository;
import org.junit.rules.ExternalResource;
-import java.util.function.Supplier;
-
/**
* This is used to test embedded pulse. If your test needs to check pulse's repository object for
* assertions, use this rules to properly initialize and cleanup the repository
*
+ *
+ *
*/
public class EmbeddedPulseRule extends ExternalResource {
- private Supplier<Integer> portSupplier;
private Repository repository;
- public EmbeddedPulseRule(Supplier<Integer> portSupplier) {
- this.portSupplier = portSupplier;
- }
-
public Repository getRepository() {
return repository;
}
protected void before() throws Throwable {
repository = Repository.get();
- repository.setJmxHost("localhost");
- repository.setJmxPort(portSupplier.get() + "");
+ cleanup();
+ repository.setHost("localhost");
+ }
+
+ public void useJmxPort(int jmxPort) {
repository.setJmxUseLocator(false);
+ repository.setPort(jmxPort + "");
+ }
+
+ public void useLocatorPort(int locatorPort) {
+ repository.setJmxUseLocator(true);
+ repository.setPort(locatorPort + "");
+ }
+
+ public void setLocatorSSL(boolean locatorSSL) {
+ repository.setUseSSLLocator(locatorSSL);
+ }
+
+ public void setJmxSSL(boolean jmxSSL) {
+ repository.setUseSSLManager(jmxSSL);
}
/**
* Override to tear down your specific external resource.
*/
protected void after() {
+ cleanup();
+ }
+
+ private void cleanup() {
if (repository != null) {
+ repository.setPort("-1");
+ repository.setHost("");
+ repository.setJmxUseLocator(false);
+ repository.setUseSSLManager(false);
+ repository.setUseSSLManager(false);
repository.removeAllClusters();
}
}
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
index 7278c84..832564f 100644
--- a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
+++ b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
@@ -17,28 +17,34 @@ package org.apache.geode.tools.pulse;
import static org.assertj.core.api.Assertions.assertThat;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.geode.cache.RegionShortcut;
import org.apache.geode.security.SimpleTestSecurityManager;
+import org.apache.geode.test.dunit.rules.EmbeddedPulseRule;
import org.apache.geode.test.dunit.rules.HttpClientRule;
-import org.apache.geode.test.dunit.rules.LocatorStarterRule;
+import org.apache.geode.test.dunit.rules.ServerStarterRule;
import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.apache.geode.tools.pulse.internal.data.Cluster;
import org.apache.http.HttpResponse;
+import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.junit.rules.RuleChain;
@Category(IntegrationTest.class)
public class PulseSecurityTest {
- private LocatorStarterRule locator =
- new LocatorStarterRule().withSecurityManager(SimpleTestSecurityManager.class).withAutoStart();
-
- private HttpClientRule client = new HttpClientRule(locator::getHttpPort);
+ @ClassRule
+ public static ServerStarterRule server =
+ new ServerStarterRule().withSecurityManager(SimpleTestSecurityManager.class).withJMXManager()
+ .withRegion(RegionShortcut.REPLICATE, "regionA");
@Rule
- public RuleChain ruleChain = RuleChain.outerRule(locator).around(client);
+ public EmbeddedPulseRule pulse = new EmbeddedPulseRule();
+ @Rule
+ public HttpClientRule client = new HttpClientRule(server::getHttpPort);
@Test
@@ -88,4 +94,18 @@ public class PulseSecurityTest {
assertThat(response.getStatusLine().getStatusCode()).isEqualTo(403);
}
+ @Test
+ public void queryUsingEmbededPulseWillHaveAuthorizationEnabled() throws Exception {
+ pulse.useJmxPort(server.getJmxPort());
+ // using "cluster" to connect to jmx manager will not get authorized to execute query
+ Cluster cluster = pulse.getRepository().getCluster("cluster", "cluster");
+ ObjectNode result = cluster.executeQuery("select * from /regionA a order by a", null, 0);
+ assertThat(result.toString()).contains("cluster not authorized for DATA:READ");
+
+ // using "data" to connect to jmx manager will succeeed
+ cluster = pulse.getRepository().getCluster("data", "data");
+ result = cluster.executeQuery("select * from /regionA a order by a", null, 0);
+ assertThat(result.toString()).contains("No Data Found");
+ }
+
}
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
index 3b9cd72..0bacd99 100644
--- a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
+++ b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
@@ -56,7 +56,6 @@ public class PulseSecurityWithSSLTest {
securityProps.setProperty(SSL_ENABLED_COMPONENTS, SecurableCommunicationChannels.JMX);
securityProps.setProperty(SSL_KEYSTORE, jks.getCanonicalPath());
securityProps.setProperty(SSL_KEYSTORE_PASSWORD, "password");
- // securityProps.setProperty(SSL_KEYSTORE_TYPE, "JKS");
securityProps.setProperty(SSL_TRUSTSTORE, jks.getCanonicalPath());
securityProps.setProperty(SSL_TRUSTSTORE_PASSWORD, "password");
securityProps.setProperty(SSL_PROTOCOLS, "TLSv1.2");
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
new file mode 100644
index 0000000..44fadb6
--- /dev/null
+++ b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.geode.tools.pulse;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.geode.test.dunit.rules.EmbeddedPulseRule;
+import org.apache.geode.test.dunit.rules.HttpClientRule;
+import org.apache.geode.test.dunit.rules.LocatorStarterRule;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.apache.geode.tools.pulse.internal.data.Cluster;
+import org.apache.http.HttpResponse;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+
+@Category(IntegrationTest.class)
+public class PulseVerificationTest {
+
+ @ClassRule
+ public static LocatorStarterRule locator =
+ new LocatorStarterRule().withJMXManager().withAutoStart();
+
+ @Rule
+ public EmbeddedPulseRule pulse = new EmbeddedPulseRule();
+
+ @Rule
+ public HttpClientRule client = new HttpClientRule(locator::getHttpPort);
+
+ @Test
+ public void loginWithIncorrectPassword() throws Exception {
+ HttpResponse response = client.loginToPulse("admin", "wrongPassword");
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(302);
+ assertThat(response.getFirstHeader("Location").getValue())
+ .contains("/pulse/login.html?error=BAD_CREDS");
+
+ client.loginToPulseAndVerify("admin", "admin");
+ }
+
+ @Test
+ public void testConnectToJmx() throws Exception {
+ pulse.useJmxPort(locator.getJmxPort());
+ Cluster cluster = pulse.getRepository().getCluster("admin", null);
+ assertThat(cluster.isConnectedFlag()).isTrue();
+ assertThat(cluster.getServerCount()).isEqualTo(0);
+ }
+
+ @Test
+ public void testConnectToLocator() throws Exception {
+ pulse.useLocatorPort(locator.getPort());
+ Cluster cluster = pulse.getRepository().getCluster("admin", null);
+ assertThat(cluster.isConnectedFlag()).isTrue();
+ assertThat(cluster.getServerCount()).isEqualTo(0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
index 62310e8..bf0b99c 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
@@ -103,6 +103,7 @@ public class ManagementAgent {
private static final String PULSE_EMBEDDED_PROP = "pulse.embedded";
private static final String PULSE_PORT_PROP = "pulse.port";
private static final String PULSE_USESSL_MANAGER = "pulse.useSSL.manager";
+ private static final String PULSE_USESSL_LOCATOR = "pulse.useSSL.locator";
public ManagementAgent(DistributionConfig config) {
this.config = config;
@@ -272,9 +273,12 @@ public class ManagementAgent {
System.setProperty(PULSE_EMBEDDED_PROP, "true");
System.setProperty(PULSE_PORT_PROP, "" + config.getJmxManagerPort());
- final SocketCreator socketCreator =
+ final SocketCreator jmxSocketCreator =
SocketCreatorFactory.getSocketCreatorForComponent(SecurableCommunicationChannel.JMX);
- System.setProperty(PULSE_USESSL_MANAGER, socketCreator.useSSL() + "");
+ final SocketCreator locatorSocketCreator = SocketCreatorFactory
+ .getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR);
+ System.setProperty(PULSE_USESSL_MANAGER, jmxSocketCreator.useSSL() + "");
+ System.setProperty(PULSE_USESSL_LOCATOR, locatorSocketCreator.useSSL() + "");
this.httpServer = JettyHelper.startJetty(this.httpServer);
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
index 101bae4..0de41c0 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
@@ -2281,7 +2281,6 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
@CliCommand(value = CliStrings.START_PULSE, help = CliStrings.START_PULSE__HELP)
@CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GEODE_MANAGER,
CliStrings.TOPIC_GEODE_JMX, CliStrings.TOPIC_GEODE_M_AND_M})
- // TODO change url parameter type to URL when I figure out the Converter logic in Gfsh
public Result startPulse(@CliOption(key = CliStrings.START_PULSE__URL,
unspecifiedDefaultValue = "http://localhost:7070/pulse",
help = CliStrings.START_PULSE__URL__HELP) final String url) {
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
index 35f494b..34dbf2e 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
@@ -18,25 +18,13 @@
package org.apache.geode.tools.pulse.internal;
import org.apache.geode.tools.pulse.internal.controllers.PulseController;
-import org.apache.geode.tools.pulse.internal.data.PulseConfig;
import org.apache.geode.tools.pulse.internal.data.PulseConstants;
import org.apache.geode.tools.pulse.internal.data.Repository;
-import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.Level;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
import java.io.IOException;
import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.InetAddress;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Properties;
@@ -56,25 +44,8 @@ public class PulseAppListener implements ServletContextListener {
private static final Logger logger = LogManager.getLogger();
private final ResourceBundle resourceBundle = Repository.get().getResourceBundle();
- // String object to store all messages which needs to be logged into the log
- // file before logger gets initialized
- private String messagesToBeLogged = "";
-
private Properties pulseProperties;
private Properties pulseSecurityProperties;
- private Boolean sysPulseUseLocator;
- private String sysPulseHost;
- private String sysPulsePort;
- private String jmxUserName;
- private String jmxUserPassword;
-
- private boolean sysPulseUseSSLLocator;
- private boolean sysPulseUseSSLManager;
-
- // This property determines if pulse webApp login is authenticated against
- // GemFire integrated security or custom spring-security config provided
- // in pulse-authentication-custom.xml
- private boolean useGemFireCredentials;
@Override
public void contextDestroyed(ServletContextEvent event) {
@@ -89,36 +60,16 @@ public class PulseAppListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
-
- messagesToBeLogged = messagesToBeLogged
- .concat(formatLogString(resourceBundle.getString("LOG_MSG_CONTEXT_INITIALIZED")));
-
- // Load Pulse version details
- loadPulseVersionDetails();
-
+ logger.info(resourceBundle.getString("LOG_MSG_CONTEXT_INITIALIZED"));
// Load Pulse Properties
pulseProperties = loadProperties(PulseConstants.PULSE_PROPERTIES_FILE);
- if (pulseProperties.isEmpty()) {
- messagesToBeLogged = messagesToBeLogged
- .concat(formatLogString(resourceBundle.getString("LOG_MSG_PROPERTIES_NOT_FOUND")));
- } else {
- messagesToBeLogged = messagesToBeLogged
- .concat(formatLogString(resourceBundle.getString("LOG_MSG_PROPERTIES_FOUND")));
-
- // set Pulse product support into the Pulse controller for access from
- // client side
- // to display the appropriate ui depending on which product is supported
- // in present deployment
- String pulseProduct =
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_PRODUCTSUPPORT);
- }
+ // Load Pulse version details
+ loadPulseVersionDetails();
+ // load pulse security properties
pulseSecurityProperties = loadProperties(PulseConstants.PULSE_SECURITY_PROPERTIES_FILE);
- // Initialize logger
- initializeLogger();
-
// Reference to repository
Repository repository = Repository.get();
@@ -127,499 +78,79 @@ public class PulseAppListener implements ServletContextListener {
boolean sysIsEmbedded = Boolean.getBoolean(PulseConstants.SYSTEM_PROPERTY_PULSE_EMBEDDED);
if (sysIsEmbedded) {
- // Application Pulse is running in Embedded Mode
+ // jmx connection parameters
logger.info(resourceBundle.getString("LOG_MSG_APP_RUNNING_EMBEDDED_MODE"));
- repository.setIsEmbeddedMode(true);
-
- sysPulseUseLocator = Boolean.FALSE;
- try {
- // Get host name of machine running pulse in embedded mode
- sysPulseHost = InetAddress.getLocalHost().getCanonicalHostName();
- } catch (Exception e) {
- logger.debug(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_UNKNOWN_HOST"), e);
- // Set default host name
- sysPulseHost = PulseConstants.GEMFIRE_DEFAULT_HOST;
- }
- sysPulsePort = System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_PORT);
- if (StringUtils.isBlank(sysPulsePort)) {
- sysPulsePort = PulseConstants.GEMFIRE_DEFAULT_PORT;
- }
-
+ repository.setJmxUseLocator(false);
+ repository.setHost(PulseConstants.GEMFIRE_DEFAULT_HOST);
+ repository.setPort(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_PORT,
+ PulseConstants.GEMFIRE_DEFAULT_PORT));
+
+ // SSL, all the other system properties are already set in the embedded VM
+ repository.setUseSSLManager(
+ Boolean.valueOf(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER)));
+ repository.setUseSSLLocator(
+ Boolean.valueOf(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_LOCATOR)));
} else {
- // Application Pulse is running in Non-Embedded Mode
+ // jmx connection parameters
logger.info(resourceBundle.getString("LOG_MSG_APP_RUNNING_NONEMBEDDED_MODE"));
- repository.setIsEmbeddedMode(false);
-
- // Load JMX User Details
- loadJMXUserDetails();
- // Load locator and/or manager details
- loadLocatorManagerDetails();
-
- useGemFireCredentials = areWeUsingGemFireSecurityProfile(event);
- }
-
- // Set user details in repository
- repository.setJmxUserName(jmxUserName);
- repository.setJmxUserPassword(jmxUserPassword);
-
- // Set locator/Manager details in repository
- repository.setJmxUseLocator(sysPulseUseLocator);
- repository.setJmxHost(sysPulseHost);
- repository.setJmxPort(sysPulsePort);
-
- // set SSL info
- initializeSSL();
- if (sysIsEmbedded) {
- sysPulseUseSSLManager = Boolean
- .parseBoolean(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER));
- }
- repository.setUseSSLLocator(sysPulseUseSSLLocator);
- repository.setUseSSLManager(sysPulseUseSSLManager);
-
- repository.setUseGemFireCredentials(useGemFireCredentials);
-
- }
-
- /**
- * Return true if pulse is configure to authenticate using gemfire integrated security
- *
- * @param event
- * @return
- */
- private boolean areWeUsingGemFireSecurityProfile(ServletContextEvent event) {
- String profile = null;
- WebApplicationContext ctx =
- WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
- if (ctx.getEnvironment() != null) {
- String[] profiles = ctx.getEnvironment().getActiveProfiles();
- if (profiles != null && profiles.length > 0) {
- StringBuilder sb = new StringBuilder();
- for (String p : profiles)
- sb.append(p).append(",");
- logger.info("#SpringProfilesConfigured : {}", sb);
- profile = ctx.getEnvironment().getActiveProfiles()[0];
- logger.info("#First Profile : {}", profile);
- } else {
- logger.info("No SpringProfileConfigured using default spring profile");
- return false;
- }
- }
- if (PulseConstants.APPLICATION_PROPERTY_PULSE_SEC_PROFILE_GEMFIRE.equals(profile)) {
- logger.info("Using gemfire integrated security profile");
- return true;
- }
- return false;
- }
-
- // Function to load pulse version details from properties file
- private void loadPulseVersionDetails() {
-
- // Read version details from version property file
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- InputStream inputStream =
- classLoader.getResourceAsStream(PulseConstants.PULSE_VERSION_PROPERTIES_FILE);
-
- if (inputStream != null) {
- Properties properties = new Properties();
- try {
- properties.load(inputStream);
- } catch (IOException e) {
- messagesToBeLogged = messagesToBeLogged.concat(
- formatLogString(resourceBundle.getString("LOG_MSG_EXCEPTION_LOADING_PROPERTIES_FILE")));
- } finally {
- try {
- inputStream.close();
- } catch (IOException e) {
- messagesToBeLogged = messagesToBeLogged.concat(
- formatLogString(resourceBundle.getString("LOG_MSG_EXCEPTION_CLOSING_INPUT_STREAM")));
- }
- }
- // Set pulse version details in common object
- PulseController.pulseVersion
- .setPulseVersion(properties.getProperty(PulseConstants.PROPERTY_PULSE_VERSION, ""));
- PulseController.pulseVersion
- .setPulseBuildId(properties.getProperty(PulseConstants.PROPERTY_BUILD_ID, ""));
- PulseController.pulseVersion
- .setPulseBuildDate(properties.getProperty(PulseConstants.PROPERTY_BUILD_DATE, ""));
- PulseController.pulseVersion
- .setPulseSourceDate(properties.getProperty(PulseConstants.PROPERTY_SOURCE_DATE, ""));
- PulseController.pulseVersion.setPulseSourceRevision(
- properties.getProperty(PulseConstants.PROPERTY_SOURCE_REVISION, ""));
- PulseController.pulseVersion.setPulseSourceRepository(
- properties.getProperty(PulseConstants.PROPERTY_SOURCE_REPOSITORY, ""));
- }
-
- // Log Pulse Version details into log file
- messagesToBeLogged = messagesToBeLogged
- .concat(formatLogString(PulseController.pulseVersion.getPulseVersionLogMessage()));
- }
-
- private void initializeLogger() {
-
- // Override default log configuration by properties which are provided in
- // properties file.
- loadLogDetailsFromPropertyFile();
-
- // Override log configuration by properties which are provided in
- // through system properties.
- loadLogDetailsFromSystemProperties();
-
- // Log messages stored in messagesToBeLogged
- logger.info(messagesToBeLogged);
- messagesToBeLogged = "";
- }
-
- // Function to load pulse properties from pulse.properties file
- private Properties loadProperties(String propertyFile) {
-
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- InputStream inputStream = classLoader.getResourceAsStream(propertyFile);
- Properties properties = new Properties();
-
- if (inputStream != null) {
- messagesToBeLogged = messagesToBeLogged.concat(
- formatLogString(propertyFile + " " + resourceBundle.getString("LOG_MSG_FILE_FOUND")));
-
- try {
- // Load properties from input stream
- properties.load(inputStream);
- } catch (IOException e1) {
- messagesToBeLogged = messagesToBeLogged.concat(
- formatLogString(resourceBundle.getString("LOG_MSG_EXCEPTION_LOADING_PROPERTIES_FILE")
- + " " + propertyFile));
- } finally {
- // Close input stream
- try {
- inputStream.close();
- } catch (IOException e) {
- messagesToBeLogged = messagesToBeLogged.concat(
- formatLogString(resourceBundle.getString("LOG_MSG_EXCEPTION_CLOSING_INPUT_STREAM")
- + " " + propertyFile));
- }
- }
-
- } else {
- messagesToBeLogged = messagesToBeLogged.concat(formatLogString(
- resourceBundle.getString("LOG_MSG_COULD_NOT_READ_FILE") + " " + propertyFile));
- }
- return properties;
- }
-
- // Function to load Logging details from properties file
- private void loadLogDetailsFromPropertyFile() {
-
- // return, if Pulse Properties are not provided
- if (pulseProperties.size() == 0) {
- return;
- }
-
- messagesToBeLogged = messagesToBeLogged
- .concat(formatLogString(resourceBundle.getString("LOG_MSG_CHECK_LOG_PROPERTIES_IN_FILE")));
-
- HashMap<String, String> logPropertiesHM = new HashMap<String, String>();
-
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME,
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME, ""));
-
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION,
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION, ""));
-
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE,
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE, ""));
-
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT,
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT, ""));
-
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN,
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN, ""));
-
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL,
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL, ""));
-
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND,
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND, ""));
-
- if (logPropertiesHM.size() == 0) {
- messagesToBeLogged = messagesToBeLogged.concat(
- formatLogString(resourceBundle.getString("LOG_MSG_LOG_PROPERTIES_NOT_FOUND_IN_FILE")));
- } else {
- messagesToBeLogged = messagesToBeLogged.concat(
- formatLogString(resourceBundle.getString("LOG_MSG_LOG_PROPERTIES_FOUND_IN_FILE")));
- }
-
- setLogConfigurations(logPropertiesHM);
- }
-
- // Function to load Logging details from system properties
- private void loadLogDetailsFromSystemProperties() {
-
- messagesToBeLogged = messagesToBeLogged.concat(formatLogString(
- resourceBundle.getString("LOG_MSG_CHECK_LOG_PROPERTIES_IN_SYSTEM_PROPERTIES")));
-
- HashMap<String, String> logPropertiesHM = new HashMap<String, String>();
-
- String sysLogFileName =
- System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME);
- String sysLogFileLocation =
- System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION);
- String sysLogFileSize =
- System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE);
- String sysLogFileCount =
- System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT);
- String sysLogDatePattern =
- System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN);
- String sysLogLevel = System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL);
- String sysLogAppend = System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND);
-
- if (sysLogFileName == null || sysLogFileName.isEmpty()) {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME, "");
- } else {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME, sysLogFileName);
- }
-
- if (sysLogFileLocation == null || sysLogFileLocation.isEmpty()) {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION, "");
- } else {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION,
- sysLogFileLocation);
- }
-
- if (sysLogFileSize == null || sysLogFileSize.isEmpty()) {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE, "");
- } else {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE, sysLogFileSize);
- }
-
- if (sysLogFileCount == null || sysLogFileCount.isEmpty()) {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT, "");
- } else {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT, sysLogFileCount);
- }
-
- if (sysLogDatePattern == null || sysLogDatePattern.isEmpty()) {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN, "");
- } else {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN,
- sysLogDatePattern);
- }
-
- if (sysLogLevel == null || sysLogLevel.isEmpty()) {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL, "");
- } else {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL, sysLogLevel);
- }
-
- if (sysLogAppend == null || sysLogAppend.isEmpty()) {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND, "");
- } else {
- logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND, sysLogAppend);
- }
-
- if (logPropertiesHM.size() == 0) {
- messagesToBeLogged = messagesToBeLogged.concat(formatLogString(
- resourceBundle.getString("LOG_MSG_LOG_PROPERTIES_NOT_FOUND_IN_SYSTEM_PROPERTIES")));
- } else {
- messagesToBeLogged = messagesToBeLogged.concat(formatLogString(
- resourceBundle.getString("LOG_MSG_LOG_PROPERTIES_FOUND_IN_SYSTEM_PROPERTIES")));
- }
-
- setLogConfigurations(logPropertiesHM);
- }
-
- private void setLogConfigurations(HashMap<String, String> logPropertiesHM) {
-
- PulseConfig pulseConfig = Repository.get().getPulseConfig();
-
- // log file name
- if (StringUtils
- .isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME))) {
- pulseConfig.setLogFileName(
- logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME));
- }
-
- // log file location
- if (StringUtils.isNotBlank(
- logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION))) {
- pulseConfig.setLogFileLocation(
- logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION));
- }
-
- // log file size
- if (StringUtils
- .isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE))) {
- pulseConfig.setLogFileSize(Integer
- .parseInt(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE)));
- }
-
- // log file count
- if (StringUtils
- .isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT))) {
- pulseConfig.setLogFileCount(Integer
- .parseInt(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT)));
- }
-
- // log message date pattern
- if (StringUtils.isNotBlank(
- logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN))) {
- pulseConfig.setLogDatePattern(
- logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN));
- }
-
- // log level
- if (StringUtils
- .isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL))) {
- pulseConfig.setLogLevel(Level.getLevel(
- logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL).toUpperCase()));
- }
-
- // log append
- if (StringUtils
- .isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND))) {
- pulseConfig.setLogAppend(Boolean
- .valueOf(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND)));
- }
-
- }
-
- // Function to load JMX User details from properties
- private void loadJMXUserDetails() {
- logger.info(resourceBundle.getString("LOG_MSG_GET_JMX_USER_DETAILS"));
-
- if (pulseProperties.isEmpty()) {
- logger.info("{}{}", resourceBundle.getString("LOG_MSG_JMX_USER_DETAILS_NOT_FOUND"),
- resourceBundle.getString("LOG_MSG_REASON_USER_DETAILS_NOT_FOUND"));
- } else {
- jmxUserName =
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_JMXUSERNAME, "");
- jmxUserPassword =
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_JMXPASSWORD, "");
-
- if (jmxUserName.isEmpty() || jmxUserPassword.isEmpty()) {
- logger.info("{}{}", resourceBundle.getString("LOG_MSG_JMX_USER_DETAILS_NOT_FOUND"),
- resourceBundle.getString("LOG_MSG_REASON_USER_DETAILS_NOT_FOUND"));
- } else {
- logger.info(resourceBundle.getString("LOG_MSG_JMX_USER_DETAILS_FOUND"));
- }
- }
- }
-
- // Function to set SSL VM arguments
- private void initializeSSL() {
- logger.info(resourceBundle.getString("LOG_MSG_GET_SSL_DETAILS"));
-
-
- this.sysPulseUseSSLLocator = Boolean.valueOf(
- pulseProperties.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_LOCATOR, "false"));
-
- this.sysPulseUseSSLManager = Boolean.valueOf(
- pulseProperties.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER, "false"));
-
-
- if ((sysPulseUseSSLLocator || sysPulseUseSSLManager)) {
- Properties sslProperties = new Properties();
+ repository.setJmxUseLocator(Boolean.valueOf(
+ pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_USELOCATOR)));
+ repository.setHost(pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_HOST,
+ PulseConstants.GEMFIRE_DEFAULT_HOST));
+ repository.setPort(pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_PORT,
+ PulseConstants.GEMFIRE_DEFAULT_PORT));
+
+ // SSL
+ repository.setUseSSLManager(Boolean.valueOf(pulseProperties
+ .getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER, "false")));
+ repository.setUseSSLLocator(Boolean.valueOf(pulseProperties
+ .getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_LOCATOR, "false")));
+
+ // set the ssl related properties found in pulsesecurity.properties
if (!pulseSecurityProperties.isEmpty()) {
Set entrySet = pulseSecurityProperties.entrySet();
for (Iterator it = entrySet.iterator(); it.hasNext();) {
Entry<String, String> entry = (Entry<String, String>) it.next();
String key = entry.getKey();
if (key.startsWith("javax.net.ssl.")) {
-
String val = entry.getValue();
System.setProperty(key, val);
- sslProperties.setProperty(key, val);
}
}
}
- if (sslProperties.isEmpty()) {
- logger.warn(resourceBundle.getString("LOG_MSG_SSL_NOT_SET"));
- }
}
-
}
- // Function to load locator and/or manager details
- private void loadLocatorManagerDetails() {
-
- // Get locator details through System Properties
- logger.info(resourceBundle.getString("LOG_MSG_GET_LOCATOR_DETAILS_1"));
-
- // Required System properties are
- // -Dpulse.embedded="false" -Dpulse.useLocator="false"
- // -Dpulse.host="192.168.2.11" -Dpulse.port="2099"
- sysPulseUseLocator = Boolean.getBoolean(PulseConstants.SYSTEM_PROPERTY_PULSE_USELOCATOR);
- sysPulseHost = System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_HOST);
- sysPulsePort = System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_PORT);
-
- if (sysPulseHost == null || sysPulseHost.isEmpty() || sysPulsePort == null
- || sysPulsePort.isEmpty()) {
- logger.info("{}{}", resourceBundle.getString("LOG_MSG_LOCATOR_DETAILS_NOT_FOUND"),
- resourceBundle.getString("LOG_MSG_REASON_LOCATOR_DETAILS_NOT_FOUND_1"));
- logger.info(resourceBundle.getString("LOG_MSG_GET_LOCATOR_DETAILS_2"));
-
- if (pulseProperties.isEmpty()) {
- logger.info("{}{}", resourceBundle.getString("LOG_MSG_LOCATOR_DETAILS_NOT_FOUND"),
- resourceBundle.getString("LOG_MSG_REASON_LOCATOR_DETAILS_NOT_FOUND_2"));
-
- sysPulseHost = "";
- sysPulsePort = "";
- } else {
- logger.info(resourceBundle.getString("LOG_MSG_LOCATOR_DETAILS_FOUND"));
-
- sysPulseUseLocator = Boolean.valueOf(
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_USELOCATOR, ""));
- sysPulseHost =
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_HOST, "");
- sysPulsePort =
- pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_PORT, "");
- }
- } else {
- logger.info(resourceBundle.getString("LOG_MSG_LOCATOR_DETAILS_FOUND"));
- }
+ // Function to load pulse version details from properties file
+ private void loadPulseVersionDetails() {
+ Properties properties = loadProperties(PulseConstants.PULSE_VERSION_PROPERTIES_FILE);
+ // Set pulse version details in common object
+ PulseController.pulseVersion
+ .setPulseVersion(properties.getProperty(PulseConstants.PROPERTY_PULSE_VERSION, ""));
+ PulseController.pulseVersion
+ .setPulseBuildId(properties.getProperty(PulseConstants.PROPERTY_BUILD_ID, ""));
+ PulseController.pulseVersion
+ .setPulseBuildDate(properties.getProperty(PulseConstants.PROPERTY_BUILD_DATE, ""));
+ PulseController.pulseVersion
+ .setPulseSourceDate(properties.getProperty(PulseConstants.PROPERTY_SOURCE_DATE, ""));
+ PulseController.pulseVersion.setPulseSourceRevision(
+ properties.getProperty(PulseConstants.PROPERTY_SOURCE_REVISION, ""));
+ PulseController.pulseVersion.setPulseSourceRepository(
+ properties.getProperty(PulseConstants.PROPERTY_SOURCE_REPOSITORY, ""));
+ logger.info(PulseController.pulseVersion.getPulseVersionLogMessage());
}
- private String formatLogString(String logMessage) {
-
- DateFormat df = new SimpleDateFormat(PulseConstants.LOG_MESSAGE_DATE_PATTERN);
- // DateFormat df = new
- // SimpleDateFormat(Repository.get().getPulseConfig().getLogDatePattern());
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
-
- pw.println();
- pw.print("[");
- pw.print("INFO");
- pw.print(" ");
- pw.print(df.format(new Date(System.currentTimeMillis())));
- String threadName = Thread.currentThread().getName();
- if (threadName != null) {
- pw.print(" ");
- pw.print(threadName);
- }
- pw.print(" tid=0x");
- pw.print(Long.toHexString(Thread.currentThread().getId()));
- pw.print("] ");
- pw.print("(msgTID=");
- pw.print("");
-
- pw.print(" msgSN=");
- pw.print("");
-
- pw.print(") ");
-
- pw.println("[" + PulseConstants.APP_NAME + "]");
-
- pw.println(Logger.class.getName());
-
- pw.println(logMessage);
-
- pw.close();
- try {
- sw.close();
- } catch (IOException ignore) {
+ // Function to load pulse properties from pulse.properties file
+ private Properties loadProperties(String propertyFile) {
+ final Properties properties = new Properties();
+ try (final InputStream stream =
+ Thread.currentThread().getContextClassLoader().getResourceAsStream(propertyFile)) {
+ logger.info(propertyFile + " " + resourceBundle.getString("LOG_MSG_FILE_FOUND"));
+ properties.load(stream);
+ } catch (IOException e) {
+ logger.error(resourceBundle.getString("LOG_MSG_EXCEPTION_LOADING_PROPERTIES_FILE"), e);
}
- String result = sw.toString();
- return result;
+ return properties;
}
-
}
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
index c878879..e609477 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
@@ -149,14 +149,6 @@ public class PulseController {
ObjectNode responseJSON = mapper.createObjectNode();
try {
- // Reference to repository
- Repository repository = Repository.get();
- // set pulse web app url
- String pulseWebAppUrl = request.getScheme() + "://" + request.getServerName() + ":"
- + request.getServerPort() + request.getContextPath();
-
- repository.setPulseWebAppUrl(pulseWebAppUrl);
-
// Response
responseJSON.put("pulseVersion", PulseController.pulseVersion.getPulseVersion());
responseJSON.put("buildId", PulseController.pulseVersion.getPulseBuildId());
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
index 78e92d4..5b552a1 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
@@ -34,7 +34,6 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
-import java.net.ConnectException;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -71,9 +70,9 @@ public class Cluster extends Thread {
private final ResourceBundle resourceBundle = Repository.get().getResourceBundle();
private String jmxUserName;
- private String jmxUserPassword;
private String serverName;
private String port;
+ private JMXConnector jmxConnector;
private int stale = 0;
private double loadPerSec;
private CountDownLatch clusterHasBeenInitialized;
@@ -2276,19 +2275,14 @@ public class Cluster extends Thread {
* @param host host name
* @param port port
* @param userName pulse user name
- * @param userPassword pulse user password
- * @throws ConnectException
*/
- public Cluster(String host, String port, String userName, String userPassword)
- throws ConnectException {
+ public Cluster(String host, String port, String userName) {
this.serverName = host;
this.port = port;
this.jmxUserName = userName;
- this.jmxUserPassword = userPassword;
this.updater = ClusterDataFactory.getUpdater(this, host, port);
this.clusterHasBeenInitialized = new CountDownLatch(1);
- // start();
}
public void waitForInitialization(long timeout, TimeUnit unit) throws InterruptedException {
@@ -2385,18 +2379,6 @@ public class Cluster extends Thread {
return this.jmxUserName;
}
- public void setJmxUserName(String jmxUserName) {
- this.jmxUserName = jmxUserName;
- }
-
- public String getJmxUserPassword() {
- return this.jmxUserPassword;
- }
-
- public void setJmxUserPassword(String jmxUserPassword) {
- this.jmxUserPassword = jmxUserPassword;
- }
-
public String getConnectionErrorMsg() {
return this.connectionErrorMsg;
}
@@ -2818,14 +2800,25 @@ public class Cluster extends Thread {
return this.getDataBrowser().deleteQueryById(userId, queryId);
}
- public JMXConnector connectToGemFire() {
- if (this.updater instanceof JMXDataUpdater) {
- return ((JMXDataUpdater) this.updater).getJMXConnection(false);
- } else {
- return null;
+ public void connectToGemFire(String password) {
+ jmxConnector = this.updater.connect(this.getJmxUserName(), password);
+
+ // if connected
+ if (jmxConnector != null) {
+ // Start Thread
+ this.start();
+ try {
+ this.waitForInitialization(15, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
}
}
+ public JMXConnector getJMXConnector() {
+ return this.jmxConnector;
+ }
+
/**
* inner class for creating Mock Data
*
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
index 3ec8207..fb837ea 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
@@ -19,6 +19,8 @@ package org.apache.geode.tools.pulse.internal.data;
import com.fasterxml.jackson.databind.node.ObjectNode;
+import javax.management.remote.JMXConnector;
+
/**
* Interface having updateData() function which is getting Override by both MockDataUpdater and
* JMXDataUpdater
@@ -30,4 +32,8 @@ public interface IClusterUpdater {
boolean updateData();
ObjectNode executeQuery(String queryText, String members, int limit);
+
+ default JMXConnector connect(String username, String password) {
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
index c74e3cd..2da74f1 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
@@ -27,7 +27,6 @@ import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.lang.management.ManagementFactory;
import java.math.BigDecimal;
import java.net.Inet4Address;
import java.net.Inet6Address;
@@ -49,7 +48,6 @@ import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
-import javax.management.InvalidAttributeValueException;
import javax.management.MBeanException;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
@@ -75,7 +73,7 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
private final ResourceBundle resourceBundle = Repository.get().getResourceBundle();
private JMXConnector conn = null;
- private MBeanServerConnection mbs;
+ private MBeanServerConnection mbs = null;
private final String serverName;
private final String port;
private Boolean isAddedNotiListner = false;
@@ -87,7 +85,6 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
private ObjectName MBEAN_OBJECT_NAME_MEMBER;
private ObjectName MBEAN_OBJECT_NAME_MEMBER_MANAGER;
private ObjectName MBEAN_OBJECT_NAME_STATEMENT_DISTRIBUTED;
- private ObjectName MBEAN_OBJECT_NAME_TABLE_AGGREGATE;
private Set<ObjectName> systemMBeans = null;
@@ -124,10 +121,10 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
private JmxManagerInfo getManagerInfoFromLocator(Repository repository) {
try {
- String locatorHost = repository.getJmxHost();
- int locatorPort = Integer.parseInt(repository.getJmxPort());
+ String locatorHost = repository.getHost();
+ int locatorPort = Integer.parseInt(repository.getPort());
- logger.info("{} : {} & {} : {}", resourceBundle.getString("LOG_MSG_HOST"), locatorHost,
+ logger.info("{}={} & {}={}", resourceBundle.getString("LOG_MSG_HOST"), locatorHost,
resourceBundle.getString("LOG_MSG_PORT"), locatorPort);
InetAddress inetAddr = InetAddress.getByName(locatorHost);
@@ -135,11 +132,9 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
if ((inetAddr instanceof Inet4Address) || (inetAddr instanceof Inet6Address)) {
if (inetAddr instanceof Inet4Address) {
- logger.info("{} - {}", resourceBundle.getString("LOG_MSG_LOCATOR_IPV4_ADDRESS"),
- inetAddr);
+ logger.info("{}: {}", resourceBundle.getString("LOG_MSG_LOCATOR_IPV4_ADDRESS"), inetAddr);
} else {
- logger.info("{} - {}", resourceBundle.getString("LOG_MSG_LOCATOR_IPV6_ADDRESS"),
- inetAddr);
+ logger.info("{}: {}", resourceBundle.getString("LOG_MSG_LOCATOR_IPV6_ADDRESS"), inetAddr);
}
JmxManagerInfo jmxManagerInfo = JmxManagerFinder.askLocatorForJmxManager(inetAddr,
@@ -168,19 +163,11 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
return null;
}
- /**
- * Default connection is Pulse which uses configured userName and password
- */
- public JMXConnector getJMXConnection() {
- return getJMXConnection(true);
- }
/**
- * Get connection for given userName and password. This is used for DataBrowser queries which has
- * to be fired using credentials provided at pulse login page
+ * Get the jmx connection
*/
- public JMXConnector getJMXConnection(final boolean registerURL) {
- JMXConnector connection = null;
+ public JMXConnector connect(String username, String password) {
// Reference to repository
Repository repository = Repository.get();
try {
@@ -196,7 +183,7 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
if (jmxManagerInfo.port == 0) {
logger.info(resourceBundle.getString("LOG_MSG_LOCATOR_COULD_NOT_FIND_MANAGER"));
} else {
- logger.info("{} : {} : {} & {} : {}{}",
+ logger.info("{}: {}={} & {}={}, {}",
resourceBundle.getString("LOG_MSG_LOCATOR_FOUND_MANAGER"),
resourceBundle.getString("LOG_MSG_HOST"), jmxManagerInfo.host,
resourceBundle.getString("LOG_MSG_PORT"), jmxManagerInfo.port,
@@ -207,14 +194,14 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
formJMXServiceURLString(jmxManagerInfo.host, String.valueOf(jmxManagerInfo.port));
}
} else {
- logger.info("{} : {} & {} : {}", resourceBundle.getString("LOG_MSG_HOST"), this.serverName,
+ logger.info("{}={} & {}={}", resourceBundle.getString("LOG_MSG_HOST"), this.serverName,
resourceBundle.getString("LOG_MSG_PORT"), this.port);
jmxSerURL = formJMXServiceURLString(this.serverName, this.port);
}
if (StringUtils.isNotBlank(jmxSerURL)) {
JMXServiceURL url = new JMXServiceURL(jmxSerURL);
- String[] creds = {this.cluster.getJmxUserName(), this.cluster.getJmxUserPassword()};
+ String[] creds = {username, password};
Map<String, Object> env = new HashMap<String, Object>();
env.put(JMXConnector.CREDENTIALS, creds);
@@ -223,33 +210,24 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
env.put("com.sun.jndi.rmi.factory.socket", new SslRMIClientSocketFactory());
}
logger.info("Connecting to jmxURL : {}", jmxSerURL);
- connection = JMXConnectorFactory.connect(url, env);
-
- // Register Pulse URL if not already present in the JMX Manager
- if (registerURL) {
- registerPulseUrlToManager(connection);
- }
+ this.conn = JMXConnectorFactory.connect(url, env);
+ this.mbs = this.conn.getMBeanServerConnection();
+ cluster.setConnectedFlag(true);
}
} catch (Exception e) {
- if (e instanceof UnknownHostException) {
- cluster
- .setConnectionErrorMsg(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_UNKNOWN_HOST"));
- }
-
- StringWriter swBuffer = new StringWriter();
- PrintWriter prtWriter = new PrintWriter(swBuffer);
- e.printStackTrace(prtWriter);
- logger.fatal("Exception Details : {}\n", swBuffer);
+ cluster.setConnectedFlag(false);
+ cluster.setConnectionErrorMsg(e.getMessage());
+ logger.fatal(e.getMessage(), e);
if (this.conn != null) {
try {
this.conn.close();
} catch (Exception e1) {
- logger.fatal("Error closing JMX connection {}\n", swBuffer);
+ logger.fatal(e1.getMessage(), e1);
}
this.conn = null;
}
}
- return connection;
+ return this.conn;
}
private String formJMXServiceURLString(String host, String port) throws UnknownHostException {
@@ -276,92 +254,13 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
return jmxSerURL;
}
- // Method registers Pulse URL if not already present in the JMX Manager
- private void registerPulseUrlToManager(JMXConnector connection)
- throws IOException, AttributeNotFoundException, InstanceNotFoundException, MBeanException,
- ReflectionException, MalformedObjectNameException, InvalidAttributeValueException {
- logger.info(resourceBundle.getString("LOG_MSG_REGISTERING_APP_URL_TO_MANAGER"));
-
- // Reference to repository
- Repository repository = Repository.get();
-
- // Register Pulse URL if not already present in the JMX Manager
- if (connection != null) {
- MBeanServerConnection mbsc = connection.getMBeanServerConnection();
-
- Set<ObjectName> mbeans = mbsc.queryNames(this.MBEAN_OBJECT_NAME_MEMBER_MANAGER, null);
-
- for (ObjectName mbeanName : mbeans) {
- String presentUrl =
- (String) mbsc.getAttribute(mbeanName, PulseConstants.MBEAN_MANAGER_ATTRIBUTE_PULSEURL);
- String pulseWebAppUrl = repository.getPulseWebAppUrl();
- if (pulseWebAppUrl != null && (presentUrl == null || !pulseWebAppUrl.equals(presentUrl))) {
- logger.debug(resourceBundle.getString("LOG_MSG_SETTING_APP_URL_TO_MANAGER"));
- Attribute pulseUrlAttr =
- new Attribute(PulseConstants.MBEAN_MANAGER_ATTRIBUTE_PULSEURL, pulseWebAppUrl);
- mbsc.setAttribute(mbeanName, pulseUrlAttr);
- } else {
- logger.debug(resourceBundle.getString("LOG_MSG_APP_URL_ALREADY_PRESENT_IN_MANAGER"));
- }
- }
- }
- }
-
- private boolean isConnected() {
- // Reference to repository
- Repository repository = Repository.get();
- if (repository.getIsEmbeddedMode()) {
- if (this.mbs == null) {
- this.mbs = ManagementFactory.getPlatformMBeanServer();
- cluster.setConnectedFlag(true);
- }
- } else {
- try {
- if (this.conn == null) {
- cluster.setConnectedFlag(false);
- cluster.setConnectionErrorMsg(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_NOT_FOUND")
- + " " + resourceBundle.getString("LOG_MSG_JMX_GETTING_NEW_CONNECTION"));
- logger.debug("{} {}", resourceBundle.getString("LOG_MSG_JMX_CONNECTION_NOT_FOUND"),
- resourceBundle.getString("LOG_MSG_JMX_GET_NEW_CONNECTION"));
- this.conn = getJMXConnection();
- if (this.conn != null) {
- this.mbs = this.conn.getMBeanServerConnection();
- cluster.setConnectedFlag(true);
- } else {
- logger.info(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_NOT_FOUND"));
- return false;
- }
- } else {
- logger.debug(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_IS_AVAILABLE"));
- cluster.setConnectedFlag(true);
- if (this.mbs == null) {
- this.mbs = this.conn.getMBeanServerConnection();
- }
- }
- } catch (Exception e) {
- this.mbs = null;
- if (this.conn != null) {
- try {
- this.conn.close();
- } catch (Exception e1) {
- logger.fatal(e);
- }
- }
- this.conn = null;
- return false;
- }
- }
-
- return true;
- }
-
/**
* function used for updating Cluster Data.
*/
@Override
public boolean updateData() {
try {
- if (!this.isConnected()) {
+ if (this.conn == null) {
return false;
}
@@ -377,9 +276,6 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
cluster.getDeletedRegions().add(region.getFullPath());
}
- // try {
-
- // Cluster
this.systemMBeans = this.mbs.queryNames(this.MBEAN_OBJECT_NAME_SYSTEM_DISTRIBUTED, null);
for (ObjectName sysMBean : this.systemMBeans) {
updateClusterSystem(sysMBean);
@@ -389,9 +285,6 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
Set<ObjectName> regionMBeans =
this.mbs.queryNames(this.MBEAN_OBJECT_NAME_REGION_DISTRIBUTED, null);
- Set<ObjectName> tableMBeans =
- this.mbs.queryNames(this.MBEAN_OBJECT_NAME_TABLE_AGGREGATE, null);
-
// For Gemfire
for (ObjectName regMBean : regionMBeans) {
updateClusterRegion(regMBean);
@@ -440,19 +333,15 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
updateClusterStatement(stmtObjectName);
}
} catch (IOException ioe) {
-
- // write errors
- StringWriter swBuffer = new StringWriter();
- PrintWriter prtWriter = new PrintWriter(swBuffer);
- ioe.printStackTrace(prtWriter);
- logger.fatal("IOException Details : {}\n", swBuffer);
+ logger.fatal(ioe.getMessage(), ioe);
this.mbs = null;
if (this.conn != null) {
try {
this.conn.close();
} catch (IOException e1) {
- logger.fatal("Error closing JMX connection {}\n", swBuffer);
+ logger.fatal(e1.getMessage(), e1);
}
+ this.conn = null;
}
return false;
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
index 52e13a7..c3a33fd 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
@@ -22,13 +22,11 @@ import org.apache.logging.log4j.Logger;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
-import java.net.ConnectException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
-import java.util.concurrent.TimeUnit;
/**
* A Singleton instance of the memory cache for clusters.
@@ -41,17 +39,10 @@ public class Repository {
private static Repository instance = new Repository();
private HashMap<String, Cluster> clusterMap = new HashMap<String, Cluster>();
private Boolean jmxUseLocator;
- private String jmxHost;
- private String jmxPort;
- private String jmxUserName;
- private String jmxUserPassword;
- private Boolean isEmbeddedMode;
+ private String host;
+ private String port;
private boolean useSSLLocator = false;
private boolean useSSLManager = false;
- private boolean useGemFireCredentials = false;
-
-
- private String pulseWebAppUrl;
Locale locale =
new Locale(PulseConstants.APPLICATION_LANGUAGE, PulseConstants.APPLICATION_COUNTRY);
@@ -77,44 +68,20 @@ public class Repository {
this.jmxUseLocator = jmxUseLocator;
}
- public String getJmxHost() {
- return this.jmxHost;
- }
-
- public void setJmxHost(String jmxHost) {
- this.jmxHost = jmxHost;
- }
-
- public String getJmxPort() {
- return this.jmxPort;
- }
-
- public void setJmxPort(String jmxPort) {
- this.jmxPort = jmxPort;
+ public String getHost() {
+ return this.host;
}
- public String getJmxUserName() {
- return this.jmxUserName;
+ public void setHost(String jmxHost) {
+ this.host = jmxHost;
}
- public void setJmxUserName(String jmxUserName) {
- this.jmxUserName = jmxUserName;
+ public String getPort() {
+ return this.port;
}
- public String getJmxUserPassword() {
- return this.jmxUserPassword;
- }
-
- public void setJmxUserPassword(String jmxUserPassword) {
- this.jmxUserPassword = jmxUserPassword;
- }
-
- public Boolean getIsEmbeddedMode() {
- return this.isEmbeddedMode;
- }
-
- public void setIsEmbeddedMode(Boolean isEmbeddedMode) {
- this.isEmbeddedMode = isEmbeddedMode;
+ public void setPort(String jmxPort) {
+ this.port = jmxPort;
}
public boolean isUseSSLLocator() {
@@ -133,79 +100,42 @@ public class Repository {
this.useSSLManager = useSSLManager;
}
- public String getPulseWebAppUrl() {
- return this.pulseWebAppUrl;
- }
-
- public void setPulseWebAppUrl(String pulseWebAppUrl) {
- this.pulseWebAppUrl = pulseWebAppUrl;
- }
-
public PulseConfig getPulseConfig() {
return this.pulseConfig;
}
- public void setPulseConfig(PulseConfig pulseConfig) {
- this.pulseConfig = pulseConfig;
- }
/**
- * we're maintaining a 1:1 mapping between webapp and cluster, there is no need for a map of
- * clusters based on the host and port We are using this clusterMap to maintain cluster for
- * different users now. For a single-user connection to gemfire JMX, we will use the default
- * username/password in the pulse.properties (# JMX User Properties ) pulse.jmxUserName=admin
- * pulse.jmxUserPassword=admin
+ * this will return a cluster already connected to the geode jmx manager for the user in the
+ * request
*
* But for multi-user connections to gemfireJMX, i.e pulse that uses gemfire integrated security,
* we will need to get the username form the context
*/
public Cluster getCluster() {
- String username = null;
- String password = null;
- if (useGemFireCredentials) {
- Authentication auth = SecurityContextHolder.getContext().getAuthentication();
- if (auth != null) {
- username = auth.getName();
- password = (String) auth.getCredentials();
- }
- } else {
- username = this.jmxUserName;
- password = this.jmxUserPassword;
- }
- return this.getCluster(username, password);
+ Authentication auth = SecurityContextHolder.getContext().getAuthentication();
+ if (auth == null)
+ return null;
+ return getCluster(auth.getName(), null);
}
public Cluster getCluster(String username, String password) {
synchronized (this.clusterMap) {
- String key = username;
- Cluster data = this.clusterMap.get(key);
-
+ Cluster data = clusterMap.get(username);
if (data == null) {
- try {
- logger.info("{} : {}", resourceBundle.getString("LOG_MSG_CREATE_NEW_THREAD"), key);
- data = new Cluster(this.jmxHost, this.jmxPort, username, password);
- // Assign name to thread created
- data.setName(
- PulseConstants.APP_NAME + "-" + this.jmxHost + ":" + this.jmxPort + ":" + username);
- // Start Thread
- data.start();
- data.waitForInitialization(15, TimeUnit.SECONDS);
- this.clusterMap.put(key, data);
- } catch (ConnectException | InterruptedException e) {
- data = null;
- logger.debug(e);
+ logger.info(resourceBundle.getString("LOG_MSG_CREATE_NEW_THREAD") + " : " + username);
+ data = new Cluster(this.host, this.port, username);
+ // Assign name to thread created
+ data.setName(PulseConstants.APP_NAME + "-" + this.host + ":" + this.port + ":" + username);
+ data.connectToGemFire(password);
+ if (data.isConnectedFlag()) {
+ this.clusterMap.put(username, data);
}
- } else {
- data.setJmxUserPassword(password);
-
}
return data;
}
}
- private String getClusterKey(String host, String port) {
- return host + ":" + port;
- }
// This method is used to remove all cluster threads
public void removeAllClusters() {
@@ -226,14 +156,5 @@ public class Repository {
return this.resourceBundle;
}
- public boolean isUseGemFireCredentials() {
- return useGemFireCredentials;
- }
-
- public void setUseGemFireCredentials(boolean useGemFireCredentials) {
- this.useGemFireCredentials = useGemFireCredentials;
- }
-
-
}
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
index 096bf6f..2b110bc 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
@@ -14,21 +14,19 @@
*/
package org.apache.geode.tools.pulse.internal.security;
-import java.util.Collection;
-import javax.management.remote.JMXConnector;
-
import org.apache.geode.tools.pulse.internal.data.Repository;
-
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.security.authentication.AuthenticationProvider;
-import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
+import java.util.Collection;
+import javax.management.remote.JMXConnector;
+
/**
* Spring security AuthenticationProvider for GemFire. It connects to gemfire manager using given
* credentials. Successful connect is treated as successful authentication and web user is
@@ -44,7 +42,6 @@ public class GemFireAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
-
if (authentication instanceof GemFireAuthentication) {
GemFireAuthentication gemAuth = (GemFireAuthentication) authentication;
logger.debug("GemAuthentication is connected? = {}", gemAuth.getJmxc());
@@ -55,21 +52,17 @@ public class GemFireAuthenticationProvider implements AuthenticationProvider {
String name = authentication.getName();
String password = authentication.getCredentials().toString();
- try {
- logger.debug("Connecting to GemFire with user={}", name);
- JMXConnector jmxc = Repository.get().getCluster(name, password).connectToGemFire();
- if (jmxc != null) {
- Collection<GrantedAuthority> list = GemFireAuthentication.populateAuthorities(jmxc);
- GemFireAuthentication auth = new GemFireAuthentication(authentication.getPrincipal(),
- authentication.getCredentials(), list, jmxc);
- logger.debug("For user " + name + " authList={}", list);
- return auth;
- } else {
- throw new AuthenticationServiceException("JMX Connection unavailable");
- }
- } catch (Exception e) {
- throw new BadCredentialsException("Error connecting to GemFire JMX Server", e);
+ logger.debug("Connecting to GemFire with user=" + name);
+ JMXConnector jmxc = Repository.get().getCluster(name, password).getJMXConnector();
+ if (jmxc == null) {
+ throw new BadCredentialsException("Error connecting to GemFire JMX Server");
}
+
+ Collection<GrantedAuthority> list = GemFireAuthentication.populateAuthorities(jmxc);
+ GemFireAuthentication auth = new GemFireAuthentication(authentication.getPrincipal(),
+ authentication.getCredentials(), list, jmxc);
+ logger.debug("For user " + name + " authList=" + list);
+ return auth;
}
@Override
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
index b169d4f..d685964 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
@@ -14,19 +14,17 @@
*/
package org.apache.geode.tools.pulse.internal.security;
-import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.geode.tools.pulse.internal.data.Repository;
-
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
/**
* Handler is used to close jmx connection maintained at user-level
*
@@ -41,12 +39,10 @@ public class LogoutHandler extends SimpleUrlLogoutSuccessHandler implements Logo
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
logger.debug("Invoked #LogoutHandler ...");
- if (Repository.get().isUseGemFireCredentials()) {
- GemFireAuthentication gemauthentication = (GemFireAuthentication) authentication;
- if (gemauthentication != null) {
- gemauthentication.getJmxc().close();
- logger.info("#LogoutHandler : Closing GemFireAuthentication JMX Connection...");
- }
+ GemFireAuthentication gemauthentication = (GemFireAuthentication) authentication;
+ if (gemauthentication != null) {
+ gemauthentication.getJmxc().close();
+ logger.info("#LogoutHandler : Closing GemFireAuthentication JMX Connection...");
}
super.onLogoutSuccess(request, response, authentication);
}
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
index b6a129d..34a7734 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
@@ -20,7 +20,6 @@ package org.apache.geode.tools.pulse.internal.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.apache.geode.tools.pulse.internal.controllers.PulseController;
import org.apache.geode.tools.pulse.internal.data.Cluster;
import org.apache.geode.tools.pulse.internal.data.PulseConstants;
import org.apache.geode.tools.pulse.internal.data.Repository;
@@ -32,7 +31,6 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.math.RoundingMode;
-import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
index 90d4ecd..7a1013a 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
@@ -17,23 +17,21 @@
package org.apache.geode.tools.pulse.internal.service;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.geode.tools.pulse.internal.data.Cluster;
+import org.apache.geode.tools.pulse.internal.data.PulseConstants;
+import org.apache.geode.tools.pulse.internal.data.Repository;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
-import org.apache.geode.tools.pulse.internal.data.Cluster;
-import org.apache.geode.tools.pulse.internal.data.PulseConstants;
-import org.apache.geode.tools.pulse.internal.data.Repository;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
/**
* Class ClusterMembersRGraphService
@@ -95,7 +93,7 @@ public class ClusterMembersRGraphService implements PulseService {
// cluster's Members
responseJSON.put(this.CLUSTER,
- getPhysicalServerJson(cluster, repository.getJmxHost(), repository.getJmxPort()));
+ getPhysicalServerJson(cluster, repository.getHost(), repository.getPort()));
responseJSON.put(this.MEMBER_COUNT, cluster.getMemberCount());
// Send json response
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/resources/log4j2.xml b/geode-pulse/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..536a045
--- /dev/null
+++ b/geode-pulse/src/main/resources/log4j2.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<Configuration status="INFO" name="Pulse" packages="org.apache.geode">
+ <Appenders>
+ <File name="File" fileName="pulse.log">
+ <PatternLayout>
+ <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
+ </PatternLayout>
+ </File>
+ </Appenders>
+ <Loggers>
+ <Root level="INFO">
+ <AppenderRef ref="File"/>
+ </Root>
+ </Loggers>
+</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/resources/pulse.properties
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/resources/pulse.properties b/geode-pulse/src/main/resources/pulse.properties
index d47d469..6eb4730 100644
--- a/geode-pulse/src/main/resources/pulse.properties
+++ b/geode-pulse/src/main/resources/pulse.properties
@@ -21,28 +21,9 @@
#Tue, 09 Oct 2012 16:39:00
# JMX Locator/Manager Properties
-pulse.useLocator=false
+pulse.useLocator=true
pulse.host=localhost
-pulse.port=1099
+pulse.port=10334
#pulse.useSSL.locator=true
#pulse.useSSL.manager=true
-
-# JMX User Properties
-pulse.jmxUserName=admin
-pulse.jmxUserPassword=admin
-
-# 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/geode/blob/0f978a6d/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
index ddd799f..58bdbcb 100644
--- a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
@@ -16,7 +16,6 @@ package org.apache.geode.tools.pulse.controllers;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
@@ -29,14 +28,9 @@ import java.io.File;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.UUID;
-import javax.servlet.ServletContextListener;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.geode.tools.pulse.internal.PulseAppListener;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.tools.pulse.internal.controllers.PulseController;
import org.apache.geode.tools.pulse.internal.data.Cluster;
import org.apache.geode.tools.pulse.internal.data.PulseConfig;