http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/testbed/driver/PulseUITest.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/testbed/driver/PulseUITest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/testbed/driver/PulseUITest.java new file mode 100644 index 0000000..c2d55c3 --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/testbed/driver/PulseUITest.java @@ -0,0 +1,279 @@ +/* + * 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 com.vmware.geode.tools.pulse.testbed.driver; + +import static com.vmware.geode.tools.pulse.tests.PulseAbstractTest.*; +import static org.junit.Assert.*; + +import java.net.InetAddress; +import java.util.List; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.support.ui.ExpectedCondition; +import org.openqa.selenium.support.ui.WebDriverWait; + +import org.apache.geode.internal.net.SSLConfigurationFactory; +import org.apache.geode.internal.security.SecurableCommunicationChannel; +import org.apache.geode.management.internal.JettyHelper; +import org.apache.geode.test.junit.categories.UITest; +import com.vmware.geode.tools.pulse.testbed.GemFireDistributedSystem.Locator; +import com.vmware.geode.tools.pulse.testbed.GemFireDistributedSystem.Peer; +import com.vmware.geode.tools.pulse.testbed.GemFireDistributedSystem.Region; +import com.vmware.geode.tools.pulse.testbed.GemFireDistributedSystem.Server; +import com.vmware.geode.tools.pulse.testbed.TestBed; + +@Ignore("TODO: test is ignored") +@Category(UITest.class) +public class PulseUITest { + + private static WebDriver driver; + private static TestBed testBed; + private static String pulseURL; + private static String path; + private static org.eclipse.jetty.server.Server jetty = null; + + private static final String userName = "admin"; + private static final String pasword = "admin"; + + private static final String DATA_VIEW_LABEL = "Data View"; + private static final String CLUSTER_VIEW_MEMBERS_ID = "clusterTotalMembersText"; + private static final String CLUSTER_VIEW_SERVERS_ID = "clusterServersText"; + private static final String CLUSTER_VIEW_LOCATORS_ID = "clusterLocatorsText"; + private static final String CLUSTER_VIEW_REGIONS_ID = "clusterTotalRegionsText"; + + @BeforeClass + public static void setUpJetty() throws Exception { + String host = InetAddress.getLocalHost().getHostAddress(); + int port = 8080; + String context = "/pulse"; + path = getPulseWarPath(); + //System.setProperty("pulse.propMockDataUpdaterClass", "com.vmware.geode.tools.pulse.testbed.PropMockDataUpdater"); + + jetty = JettyHelper.initJetty(host, port, SSLConfigurationFactory.getSSLConfigForComponent(SecurableCommunicationChannel.WEB)); + JettyHelper.addWebApplication(jetty, context, getPulseWarPath()); + jetty.start(); + + pulseURL = "http://" + host + ":" + port + context; + Thread.sleep(1000); //wait till tomcat settles down + driver = new FirefoxDriver(); + driver.manage().window().maximize();//required to make all elements visible + + Thread.sleep(5000); //wait till pulse starts polling threads... + testBed = new TestBed(); + loginToPulse(driver, userName, pasword); + } + + @AfterClass + public static void stopJetty() throws Exception { + jetty.stop(); + } + + @After + public void closeSession() { + driver.close(); + } + + private static void loginToPulse(WebDriver driver, String userName,String password){ + driver.get(pulseURL); + WebElement userNameElement = driver.findElement(By.id("user_name")); + WebElement passwordElement = driver.findElement(By.id("user_password")); + userNameElement.sendKeys(userName); + passwordElement.sendKeys(password); + passwordElement.submit(); + WebElement userNameOnPulsePage = (new WebDriverWait(driver, 10)) + .until(new ExpectedCondition<WebElement>() { + @Override + public WebElement apply(WebDriver d) { + return d.findElement(By.id("userName")); + } + }); + assertNotNull(userNameOnPulsePage); + } + + + private void searchByLinkAndClick(String linkText){ + WebElement dataViewButton= By.linkText(linkText).findElement(driver); + assertNotNull(dataViewButton); + dataViewButton.click(); + } + + private void searchByIdAndClick(String id){ + WebElement element = driver.findElement(By.id(id)); + assertNotNull(element); + element.click(); + } + + private void searchByXPathAndClick(String xpath){ + WebElement element = driver.findElement(By.xpath(xpath)); + assertNotNull(element); + element.click(); + } + + private void waitForElementByClassName(final String className, int seconds){ + WebElement linkTextOnPulsePage1 = (new WebDriverWait(driver, seconds)) + .until(new ExpectedCondition<WebElement>() { + @Override + public WebElement apply(WebDriver d) { + return d.findElement(By.className(className)); + } + }); + assertNotNull(linkTextOnPulsePage1); + } + + private void waitForElementById(final String id, int seconds){ + WebElement element = (new WebDriverWait(driver, 10)) + .until(new ExpectedCondition<WebElement>() { + @Override + public WebElement apply(WebDriver d) { + return d.findElement(By.id(id)); + } + }); + assertNotNull(element); + } + + @Test + public void testClusterViewTopRibbon() { + List<Server> servers = testBed.getRootDs().getServers(); + List<Locator> locators = testBed.getRootDs().getLocators(); + List<Peer> peers = testBed.getRootDs().getPeers(); + List<Region> regions = testBed.getRootDs().getRegions(); + int totalMembers = servers.size() + locators.size() + peers.size(); + int clusterMembers = Integer.parseInt(driver.findElement( + By.id(CLUSTER_VIEW_MEMBERS_ID)).getText()); + int clusterServers = Integer.parseInt(driver.findElement( + By.id(CLUSTER_VIEW_SERVERS_ID)).getText()); + int clusterLocators = Integer.parseInt(driver.findElement( + By.id(CLUSTER_VIEW_LOCATORS_ID)).getText()); + int clusterRegions = Integer.parseInt(driver.findElement( + By.id(CLUSTER_VIEW_REGIONS_ID)).getText()); + assertEquals(totalMembers, clusterMembers); + assertEquals(servers.size(), clusterServers); + assertEquals(locators.size(), clusterLocators); + assertEquals(regions.size(), clusterRegions); + } + + + @Test + public void testDataViewRegionProperties() { + searchByLinkAndClick(DATA_VIEW_LABEL); + waitForElementByClassName("pointDetailsPadding",10); + searchByIdAndClick("btngridIcon"); + + for(int i=1;i<testBed.getRootDs().getRegions().size();i++){ + searchByIdAndClick(""+i); + String regionName1 = driver.findElement(By.id("regionName")).getText(); + @SuppressWarnings("rawtypes") + List regionMemberscount1 = testBed.getRootDs().getRegion(regionName1) + .getMembers(); + int regionEntCount1 = testBed.getRootDs().getRegion(regionName1) + .getEntryCount(); + int regionMembers1 = Integer.parseInt(driver.findElement( + By.id("regionMembers")).getText()); + int regionEntryCount1 = Integer.parseInt(driver.findElement( + By.id("regionEntryCount")).getText()); + assertEquals(regionMemberscount1.size(), regionMembers1); + assertEquals(regionEntCount1, regionEntryCount1); + } + } + + + @Test + public void testMemberViewRegions() { + + searchByLinkAndClick(DATA_VIEW_LABEL); + waitForElementByClassName("pointDetailsPadding",10); + searchByXPathAndClick("//div[@title='peer1']"); + waitForElementById("memberRegionsCount",10); + + List<Server> servers = testBed.getRootDs().getServers(); + List<Locator> locators = testBed.getRootDs().getLocators(); + List<Peer> peers = testBed.getRootDs().getPeers(); + + String prevSelectedMember = "peer1"; + + for (Peer p : peers) { + String peer = p.getName(); + System.out.println("Checking regions mapping for member " + peer); + WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember)); + comboBox.click(); + WebElement comboList = driver.findElement(By.id("clusterMembersContainer")); + WebElement selectedMember = comboList.findElement(By.linkText(peer)); + selectedMember.click(); + timeout(); + String peername = driver.findElement(By.id("memberName")).getText(); + List<Region> peerRegionscount = testBed.getRootDs().getRegions(peer); + int peerRegions = Integer.parseInt(driver.findElement( + By.id("memberRegionsCount")).getText()); + assertEquals(peerRegionscount.size(), peerRegions); + prevSelectedMember = peername; + } + + for (Server s : servers) { + String server = s.getName(); + System.out.println("Checking regions mapping for server " + server); + WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember)); + comboBox.click(); + WebElement comboList = driver.findElement(By.id("clusterMembersContainer")); + WebElement selectedMember = comboList.findElement(By.linkText(server)); + selectedMember.click(); + timeout(); + String peername = driver.findElement(By.id("memberName")).getText(); + List<Region> serverRegionscount = testBed.getRootDs().getRegions(server); + int serverRegions = Integer.parseInt(driver.findElement( + By.id("memberRegionsCount")).getText()); + assertEquals(serverRegionscount.size(), serverRegions); + prevSelectedMember = peername; + } + /* + for (Locator l : locators) { + String locator = l.getName(); + System.out.println("Checking regions mapping for locator " + locator); + WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember)); + comboBox.click(); + WebElement comboList = driver.findElement(By.id("clusterMembersContainer")); + WebElement selectedMember = comboList.findElement(By.linkText(locator)); + selectedMember.click(); + timeout(); + String peername = driver.findElement(By.id("memberName")).getText(); + List<Region> locatorRegionscount = testBed.getRootDs().getRegions(locator); + int locatorRegions = Integer.parseInt(driver.findElement( + By.id("memberRegionsCount")).getText()); + assertIndexDetailsEquals(locatorRegionscount.size(), locatorRegions); + prevSelectedMember = peername; + }*/ + } + + public void timeout() { + WebElement memberNameOnPulsePage = (new WebDriverWait(driver, 10)) + .until(new ExpectedCondition<WebElement>() { + @Override + public WebElement apply(WebDriver d) { + return d.findElement(By.id("memberName")); + } + }); + assertNotNull(memberNameOnPulsePage); + } +}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatement.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatement.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatement.java new file mode 100644 index 0000000..ebd310d --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatement.java @@ -0,0 +1,217 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +public class AggregateStatement extends JMXBaseBean implements AggregateStatementMBean { + private String name = null; + + public AggregateStatement(String name) { + this.name = name; + } + + protected String getKey(String propName) { + return "aggregatestatement." + name + "." + propName; + } + + /** + * Query definition + * + * @return + */ + public String getQueryDefinition(){ + return getString("queryDefinition"); + } + + /** + * Number of times this statement is compiled (including re compilations) + * + * @return + */ + @Override + public long getNumTimesCompiled(){ + return getLong("numTimesCompiled"); + } + + /** + * Number of times this statement is executed + * + * @return + */ + @Override + public long getNumExecution(){ + return getLong("numExecution"); + } + + /** + * Statements that are actively being processed during the statistics snapshot + * + * @return + */ + public long getNumExecutionsInProgress(){ + return getLong("numExecutionsInProgress"); + } + + /** + * Number of times global index lookup message exchanges occurred + * + * @return + */ + public long getNumTimesGlobalIndexLookup(){ + return getLong("numTimesGlobalIndexLookup"); + } + + /** + * Number of rows modified by DML operation of insert/delete/update + * + * @return + */ + public long getNumRowsModified(){ + return getLong("numRowsModified"); + } + + /** + * Time spent(in milliseconds) in parsing the query string + * + * @return + */ + public long getParseTime(){ + return getLong("parseTime"); + } + + /** + * Time spent (in milliseconds) mapping this statement with database object's metadata (bind) + * + * @return + */ + public long getBindTime(){ + return getLong("bindTime"); + } + + /** + * Time spent (in milliseconds) determining the best execution path for this statement + * (optimize) + * + * @return + */ + public long getOptimizeTime(){ + return getLong("optimizeTime"); + } + + /** + * Time spent (in milliseconds) compiling details about routing information of query strings to + * data node(s) (processQueryInfo) + * + * @return + */ + public long getRoutingInfoTime(){ + return getLong("routingInfoTime"); + } + + /** + * Time spent (in milliseconds) to generate query execution plan definition (activation class) + * + * @return + */ + public long getGenerateTime(){ + return getLong("generateTime"); + } + + /** + * Total compilation time (in milliseconds) of the statement on this node (prepMinion) + * + * @return + */ + public long getTotalCompilationTime(){ + return getLong("totalCompilationTime"); + } + + /** + * Time spent (in nanoseconds) in creation of all the layers of query processing (ac.execute) + * + * @return + */ + public long getExecutionTime(){ + return getLong("executionTime"); + } + + /** + * Time to apply (in nanoseconds) the projection and additional filters. (projectrestrict) + * + * @return + */ + public long getProjectionTime(){ + return getLong("projectionTime"); + } + + /** + * Total execution time (in nanoseconds) taken to process the statement on this node + * (execute/open/next/close) + * + * @return + */ + public long getTotalExecutionTime(){ + return getLong("totalExecutionTime"); + } + + /** + * Time taken (in nanoseconds) to modify rows by DML operation of insert/delete/update + * + * @return + */ + public long getRowsModificationTime(){ + return getLong("rowsModificationTime"); + } + + /** + * Number of rows returned from remote nodes (ResultHolder/Get convertibles) + * + * @return + */ + public long getQNNumRowsSeen(){ + return getLong("qnNumRowsSeen"); + } + + /** + * TCP send time (in nanoseconds) of all the messages including serialization time and queue + * wait time + * + * @return + */ + public long getQNMsgSendTime(){ + return getLong("qnMsgSendTime"); + } + + /** + * Serialization time (in nanoseconds) for all the messages while sending to remote node(s) + * + * @return + */ + public long getQNMsgSerTime(){ + return getLong("qnMsgSerTime"); + } + + /** + * + * + * @return + */ + public long getQNRespDeSerTime(){ + return getLong("qnRespDeSerTime"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatementMBean.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatementMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatementMBean.java new file mode 100644 index 0000000..b58b53b --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatementMBean.java @@ -0,0 +1,168 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +public interface AggregateStatementMBean { + String OBJECT_NAME = "GemFireXD:service=Statement,type=Aggregate"; + + /** + * Query definition + * + * @return + */ + String getQueryDefinition(); + + /** + * Number of times this statement is compiled (including re compilations) + * + * @return + */ + long getNumTimesCompiled(); + + /** + * Number of times this statement is executed + * + * @return + */ + long getNumExecution(); + + /** + * Statements that are actively being processed during the statistics snapshot + * + * @return + */ + long getNumExecutionsInProgress(); + + /** + * Number of times global index lookup message exchanges occurred + * + * @return + */ + long getNumTimesGlobalIndexLookup(); + + /** + * Number of rows modified by DML operation of insert/delete/update + * + * @return + */ + long getNumRowsModified(); + + /** + * Time spent(in milliseconds) in parsing the query string + * + * @return + */ + long getParseTime(); + + /** + * Time spent (in milliseconds) mapping this statement with database object's metadata (bind) + * + * @return + */ + long getBindTime(); + + /** + * Time spent (in milliseconds) determining the best execution path for this statement + * (optimize) + * + * @return + */ + long getOptimizeTime(); + + /** + * Time spent (in milliseconds) compiling details about routing information of query strings to + * data node(s) (processQueryInfo) + * + * @return + */ + long getRoutingInfoTime(); + + /** + * Time spent (in milliseconds) to generate query execution plan definition (activation class) + * + * @return + */ + long getGenerateTime(); + + /** + * Total compilation time (in milliseconds) of the statement on this node (prepMinion) + * + * @return + */ + long getTotalCompilationTime(); + + /** + * Time spent (in nanoseconds) in creation of all the layers of query processing (ac.execute) + * + * @return + */ + long getExecutionTime(); + + /** + * Time to apply (in nanoseconds) the projection and additional filters. (projectrestrict) + * + * @return + */ + long getProjectionTime(); + + /** + * Total execution time (in nanoseconds) taken to process the statement on this node + * (execute/open/next/close) + * + * @return + */ + long getTotalExecutionTime(); + + /** + * Time taken (in nanoseconds) to modify rows by DML operation of insert/delete/update + * + * @return + */ + long getRowsModificationTime(); + + /** + * Number of rows returned from remote nodes (ResultHolder/Get convertibles) + * + * @return + */ + long getQNNumRowsSeen(); + + /** + * TCP send time (in nanoseconds) of all the messages including serialization time and queue + * wait time + * + * @return + */ + long getQNMsgSendTime(); + + /** + * Serialization time (in nanoseconds) for all the messages while sending to remote node(s) + * + * @return + */ + long getQNMsgSerTime(); + + /** + * + * + * @return + */ + long getQNRespDeSerTime(); + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/DataBrowserResultLoader.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/DataBrowserResultLoader.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/DataBrowserResultLoader.java new file mode 100644 index 0000000..09fbda3 --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/DataBrowserResultLoader.java @@ -0,0 +1,84 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; + +public class DataBrowserResultLoader { + private static DataBrowserResultLoader dbResultLoader = new DataBrowserResultLoader(); + + public static DataBrowserResultLoader getInstance() { + return dbResultLoader; + } + + public String load(String queryString) throws IOException { + + URL url = null; + InputStream inputStream = null; + BufferedReader streamReader = null; + String inputStr = null; + StringBuilder sampleQueryResultResponseStrBuilder = null; + + try { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + + if (queryString.equals(PulseAbstractTest.QUERY_TYPE_ONE)) { + url = classLoader.getResource("testQueryResultClusterSmall.txt"); + } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_TWO)) { + url = classLoader.getResource("testQueryResultSmall.txt"); + } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_THREE)) { + url = classLoader.getResource("testQueryResult.txt"); + } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_FOUR)) { + url = classLoader.getResource("testQueryResultWithStructSmall.txt"); + } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_FIVE)) { + url = classLoader.getResource("testQueryResultClusterWithStruct.txt"); + } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_SIX)) { + url = classLoader.getResource("testQueryResultHashMapSmall.txt"); + } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_SEVENE)) { + url = classLoader.getResource("testQueryResult1000.txt"); + } else { + url = classLoader.getResource("testQueryResult.txt"); + } + + File sampleQueryResultFile = new File(url.getPath()); + inputStream = new FileInputStream(sampleQueryResultFile); + streamReader = new BufferedReader(new InputStreamReader(inputStream, + "UTF-8")); + sampleQueryResultResponseStrBuilder = new StringBuilder(); + + while ((inputStr = streamReader.readLine()) != null) { + sampleQueryResultResponseStrBuilder.append(inputStr); + } + + // close stream reader + streamReader.close(); + + } catch (IOException ex) { + ex.printStackTrace(); + } + + return sampleQueryResultResponseStrBuilder.toString(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTable.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTable.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTable.java new file mode 100644 index 0000000..957d074 --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTable.java @@ -0,0 +1,46 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +import javax.management.NotificationBroadcasterSupport; + +public class GemFireXDAggregateTable extends NotificationBroadcasterSupport + implements GemFireXDAggregateTableMBean { + private String name = null; + + public GemFireXDAggregateTable(String name) { + this.name = name; + } + + private String getKey(String propName) { + return "table." + name + "." + propName; + } + + @Override + public long getEntrySize() { + return Long.parseLong(JMXProperties.getInstance().getProperty( + getKey("EntrySize"))); + } + + @Override + public int getNumberOfRows() { + return Integer.parseInt(JMXProperties.getInstance().getProperty( + getKey("NumberOfRows"))); + } +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTableMBean.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTableMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTableMBean.java new file mode 100644 index 0000000..db0f45d --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTableMBean.java @@ -0,0 +1,28 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +public interface GemFireXDAggregateTableMBean { + public static final String OBJECT_NAME = "GemFireXD:service=Table,type=Aggregate,table="; + + public long getEntrySize(); + + public int getNumberOfRows(); + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDCluster.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDCluster.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDCluster.java new file mode 100644 index 0000000..a2b1edc --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDCluster.java @@ -0,0 +1,95 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +import javax.management.NotificationBroadcasterSupport; +import javax.management.openmbean.CompositeData; +import javax.management.openmbean.CompositeDataSupport; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.OpenDataException; +import javax.management.openmbean.OpenType; +import javax.management.openmbean.SimpleType; + +public class GemFireXDCluster extends NotificationBroadcasterSupport implements + GemFireXDClusterMBean { + private String name = null; + + private static String[] itemNames = { "connectionsAttempted", + "connectionsActive", "connectionsClosed", "connectionsFailed" };; + private static String[] itemDescriptions = { "connectionsAttempted", + "connectionsActive", "connectionsClosed", "connectionsFailed" }; + private static OpenType[] itemTypes = { SimpleType.LONG, SimpleType.LONG, + SimpleType.LONG, SimpleType.LONG }; + private static CompositeType networkServerClientConnectionStats = null; + + static { + try { + networkServerClientConnectionStats = new CompositeType( + "NetworkServerClientConnectionStats", + "Network Server Client Connection Stats Information", itemNames, + itemDescriptions, itemTypes); + + } catch (OpenDataException e) { + e.printStackTrace(); + } + } + + public GemFireXDCluster(String name) { + this.name = name; + } + + private String getKey(String propName) { + return "gemfirexd." + name + "." + propName; + } + + @Override + public int getProcedureCallsCompleted() { + return Integer.parseInt(JMXProperties.getInstance().getProperty( + getKey("ProcedureCallsCompleted"))); + } + + @Override + public int getProcedureCallsInProgress() { + return Integer.parseInt(JMXProperties.getInstance().getProperty( + getKey("ProcedureCallsInProgress"))); + } + + @Override + public CompositeData getNetworkServerClientConnectionStats() { + String value = JMXProperties.getInstance().getProperty( + getKey("NetworkServerClientConnectionStats"), ""); + String[] values = value.split(","); + Long[] itemValues = new Long[values.length]; + for (int i = 0; i < values.length; i++) { + itemValues[i] = Long.parseLong(values[i]); + } + + CompositeData nscCompData; + try { + nscCompData = new CompositeDataSupport( + networkServerClientConnectionStats, itemNames, itemValues); + } catch (OpenDataException e) { + e.printStackTrace(); + nscCompData = null; + } + return nscCompData; + + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDClusterMBean.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDClusterMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDClusterMBean.java new file mode 100644 index 0000000..5a42d10 --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDClusterMBean.java @@ -0,0 +1,32 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +import javax.management.openmbean.CompositeData; + +public interface GemFireXDClusterMBean { + public static final String OBJECT_NAME = "GemFireXD:service=Cluster"; + + public int getProcedureCallsCompleted(); + + public int getProcedureCallsInProgress(); + + public CompositeData getNetworkServerClientConnectionStats(); + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMember.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMember.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMember.java new file mode 100644 index 0000000..16da77d --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMember.java @@ -0,0 +1,80 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +import javax.management.openmbean.CompositeData; +import javax.management.openmbean.CompositeDataSupport; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.OpenDataException; +import javax.management.openmbean.OpenType; +import javax.management.openmbean.SimpleType; + +public class GemFireXDMember extends JMXBaseBean implements + GemFireXDMemberMBean { + private String name = null; + + private static String[] itemNames = { "connectionsAttempted", + "connectionsActive", "connectionsClosed", "connectionsFailed" };; + private static String[] itemDescriptions = { "connectionsAttempted", + "connectionsActive", "connectionsClosed", "connectionsFailed" }; + private static OpenType[] itemTypes = { SimpleType.LONG, SimpleType.LONG, + SimpleType.LONG, SimpleType.LONG }; + private static CompositeType networkServerClientConnectionStats = null; + + static { + try { + networkServerClientConnectionStats = new CompositeType( + "NetworkServerClientConnectionStats", + "Network Server Client Connection Stats Information", itemNames, + itemDescriptions, itemTypes); + + } catch (OpenDataException e) { + e.printStackTrace(); + } + } + + public GemFireXDMember(String name) { + this.name = name; + } + + @Override + protected String getKey(String propName) { + return "gemfirexdmember." + name + "." + propName; + } + + @Override + public boolean getDataStore() { + return getBoolean("DataStore"); + } + + @Override + public CompositeData getNetworkServerClientConnectionStats() { + Long[] itemValues = getLongArray("NetworkServerClientConnectionStats"); + CompositeData nscCompData; + try { + nscCompData = new CompositeDataSupport( + networkServerClientConnectionStats, itemNames, itemValues); + } catch (OpenDataException e) { + e.printStackTrace(); + nscCompData = null; + } + return nscCompData; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMemberMBean.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMemberMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMemberMBean.java new file mode 100644 index 0000000..ceda56d --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMemberMBean.java @@ -0,0 +1,31 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +import javax.management.openmbean.CompositeData; + +public interface GemFireXDMemberMBean { + + public static final String OBJECT_NAME = "GemFireXD:group=DEFAULT,type=Member"; + + public boolean getDataStore(); + + public CompositeData getNetworkServerClientConnectionStats(); + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXBaseBean.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXBaseBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXBaseBean.java new file mode 100644 index 0000000..2d1ffad --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXBaseBean.java @@ -0,0 +1,67 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +public abstract class JMXBaseBean { + + protected abstract String getKey(String propName); + + protected String getString(String key) { + return JMXProperties.getInstance().getProperty(getKey(key)); + } + + protected String[] getStringArray(String key) { + return JMXProperties.getInstance().getProperty(getKey(key), "").split(" "); + } + + protected boolean getBoolean(String key) { + return Boolean.parseBoolean(JMXProperties.getInstance().getProperty( + getKey(key))); + } + + protected int getInt(String key) { + return Integer.parseInt(JMXProperties.getInstance() + .getProperty(getKey(key))); + } + + protected long getLong(String key) { + return Long.parseLong(JMXProperties.getInstance().getProperty(getKey(key))); + } + + protected Long[] getLongArray(String key) { + String value = JMXProperties.getInstance().getProperty(getKey(key), ""); + String[] values = value.split(","); + Long[] longValues = new Long[values.length]; + for (int i = 0; i < values.length; i++) { + longValues[i] = Long.parseLong(values[i]); + } + return longValues; + } + + protected double getDouble(String key) { + return Double.parseDouble(JMXProperties.getInstance().getProperty( + getKey(key))); + } + + protected float getFloat(String key) { + return Float.parseFloat(JMXProperties.getInstance() + .getProperty(getKey(key))); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXProperties.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXProperties.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXProperties.java new file mode 100644 index 0000000..1562594 --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXProperties.java @@ -0,0 +1,47 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Properties; + +public class JMXProperties extends Properties { + private static final long serialVersionUID = -6210901350494570026L; + + private static JMXProperties props = new JMXProperties(); + + public static JMXProperties getInstance() { + return props; + } + + public void load(String propFile) throws IOException { + if (propFile != null) { + FileInputStream fin; + fin = new FileInputStream(new File(propFile)); + if (fin != null) { + clear(); + load(fin); + } + + fin.close(); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/Member.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/Member.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/Member.java new file mode 100644 index 0000000..1192297 --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/Member.java @@ -0,0 +1,193 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +public class Member extends JMXBaseBean implements MemberMBean { + private String name = null; + + public Member(String name) { + this.name = name; + } + + protected String getKey(String propName) { + return "member." + name + "." + propName; + } + + @Override + public boolean getManager() { + return getBoolean("manager"); + } + + @Override + public int getTotalRegionCount() { +// This count is built dynamically in Pulse backend and region count is maintained in Cluster.Member data structure +// return getInt("totalRegionCount"); + return 0; + } + + @Override + public boolean getLocator() { + return getBoolean("locator"); + } + + @Override + public long getTotalDiskUsage() { + return getLong("totalDiskUsage"); + } + + @Override + public boolean getServer() { + return getBoolean("sever"); + } + + @Override + public String[] getGroups() { + return getStringArray("Groups"); + } + + @Override + /*public String[] getRedundancyZone() { + return getStringArray("RedundancyZone"); + }*/ + public String getRedundancyZone() { + return getString("RedundancyZone"); + } + + @Override + public long getTotalFileDescriptorOpen() { + return getLong("totalFileDescriptorOpen"); + } + + @Override + public double getLoadAverage() { + return getDouble("loadAverage"); + } + + @Override + public double getDiskWritesRate() { + return getDouble("diskWritesRate"); + } + + @Override + public long getJVMPauses() { + return getLong("JVMPauses"); + } + + @Override + public long getCurrentHeapSize() { +// return getLong("currentHeapSize"); + return getLong("UsedMemory"); + } + + @Override + public long getMaximumHeapSize() { +// return getLong("maximumHeapSize"); + return getLong("MaxMemory"); + } + + @Override + public long getUsedMemory() { + return getLong("UsedMemory"); + } + + @Override + public long getMaxMemory() { + return getLong("MaxMemory"); + } + + @Override + public int getNumThreads() { + return getInt("numThreads"); + } + + @Override + public long getMemberUpTime() { + return getLong("memberUpTime"); + } + + @Override + public String getHost() { + return getString("host"); + } + + @Override + public long getTotalBytesOnDisk() { + return getLong("totalBytesOnDisk"); + } + + @Override + public double getCpuUsage() { + return getDouble("cpuUsage"); + } + + @Override + public String getMember() { + return getString("member"); + } + + @Override + public String getId() { + return getString("id"); + } + + @Override + public double getAverageReads() { + return getDouble("averageReads"); + } + + @Override + public double getAverageWrites() { + return getDouble("averageWrites"); + } + + @Override + public int getPort() { + return getInt("port"); + } + + @Override + public long getFoo() { + return getLong("foo"); + } + + @Override + public long getOffHeapFreeSize() { + return getLong("OffHeapFreeSize"); + } + + @Override + public long getOffHeapUsedSize() { + return getLong("OffHeapUsedSize"); + } + + @Override + public long getOffHeapFreeMemory() { + return getLong("OffHeapFreeMemory"); + } + + @Override + public long getOffHeapUsedMemory() { + return getLong("OffHeapUsedMemory"); + } + + @Override + public String getVersion() { + return getString("Version"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/MemberMBean.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/MemberMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/MemberMBean.java new file mode 100644 index 0000000..6051270 --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/MemberMBean.java @@ -0,0 +1,86 @@ +/* + * + * 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 com.vmware.geode.tools.pulse.tests; + +public interface MemberMBean { + String OBJECT_NAME = "GemFire:type=Member"; + + boolean getManager(); + + int getTotalRegionCount(); + + boolean getLocator(); + + long getTotalDiskUsage(); + + boolean getServer(); + + String[] getGroups(); + + //public String[] getRedundancyZone(); + String getRedundancyZone(); + + long getTotalFileDescriptorOpen(); + + double getLoadAverage(); + + double getDiskWritesRate(); + + long getJVMPauses(); + + long getCurrentHeapSize(); + + long getMaximumHeapSize(); + + long getUsedMemory(); + + long getMaxMemory(); + + int getNumThreads(); + + long getMemberUpTime(); + + String getHost(); + + long getTotalBytesOnDisk(); + + double getCpuUsage(); + + String getMember(); + + String getId(); + + double getAverageReads(); + + double getAverageWrites(); + + int getPort(); + + long getFoo(); + + long getOffHeapFreeSize(); + + long getOffHeapUsedSize(); + + long getOffHeapFreeMemory(); + + long getOffHeapUsedMemory(); + + String getVersion(); +}
