STORM-1280 port backtype.storm.daemon.logviewer to java * fix a bug: parameter swapped * move 'file' param for '/search' from path to query param * also applied to static html files * select current file in file list dropdown in log page
Project: http://git-wip-us.apache.org/repos/asf/storm/repo Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/35ca265a Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/35ca265a Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/35ca265a Branch: refs/heads/master Commit: 35ca265af963dc21b356e1a305fea897c58a59fa Parents: 37f9c59 Author: Jungtaek Lim <[email protected]> Authored: Mon Jul 24 11:44:28 2017 +0900 Committer: Jungtaek Lim <[email protected]> Committed: Mon Jul 24 11:44:28 2017 +0900 ---------------------------------------------------------------------- storm-core/src/ui/public/logviewer_search.html | 2 +- storm-core/src/ui/public/search_result.html | 2 +- .../org/apache/storm/utils/ServerConfigUtils.java | 3 ++- .../logviewer/handler/LogviewerLogPageHandler.java | 17 ++++++++++------- .../handler/LogviewerLogSearchHandler.java | 2 +- .../daemon/logviewer/webapp/LogviewerResource.java | 5 +++-- 6 files changed, 18 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/storm/blob/35ca265a/storm-core/src/ui/public/logviewer_search.html ---------------------------------------------------------------------- diff --git a/storm-core/src/ui/public/logviewer_search.html b/storm-core/src/ui/public/logviewer_search.html index 89a7854..96ecd8c 100644 --- a/storm-core/src/ui/public/logviewer_search.html +++ b/storm-core/src/ui/public/logviewer_search.html @@ -55,7 +55,7 @@ $(document).ready(function() { $("#search-form").append(Mustache.render($(template).filter("#search-single-file").html(),{file: file, search: search, isDaemon: isDaemon})); var result = $("#result"); - var url = "/api/v1/search/"+encodeURIComponent(file)+"?search-string="+search+"&start-byte-offset="+offset+"&is-daemon="+isDaemon; + var url = "/api/v1/search?file="+encodeURIComponent(file)+"&search-string="+search+"&start-byte-offset="+offset+"&is-daemon="+isDaemon; $.getJSON(url,function(response,status,jqXHR) { response.file = file; result.append(Mustache.render($(template).filter("#logviewer-search-result-template").html(),response)); http://git-wip-us.apache.org/repos/asf/storm/blob/35ca265a/storm-core/src/ui/public/search_result.html ---------------------------------------------------------------------- diff --git a/storm-core/src/ui/public/search_result.html b/storm-core/src/ui/public/search_result.html index 216a700..d6ebb44 100644 --- a/storm-core/src/ui/public/search_result.html +++ b/storm-core/src/ui/public/search_result.html @@ -68,7 +68,7 @@ $(document).ready(function() { var port = response.hostPortList[index].port; var elemId = response.hostPortList[index].elemId; var file = id+"/"+port+"/worker.log"; - var searchURL = "http://"+host+":"+logviewerPort+"/api/v1/search/"+encodeURIComponent(file)+"?search-string="+search+"&num-matches="+count; + var searchURL = "http://"+host+":"+logviewerPort+"/api/v1/search?file="+encodeURIComponent(file)+"&search-string="+search+"&num-matches="+count; if (searchArchived != "") { searchURL = "http://"+host+":"+logviewerPort+"/api/v1/deepSearch/"+id+"?search-string="+search+"&num-matches="+count+"&search-archived=true&port="+port; } http://git-wip-us.apache.org/repos/asf/storm/blob/35ca265a/storm-server/src/main/java/org/apache/storm/utils/ServerConfigUtils.java ---------------------------------------------------------------------- diff --git a/storm-server/src/main/java/org/apache/storm/utils/ServerConfigUtils.java b/storm-server/src/main/java/org/apache/storm/utils/ServerConfigUtils.java index cd63395..426e190 100644 --- a/storm-server/src/main/java/org/apache/storm/utils/ServerConfigUtils.java +++ b/storm-server/src/main/java/org/apache/storm/utils/ServerConfigUtils.java @@ -30,6 +30,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.regex.Pattern; public class ServerConfigUtils { public static final String FILE_SEPARATOR = File.separator; @@ -161,7 +162,7 @@ public class ServerConfigUtils { } public static File getLogMetaDataFile(String fname) { - String[] subStrings = fname.split(FILE_SEPARATOR); // TODO: does this work well on windows? + String[] subStrings = fname.split(Pattern.quote(FILE_SEPARATOR)); // TODO: does this work well on windows? String id = subStrings[0]; Integer port = Integer.parseInt(subStrings[1]); return getLogMetaDataFile(Utils.readStormConfig(), id, port); http://git-wip-us.apache.org/repos/asf/storm/blob/35ca265a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandler.java ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandler.java b/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandler.java index 47fa4b3..c6e9828 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandler.java +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandler.java @@ -27,6 +27,7 @@ import static j2html.TagCreator.head; import static j2html.TagCreator.html; import static j2html.TagCreator.input; import static j2html.TagCreator.link; +import static j2html.TagCreator.option; import static j2html.TagCreator.p; import static j2html.TagCreator.pre; import static j2html.TagCreator.select; @@ -226,7 +227,7 @@ public class LogviewerLogPageHandler { bodyContents.add(searchFileForm(fileName, "no")); // list all files for this topology - bodyContents.add(logFileSelectionForm(reorderedFilesStr, "log")); + bodyContents.add(logFileSelectionForm(reorderedFilesStr, fileName, "log")); if (pagerData != null) { bodyContents.add(pagerData); } @@ -306,7 +307,7 @@ public class LogviewerLogPageHandler { bodyContents.add(searchFileForm(fileName, "yes")); // list all daemon logs - bodyContents.add(logFileSelectionForm(reorderedFilesStr, "daemonlog")); + bodyContents.add(logFileSelectionForm(reorderedFilesStr, fileName, "daemonlog")); if (pagerData != null) { bodyContents.add(pagerData); } @@ -360,16 +361,18 @@ public class LogviewerLogPageHandler { return a(content).withHref(url); } - private DomContent logFileSelectionForm(List<String> logFiles, String type) { + private DomContent logFileSelectionForm(List<String> logFiles, String selectedFile, String type) { return form( - dropDown("file", logFiles), + dropDown("file", logFiles, selectedFile), input().withType("submit").withValue("Switch file") ).withAction(type).withId("list-of-files"); } - private DomContent dropDown(String name, List<String> logFiles) { - List<DomContent> options = logFiles.stream().map(TagCreator::option).collect(toList()); - return select(options.toArray(new DomContent[]{})).withName(name).withId(name); + private DomContent dropDown(String name, List<String> logFiles, String selectedFile) { + List<DomContent> options = logFiles.stream() + .map(file -> option(file).condAttr(file.equals(selectedFile), "selected", "selected")) + .collect(toList()); + return select(options.toArray(new DomContent[]{})).withName(name).withId(name).withValue(selectedFile); } private DomContent searchFileForm(String fileName, String isDaemonValue) { http://git-wip-us.apache.org/repos/asf/storm/blob/35ca265a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandler.java ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandler.java b/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandler.java index 76f1683..117cb86 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandler.java +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandler.java @@ -119,7 +119,7 @@ public class LogviewerLogSearchHandler { File file = new File(rootDir, fileName).getCanonicalFile(); Response response; if (file.exists()) { - if (isDaemon || resourceAuthorizer.isUserAllowedToAccessFile(user, fileName)) { + if (isDaemon || resourceAuthorizer.isUserAllowedToAccessFile(fileName, user)) { Integer numMatchesInt = numMatchesStr != null ? tryParseIntParam("num-matches", numMatchesStr) : null; Integer offsetInt = offsetStr != null ? tryParseIntParam("start-byte-offset", offsetStr) : null; http://git-wip-us.apache.org/repos/asf/storm/blob/35ca265a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/webapp/LogviewerResource.java ---------------------------------------------------------------------- diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/webapp/LogviewerResource.java b/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/webapp/LogviewerResource.java index 478001d..6478ca6 100644 --- a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/webapp/LogviewerResource.java +++ b/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/webapp/LogviewerResource.java @@ -214,10 +214,11 @@ public class LogviewerResource { * Handles '/search' (searching from specific worker or daemon log file) request. */ @GET - @Path("/search/{file}") - public Response search(@PathParam("file") String file, @Context HttpServletRequest request) throws IOException { + @Path("/search") + public Response search(@Context HttpServletRequest request) throws IOException { String user = httpCredsHandler.getUserName(request); boolean isDaemon = StringUtils.equals(request.getParameter("is-daemon"), "yes"); + String file = request.getParameter("file"); String decodedFileName = URLDecoder.decode(file); String searchString = request.getParameter("search-string"); String numMatchesStr = request.getParameter("num-matches");
