You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sr...@apache.org on 2017/05/18 21:05:53 UTC

ambari git commit: AMBARI-21055: Search from Storm Ambari View Broken. (Sanket Shah via Sriharsha Chintalapani)

Repository: ambari
Updated Branches:
  refs/heads/trunk 3499004cc -> 71ed28140


AMBARI-21055: Search from Storm Ambari View Broken. (Sanket Shah via
Sriharsha Chintalapani)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/71ed2814
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/71ed2814
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/71ed2814

Branch: refs/heads/trunk
Commit: 71ed28140cd5d91fedb4e1403a8fa9aa3482ccf0
Parents: 3499004
Author: Sriharsha Chintalapani <ha...@hortonworks.com>
Authored: Thu May 18 14:04:38 2017 -0700
Committer: Sriharsha Chintalapani <ha...@hortonworks.com>
Committed: Thu May 18 14:04:38 2017 -0700

----------------------------------------------------------------------
 .../ambari/storm/StormDetailsServlet.java       | 81 ++++++++++++++++++++
 .../storm/src/main/resources/WEB-INF/web.xml    |  8 ++
 .../resources/scripts/components/SearchLogs.jsx | 38 +++++----
 3 files changed, 110 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/71ed2814/contrib/views/storm/src/main/java/org/apache/ambari/storm/StormDetailsServlet.java
----------------------------------------------------------------------
diff --git a/contrib/views/storm/src/main/java/org/apache/ambari/storm/StormDetailsServlet.java b/contrib/views/storm/src/main/java/org/apache/ambari/storm/StormDetailsServlet.java
new file mode 100644
index 0000000..42c3277
--- /dev/null
+++ b/contrib/views/storm/src/main/java/org/apache/ambari/storm/StormDetailsServlet.java
@@ -0,0 +1,81 @@
+/**
+ * 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.ambari.view.storm;
+
+import org.apache.ambari.view.ViewContext;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.io.*;
+
+/**
+ * Simple servlet for proxying requests with doAs impersonation.
+ */
+public class StormDetailsServlet extends HttpServlet {
+
+  private ViewContext viewContext;
+  private static final String STORM_HOST = "storm.host";
+  private static final String STORM_PORT = "storm.port";
+  private static final String STORM_SSL_ENABLED = "storm.sslEnabled";
+  private String stormURL;
+
+  @Override
+  public void init(ServletConfig config) throws ServletException {
+    super.init(config);
+
+    ServletContext context = config.getServletContext();
+    viewContext = (ViewContext) context.getAttribute(ViewContext.CONTEXT_ATTRIBUTE);
+    String sslEnabled = viewContext.getProperties().get(STORM_SSL_ENABLED);
+    String hostname = viewContext.getProperties().get(STORM_HOST);
+    String port = viewContext.getProperties().get(STORM_PORT);
+    stormURL = (sslEnabled.equals("true") ? "https" : "http") + "://" + hostname + ":" + port;
+  }
+
+  @Override
+  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+    String hostDetails = "{\"hostdata\":\""+stormURL+"\"}";
+    InputStream resultStream = new ByteArrayInputStream(hostDetails.getBytes(StandardCharsets.UTF_8));
+    this.setResponse(request, response, resultStream);
+  }
+
+  /**
+   * Set response to the get/post request
+   * @param request      HttpServletRequest
+   * @param response     HttpServletResponse
+   * @param resultStream InputStream
+   */
+  public void setResponse(HttpServletRequest request, HttpServletResponse response, InputStream resultStream) throws IOException{
+    Scanner scanner = new Scanner(resultStream).useDelimiter("\\A");
+    String result = scanner.hasNext() ? scanner.next() : "";
+    Boolean notFound = result == "" || result.indexOf("\"exception\":\"NotFoundException\"") != -1;
+    response.setContentType(request.getContentType());
+    response.setStatus(notFound ? HttpServletResponse.SC_NOT_FOUND : HttpServletResponse.SC_OK);
+    PrintWriter writer = response.getWriter();
+    writer.print(result);
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/71ed2814/contrib/views/storm/src/main/resources/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/contrib/views/storm/src/main/resources/WEB-INF/web.xml b/contrib/views/storm/src/main/resources/WEB-INF/web.xml
index e406de1..cc89ac7 100644
--- a/contrib/views/storm/src/main/resources/WEB-INF/web.xml
+++ b/contrib/views/storm/src/main/resources/WEB-INF/web.xml
@@ -30,8 +30,16 @@ limitations under the License. Kerberos, LDAP, Custom. Binary/Htt
     <servlet-name>ProxyServlet</servlet-name>
     <servlet-class>org.apache.ambari.view.storm.ProxyServlet</servlet-class>
   </servlet>
+  <servlet>
+    <servlet-name>StormDetailsServlet</servlet-name>
+    <servlet-class>org.apache.ambari.view.storm.StormDetailsServlet</servlet-class>
+  </servlet>
   <servlet-mapping>
     <servlet-name>ProxyServlet</servlet-name>
     <url-pattern>/proxy</url-pattern>
   </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>StormDetailsServlet</servlet-name>
+    <url-pattern>/storm_details</url-pattern>
+  </servlet-mapping>
 </web-app>

http://git-wip-us.apache.org/repos/asf/ambari/blob/71ed2814/contrib/views/storm/src/main/resources/scripts/components/SearchLogs.jsx
----------------------------------------------------------------------
diff --git a/contrib/views/storm/src/main/resources/scripts/components/SearchLogs.jsx b/contrib/views/storm/src/main/resources/scripts/components/SearchLogs.jsx
index b37170c..1581a16 100644
--- a/contrib/views/storm/src/main/resources/scripts/components/SearchLogs.jsx
+++ b/contrib/views/storm/src/main/resources/scripts/components/SearchLogs.jsx
@@ -25,7 +25,7 @@ define(['react',
 		getInitialState: function() {
 			return null;
 		},
-		render: function() {			
+		render: function() {
 			return (
 				<div className="col-md-3 pull-right searchbar">
                     <div className="input-group">
@@ -60,26 +60,30 @@ define(['react',
             var searchBoxEl = document.getElementById('searchBox');
             var searchArchivedLogsEl = document.getElementById('searchArchivedLogs');
             var deepSearchEl = document.getElementById('deepSearch');
+            var topologyId = this.props.id;
 
-            var url = App.baseURL.split('?url=')[1]+'/';
-            if(deepSearchEl.checked == true){
-                url += "deep_search_result.html";
-            }else{
-                url += "search_result.html";
-            }
-            url += '?search='+searchBoxEl.value+'&id='+ this.props.id +'&count=1';
-            if(searchArchivedLogsEl.checked == true){
+            $.get(App.baseURL.replace('proxy?url=', 'storm_details'))
+              .success(function(response){
+                var url = JSON.parse(response).hostdata+'/';
                 if(deepSearchEl.checked == true){
-                    url += "&search-archived=on";
+                    url += "deep_search_result.html";
                 }else{
-                    url += "&searchArchived=checked";
+                    url += "search_result.html";
                 }
-            }
-            window.open(url, '_blank');
+                url += '?search='+searchBoxEl.value+'&id='+ topologyId +'&count=1';
+                if(searchArchivedLogsEl.checked == true){
+                    if(deepSearchEl.checked == true){
+                        url += "&search-archived=on";
+                    }else{
+                        url += "&searchArchived=checked";
+                    }
+                }
+                window.open(url, '_blank');
 
-            searchBoxEl.value = '';
-            searchArchivedLogsEl.checked = false;
-            deepSearchEl.checked = false;
+                searchBoxEl.value = '';
+                searchArchivedLogsEl.checked = false;
+                deepSearchEl.checked = false;
+              });
         },
-    }); 
+    });
 });