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

cmcfarlen pushed a commit to branch 10.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/10.0.x by this push:
     new b25bb1acfd Restore speed bucket metrics with more buckets (#11913)
b25bb1acfd is described below

commit b25bb1acfd876a1f9b2087622c15504be5a82460
Author: Chris McFarlen <[email protected]>
AuthorDate: Mon Dec 16 17:22:56 2024 -0600

    Restore speed bucket metrics with more buckets (#11913)
    
    Co-authored-by: Chris McFarlen <[email protected]>
    (cherry picked from commit 3f949f717b7fe8ef1d6aabd70aa18d340f0da342)
---
 include/proxy/http/HttpConfig.h   | 22 +++++++++++
 include/proxy/http/HttpTransact.h |  2 +
 src/proxy/http/HttpConfig.cc      | 43 ++++++++++++++++++++++
 src/proxy/http/HttpTransact.cc    | 77 ++++++++++++++++++++++++++++++++++++++-
 4 files changed, 142 insertions(+), 2 deletions(-)

diff --git a/include/proxy/http/HttpConfig.h b/include/proxy/http/HttpConfig.h
index 1b1f2cac91..59d069ff14 100644
--- a/include/proxy/http/HttpConfig.h
+++ b/include/proxy/http/HttpConfig.h
@@ -304,6 +304,28 @@ struct HttpStatsBlock {
   Metrics::Counter::AtomicType *user_agent_response_document_total_size;
   Metrics::Counter::AtomicType *user_agent_response_header_total_size;
   Metrics::Gauge::AtomicType   *websocket_current_active_client_connections;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_100;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_1k;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_10k;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_100k;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_1M;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_10M;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_100M;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_200M;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_400M;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_800M;
+  Metrics::Counter::AtomicType *user_agent_speed_bytes_per_sec_1G;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_100;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_1k;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_10k;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_100k;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_1M;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_10M;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_100M;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_200M;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_400M;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_800M;
+  Metrics::Counter::AtomicType *origin_server_speed_bytes_per_sec_1G;
 };
 
 enum CacheOpenWriteFailAction_t {
diff --git a/include/proxy/http/HttpTransact.h 
b/include/proxy/http/HttpTransact.h
index 7ca984f00b..4caf6e3a70 100644
--- a/include/proxy/http/HttpTransact.h
+++ b/include/proxy/http/HttpTransact.h
@@ -1140,6 +1140,8 @@ public:
   static void milestone_start_api_time(State *s);
   static void milestone_update_api_time(State *s);
   static void client_result_stat(State *s, ink_hrtime total_time, ink_hrtime 
request_process_time);
+  static void origin_server_connection_speed(ink_hrtime transfer_time, int64_t 
nbytes);
+  static void user_agent_connection_speed(ink_hrtime transfer_time, int64_t 
nbytes);
   static void delete_warning_value(HTTPHdr *to_warn, HTTPWarningCode 
warning_code);
   static bool is_connection_collapse_checks_success(State *s); // YTS Team, 
yamsat
   static void update_method_stat(int method);
diff --git a/src/proxy/http/HttpConfig.cc b/src/proxy/http/HttpConfig.cc
index 6975818ba3..8a2176a4ad 100644
--- a/src/proxy/http/HttpConfig.cc
+++ b/src/proxy/http/HttpConfig.cc
@@ -546,6 +546,49 @@ register_stat_callbacks()
   http_rsb.websocket_current_active_client_connections =
     
Metrics::Gauge::createPtr("proxy.process.http.websocket.current_active_client_connections");
 
+  // Speed bucket stats for client and origin
+  http_rsb.user_agent_speed_bytes_per_sec_100 =
+    
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_100");
+  http_rsb.user_agent_speed_bytes_per_sec_1k = 
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_1K");
+  http_rsb.user_agent_speed_bytes_per_sec_10k =
+    
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_10K");
+  http_rsb.user_agent_speed_bytes_per_sec_100k =
+    
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_100K");
+  http_rsb.user_agent_speed_bytes_per_sec_1M = 
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_1M");
+  http_rsb.user_agent_speed_bytes_per_sec_10M =
+    
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_10M");
+  http_rsb.user_agent_speed_bytes_per_sec_100M =
+    
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_100M");
+  http_rsb.user_agent_speed_bytes_per_sec_200M =
+    
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_200M");
+  http_rsb.user_agent_speed_bytes_per_sec_400M =
+    
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_400M");
+  http_rsb.user_agent_speed_bytes_per_sec_800M =
+    
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_800M");
+  http_rsb.user_agent_speed_bytes_per_sec_1G = 
Metrics::Counter::createPtr("proxy.process.http.user_agent_speed_bytes_per_sec_1G");
+  http_rsb.origin_server_speed_bytes_per_sec_100 =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_100");
+  http_rsb.origin_server_speed_bytes_per_sec_1k =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_1K");
+  http_rsb.origin_server_speed_bytes_per_sec_10k =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_10K");
+  http_rsb.origin_server_speed_bytes_per_sec_100k =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_100K");
+  http_rsb.origin_server_speed_bytes_per_sec_1M =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_1M");
+  http_rsb.origin_server_speed_bytes_per_sec_10M =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_10M");
+  http_rsb.origin_server_speed_bytes_per_sec_100M =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_100M");
+  http_rsb.origin_server_speed_bytes_per_sec_200M =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_200M");
+  http_rsb.origin_server_speed_bytes_per_sec_400M =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_400M");
+  http_rsb.origin_server_speed_bytes_per_sec_800M =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_800M");
+  http_rsb.origin_server_speed_bytes_per_sec_1G =
+    
Metrics::Counter::createPtr("proxy.process.http.origin_server_speed_bytes_per_sec_1G");
+
   Metrics::Derived::derive({
     // Total bytes of client request body + headers
     {"proxy.process.http.user_agent_total_request_bytes",
diff --git a/src/proxy/http/HttpTransact.cc b/src/proxy/http/HttpTransact.cc
index d844bf5229..2aa3818280 100644
--- a/src/proxy/http/HttpTransact.cc
+++ b/src/proxy/http/HttpTransact.cc
@@ -8262,6 +8262,71 @@ HttpTransact::milestone_update_api_time(State *s)
   s->state_machine->milestone_update_api_time();
 }
 
+void
+HttpTransact::origin_server_connection_speed(ink_hrtime transfer_time, int64_t 
nbytes)
+{
+  float bytes_per_hrtime =
+    (transfer_time == 0) ? (nbytes) : (static_cast<float>(nbytes) / 
static_cast<float>(static_cast<int64_t>(transfer_time)));
+  int bytes_per_sec = static_cast<int>(bytes_per_hrtime * HRTIME_SECOND);
+
+  if (bytes_per_sec <= 100) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_100);
+  } else if (bytes_per_sec <= 1024) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_1k);
+  } else if (bytes_per_sec <= 10240) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_10k);
+  } else if (bytes_per_sec <= 102400) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_100k);
+  } else if (bytes_per_sec <= 1048576) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_1M);
+  } else if (bytes_per_sec <= 10485760) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_10M);
+  } else if (bytes_per_sec <= 104857600) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_100M);
+  } else if (bytes_per_sec <= 2 * 104857600) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_200M);
+  } else if (bytes_per_sec <= 4 * 104857600) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_400M);
+  } else if (bytes_per_sec <= 8 * 104857600) {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_800M);
+  } else {
+    Metrics::Counter::increment(http_rsb.user_agent_speed_bytes_per_sec_1G);
+  }
+  return;
+}
+
+void
+HttpTransact::user_agent_connection_speed(ink_hrtime transfer_time, int64_t 
nbytes)
+{
+  float bytes_per_hrtime =
+    (transfer_time == 0) ? (nbytes) : (static_cast<float>(nbytes) / 
static_cast<float>(static_cast<int64_t>(transfer_time)));
+  int64_t bytes_per_sec = static_cast<int64_t>(bytes_per_hrtime * 
HRTIME_SECOND);
+
+  if (bytes_per_sec <= 100) {
+    
Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_100);
+  } else if (bytes_per_sec <= 1024) {
+    Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_1k);
+  } else if (bytes_per_sec <= 10240) {
+    
Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_10k);
+  } else if (bytes_per_sec <= 102400) {
+    
Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_100k);
+  } else if (bytes_per_sec <= 1048576) {
+    Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_1M);
+  } else if (bytes_per_sec <= 10485760) {
+    
Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_10M);
+  } else if (bytes_per_sec <= 104857600) {
+    
Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_100M);
+  } else if (bytes_per_sec <= 2 * 104857600) {
+    
Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_200M);
+  } else if (bytes_per_sec <= 4 * 104857600) {
+    
Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_400M);
+  } else if (bytes_per_sec <= 8 * 104857600) {
+    
Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_800M);
+  } else {
+    Metrics::Counter::increment(http_rsb.origin_server_speed_bytes_per_sec_1G);
+  }
+}
+
 /*
  * added request_process_time stat for loadshedding foo
  */
@@ -8580,8 +8645,8 @@ HttpTransact::client_result_stat(State *s, ink_hrtime 
total_time, ink_hrtime req
 }
 
 void
-HttpTransact::update_size_and_time_stats(State *s, ink_hrtime total_time, 
ink_hrtime /* user_agent_write_time ATS_UNUSED */,
-                                         ink_hrtime /* origin_server_read_time 
ATS_UNUSED */, int user_agent_request_header_size,
+HttpTransact::update_size_and_time_stats(State *s, ink_hrtime total_time, 
ink_hrtime user_agent_write_time,
+                                         ink_hrtime origin_server_read_time, 
int user_agent_request_header_size,
                                          int64_t user_agent_request_body_size, 
int user_agent_response_header_size,
                                          int64_t 
user_agent_response_body_size, int origin_server_request_header_size,
                                          int64_t 
origin_server_request_body_size, int origin_server_response_header_size,
@@ -8713,6 +8778,14 @@ HttpTransact::update_size_and_time_stats(State *s, 
ink_hrtime total_time, ink_hr
     
Metrics::Counter::increment(http_rsb.origin_server_response_document_total_size,
 origin_server_response_body_size);
   }
 
+  if (user_agent_write_time >= 0) {
+    user_agent_connection_speed(user_agent_write_time, 
user_agent_response_size);
+  }
+
+  if (origin_server_request_header_size > 0 && origin_server_read_time > 0) {
+    origin_server_connection_speed(origin_server_read_time, 
origin_server_response_size);
+  }
+
   if (s->method == HTTP_WKSIDX_PUSH) {
     Metrics::Counter::increment(http_rsb.pushed_response_header_total_size, 
pushed_response_header_size);
     Metrics::Counter::increment(http_rsb.pushed_document_total_size, 
pushed_response_body_size);

Reply via email to