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

yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new d6db7986927 branch-4.0: [enhance](meta-service)add bvar for fdb 
process status #59329 (#59526)
d6db7986927 is described below

commit d6db7986927be793af1f453ff88ed616b5bd7593
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Jan 5 11:46:49 2026 +0800

    branch-4.0: [enhance](meta-service)add bvar for fdb process status #59329 
(#59526)
    
    Cherry-picked from #59329
    
    Co-authored-by: koarz <[email protected]>
---
 cloud/src/common/bvars.cpp  |  14 +---
 cloud/src/common/bvars.h    |  14 +---
 cloud/src/common/metric.cpp | 189 +++++++++++++++++++++++++-------------------
 cloud/test/metric_test.cpp  | 137 ++++++++++++++++++++++++--------
 4 files changed, 216 insertions(+), 138 deletions(-)

diff --git a/cloud/src/common/bvars.cpp b/cloud/src/common/bvars.cpp
index ac36976553b..dc567b6dad8 100644
--- a/cloud/src/common/bvars.cpp
+++ b/cloud/src/common/bvars.cpp
@@ -218,19 +218,9 @@ bvar::Status<int64_t> 
g_bvar_fdb_qos_worst_data_lag_storage_server_ns("fdb_qos_w
 bvar::Status<int64_t> 
g_bvar_fdb_qos_worst_durability_lag_storage_server_ns("fdb_qos_worst_durability_lag_storage_server_ns",
 BVAR_FDB_INVALID_VALUE);
 bvar::Status<int64_t> 
g_bvar_fdb_qos_worst_log_server_queue_bytes("fdb_qos_worst_log_server_queue_bytes",
 BVAR_FDB_INVALID_VALUE);
 bvar::Status<int64_t> 
g_bvar_fdb_qos_worst_storage_server_queue_bytes("fdb_qos_worst_storage_server_queue_bytes",
 BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_conflict_rate_hz("fdb_workload_conflict_rate_hz", 
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_location_rate_hz("fdb_workload_location_rate_hz", 
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_keys_read_hz("fdb_workload_keys_read_hz", 
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_read_bytes_hz("fdb_workload_read_bytes_hz", 
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_read_rate_hz("fdb_workload_read_rate_hz", 
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_write_rate_hz("fdb_workload_write_rate_hz", 
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_written_bytes_hz("fdb_workload_written_bytes_hz", 
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_transactions_started_hz("fdb_workload_transactions_started_hz",
 BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_transactions_committed_hz("fdb_workload_transactions_committed_hz",
 BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t> 
g_bvar_fdb_workload_transactions_rejected_hz("fdb_workload_transactions_rejected_hz",
 BVAR_FDB_INVALID_VALUE);
 bvar::Status<int64_t> 
g_bvar_fdb_client_thread_busyness_percent("fdb_client_thread_busyness_percent", 
BVAR_FDB_INVALID_VALUE);
-mBvarStatus<int64_t> g_bvar_fdb_process_status_int("fdb_process_status_int", 
{"process_id", "component", "metric"});
-mBvarStatus<double> 
g_bvar_fdb_process_status_float("fdb_process_status_float", {"process_id", 
"component", "metric"});
+mBvarStatus<double> g_bvar_fdb_cluster_processes("fdb_cluster_processes", 
{"process_id", "component", "metric"});
+mBvarStatus<double> g_bvar_fdb_cluster_workload("fdb_cluster_workload", 
{"component", "metric"});
 
 // checker's bvars
 BvarStatusWithTag<int64_t> g_bvar_checker_num_scanned("checker", 
"num_scanned");
diff --git a/cloud/src/common/bvars.h b/cloud/src/common/bvars.h
index 5641a2a30ce..94494acc650 100644
--- a/cloud/src/common/bvars.h
+++ b/cloud/src/common/bvars.h
@@ -710,19 +710,9 @@ extern bvar::Status<int64_t> 
g_bvar_fdb_qos_worst_data_lag_storage_server_ns;
 extern bvar::Status<int64_t> 
g_bvar_fdb_qos_worst_durability_lag_storage_server_ns;
 extern bvar::Status<int64_t> g_bvar_fdb_qos_worst_log_server_queue_bytes;
 extern bvar::Status<int64_t> g_bvar_fdb_qos_worst_storage_server_queue_bytes;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_conflict_rate_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_location_rate_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_keys_read_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_read_bytes_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_read_rate_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_write_rate_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_written_bytes_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_started_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_committed_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_rejected_hz;
 extern bvar::Status<int64_t> g_bvar_fdb_client_thread_busyness_percent;
-extern mBvarStatus<int64_t> g_bvar_fdb_process_status_int;
-extern mBvarStatus<double> g_bvar_fdb_process_status_float;
+extern mBvarStatus<double> g_bvar_fdb_cluster_processes;
+extern mBvarStatus<double> g_bvar_fdb_cluster_workload;
 
 // checker
 extern BvarStatusWithTag<long> g_bvar_checker_num_scanned;
diff --git a/cloud/src/common/metric.cpp b/cloud/src/common/metric.cpp
index ac0193a9921..d41e7ea6e0f 100644
--- a/cloud/src/common/metric.cpp
+++ b/cloud/src/common/metric.cpp
@@ -141,68 +141,6 @@ static void export_fdb_status_details(const std::string& 
status_str) {
         DCHECK(node->value.IsDouble());
         return static_cast<int64_t>(node->value.GetDouble() * NANOSECONDS);
     };
-    auto get_process_metric = [&](std::string component) {
-        auto node = document.FindMember("cluster");
-        if (!node->value.HasMember("processes")) return;
-        node = node->value.FindMember("processes");
-        // process
-        for (auto process_node = node->value.MemberBegin(); process_node != 
node->value.MemberEnd();
-             process_node++) {
-            const char* process_id = process_node->name.GetString();
-            decltype(process_node) component_node;
-            // get component iter
-            if (!process_node->value.HasMember(component.data())) return;
-            component_node = process_node->value.FindMember(component.data());
-            // There are three cases here: int64, double, and object.
-            // If it is double or int64, put it directly into the bvar.
-            // If it is an object, recursively obtain the full name and 
corresponding value.
-            // such as: {"disk": {"reads": {"counter": 123, "hz": 0}}}
-            // component is "disk", the names of these two values should be 
"reads_counter" and "reads_hz"
-            auto recursive_name_helper = [](std::string& origin_name,
-                                            const char* next_level_name) -> 
std::string {
-                return origin_name + '_' + next_level_name;
-            };
-            // proved two type lambda func to handle object and other type
-
-            // set_bvar_value is responsible for setting integer and float 
values to the corresponding bvar.
-            auto set_bvar_value = [&process_id, &component](
-                                          std::string& name,
-                                          decltype(process_node)& temp_node) 
-> void {
-                if (temp_node->value.IsInt64()) {
-                    g_bvar_fdb_process_status_int.put({process_id, component, 
name},
-                                                      
temp_node->value.GetInt64());
-                    return;
-                }
-                if (temp_node->value.IsDouble()) {
-                    g_bvar_fdb_process_status_float.put({process_id, 
component, name},
-                                                        
temp_node->value.GetDouble());
-                    return;
-                }
-                LOG(WARNING) << fmt::format(
-                        "Get process metrics set_bvar_value input a wrong type 
node {}", name);
-            };
-            auto object_recursive = [&set_bvar_value, &recursive_name_helper](
-                                            auto&& self, std::string name,
-                                            decltype(process_node) temp_node) 
-> void {
-                // if the node is an object, then get Member(iter) and 
recursive with iter as arg
-                if (temp_node->value.IsObject()) {
-                    for (auto iter = temp_node->value.MemberBegin();
-                         iter != temp_node->value.MemberEnd(); iter++) {
-                        self(self, recursive_name_helper(name, 
iter->name.GetString()), iter);
-                    }
-                    return;
-                }
-                // if not object, set bvar value
-                set_bvar_value(name, temp_node);
-            };
-            // Note that the parameter passed to set_bvar_value here is the 
current node, not its Member
-            // so we can directly call object_recursive in the loop
-            for (auto metric_node = component_node->value.MemberBegin();
-                 metric_node != component_node->value.MemberEnd(); 
metric_node++) {
-                object_recursive(object_recursive, 
metric_node->name.GetString(), metric_node);
-            }
-        }
-    };
     // Configuration
     g_bvar_fdb_configuration_coordinators_count.set_value(
             get_value({"configuration", "coordinators_count"}));
@@ -245,26 +183,6 @@ static void export_fdb_status_details(const std::string& 
status_str) {
             get_nanoseconds({"latency_probe", "commit_seconds"}));
     
g_bvar_fdb_latency_probe_read_ns.set_value(get_nanoseconds({"latency_probe", 
"read_seconds"}));
 
-    // Workload
-    g_bvar_fdb_workload_conflict_rate_hz.set_value(
-            get_value({"workload", "transactions", "conflicted", "hz"}));
-    g_bvar_fdb_workload_location_rate_hz.set_value(
-            get_value({"workload", "operations", "location_requests", "hz"}));
-    g_bvar_fdb_workload_keys_read_hz.set_value(get_value({"workload", "keys", 
"read", "hz"}));
-    g_bvar_fdb_workload_read_bytes_hz.set_value(get_value({"workload", 
"bytes", "read", "hz"}));
-    g_bvar_fdb_workload_read_rate_hz.set_value(
-            get_value({"workload", "operations", "reads", "hz"}));
-    g_bvar_fdb_workload_written_bytes_hz.set_value(
-            get_value({"workload", "bytes", "written", "hz"}));
-    g_bvar_fdb_workload_write_rate_hz.set_value(
-            get_value({"workload", "operations", "writes", "hz"}));
-    g_bvar_fdb_workload_transactions_started_hz.set_value(
-            get_value({"workload", "transactions", "started", "hz"}));
-    g_bvar_fdb_workload_transactions_committed_hz.set_value(
-            get_value({"workload", "transactions", "committed", "hz"}));
-    g_bvar_fdb_workload_transactions_rejected_hz.set_value(
-            get_value({"workload", "transactions", 
"rejected_for_queued_too_long", "hz"}));
-
     // QOS
     g_bvar_fdb_qos_worst_data_lag_storage_server_ns.set_value(
             get_nanoseconds({"qos", "worst_data_lag_storage_server", 
"seconds"}));
@@ -296,10 +214,117 @@ static void export_fdb_status_details(const std::string& 
status_str) {
         }
     }
 
+    // Helper function for recursive name construction
+    // such as: {"disk": {"reads": {"counter": 123, "hz": 0}}}
+    // component is "disk", the names of these two values should be 
"reads_counter" and "reads_hz"
+    auto recursive_name_helper = [](std::string& origin_name,
+                                    const char* next_level_name) -> 
std::string {
+        return origin_name + '_' + next_level_name;
+    };
+
+    // Generic recursive function to traverse JSON node and set bvar values
+    // There are three cases here: int64, double, and object.
+    // If it is double or int64, put it directly into the bvar.
+    // If it is an object, recursively obtain the full name and corresponding 
value.
+    auto recursive_traverse_and_set = [&recursive_name_helper](auto&& 
set_value_callback,
+                                                               auto&& self, 
std::string name,
+                                                               auto temp_node) 
-> void {
+        // if the node is an object, then get Member(iter) and recursive with 
iter as arg
+        if (temp_node->value.IsObject()) {
+            for (auto iter = temp_node->value.MemberBegin(); iter != 
temp_node->value.MemberEnd();
+                 iter++) {
+                self(set_value_callback, self, recursive_name_helper(name, 
iter->name.GetString()),
+                     iter);
+            }
+            return;
+        }
+        // if not object, set bvar value
+        set_value_callback(name, temp_node);
+    };
+
+    auto get_process_metric = [&](std::string component) {
+        auto node = document.FindMember("cluster");
+        if (!node->value.HasMember("processes")) return;
+        node = node->value.FindMember("processes");
+        // process
+        for (auto process_node = node->value.MemberBegin(); process_node != 
node->value.MemberEnd();
+             process_node++) {
+            const char* process_id = process_node->name.GetString();
+            decltype(process_node) component_node;
+            // get component iter
+            if (!process_node->value.HasMember(component.data())) continue;
+            component_node = process_node->value.FindMember(component.data());
+
+            // set_bvar_value is responsible for setting integer and float 
values to the corresponding bvar.
+            auto set_bvar_value = [&process_id, &component](
+                                          std::string& name,
+                                          decltype(process_node)& temp_node) 
-> void {
+                if (temp_node->value.IsInt64()) {
+                    g_bvar_fdb_cluster_processes.put(
+                            {process_id, component, name},
+                            static_cast<double>(temp_node->value.GetInt64()));
+                    return;
+                }
+                if (temp_node->value.IsDouble()) {
+                    g_bvar_fdb_cluster_processes.put({process_id, component, 
name},
+                                                     
temp_node->value.GetDouble());
+                    return;
+                }
+                LOG(WARNING) << fmt::format(
+                        "Get process metrics set_bvar_value input a wrong type 
node {}", name);
+            };
+            // Note that the parameter passed to set_bvar_value here is the 
current node, not its Member
+            // so we can directly call recursive_traverse_and_set in the loop
+            for (auto metric_node = component_node->value.MemberBegin();
+                 metric_node != component_node->value.MemberEnd(); 
metric_node++) {
+                recursive_traverse_and_set(set_bvar_value, 
recursive_traverse_and_set,
+                                           metric_node->name.GetString(), 
metric_node);
+            }
+        }
+    };
+
+    auto get_workload_metric = [&](std::string component) {
+        auto node = document.FindMember("cluster");
+        if (!node->value.HasMember("workload")) return;
+        node = node->value.FindMember("workload");
+
+        if (!node->value.HasMember(component.data())) return;
+        auto component_node = node->value.FindMember(component.data());
+
+        // set_bvar_value is responsible for setting integer and float values 
to the corresponding bvar.
+        auto set_bvar_value = [&component](std::string& name,
+                                           decltype(component_node)& 
temp_node) -> void {
+            if (temp_node->value.IsInt64()) {
+                g_bvar_fdb_cluster_workload.put({component, name},
+                                                
static_cast<double>(temp_node->value.GetInt64()));
+                return;
+            }
+            if (temp_node->value.IsDouble()) {
+                g_bvar_fdb_cluster_workload.put({component, name}, 
temp_node->value.GetDouble());
+                return;
+            }
+            LOG(WARNING) << fmt::format(
+                    "Get workload metrics set_bvar_value input a wrong type 
node {}", name);
+        };
+
+        // Reuse the common recursive_traverse_and_set function
+        for (auto metric_node = component_node->value.MemberBegin();
+             metric_node != component_node->value.MemberEnd(); metric_node++) {
+            recursive_traverse_and_set(set_bvar_value, 
recursive_traverse_and_set,
+                                       metric_node->name.GetString(), 
metric_node);
+        }
+    };
+
     // Process Status
     get_process_metric("cpu");
     get_process_metric("disk");
     get_process_metric("memory");
+
+    // Workload Status
+    get_workload_metric("keys");
+    get_workload_metric("bytes");
+    get_workload_metric("operations");
+    get_workload_metric("transactions");
 }
 
 // boundaries include the key category{meta, txn, recycle...}, instance_id and 
sub_category{rowset, txn_label...}
diff --git a/cloud/test/metric_test.cpp b/cloud/test/metric_test.cpp
index 81174c73924..e00f62d990e 100644
--- a/cloud/test/metric_test.cpp
+++ b/cloud/test/metric_test.cpp
@@ -196,97 +196,170 @@ TEST(MetricTest, FdbMetricExporterTest) {
         fdb_metric_exporter.start();
         std::this_thread::sleep_for(std::chrono::milliseconds(10));
         fdb_metric_exporter.stop();
-        ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "cpu", 
"usage_cores"}),
                   0.0012292);
-        ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"busy"}),
                   0.0085999800000000001);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"free_bytes"}),
                   490412584960);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"reads_counter"}),
                   854857);
-        ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"reads_hz"}),
                   0);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"reads_sectors"}),
                   0);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"total_bytes"}),
                   527295578112);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"writes_counter"}),
                   73765457);
-        ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"writes_hz"}),
                   26.1999);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "disk", 
"writes_sectors"}),
                   1336);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "memory", 
"available_bytes"}),
                   3065090867);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "memory", 
"limit_bytes"}),
                   8589934592);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "memory", 
"rss_bytes"}),
                   46551040);
-        
ASSERT_EQ(g_bvar_fdb_process_status_int.get({"09ca90b9f3f413e5816b2610ed8b465d",
 "memory",
-                                                     
"unused_allocated_memory"}),
+        
ASSERT_EQ(g_bvar_fdb_cluster_processes.get({"09ca90b9f3f413e5816b2610ed8b465d", 
"memory",
+                                                    
"unused_allocated_memory"}),
                   655360);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"09ca90b9f3f413e5816b2610ed8b465d", "memory", 
"used_bytes"}),
                   122974208);
 
         // test second process
-        ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "cpu", 
"usage_cores"}),
                   0.0049765900000000004);
-        ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"busy"}),
                   0.012200000000000001);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"free_bytes"}),
                   489160159232);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"reads_counter"}),
                   877107);
-        ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"reads_hz"}),
                   0);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"reads_sectors"}),
                   0);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"total_bytes"}),
                   527295578112);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"writes_counter"}),
                   79316112);
-        ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"writes_hz"}),
                   30.9999);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "disk", 
"writes_sectors"}),
                   744);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "memory", 
"available_bytes"}),
                   3076787404);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "memory", 
"limit_bytes"}),
                   8589934592);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "memory", 
"rss_bytes"}),
                   72359936);
-        
ASSERT_EQ(g_bvar_fdb_process_status_int.get({"0a456165f04e1ec1a2ade0ce523d54a8",
 "memory",
-                                                     
"unused_allocated_memory"}),
+        
ASSERT_EQ(g_bvar_fdb_cluster_processes.get({"0a456165f04e1ec1a2ade0ce523d54a8", 
"memory",
+                                                    
"unused_allocated_memory"}),
                   393216);
-        ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+        ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
                           {"0a456165f04e1ec1a2ade0ce523d54a8", "memory", 
"used_bytes"}),
                   157978624);
     }
+
+    // workload status
+    {
+        g_bvar_fdb_machines_count.set_value(BVAR_FDB_INVALID_VALUE);
+        g_bvar_fdb_client_count.set_value(BVAR_FDB_INVALID_VALUE);
+
+        std::string fdb_metric_example = "./fdb_metric_example.json";
+        std::ifstream inFile(fdb_metric_example);
+
+        ASSERT_TRUE(inFile.is_open());
+        std::string fileContent((std::istreambuf_iterator<char>(inFile)),
+                                std::istreambuf_iterator<char>());
+
+        std::shared_ptr<TxnKv> txn_kv = std::make_shared<MemTxnKv>();
+        std::unique_ptr<Transaction> txn;
+        ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+        txn->put("\xff\xff/status/json", fileContent);
+        ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+
+        FdbMetricExporter fdb_metric_exporter(txn_kv);
+        fdb_metric_exporter.sleep_interval_ms_ = 1;
+        fdb_metric_exporter.start();
+        std::this_thread::sleep_for(std::chrono::milliseconds(10));
+        fdb_metric_exporter.stop();
+
+        // Test transactions component
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions", 
"started_hz"}), 12);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions", 
"started_counter"}), 196874980);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions", 
"committed_hz"}), 3.4);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions", 
"committed_counter"}), 2083958);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions", 
"conflicted_hz"}), 0);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions", 
"conflicted_counter"}), 2970);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions", 
"started_batch_priority_hz"}),
+                  0);
+        ASSERT_EQ(
+                g_bvar_fdb_cluster_workload.get({"transactions", 
"started_batch_priority_counter"}),
+                155);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions", 
"started_default_priority_hz"}),
+                  11);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get(
+                          {"transactions", 
"started_default_priority_counter"}),
+                  192248190);
+        ASSERT_EQ(
+                g_bvar_fdb_cluster_workload.get({"transactions", 
"started_immediate_priority_hz"}),
+                0.999999);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get(
+                          {"transactions", 
"started_immediate_priority_counter"}),
+                  4626635);
+
+        // Test operations component
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", "reads_hz"}), 
24.6);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"reads_counter"}), 324877376);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"writes_hz"}), 7.39999);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"writes_counter"}), 4336393);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"location_requests_hz"}), 0);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"location_requests_counter"}),
+                  107543);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"read_requests_hz"}), 24.4);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"read_requests_counter"}),
+                  324877376);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"memory_errors_hz"}), 0);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", 
"memory_errors_counter"}), 0);
+
+        // Test bytes component
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"bytes", "read_hz"}), 
18468.2);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"bytes", "read_counter"}), 
312243021624);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"bytes", "written_hz"}), 
2042.2);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"bytes", 
"written_counter"}), 6678975461);
+
+        // Test keys component
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"keys", "read_hz"}), 56.6);
+        ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"keys", "read_counter"}), 
728858585);
+    }
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to