You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by hi...@apache.org on 2016/09/09 21:44:06 UTC
[69/83] [abbrv] incubator-geode git commit: GEODE-37 renamed pulse
package
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/eff7f216/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/DataBrowser.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/DataBrowser.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/DataBrowser.java
new file mode 100644
index 0000000..de4ea1f
--- /dev/null
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/DataBrowser.java
@@ -0,0 +1,248 @@
+/*
+ *
+ * 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.internal.data;
+
+import com.fasterxml.jackson.databind.JsonNode;
+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.log.PulseLogWriter;
+import org.apache.geode.tools.pulse.internal.util.StringUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.Iterator;
+import java.util.ResourceBundle;
+import java.util.Scanner;
+
+/**
+ * Class DataBrowser This class contains Data browser functionalities for
+ * managing queries and histories.
+ *
+ * @since GemFire version 7.5.Beta 2013-03-25
+ */
+public class DataBrowser {
+
+ private final PulseLogWriter LOGGER = PulseLogWriter.getLogger();
+ private final ResourceBundle resourceBundle = Repository.get()
+ .getResourceBundle();
+
+ private SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
+ PulseConstants.PULSE_QUERY_HISTORY_DATE_PATTERN);
+
+ private final ObjectMapper mapper = new ObjectMapper();
+
+ /**
+ * addQueryInHistory method adds user's query into query history file
+ *
+ * @param userId
+ * Logged in User's Id
+ * @param queryText
+ * Query text to execute
+ */
+ public boolean addQueryInHistory(String queryText, String userId) {
+ boolean operationStatus = false;
+ if (StringUtils.isNotNullNotEmptyNotWhiteSpace(queryText)
+ && StringUtils.isNotNullNotEmptyNotWhiteSpace(userId)) {
+
+ // Fetch all queries from query log file
+ ObjectNode queries = fetchAllQueriesFromFile();
+
+ // Get user's query history list
+ ObjectNode userQueries = (ObjectNode) queries.get(userId);
+ if (userQueries == null) {
+ userQueries = mapper.createObjectNode();
+ }
+
+ // Add query in user's query history list
+ userQueries.put(Long.toString(System.currentTimeMillis()), queryText);
+ queries.put(userId, userQueries);
+
+ // Store queries in file back
+ operationStatus = storeQueriesInFile(queries);
+ }
+
+ return operationStatus;
+ }
+
+ /**
+ * deleteQueryById method deletes query from query history file
+ *
+ * @param userId
+ * Logged in user's Unique Id
+ * @param queryId
+ * Unique Id of Query to be deleted
+ * @return boolean
+ */
+ public boolean deleteQueryById(String userId, String queryId) {
+
+ boolean operationStatus = false;
+ if (StringUtils.isNotNullNotEmptyNotWhiteSpace(queryId)
+ && StringUtils.isNotNullNotEmptyNotWhiteSpace(userId)) {
+
+ // Fetch all queries from query log file
+ ObjectNode queries = fetchAllQueriesFromFile();
+
+ // Get user's query history list
+ ObjectNode userQueries = (ObjectNode) queries.get(userId);
+
+ if (userQueries != null) {
+ // Remove user's query
+ userQueries.remove(queryId);
+ queries.put(userId, userQueries);
+
+ // Store queries in file back
+ operationStatus = storeQueriesInFile(queries);
+ }
+ }
+
+ return operationStatus;
+ }
+
+ /**
+ * getQueryHistoryByUserId method reads and lists out the queries from history
+ * file
+ *
+ * @param userId
+ * Logged in User's Id
+ */
+ public ArrayNode getQueryHistoryByUserId(String userId) {
+
+ ArrayNode queryList = mapper.createArrayNode();
+
+ if (StringUtils.isNotNullNotEmptyNotWhiteSpace(userId)) {
+
+ // Fetch all queries from query log file
+ ObjectNode queries = fetchAllQueriesFromFile();
+
+ // Get user's query history list
+ ObjectNode userQueries = (ObjectNode) queries.get(userId);
+
+ if (userQueries != null) {
+ Iterator<String> it = userQueries.fieldNames();
+ while (it.hasNext()) {
+ String key = it.next();
+ ObjectNode queryItem = mapper.createObjectNode();
+ queryItem.put("queryId", key);
+ queryItem.put("queryText", userQueries.get(key).toString());
+ queryItem.put("queryDateTime", simpleDateFormat.format(Long.valueOf(key)));
+ queryList.add(queryItem);
+ }
+ }
+ }
+
+ return queryList;
+ }
+
+ /**
+ * generateQueryKey method fetches queries from query history file
+ *
+ * @return Properties A collection queries in form of key and values
+ */
+ private ObjectNode fetchAllQueriesFromFile() {
+ InputStream inputStream = null;
+ JsonNode queriesJSON = mapper.createObjectNode();
+
+ try {
+ inputStream = new FileInputStream(Repository.get().getPulseConfig().getQueryHistoryFileName());
+ String inputStreamString = new Scanner(inputStream, "UTF-8").useDelimiter("\\A").next();
+ queriesJSON = mapper.readTree(inputStreamString);
+ } catch (FileNotFoundException e) {
+ if (LOGGER.fineEnabled()) {
+ LOGGER.fine(resourceBundle
+ .getString("LOG_MSG_DATA_BROWSER_QUERY_HISTORY_FILE_NOT_FOUND")
+ + " : " + e.getMessage());
+ }
+ } catch (Exception e) {
+ if (LOGGER.infoEnabled()) {
+ LOGGER.info(e.getMessage());
+ }
+ } finally {
+ // Close input stream
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ if (LOGGER.infoEnabled()) {
+ LOGGER.info(e.getMessage());
+ }
+ }
+ }
+ }
+
+ return (ObjectNode) queriesJSON;
+ }
+
+ /**
+ * generateQueryKey method stores queries in query history file.
+ *
+ * @return Boolean true is operation is successful, false otherwise
+ */
+ private boolean storeQueriesInFile(ObjectNode queries) {
+ boolean operationStatus = false;
+ FileOutputStream fileOut = null;
+
+ File file = new File(Repository.get().getPulseConfig().getQueryHistoryFileName());
+ try {
+ fileOut = new FileOutputStream(file);
+
+ // if file does not exists, then create it
+ if (!file.exists()) {
+ file.createNewFile();
+ }
+
+ // get the content in bytes
+ byte[] contentInBytes = queries.toString().getBytes();
+
+ fileOut.write(contentInBytes);
+ fileOut.flush();
+
+ operationStatus = true;
+ } catch (FileNotFoundException e) {
+
+ if (LOGGER.fineEnabled()) {
+ LOGGER.fine(resourceBundle
+ .getString("LOG_MSG_DATA_BROWSER_QUERY_HISTORY_FILE_NOT_FOUND")
+ + " : " + e.getMessage());
+ }
+ } catch (IOException e) {
+ if (LOGGER.infoEnabled()) {
+ LOGGER.info(e.getMessage());
+ }
+ } finally {
+ if (fileOut != null) {
+ try {
+ fileOut.close();
+ } catch (IOException e) {
+ if (LOGGER.infoEnabled()) {
+ LOGGER.info(e.getMessage());
+ }
+ }
+ }
+ }
+ return operationStatus;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/eff7f216/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
new file mode 100644
index 0000000..4ddfc1a
--- /dev/null
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
@@ -0,0 +1,35 @@
+/*
+ *
+ * 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.internal.data;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Interface having updateData() function which is getting Override by both
+ * MockDataUpdater and JMXDataUpdater
+ *
+ * @since GemFire version 7.0.Beta 2012-09-23
+ *
+ */
+public interface IClusterUpdater {
+ boolean updateData();
+
+ ObjectNode executeQuery(String queryText, String members, int limit);
+}