trafficserver-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bc...@apache.org
Subject git commit: TS-2753: Add more SPDY and HTTPS statistics Reviewed: Bryan Call
Date Fri, 23 May 2014 20:14:48 GMT
Repository: trafficserver
Updated Branches:
  refs/heads/master 33a477145 -> 12bde5b9c


TS-2753: Add more SPDY and HTTPS statistics
Reviewed: Bryan Call


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

Branch: refs/heads/master
Commit: 12bde5b9cfbc99a6bc9227166b0107cee35d8f9f
Parents: 33a4771
Author: Wei Sun <sunwei@yahoo-inc.com>
Authored: Fri May 23 13:14:31 2014 -0700
Committer: Bryan Call <bcall@apache.org>
Committed: Fri May 23 13:14:31 2014 -0700

----------------------------------------------------------------------
 CHANGES                             | 2 ++
 iocore/net/P_SSLNetVConnection.h    | 1 +
 iocore/net/P_SSLUtils.h             | 3 +++
 iocore/net/SSLNetVConnection.cc     | 9 +++++++++
 iocore/net/SSLNextProtocolAccept.cc | 1 +
 iocore/net/SSLUtils.cc              | 8 ++++++++
 proxy/http/HttpClientSession.cc     | 4 ++++
 proxy/http/HttpConfig.cc            | 6 ++++++
 proxy/http/HttpConfig.h             | 3 +++
 proxy/http/HttpTransact.cc          | 4 ++++
 proxy/spdy/SpdyClientSession.cc     | 2 ++
 proxy/spdy/SpdyCommon.cc            | 4 ++++
 proxy/spdy/SpdyCommon.h             | 8 ++++++++
 13 files changed, 55 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index c589668..8793946 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 5.0.0
 
+  *) [TS-2753] Add more SPDY and HTTPS statistics
+
   *) [TS-2677] Don't apply path / scheme URL changes in remap when method is
    CONNECT.
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/iocore/net/P_SSLNetVConnection.h
----------------------------------------------------------------------
diff --git a/iocore/net/P_SSLNetVConnection.h b/iocore/net/P_SSLNetVConnection.h
index 47861e4..c464e60 100644
--- a/iocore/net/P_SSLNetVConnection.h
+++ b/iocore/net/P_SSLNetVConnection.h
@@ -101,6 +101,7 @@ public:
   virtual ~SSLNetVConnection() { }
 
   SSL *ssl;
+  ink_hrtime sslHandshakeBeginTime;
 
   static int advertise_next_protocol(SSL * ssl, const unsigned char ** out, unsigned * outlen,
void *);
   static int select_next_protocol(SSL * ssl, const unsigned char ** out, unsigned char *
outlen, const unsigned char * in, unsigned inlen, void *);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/iocore/net/P_SSLUtils.h
----------------------------------------------------------------------
diff --git a/iocore/net/P_SSLUtils.h b/iocore/net/P_SSLUtils.h
index 7297eac..5145cb7 100644
--- a/iocore/net/P_SSLUtils.h
+++ b/iocore/net/P_SSLUtils.h
@@ -62,6 +62,8 @@ enum SSL_Stats
   ssl_user_agent_session_hit_stat,
   ssl_user_agent_session_miss_stat,
   ssl_user_agent_session_timeout_stat,
+  ssl_total_handshake_time_stat,
+  ssl_total_success_handshake_count_stat,
 
   ssl_cipher_stats_start = 100,
   ssl_cipher_stats_end = 300,
@@ -75,6 +77,7 @@ extern RecRawStatBlock *ssl_rsb;
 #define SSL_INCREMENT_DYN_STAT(x) RecIncrRawStat(ssl_rsb, NULL, (int) x, 1)
 #define SSL_DECREMENT_DYN_STAT(x) RecIncrRawStat(ssl_rsb, NULL, (int) x, -1)
 #define SSL_SET_COUNT_DYN_STAT(x,count) RecSetRawStatCount(ssl_rsb, x, count)
+#define SSL_INCREMENT_DYN_STAT_EX(x, y) RecIncrRawStat(ssl_rsb, NULL, (int) x, y)
 #define SSL_CLEAR_DYN_STAT(x) \
   do { \
     RecSetRawStatSum(ssl_rsb, (x), 0); \

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/iocore/net/SSLNetVConnection.cc
----------------------------------------------------------------------
diff --git a/iocore/net/SSLNetVConnection.cc b/iocore/net/SSLNetVConnection.cc
index 57c022c..11e9d1e 100644
--- a/iocore/net/SSLNetVConnection.cc
+++ b/iocore/net/SSLNetVConnection.cc
@@ -468,6 +468,7 @@ SSLNetVConnection::SSLNetVConnection():
   npnEndpoint(NULL)
 {
   ssl = NULL;
+  sslHandshakeBeginTime = 0;
 }
 
 void
@@ -572,6 +573,14 @@ SSLNetVConnection::sslServerHandShakeEvent(int &err)
 
     sslHandShakeComplete = true;
 
+    if (sslHandshakeBeginTime) {
+      const ink_hrtime ssl_handshake_time = ink_get_hrtime() - sslHandshakeBeginTime;
+      Debug("ssl", "ssl handshake time:%" PRId64, ssl_handshake_time);
+      sslHandshakeBeginTime = 0;
+      SSL_INCREMENT_DYN_STAT_EX(ssl_total_handshake_time_stat, ssl_handshake_time);
+      SSL_INCREMENT_DYN_STAT(ssl_total_success_handshake_count_stat);
+    }
+
     {
       const unsigned char * proto = NULL;
       unsigned len = 0;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/iocore/net/SSLNextProtocolAccept.cc
----------------------------------------------------------------------
diff --git a/iocore/net/SSLNextProtocolAccept.cc b/iocore/net/SSLNextProtocolAccept.cc
index 92524d0..558a1b1 100644
--- a/iocore/net/SSLNextProtocolAccept.cc
+++ b/iocore/net/SSLNextProtocolAccept.cc
@@ -119,6 +119,7 @@ SSLNextProtocolAccept::mainEvent(int event, void * edata)
 {
   SSLNetVConnection * netvc = ssl_netvc_cast(event, edata);
 
+  netvc->sslHandshakeBeginTime = ink_get_hrtime();
   Debug("ssl", "[SSLNextProtocolAccept:mainEvent] event %d netvc %p", event, netvc);
 
   switch (event) {

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/iocore/net/SSLUtils.cc
----------------------------------------------------------------------
diff --git a/iocore/net/SSLUtils.cc b/iocore/net/SSLUtils.cc
index f5083b9..8d80c90 100644
--- a/iocore/net/SSLUtils.cc
+++ b/iocore/net/SSLUtils.cc
@@ -634,6 +634,14 @@ SSLInitializeStatistics()
                      RECD_INT, RECP_PERSISTENT, (int) ssl_origin_server_unknown_ca_stat,
                      RecRawStatSyncSum);
 
+  // SSL handshake time
+  RecRegisterRawStat(ssl_rsb, RECT_PROCESS, "proxy.process.ssl.total_handshake_time",
+                     RECD_INT, RECP_PERSISTENT, (int) ssl_total_handshake_time_stat,
+                     RecRawStatSyncSum);
+  RecRegisterRawStat(ssl_rsb, RECT_PROCESS, "proxy.process.ssl.total_success_handshake_count",
+                     RECD_INT, RECP_PERSISTENT, (int) ssl_total_success_handshake_count_stat,
+                     RecRawStatSyncCount);
+
   // Get and register the SSL cipher stats. Note that we are using the default SSL context
to obtain
   // the cipher list. This means that the set of ciphers is fixed by the build configuration
and not
   // filtered by proxy.config.ssl.server.cipher_suite. This keeps the set of cipher suites
stable across

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/proxy/http/HttpClientSession.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpClientSession.cc b/proxy/http/HttpClientSession.cc
index 0620b3b..3f00cd4 100644
--- a/proxy/http/HttpClientSession.cc
+++ b/proxy/http/HttpClientSession.cc
@@ -191,6 +191,10 @@ HttpClientSession::new_connection(NetVConnection * new_vc, bool backdoor,
MIOBuf
   HTTP_INCREMENT_DYN_STAT(http_current_client_connections_stat);
   conn_decrease = true;
   HTTP_INCREMENT_DYN_STAT(http_total_client_connections_stat);
+  if (static_cast<HttpProxyPort::TransportType>(new_vc->attributes) == HttpProxyPort::TRANSPORT_SSL)
{
+    HTTP_INCREMENT_DYN_STAT(https_connection_count_stat);
+  }
+
   /* inbound requests stat should be incremented here, not after the
    * header has been read */
   HTTP_INCREMENT_DYN_STAT(http_total_incoming_connections_stat);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/proxy/http/HttpConfig.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index 0d9c9e3..62d6304 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -1198,6 +1198,12 @@ register_stat_callbacks()
                      RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_total_x_redirect_stat, RecRawStatSyncCount);
 
+  RecRegisterRawStat(http_rsb, RECT_PROCESS,
+                     "proxy.process.https.incoming_requests",
+                     RECD_COUNTER, RECP_PERSISTENT, (int) https_incoming_requests_stat, RecRawStatSyncCount);
+  RecRegisterRawStat(http_rsb, RECT_PROCESS,
+                     "proxy.process.https.connection_count",
+                     RECD_COUNTER, RECP_PERSISTENT, (int) https_connection_count_stat, RecRawStatSyncCount);
 }
 
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/proxy/http/HttpConfig.h
----------------------------------------------------------------------
diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h
index 15f4b79..4805097 100644
--- a/proxy/http/HttpConfig.h
+++ b/proxy/http/HttpConfig.h
@@ -337,6 +337,9 @@ enum
   http_response_status_505_count_stat,
   http_response_status_5xx_count_stat,
 
+  https_incoming_requests_stat,
+  https_connection_count_stat,
+
   http_stat_count
 };
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/proxy/http/HttpTransact.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc
index 0167136..1d94dec 100644
--- a/proxy/http/HttpTransact.cc
+++ b/proxy/http/HttpTransact.cc
@@ -1293,6 +1293,10 @@ HttpTransact::HandleRequest(State* s)
 
   HTTP_INCREMENT_TRANS_STAT(http_incoming_requests_stat);
 
+  if (s->client_info.port_attribute == HttpProxyPort::TRANSPORT_SSL) {
+    HTTP_INCREMENT_TRANS_STAT(https_incoming_requests_stat);
+  }
+
   if (s->api_release_server_session == true) {
     s->api_release_server_session = false;
   }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/proxy/spdy/SpdyClientSession.cc
----------------------------------------------------------------------
diff --git a/proxy/spdy/SpdyClientSession.cc b/proxy/spdy/SpdyClientSession.cc
index fcb79fb..47f57c3 100644
--- a/proxy/spdy/SpdyClientSession.cc
+++ b/proxy/spdy/SpdyClientSession.cc
@@ -101,6 +101,7 @@ SpdyClientSession::init(NetVConnection * netvc, spdy::SessionVersion vers)
   // with no increment. It seems a lesser thing to have the thread counts
   // a little off but globally consistent.
   SpdyStatIncrCount(Config::STAT_ACTIVE_SESSION_COUNT, netvc);
+  SpdyStatIncrCount(Config::STAT_TOTAL_CONNECTION_COUNT, netvc);
 
   ink_release_assert(r == 0);
   sm_id = atomic_inc(g_sm_id);
@@ -398,6 +399,7 @@ spdy_read_fetch_body_callback(spdylay_session * /*session*/, int32_t stream_id,
   if (already < (int64_t)length) {
     if (req->event == TS_FETCH_EVENT_EXT_BODY_DONE) {
       TSHRTime end_time = TShrtime();
+      SpdyStatIncr(Config::STAT_TOTAL_STREAM_TIME, sm, end_time - req->start_time);
       Debug("spdy", "----Request[%" PRIu64 ":%d] %s %lld %d", sm->sm_id, req->stream_id,
             req->url.c_str(), (end_time - req->start_time)/TS_HRTIME_MSECOND,
             req->fetch_data_len);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/proxy/spdy/SpdyCommon.cc
----------------------------------------------------------------------
diff --git a/proxy/spdy/SpdyCommon.cc b/proxy/spdy/SpdyCommon.cc
index 0b89bf8..d5687f4 100644
--- a/proxy/spdy/SpdyCommon.cc
+++ b/proxy/spdy/SpdyCommon.cc
@@ -30,6 +30,8 @@ Config SPDY_CFG;
 static char const * const SPDY_STAT_ACTIVE_SESSION_NAME = "proxy.process.spdy.active_sessions";
 static char const * const SPDY_STAT_ACTIVE_STREAM_NAME = "proxy.process.spdy.active_streams";
 static char const * const SPDY_STAT_TOTAL_STREAM_NAME = "proxy.process.spdy.total_streams";
+static char const * const SPDY_STAT_TOTAL_TIME_NAME = "proxy.process.spdy.total_time";
+static char const * const SPDY_STAT_TOTAL_CONNECTION_NAME = "proxy.process.spdy.connection_count";
 
 string
 http_date(time_t t)
@@ -56,6 +58,8 @@ spdy_config_load()
   RecRegisterRawStat(SPDY_CFG.rsb, RECT_PROCESS, SPDY_STAT_ACTIVE_SESSION_NAME, RECD_INT,
RECP_NON_PERSISTENT, static_cast<int>(Config::STAT_ACTIVE_SESSION_COUNT), RecRawStatSyncCount);
   RecRegisterRawStat(SPDY_CFG.rsb, RECT_PROCESS, SPDY_STAT_ACTIVE_STREAM_NAME, RECD_INT,
RECP_NON_PERSISTENT, static_cast<int>(Config::STAT_ACTIVE_STREAM_COUNT), RecRawStatSyncCount);
   RecRegisterRawStat(SPDY_CFG.rsb, RECT_PROCESS, SPDY_STAT_TOTAL_STREAM_NAME, RECD_INT, RECP_NON_PERSISTENT,
static_cast<int>(Config::STAT_TOTAL_STREAM_COUNT), RecRawStatSyncCount);
+  RecRegisterRawStat(SPDY_CFG.rsb, RECT_PROCESS, SPDY_STAT_TOTAL_TIME_NAME, RECD_INT, RECP_NON_PERSISTENT,
static_cast<int>(Config::STAT_TOTAL_STREAM_TIME), RecRawStatSyncSum);
+  RecRegisterRawStat(SPDY_CFG.rsb, RECT_PROCESS, SPDY_STAT_TOTAL_CONNECTION_NAME, RECD_INT,
RECP_NON_PERSISTENT, static_cast<int>(Config::STAT_TOTAL_CONNECTION_COUNT), RecRawStatSyncCount);
 
   return 0;
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/12bde5b9/proxy/spdy/SpdyCommon.h
----------------------------------------------------------------------
diff --git a/proxy/spdy/SpdyCommon.h b/proxy/spdy/SpdyCommon.h
index 92ab047..330a979 100644
--- a/proxy/spdy/SpdyCommon.h
+++ b/proxy/spdy/SpdyCommon.h
@@ -73,6 +73,9 @@ struct Config {
     STAT_ACTIVE_SESSION_COUNT, ///< Current # of active SPDY sessions.
     STAT_ACTIVE_STREAM_COUNT, ///< Current # of active SPDY streams.
     STAT_TOTAL_STREAM_COUNT, ///< Total number of streams created.
+    STAT_TOTAL_STREAM_TIME,  //< Total stream time
+    STAT_TOTAL_CONNECTION_COUNT, //< Total connections running spdy
+
     N_STATS ///< Terminal counter, NOT A STAT INDEX.
   };
   RecRawStatBlock* rsb; ///< Container for statistics.
@@ -112,4 +115,9 @@ SpdyStatDecrCount(Config::StatIndex idx, Continuation* contp) {
   RecIncrRawStatCount(SPDY_CFG.rsb, contp->mutex->thread_holding, idx, -1);
 }
 
+inline void
+SpdyStatIncr(Config::StatIndex idx, Continuation* contp, const int64_t incr) {
+  RecIncrRawStat(SPDY_CFG.rsb, contp->mutex->thread_holding, idx, incr);
+}
+
 #endif


Mime
View raw message