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/branch-feature-AMBARI-12556 Commit: 71ed28140cd5d91fedb4e1403a8fa9aa3482ccf0 Parents: 3499004 Author: Sriharsha Chintalapani <[email protected]> Authored: Thu May 18 14:04:38 2017 -0700 Committer: Sriharsha Chintalapani <[email protected]> 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; + }); }, - }); + }); });
