You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by da...@apache.org on 2017/07/26 19:08:15 UTC

[2/2] kudu git commit: Switch tables page to template

Switch tables page to template

Converts the /tables page of the master web UI
to use a mustache template.

Change-Id: I2750448bb5c96b8837bc045dca41d4a4113b0c6b
Reviewed-on: http://gerrit.cloudera.org:8080/7506
Reviewed-by: Dan Burkert <da...@apache.org>
Tested-by: Dan Burkert <da...@apache.org>


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

Branch: refs/heads/master
Commit: 9285f2b44edb23a906cc3a697d9289ee3b3c5673
Parents: 634e1cc
Author: Sam Okrent <sa...@cloudera.com>
Authored: Tue Jul 25 14:28:58 2017 -0700
Committer: Dan Burkert <da...@apache.org>
Committed: Wed Jul 26 19:07:55 2017 +0000

----------------------------------------------------------------------
 src/kudu/master/master-path-handlers.cc | 34 +++++++---------------
 src/kudu/master/master-path-handlers.h  |  3 +-
 www/tables.mustache                     | 43 ++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/9285f2b4/src/kudu/master/master-path-handlers.cc
----------------------------------------------------------------------
diff --git a/src/kudu/master/master-path-handlers.cc b/src/kudu/master/master-path-handlers.cc
index d1855f7..80668b1 100644
--- a/src/kudu/master/master-path-handlers.cc
+++ b/src/kudu/master/master-path-handlers.cc
@@ -44,6 +44,7 @@
 #include "kudu/master/sys_catalog.h"
 #include "kudu/master/ts_descriptor.h"
 #include "kudu/master/ts_manager.h"
+#include "kudu/util/easy_json.h"
 #include "kudu/util/pb_util.h"
 #include "kudu/util/string_case.h"
 #include "kudu/util/url-coding.h"
@@ -126,24 +127,18 @@ void MasterPathHandlers::HandleTabletServers(const Webserver::WebRequest& req,
 }
 
 void MasterPathHandlers::HandleCatalogManager(const Webserver::WebRequest& req,
-                                              ostringstream* output) {
+                                              EasyJson* output) {
   CatalogManager::ScopedLeaderSharedLock l(master_->catalog_manager());
   if (!l.first_failed_status().ok()) {
-    *output << "Master is not ready: " << l.first_failed_status().ToString();
+    (*output)["error"] = Substitute("Master is not ready: $0",  l.first_failed_status().ToString());
     return;
   }
 
-  *output << "<h1>Tables</h1>\n";
-
   std::vector<scoped_refptr<TableInfo>> tables;
   master_->catalog_manager()->GetAllTables(&tables);
+  (*output).Set<int64_t>("num_tables", tables.size());
 
-  *output << Substitute("There are $0 tables\n", tables.size());
-  *output << "<table class='table table-striped'>\n";
-  *output << "  <thead><tr><th>Table Name</th><th>Table Id</th>" <<
-      "<th>State</th><th>State Message</th></tr></thead>\n";
-  typedef std::map<string, string> StringMap;
-  StringMap ordered_tables;
+  EasyJson tables_json = output->Set("tables", EasyJson::kArray);
   for (const scoped_refptr<TableInfo>& table : tables) {
     TableMetadataLock l(table.get(), TableMetadataLock::READ);
     if (!l.data().is_running()) {
@@ -151,19 +146,12 @@ void MasterPathHandlers::HandleCatalogManager(const Webserver::WebRequest& req,
     }
     string state = SysTablesEntryPB_State_Name(l.data().pb.state());
     Capitalize(&state);
-    ordered_tables[l.data().name()] = Substitute(
-        "<tr><th>$0</th><td><a href=\"/table?id=$1\">$1</a></td>"
-            "<td>$2</td><td>$3</td></tr>\n",
-        EscapeForHtmlToString(l.data().name()),
-        EscapeForHtmlToString(table->id()),
-        state,
-        EscapeForHtmlToString(l.data().pb.state_msg()));
+    EasyJson table_json = tables_json.PushBack(EasyJson::kObject);
+    table_json["name"] = EscapeForHtmlToString(l.data().name());
+    table_json["id"] = EscapeForHtmlToString(table->id());
+    table_json["state"] = state;
+    table_json["message"] = EscapeForHtmlToString(l.data().pb.state_msg());
   }
-  *output << "<tbody>\n";
-  for (const StringMap::value_type& table : ordered_tables) {
-    *output << table.second;
-  }
-  *output << "</tbody></table>\n";
 }
 
 namespace {
@@ -593,7 +581,7 @@ Status MasterPathHandlers::Register(Webserver* server) {
       "/tablet-servers", "Tablet Servers",
       boost::bind(&MasterPathHandlers::HandleTabletServers, this, _1, _2),
       is_styled, is_on_nav_bar);
-  server->RegisterPrerenderedPathHandler(
+  server->RegisterPathHandler(
       "/tables", "Tables",
       boost::bind(&MasterPathHandlers::HandleCatalogManager, this, _1, _2),
       is_styled, is_on_nav_bar);

http://git-wip-us.apache.org/repos/asf/kudu/blob/9285f2b4/src/kudu/master/master-path-handlers.h
----------------------------------------------------------------------
diff --git a/src/kudu/master/master-path-handlers.h b/src/kudu/master/master-path-handlers.h
index 0850edb..73a7a8e 100644
--- a/src/kudu/master/master-path-handlers.h
+++ b/src/kudu/master/master-path-handlers.h
@@ -23,6 +23,7 @@
 
 #include "kudu/gutil/macros.h"
 #include "kudu/server/webserver.h"
+#include "kudu/util/easy_json.h"
 
 namespace kudu {
 class Schema;
@@ -49,7 +50,7 @@ class MasterPathHandlers {
   void HandleTabletServers(const Webserver::WebRequest& req,
                            std::ostringstream* output);
   void HandleCatalogManager(const Webserver::WebRequest& req,
-                            std::ostringstream* output);
+                            EasyJson* output);
   void HandleTablePage(const Webserver::WebRequest& req,
                        std::ostringstream *output);
   void HandleMasters(const Webserver::WebRequest& req,

http://git-wip-us.apache.org/repos/asf/kudu/blob/9285f2b4/www/tables.mustache
----------------------------------------------------------------------
diff --git a/www/tables.mustache b/www/tables.mustache
new file mode 100644
index 0000000..6abe133
--- /dev/null
+++ b/www/tables.mustache
@@ -0,0 +1,43 @@
+{{!
+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.
+}}
+<h1>Tables</h1>
+{{#error}}
+  <div class="text-error">{{{.}}}</div>
+{{/error}}
+{{^error}}
+There are {{num_tables}} tables
+<table class="table table-striped">
+  <thead><tr>
+    <th>Table Name</th>
+    <th>Table Id</th>
+    <th>State</th>
+    <th>State Message</th>
+  </tr></thead>
+  <tbody>
+   {{#tables}}
+    <tr>
+      <th>{{name}}</th>
+      <td><a href="/table?id={{id}}">{{id}}</a></td>
+      <td>{{state}}</td>
+      <td>{{message}}</td>
+    </tr>
+   {{/tables}}
+  </tbody>
+</table>
+{{/error}}