This is an automated email from the ASF dual-hosted git repository.

stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 8a2340ebf17d9d2014299e7a6fbc6211c2f1d93b
Author: zhangyifan27 <[email protected]>
AuthorDate: Tue Apr 25 09:32:29 2023 +0800

    IMPALA-12096: Add process start time and version to backends webui
    
    This patch adds process start time and version to the /backends page.
    
    Two more optional elements are added in BackendDescriptorPB and can
    be broadcast through statestore topic. This information should be
    helpful for users checking all backends in a large cluster.
    
    For display, as two more columns are added to the table of backend
    information, the table is changed to 'table-responsive' to be scrolled
    horizontally with ease. A sample screenshot is attached to the
    IMPALA-12096 ticket.
    
    Testing:
    - Added cases to test_web_pages.py
    
    Change-Id: I5f1f0ba0081986f428840442c247d7dde9e1ba05
    Reviewed-on: http://gerrit.cloudera.org:8080/19800
    Reviewed-by: Impala Public Jenkins <[email protected]>
    Tested-by: Impala Public Jenkins <[email protected]>
---
 be/src/service/impala-http-handler.cc    |  4 ++++
 be/src/service/impala-server.cc          |  8 ++++++++
 common/protobuf/statestore_service.proto |  8 ++++++++
 tests/webserver/test_web_pages.py        |  2 ++
 www/backends.tmpl                        | 18 +++++++++++++++---
 5 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/be/src/service/impala-http-handler.cc 
b/be/src/service/impala-http-handler.cc
index 96349450c..d18087728 100644
--- a/be/src/service/impala-http-handler.cc
+++ b/be/src/service/impala-http-handler.cc
@@ -1186,6 +1186,10 @@ void ImpalaHttpHandler::BackendsHandler(const 
Webserver::WebRequest& req,
     Value executor_groups(JoinStrings(group_names, ", ").c_str(),
         document->GetAllocator());
     backend_obj.AddMember("executor_groups", executor_groups, 
document->GetAllocator());
+    Value start_time_val(backend.process_start_time().c_str(), 
document->GetAllocator());
+    backend_obj.AddMember("process_start_time", start_time_val, 
document->GetAllocator());
+    Value version_val(backend.version().c_str(), document->GetAllocator());
+    backend_obj.AddMember("version", version_val, document->GetAllocator());
     backends_list.PushBack(backend_obj, document->GetAllocator());
   }
   document->AddMember("backends", backends_list, document->GetAllocator());
diff --git a/be/src/service/impala-server.cc b/be/src/service/impala-server.cc
index f18c52bcb..1e4c7a836 100644
--- a/be/src/service/impala-server.cc
+++ b/be/src/service/impala-server.cc
@@ -87,6 +87,7 @@
 #include "util/auth-util.h"
 #include "util/bit-util.h"
 #include "util/coding-util.h"
+#include "util/common-metrics.h"
 #include "util/debug-util.h"
 #include "util/error-util.h"
 #include "util/histogram-metric.h"
@@ -2344,6 +2345,13 @@ void 
ImpalaServer::BuildLocalBackendDescriptorInternal(BackendDescriptorPB* be_d
   be_desc->set_admission_slots(exec_env_->admission_slots());
   be_desc->set_is_quiescing(is_quiescing);
   SetExecutorGroups(FLAGS_executor_groups, be_desc);
+
+  if (CommonMetrics::PROCESS_START_TIME != nullptr) {
+    
be_desc->set_process_start_time(CommonMetrics::PROCESS_START_TIME->GetValue());
+  } else {
+    be_desc->set_process_start_time(CurrentTimeString());
+  }
+  be_desc->set_version(GetBuildVersion(/* compact */ true));
 }
 
 ImpalaServer::QueryStateRecord::QueryStateRecord(
diff --git a/common/protobuf/statestore_service.proto 
b/common/protobuf/statestore_service.proto
index 8938934cd..2f2f83168 100644
--- a/common/protobuf/statestore_service.proto
+++ b/common/protobuf/statestore_service.proto
@@ -76,4 +76,12 @@ message BackendDescriptorPB {
   // The number of admission slots for this backend that can be occupied by 
running
   // queries.
   optional int64 admission_slots = 12;
+
+  // The process start time of this backend, represented as a date-time string 
in the
+  // local time zone.
+  optional string process_start_time = 13;
+
+  // The pretty-printed string representation of program version and build 
version for
+  // this backend.
+  optional string version = 14;
 }
diff --git a/tests/webserver/test_web_pages.py 
b/tests/webserver/test_web_pages.py
index 93357b247..2ea85dfb2 100644
--- a/tests/webserver/test_web_pages.py
+++ b/tests/webserver/test_web_pages.py
@@ -771,6 +771,8 @@ class TestWebPage(ImpalaTestSuite):
     assert not backend_row['is_quiescing']
     assert not backend_row['is_blacklisted']
     assert len(backend_row['admit_mem_limit']) > 0
+    assert len(backend_row['process_start_time']) > 0
+    assert len(backend_row['version']) > 0
 
   def test_download_profile(self):
     """Test download text profile for a query"""
diff --git a/www/backends.tmpl b/www/backends.tmpl
index e8a85740d..199dce56e 100644
--- a/www/backends.tmpl
+++ b/www/backends.tmpl
@@ -20,13 +20,15 @@ under the License.
 
 <h2>Active backend(s): {{num_active_backends}}</h2>
 
-<table id="backends" class='table table-hover table-bordered'>
+<table id="backends" class='table table-hover table-bordered table-responsive'>
   <thead>
     <tr>
       <th></th>
       <th>Address</th>
       <th>Krpc Address</th>
       <th>Backend Id</th>
+      <th>Version</th>
+      <th>Process Start Time</th>
       <th>Coordinator</th>
       <th>Executor</th>
       <th>Memory Limit for Admission</th>
@@ -45,6 +47,8 @@ under the License.
       <td>{{address}}</td>
       <td>{{krpc_address}}</td>
       <td>{{backend_id}}</td>
+      <td>{{version}}</td>
+      <td>{{process_start_time}}</td>
       <td>{{is_coordinator}}</td>
       <td>{{is_executor}}</td>
       <td>{{admit_mem_limit}}</td>
@@ -62,13 +66,15 @@ under the License.
 {{#num_quiescing_backends}}
 <h2>Quiescing backend(s)<sup><a href='#' data-toggle="tooltip" title="{{> 
www/quiescing_tooltip.txt }}">[?]</a></sup>: {{num_quiescing_backends}}</h2>
 
-<table id="quiescing_backends" class='table table-hover table-bordered'>
+<table id="quiescing_backends" class='table table-hover table-bordered 
table-responsive'>
   <thead>
     <tr>
       <th></th>
       <th>Address</th>
       <th>Krpc Address</th>
       <th>Backend Id</th>
+      <th>Version</th>
+      <th>Process Start Time</th>
       <th>Coordinator</th>
       <th>Executor</th>
       <th>Memory Limit for Admission</th>
@@ -87,6 +93,8 @@ under the License.
       <td>{{address}}</td>
       <td>{{krpc_address}}</td>
       <td>{{backend_id}}</td>
+      <td>{{version}}</td>
+      <td>{{process_start_time}}</td>
       <td>{{is_coordinator}}</td>
       <td>{{is_executor}}</td>
       <td>{{admit_mem_limit}}</td>
@@ -105,13 +113,15 @@ under the License.
 {{#num_blacklisted_backends}}
 <h2>Blacklisted backend(s)<sup><a href='#' data-toggle="tooltip" title="{{> 
www/blacklisted_tooltip.txt }}">[?]</a></sup>: {{num_blacklisted_backends}}</h2>
 
-<table id="blacklisted_backends" class='table table-hover table-bordered'>
+<table id="blacklisted_backends" class='table table-hover table-bordered 
table-responsive'>
   <thead>
     <tr>
       <th></th>
       <th>Address</th>
       <th>Krpc Address</th>
       <th>Backend Id</th>
+      <th>Version</th>
+      <th>Process Start Time</th>
       <th>Blacklisting Cause</th>
       <th>Time remaining on blacklist</th>
       <th>Coordinator</th>
@@ -132,6 +142,8 @@ under the License.
       <td>{{address}}</td>
       <td>{{krpc_address}}</td>
       <td>{{backend_id}}</td>
+      <td>{{version}}</td>
+      <td>{{process_start_time}}</td>
       <td>{{blacklist_cause}}</td>
       <td>{{blacklist_time_remaining}}</td>
       <td>{{is_coordinator}}</td>

Reply via email to