Repository: hive
Updated Branches:
  refs/heads/branch-3 36c33ca06 -> c0a9d3ba1


HIVE-20267: Expanding WebUI to include form to dynamically config log levels 
(Zoltan Chovan reviewed by Prasanth Jayachandran)


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

Branch: refs/heads/branch-3
Commit: c0a9d3ba18dd42f315d001daa5f99b5e1aedfa52
Parents: 36c33ca
Author: Zoltan Chovan <[email protected]>
Authored: Wed Sep 19 09:57:52 2018 -0700
Committer: Prasanth Jayachandran <[email protected]>
Committed: Thu Sep 20 12:10:06 2018 -0700

----------------------------------------------------------------------
 .../hive-webapps/hiveserver2/hiveserver2.jsp    |   1 +
 .../hive-webapps/hiveserver2/llap.html          |   1 +
 .../hive-webapps/hiveserver2/logconf.jsp        | 140 +++++++++++++++++++
 .../resources/hive-webapps/static/js/logconf.js |  40 ++++++
 4 files changed, 182 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/c0a9d3ba/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp
----------------------------------------------------------------------
diff --git a/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp 
b/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp
index 5d82029..c238369 100644
--- a/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp
+++ b/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp
@@ -79,6 +79,7 @@ String remoteUser = request.getRemoteUser();
                 <li><a href="/conf">Hive Configuration</a></li>
                 <li><a href="/stacks">Stack Trace</a></li>
                 <li><a href="/llap.html">Llap Daemons</a></li>
+                <li><a href="/logconf.jsp">Configure logging</a></li>
             </ul>
           </div><!--/.nav-collapse -->
         </div>

http://git-wip-us.apache.org/repos/asf/hive/blob/c0a9d3ba/service/src/resources/hive-webapps/hiveserver2/llap.html
----------------------------------------------------------------------
diff --git a/service/src/resources/hive-webapps/hiveserver2/llap.html 
b/service/src/resources/hive-webapps/hiveserver2/llap.html
index e1424b8..62ac1b0 100644
--- a/service/src/resources/hive-webapps/hiveserver2/llap.html
+++ b/service/src/resources/hive-webapps/hiveserver2/llap.html
@@ -37,6 +37,7 @@
                 <li><a href="/conf">Hive Configuration</a></li>
                 <li><a href="/stacks">Stack Trace</a></li>
                 <li><a href="/llap.html">Llap Daemons</a></li>
+                <li><a href="/logconf.jsp">Configure logging</a></li>
             </ul>
           </div><!--/.nav-collapse -->
         </div>

http://git-wip-us.apache.org/repos/asf/hive/blob/c0a9d3ba/service/src/resources/hive-webapps/hiveserver2/logconf.jsp
----------------------------------------------------------------------
diff --git a/service/src/resources/hive-webapps/hiveserver2/logconf.jsp 
b/service/src/resources/hive-webapps/hiveserver2/logconf.jsp
new file mode 100644
index 0000000..a5747c0
--- /dev/null
+++ b/service/src/resources/hive-webapps/hiveserver2/logconf.jsp
@@ -0,0 +1,140 @@
+<%--
+/**
+ * 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.
+ */
+--%>
+<%@ page contentType="text/html;charset=UTF-8"
+         import="org.apache.hadoop.conf.Configuration"
+         import="org.apache.hadoop.hive.conf.HiveConf"
+         import="org.apache.hadoop.hive.conf.HiveConf.ConfVars"
+         import="org.apache.hive.common.util.HiveVersionInfo"
+         import="org.apache.hive.http.HttpServer"
+         import="org.apache.hive.service.cli.operation.Operation"
+         import="org.apache.hive.service.cli.operation.SQLOperation"
+         import="org.apache.hadoop.hive.ql.QueryInfo"
+         import="org.apache.hive.service.cli.session.SessionManager"
+         import="org.apache.hive.service.cli.session.HiveSession"
+         import="javax.servlet.ServletContext"
+         import="java.util.Collection"
+         import="java.util.Date"
+         import="java.util.List"
+         import="jodd.util.HtmlEncoder"
+%>
+
+<%
+    ServletContext ctx = getServletContext();
+    Configuration conf = (Configuration)ctx.getAttribute("hive.conf");
+    long startcode = conf.getLong("startcode", System.currentTimeMillis());
+    SessionManager sessionManager =
+            (SessionManager)ctx.getAttribute("hive.sm");
+    String remoteUser = request.getRemoteUser();
+%>
+
+<!--[if IE]>
+<!DOCTYPE html>
+<![endif]-->
+<?xml version="1.0" encoding="UTF-8" ?>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>HiveServer2</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="">
+
+    <link href="/static/css/bootstrap.min.css" rel="stylesheet">
+    <link href="/static/css/bootstrap-theme.min.css" rel="stylesheet">
+    <link href="/static/css/hive.css" rel="stylesheet">
+
+    <link rel="stylesheet" type="text/css" href="/static/css/json.human.css">
+    <script src="/static/js/jquery.min.js"></script>
+    <script src="/static/js/json.human.js"></script>
+    <script src="/static/js/logconf.js"></script>
+</head>
+
+<body>
+    <div class="navbar  navbar-fixed-top navbar-default">
+        <div class="container">
+            <div class="navbar-header">
+                <button type="button" class="navbar-toggle" 
data-toggle="collapse" data-target=".navbar-collapse">
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </button>
+                <a class="navbar-brand" href="/hiveserver2.jsp"><img 
src="/static/hive_logo.jpeg" alt="Hive Logo"/></a>
+            </div>
+            <div class="collapse navbar-collapse">
+                <ul class="nav navbar-nav">
+                    <li class="active"><a href="/">Home</a></li>
+                    <li><a href="/logs/">Local logs</a></li>
+                    <li><a href="/jmx">Metrics Dump</a></li>
+                    <li><a href="/conf">Hive Configuration</a></li>
+                    <li><a href="/stacks">Stack Trace</a></li>
+                    <li><a href="/llap.html">Llap Daemons</a></li>
+                    <li><a href="/logconf.jsp">Configure logging</a></li>
+                </ul>
+            </div><!--/.nav-collapse -->
+        </div>
+    </div>
+
+
+    <div class="container">
+        <div class="row inner_header">
+            <div class="page-header">
+                <h2>Configure HiveServer2 logging</h2>
+            </div>
+        </div>
+        <div class="row">
+
+            <div id="current-logs-container">
+                <table id="current-logs-table" class="table">
+                    <thead>
+                        <tr>
+                            <th>Logger name</th>
+                            <th>Log level</th>
+                        </tr>
+                    </thead>
+                    <tbody id="current-logs">
+
+                    </tbody>
+                </table>
+            </div>
+
+            <h2>Set new logging rules</h2>
+
+            <form class="form-inline">
+                <div class="form-group">
+                    <input type="text" id="logger-name" class="form-control" 
placeholder="Logger name">
+                </div>
+                <div class="form-group">
+                    <select id="log-level" class="form-control">
+                        <option value="TRACE">TRACE</option>
+                        <option value="DEBUG">DEBUG</option>
+                        <option value="INFO">INFO</option>
+                        <option value="WARN">WARN</option>
+                        <option value="ERROR">ERROR</option>
+                        <option value="FATAL">FATAL</option>
+                    </select>
+                </div>
+
+                <button id="log-level-submit" type="button" class="btn 
btn-primary">Submit</button>
+            </form>
+
+        </div>
+    </div>
+
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/c0a9d3ba/service/src/resources/hive-webapps/static/js/logconf.js
----------------------------------------------------------------------
diff --git a/service/src/resources/hive-webapps/static/js/logconf.js 
b/service/src/resources/hive-webapps/static/js/logconf.js
new file mode 100644
index 0000000..a95b29a
--- /dev/null
+++ b/service/src/resources/hive-webapps/static/js/logconf.js
@@ -0,0 +1,40 @@
+$(document).ready(function () {
+
+    // init the table with the current loggers
+    loadLoggers();
+
+    // set up event handler for submitting the form
+    $("#log-level-submit").click(function(e) {
+        setLoggersWithLevel(e);
+    });
+});
+
+function setLoggersWithLevel(e) {
+    console.log("handler called");
+    var loggerName = $("#logger-name").val();
+    var logLevel = $("#log-level").val();
+    var data = JSON.stringify( { "loggers" : [ { "logger" : loggerName, 
"level" : logLevel } ] } );
+
+    $.post('conflog', data, function() {
+        loadLoggers();
+    });
+}
+
+function loadLoggers() {
+    // clear the current content
+    $("#current-logs").html("");
+
+    // load and render the new
+    $.getJSON('conflog', function (data) {
+        var loggers = data.loggers;
+
+        $.each(loggers, function(i, logger) {
+            var logger_information = "<tr>\n" +
+                "                        <td>" + logger.logger + "</td>\n" +
+                "                        <td>" + logger.level + "</td>\n" +
+                "                    </tr>";
+            $("#current-logs").append(logger_information);
+        });
+
+    });
+}

Reply via email to