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);
+}