diff --git a/cmd/traffic_manager/StatProcessor.h b/cmd/traffic_manager/StatProcessor.h index 0d3b7514948..1b7baa26bbf 100644 --- a/cmd/traffic_manager/StatProcessor.h +++ b/cmd/traffic_manager/StatProcessor.h @@ -41,10 +41,6 @@ #include "LocalManager.h" #include "WebOverview.h" -#define _HEADER -#define _D(x) -#define _FOOTER -#include "DynamicStats.h" #include "StatType.h" #if HAVE_LIBEXPAT diff --git a/doc/admin-guide/files/records.config.en.rst b/doc/admin-guide/files/records.config.en.rst index 1ce5d7685bd..225a1689002 100644 --- a/doc/admin-guide/files/records.config.en.rst +++ b/doc/admin-guide/files/records.config.en.rst @@ -312,14 +312,6 @@ Value Effect Metrics Variables ----------------- -.. ts:cv:: CONFIG proxy.config.stats.snap_frequency INT 60 - - Interval (in seconds) at which to snapshot persistent metrics. - -.. ts:cv:: CONFIG proxy.config.stats.snap_file STRING "stats.snap" - - Name of the file to use for snapshots of persistent metrics. - .. ts:cv:: proxy.config.stats.enable_lua INT 0 Whether to enable execution of the Lua-based custom metrics from @@ -1989,7 +1981,7 @@ Customizable User Response Pages To enable any enpoint there needs to be an entry in :file:`remap.config` which specifically enables it. Such a line would look like: :: - map / http://{stat} + map / http://{cache} The following are the cache endpoints: @@ -2001,8 +1993,6 @@ Customizable User Response Pages - ``hostdb`` = lookups against the hostdb - ``http`` = HTTPSM details, this endpoint is also gated by `proxy.config.http.enable_http_info` - ``net`` = lookup and listing of open connections - - ``stat`` = list of all records.config options and metrics - - ``test`` = test callback page .. ts:cv:: CONFIG proxy.config.http.enable_http_info INT 0 diff --git a/lib/perl/lib/Apache/TS/AdminClient.pm b/lib/perl/lib/Apache/TS/AdminClient.pm index dfbf999daec..00a3bf2afed 100644 --- a/lib/perl/lib/Apache/TS/AdminClient.pm +++ b/lib/perl/lib/Apache/TS/AdminClient.pm @@ -672,8 +672,6 @@ The Apache Traffic Server Administration Manual will explain what these strings proxy.config.ssl.server.private_key.path proxy.config.stat_collector.interval proxy.config.stat_collector.port - proxy.config.stats.snap_file - proxy.config.stats.snap_frequency proxy.config.syslog_facility proxy.config.system.mmap_max proxy.config.system.file_max_pct diff --git a/lib/records/I_RecCore.h b/lib/records/I_RecCore.h index eb4eb4b6e02..f3a36f7f5d5 100644 --- a/lib/records/I_RecCore.h +++ b/lib/records/I_RecCore.h @@ -185,8 +185,6 @@ int RecGetRecordSource(const char *name, RecSourceT *source, bool lock = true); int RecGetRecordAccessType(const char *name, RecAccessT *secure, bool lock = true); int RecSetRecordAccessType(const char *name, RecAccessT secure, bool lock = true); -int RecGetRecordPrefix_Xmalloc(char *prefix, char **result, int *result_len); - //------------------------------------------------------------------------ // Signal and Alarms //------------------------------------------------------------------------ diff --git a/lib/records/RecCore.cc b/lib/records/RecCore.cc index 0baf49b6c7e..61b5439ae7b 100644 --- a/lib/records/RecCore.cc +++ b/lib/records/RecCore.cc @@ -1009,74 +1009,6 @@ RecDumpRecordsHt(RecT rec_type) RecDumpRecords(rec_type, debug_record_callback, NULL); } -//------------------------------------------------------------------------- -// RecGetRecordPrefix_Xmalloc -// -// mimics/replaces proxy/StatSystem.cc::stat_callback(). -// returns the number of variables name match the prefix. -//------------------------------------------------------------------------- -int -RecGetRecordPrefix_Xmalloc(char *prefix, char **buf, int *buf_len) -{ - int num_records = g_num_records; - int result_size = num_records * 256; /* estimate buffer size */ - int num_matched = 0; - char *result = NULL; - - result = (char *)ats_malloc(result_size * sizeof(char)); - memset(result, 0, result_size * sizeof(char)); - - int i; - int total_bytes_written = 0; - int error = 0; - for (i = 0; !error && i < num_records; i++) { - int bytes_written = 0; - int bytes_avail = result_size - total_bytes_written; - RecRecord *r = &(g_records[i]); - if (strncmp(prefix, r->name, strlen(prefix)) == 0) { - rec_mutex_acquire(&(r->lock)); - switch (r->data_type) { - case RECD_INT: - num_matched++; - bytes_written = snprintf(result + total_bytes_written, bytes_avail, "%s=%" PRId64 "\r\n", r->name, r->data.rec_int); - break; - case RECD_FLOAT: - num_matched++; - bytes_written = snprintf(result + total_bytes_written, bytes_avail, "%s=%f\r\n", r->name, r->data.rec_float); - break; - case RECD_STRING: - num_matched++; - bytes_written = snprintf(result + total_bytes_written, bytes_avail, "%s=%s\r\n", r->name, - r->data.rec_string ? r->data.rec_string : "NULL"); - break; - case RECD_COUNTER: - num_matched++; - bytes_written = snprintf(result + total_bytes_written, bytes_avail, "%s=%" PRId64 "\r\n", r->name, r->data.rec_int); - break; - default: - break; - } - - if (bytes_written <= 0 || bytes_written > bytes_avail) { - error = 1; - } else - total_bytes_written += bytes_written; - - rec_mutex_release(&(r->lock)); - } - } - - if (error || total_bytes_written == result_size) { - RecLog(DL_Error, "Stat system was unable to fully generate stat list, size exceeded limit of %d", result_size); - } - - *buf = result; - *buf_len = strlen(result); - - return num_matched; -} - - //------------------------------------------------------------------------- // Backwards compatibility ... TODO: Should eliminate these //------------------------------------------------------------------------- diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc index 51131ad8f82..0e963c9c855 100644 --- a/mgmt/RecordsConfig.cc +++ b/mgmt/RecordsConfig.cc @@ -1114,12 +1114,6 @@ static const RecordElement RecordsConfig[] = // ######### // # Stats # // ######### - //# frequency is in seconds - {RECT_CONFIG, "proxy.config.stats.snap_frequency", RECD_INT, "60", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL} - , - // Jira TS-21 - {RECT_CONFIG, "proxy.config.stats.snap_file", RECD_STRING, "stats.snap", RECU_RESTART_TS, RR_NULL, RECC_NULL, NULL, RECA_NULL} - , {RECT_CONFIG, "proxy.config.stats.enable_lua", RECD_INT, "0", RECU_RESTART_TM, RR_NULL, RECC_INT, "[0-1]", RECA_NULL} , diff --git a/proxy/CacheControl.cc b/proxy/CacheControl.cc index c1129ca53d4..842f3163fd2 100644 --- a/proxy/CacheControl.cc +++ b/proxy/CacheControl.cc @@ -39,7 +39,6 @@ #include "ProxyConfig.h" #include "HTTP.h" #include "HttpConfig.h" -#include "StatSystem.h" #include "P_Cache.h" #include "ts/Regex.h" diff --git a/proxy/DynamicStats.h b/proxy/DynamicStats.h deleted file mode 100644 index 50ba1a4dd63..00000000000 --- a/proxy/DynamicStats.h +++ /dev/null @@ -1,103 +0,0 @@ -/** @file - - A brief file description - - @section license License - - 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. - */ - -_HEADER -// -// Dynamic http stats -// -// this one's in the state machine currently -// -// -// Dynamic Cluster Stats -// -_D(cluster_connections_open_stat) -_D(cluster_connections_openned_stat) -_D(cluster_con_total_time_stat) -_D(cluster_ctrl_msgs_sent_stat) -_D(cluster_slow_ctrl_msgs_sent_stat) // fast ctrl messages do not require a mallo -_D(cluster_ctrl_msgs_recvd_stat) -_D(cluster_slow_ctrl_msgs_recvd_stat) -_D(cluster_ctrl_msgs_send_time_stat) -_D(cluster_ctrl_msgs_recv_time_stat) -_D(cluster_read_bytes_stat) -_D(cluster_write_bytes_stat) -_D(cluster_op_delayed_for_lock_stat) // a message to a machine was blocked by a locked connection -_D(cluster_connections_locked_stat) // a connection could not use its slot (locked) -_D(cluster_connections_bumped_stat) // a connection could not get a slot (scheduled too late) -_D(cluster_nodes_stat) -_D(cluster_net_backup_stat) -_D(cluster_machines_allocated_stat) -_D(cluster_machines_freed_stat) -_D(cluster_configuration_changes_stat) -_D(cluster_delayed_reads_stat) -_D(cluster_byte_bank_used_stat) -_D(cluster_alloc_data_news_stat) -_D(cluster_write_bb_mallocs_stat) -_D(cluster_partial_reads_stat) -_D(cluster_partial_writes_stat) -_D(cluster_cache_outstanding_stat) -_D(cluster_remote_op_timeouts_stat) -_D(cluster_remote_op_reply_timeouts_stat) -_D(cluster_chan_inuse_stat) -_D(cluster_open_delays_stat) -_D(cluster_open_delay_time_stat) -_D(cluster_cache_callbacks_stat) -_D(cluster_cache_callback_time_stat) -_D(cluster_cache_rmt_callbacks_stat) -_D(cluster_cache_rmt_callback_time_stat) -_D(cluster_cache_lkrmt_callbacks_stat) -_D(cluster_cache_lkrmt_callback_time_stat) -_D(cluster_thread_steal_expires_stat) -_D(cluster_local_connections_closed_stat) -_D(cluster_local_connection_time_stat) -_D(cluster_remote_connections_closed_stat) -_D(cluster_remote_connection_time_stat) -_D(cluster_rdmsg_assemble_time_stat) -_D(cluster_ping_time_stat) -_D(cluster_setdata_no_clustervc_stat) -_D(cluster_setdata_no_tunnel_stat) -_D(cluster_setdata_no_cachevc_stat) -_D(cluster_setdata_no_cluster_stat) -_D(cluster_vc_write_stall_stat) -_D(cluster_no_remote_space_stat) -_D(cluster_level1_bank_stat) -_D(cluster_multilevel_bank_stat) -_D(cluster_vc_cache_insert_lock_misses_stat) -_D(cluster_vc_cache_inserts_stat) -_D(cluster_vc_cache_lookup_lock_misses_stat) -_D(cluster_vc_cache_lookup_hits_stat) -_D(cluster_vc_cache_lookup_misses_stat) -_D(cluster_vc_cache_scans_stat) -_D(cluster_vc_cache_scan_lock_misses_stat) -_D(cluster_vc_cache_purges_stat) -_D(cluster_write_lock_misses_stat) - - -// -// Dynamic Load Shedding Stats -// -_D(cpu_metric_load_percent_stat) -_D(cpu_metric_net_loops_per_second_stat) -_D(cpu_metric_fds_ready_per_loop_stat) - -_FOOTER diff --git a/proxy/IPAllow.cc b/proxy/IPAllow.cc index 20c36d9b169..4e94029b080 100644 --- a/proxy/IPAllow.cc +++ b/proxy/IPAllow.cc @@ -32,7 +32,6 @@ #include "Main.h" #include "IPAllow.h" #include "ProxyConfig.h" -#include "StatSystem.h" #include "P_EventSystem.h" #include "P_Cache.h" #include "hdrs/HdrToken.h" diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc index 8373e1677ac..d41c874f016 100644 --- a/proxy/InkAPI.cc +++ b/proxy/InkAPI.cc @@ -41,7 +41,6 @@ #include "P_Net.h" #include "P_UDPNet.h" #include "P_HostDB.h" -#include "StatSystem.h" #include "P_Cache.h" #include "I_RecCore.h" #include "I_RecSignals.h" diff --git a/proxy/InkAPIInternal.h b/proxy/InkAPIInternal.h index 241e177c503..faa2ea3c08e 100644 --- a/proxy/InkAPIInternal.h +++ b/proxy/InkAPIInternal.h @@ -26,7 +26,6 @@ #include "P_EventSystem.h" #include "URL.h" -#include "StatSystem.h" #include "P_Net.h" #include "ts.h" #include "experimental.h" diff --git a/proxy/Main.cc b/proxy/Main.cc index fd66cd55fd1..d72b559e64e 100644 --- a/proxy/Main.cc +++ b/proxy/Main.cc @@ -57,7 +57,6 @@ extern "C" int plock(int); #include "Main.h" #include "ts/signals.h" #include "Error.h" -#include "StatSystem.h" #include "P_EventSystem.h" #include "P_Net.h" #include "P_UDPNet.h" @@ -1072,7 +1071,7 @@ struct ShowStats : public Continuation { (void)e; if (!(cycle++ % 24)) printf("r:rr w:ww r:rbs w:wbs open polls\n"); - ink_statval_t sval, cval; + int64_t sval, cval; NET_READ_DYN_SUM(net_calls_to_readfromnet_stat, sval); int64_t d_rb = sval - last_rb; @@ -1700,9 +1699,6 @@ main(int /* argc ATS_UNUSED */, const char **argv) } Note("cache clustering %s", cache_clustering_enabled ? "enabled" : "disabled"); - // Initialize New Stat system - initialize_all_global_stats(); - num_of_net_threads = adjust_num_of_net_threads(num_of_net_threads); size_t stacksize; @@ -1819,7 +1815,6 @@ main(int /* argc ATS_UNUSED */, const char **argv) // acc.start(); // pmgmt initialization moved up, needed by RecProcessInit // pmgmt->start(); - start_stats_snap(); // Initialize Response Body Factory body_factory = new HttpBodyFactory; diff --git a/proxy/Makefile.am b/proxy/Makefile.am index 2b072370eac..cbd1da463b0 100644 --- a/proxy/Makefile.am +++ b/proxy/Makefile.am @@ -143,7 +143,6 @@ traffic_server_SOURCES = \ CoreUtils.cc \ CoreUtils.h \ Crash.cc \ - DynamicStats.h \ EventName.cc \ FetchSM.cc \ HttpTransStats.h \ @@ -162,6 +161,7 @@ traffic_server_SOURCES = \ InkIOCoreAPI.cc \ Main.cc \ Main.h \ + Milestones.h \ ParentConsistentHash.cc \ ParentConsistentHash.h \ ParentRoundRobin.cc \ @@ -181,8 +181,6 @@ traffic_server_SOURCES = \ SocksProxy.cc \ StatPages.cc \ StatPages.h \ - StatSystem.cc \ - StatSystem.h \ Transform.cc \ Transform.h \ TransformInternal.h @@ -286,7 +284,6 @@ traffic_sac_SOURCES = \ ControlBase.cc \ ControlMatcher.cc \ CacheControl.cc \ - StatSystem.cc \ ReverseProxy.cc \ EventName.cc \ StatPages.cc \ diff --git a/proxy/Milestones.h b/proxy/Milestones.h new file mode 100644 index 00000000000..bc2bcd16569 --- /dev/null +++ b/proxy/Milestones.h @@ -0,0 +1,76 @@ +/** @file + + A brief file description + + @section license License + + 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. + */ + +#if !defined(_Milestones_h_) +#define _Milestones_h_ + +#include "ts/ink_platform.h" +#include "ts/ink_hrtime.h" +#include "ts/apidefs.h" + +///////////////////////////////////////////////////////////// +// +// class TransactionMilestones +// +///////////////////////////////////////////////////////////// +class TransactionMilestones +{ +public: + TransactionMilestones() { ink_zero(milestones); } + + ink_hrtime &operator[](TSMilestonesType ms) { return milestones[ms]; } + + ink_hrtime operator[](TSMilestonesType ms) const { return milestones[ms]; } + + /** + * Takes two milestones and returns the difference. + * @param start The start time + * @param end The end time + * @return A double that is the time in seconds + */ + int64_t + difference_msec(TSMilestonesType ms_start, TSMilestonesType ms_end) const + { + if (milestones[ms_end] == 0) { + return -1; + } + return ink_hrtime_to_msec(milestones[ms_end] - milestones[ms_start]); + } + + double + difference(TSMilestonesType ms_start, TSMilestonesType ms_end) const + { + return (double)difference_msec(ms_start, ms_end); + } + + ink_hrtime + elapsed(TSMilestonesType ms_start, TSMilestonesType ms_end) const + { + return milestones[ms_end] - milestones[ms_start]; + } + +private: + ink_hrtime milestones[TS_MILESTONE_LAST_ENTRY]; +}; + +#endif /* _Milestones_h_ */ diff --git a/proxy/ReverseProxy.cc b/proxy/ReverseProxy.cc index 7a60af21860..4a2e145ebe8 100644 --- a/proxy/ReverseProxy.cc +++ b/proxy/ReverseProxy.cc @@ -32,7 +32,6 @@ #include "Main.h" #include "Error.h" #include "P_EventSystem.h" -#include "StatSystem.h" #include "P_Cache.h" #include "ProxyConfig.h" #include "ReverseProxy.h" diff --git a/proxy/SocksProxy.cc b/proxy/SocksProxy.cc index 1ff2f789545..3354a75b9a9 100644 --- a/proxy/SocksProxy.cc +++ b/proxy/SocksProxy.cc @@ -28,7 +28,6 @@ */ #include "ts/ink_platform.h" -#include "StatSystem.h" #include "P_Net.h" #include "I_OneWayTunnel.h" #include "HttpSessionAccept.h" diff --git a/proxy/StatSystem.cc b/proxy/StatSystem.cc deleted file mode 100644 index b237a5e6278..00000000000 --- a/proxy/StatSystem.cc +++ /dev/null @@ -1,470 +0,0 @@ -/** @file - - A brief file description - - @section license License - - 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. - */ - -/**************************************************************************** - - StatSystem.cc -- - Created On : Fri Apr 3 19:41:39 1998 - ****************************************************************************/ -#include "Main.h" -#include "StatSystem.h" -#include "P_EventSystem.h" -#include "Error.h" -#include "ProcessManager.h" -#include "ProxyConfig.h" -#include "StatPages.h" -#include "HTTP.h" -#include "ts/I_Layout.h" - -// defines - -#define SNAP_USAGE_PERIOD HRTIME_SECONDS(2) - - -// variables - -#ifdef DEBUG -ink_mutex http_time_lock; -time_t last_http_local_time; -#endif -ink_stat_lock_t global_http_trans_stat_lock; -ink_unprot_global_stat_t global_http_trans_stats[MAX_HTTP_TRANS_STATS]; -#ifndef USE_LOCKS_FOR_DYN_STATS -inkcoreapi ink_unprot_global_stat_t global_dyn_stats[MAX_DYN_STATS - DYN_STAT_START]; -#else -inkcoreapi ink_prot_global_stat_t global_dyn_stats[MAX_DYN_STATS - DYN_STAT_START]; -#endif - -Ptr rusage_snap_mutex; -struct rusage rusage_snap; -struct rusage rusage_snap_old; -ink_hrtime rusage_snap_time; -ink_hrtime rusage_snap_time_old; -int snap_stats_every = 60; - -ink_hrtime http_handler_times[MAX_HTTP_HANDLER_EVENTS]; -int http_handler_counts[MAX_HTTP_HANDLER_EVENTS]; - - -char snap_filename[PATH_NAME_MAX] = DEFAULT_SNAP_FILENAME; - -#define DEFAULT_PERSISTENT - -#ifndef DEFAULT_PERSISTENT -static int persistent_stats[] = {http_incoming_requests_stat}; -#else -static int non_persistent_stats[] = { - //////////////////////////// - // Start of Cluster stats - //////////////////////////// - cluster_connections_open_stat, cluster_connections_openned_stat, cluster_con_total_time_stat, cluster_ctrl_msgs_sent_stat, - cluster_slow_ctrl_msgs_sent_stat, cluster_ctrl_msgs_recvd_stat, cluster_slow_ctrl_msgs_recvd_stat, - cluster_ctrl_msgs_send_time_stat, cluster_ctrl_msgs_recv_time_stat, cluster_read_bytes_stat, cluster_write_bytes_stat, - cluster_op_delayed_for_lock_stat, cluster_connections_locked_stat, cluster_connections_bumped_stat, cluster_nodes_stat, - cluster_net_backup_stat, cluster_machines_allocated_stat, cluster_machines_freed_stat, cluster_configuration_changes_stat, - cluster_delayed_reads_stat, cluster_byte_bank_used_stat, cluster_alloc_data_news_stat, cluster_write_bb_mallocs_stat, - cluster_partial_reads_stat, cluster_partial_writes_stat, cluster_cache_outstanding_stat, cluster_remote_op_timeouts_stat, - cluster_remote_op_reply_timeouts_stat, cluster_chan_inuse_stat, cluster_open_delays_stat, cluster_open_delay_time_stat, - cluster_cache_callbacks_stat, cluster_cache_callback_time_stat, cluster_cache_rmt_callbacks_stat, - cluster_cache_rmt_callback_time_stat, cluster_cache_lkrmt_callbacks_stat, cluster_cache_lkrmt_callback_time_stat, - cluster_thread_steal_expires_stat, cluster_local_connections_closed_stat, cluster_local_connection_time_stat, - cluster_remote_connections_closed_stat, cluster_remote_connection_time_stat, cluster_rdmsg_assemble_time_stat, - cluster_ping_time_stat, cluster_setdata_no_clustervc_stat, cluster_setdata_no_tunnel_stat, cluster_setdata_no_cachevc_stat, - cluster_setdata_no_cluster_stat, cluster_vc_write_stall_stat, cluster_no_remote_space_stat, cluster_level1_bank_stat, - cluster_multilevel_bank_stat, cluster_vc_cache_insert_lock_misses_stat, cluster_vc_cache_inserts_stat, - cluster_vc_cache_lookup_lock_misses_stat, cluster_vc_cache_lookup_hits_stat, cluster_vc_cache_lookup_misses_stat, - cluster_vc_cache_scans_stat, cluster_vc_cache_scan_lock_misses_stat, cluster_vc_cache_purges_stat, cluster_write_lock_misses_stat, - ///////////////////////////////////// - // Start of Scheduled Update stats - ///////////////////////////////////// - // DNS - // dns_success_time_stat -}; -#endif - -#define _HEADER DynamicStatsString_t DynamicStatsStrings[] = { -#define _FOOTER \ - } \ - ; -#define _D(_x) \ - { \ - _x, #_x \ - } \ - , - -#include "DynamicStats.h" -#undef _HEADER -#undef _FOOTER -#undef _D - - -// functions - -static int -persistent_stat(int i) -{ -#ifndef DEFAULT_PERSISTENT - for (unsigned j = 0; j < countof(persistent_stats); j++) - if (persistent_stats[j] == i) - return 1; - return 0; -#else - for (unsigned j = 0; j < countof(non_persistent_stats); j++) - if (non_persistent_stats[j] == i) - return 0; - return 1; -#endif -} - -static int -open_stats_snap() -{ - int fd = socketManager.open(snap_filename, O_CREAT | O_RDWR); - if (fd < 0) { - Warning("unable to open %s: %s", snap_filename, strerror(-fd)); - return -1; - } - return fd; -} - -static void -clear_stats() -{ - int i = 0; - - int stats_size = MAX_HTTP_TRANS_STATS - NO_HTTP_TRANS_STATS - 1; - for (i = 0; i < stats_size; i++) { - if (persistent_stat(i + NO_HTTP_TRANS_STATS)) { - global_http_trans_stats[i].sum = 0; - global_http_trans_stats[i].count = 0; - } - } - stats_size = MAX_DYN_STATS - NO_DYN_STATS - 1; - for (i = 0; i < stats_size; i++) { - if (persistent_stat(i + NO_DYN_STATS)) { - global_dyn_stats[i].sum = 0; - global_dyn_stats[i].count = 0; - } - } - - socketManager.unlink(snap_filename); - Debug("stats", "clear_stats: clearing statistics"); -} - -static void -read_stats_snap() -{ - unsigned int version; - unsigned int version_read; - int count; - int fd = -1; - int i = 0; - int stats_size = -1; - - version = STATS_MAJOR_VERSION; - - if ((fd = open_stats_snap()) < 0) - goto Lmissmatch; - - // read and verify snap - if (socketManager.read(fd, (char *)&version_read, sizeof(version_read)) != sizeof(version_read)) - goto Lmissmatch; - if (version != version_read) - goto Lmissmatch; - stats_size = MAX_HTTP_TRANS_STATS - NO_HTTP_TRANS_STATS + MAX_DYN_STATS - NO_DYN_STATS; - if (socketManager.read(fd, (char *)&count, sizeof(count)) != sizeof(count)) - goto Lmissmatch; - if (count != stats_size) - goto Lmissmatch; - - stats_size = MAX_HTTP_TRANS_STATS - NO_HTTP_TRANS_STATS; - for (i = 0; i < stats_size; i++) { - if (socketManager.read(fd, (char *)&global_http_trans_stats[i].sum, sizeof(global_http_trans_stats[i].sum)) != - sizeof(global_http_trans_stats[i].sum)) - goto Lmissmatch; - if (socketManager.read(fd, (char *)&global_http_trans_stats[i].count, sizeof(global_http_trans_stats[i].count)) != - sizeof(global_http_trans_stats[i].count)) - goto Lmissmatch; - } - stats_size = MAX_DYN_STATS - NO_DYN_STATS; - for (i = 0; i < stats_size; i++) { - if (socketManager.read(fd, (char *)&global_dyn_stats[i].sum, sizeof(global_dyn_stats[i].sum)) != - sizeof(global_dyn_stats[i].sum)) - goto Lmissmatch; - if (socketManager.read(fd, (char *)&global_dyn_stats[i].count, sizeof(global_dyn_stats[i].count)) != - sizeof(global_dyn_stats[i].count)) - goto Lmissmatch; - } - Debug("stats", "read_stats_snap: read statistics"); - - // close(fd); - socketManager.close(fd); - return; - -Lmissmatch: - Note("clearing statistics"); - clear_stats(); - // close(fd); - socketManager.close(fd); -} - -static void -write_stats_snap() -{ - int fd = 0; - int version = STATS_MAJOR_VERSION; - char *buf = NULL; - - if ((fd = open_stats_snap()) < 0) { - Warning("unable to snap statistics"); - return; - } - - { - int stats_size = MAX_HTTP_TRANS_STATS - NO_HTTP_TRANS_STATS + MAX_DYN_STATS - NO_DYN_STATS; - int buf_size = sizeof(unsigned int) * 3 + stats_size * (sizeof(global_dyn_stats[0].sum) + sizeof(global_dyn_stats[0].count)); - buf = (char *)ats_malloc(buf_size); - char *p = buf; - int i = 0; - - memcpy(p, (char *)&version, sizeof(version)); - p += sizeof(version); - memcpy(p, (char *)&stats_size, sizeof(stats_size)); - p += sizeof(stats_size); - - stats_size = MAX_HTTP_TRANS_STATS - NO_HTTP_TRANS_STATS; - STAT_LOCK_ACQUIRE(&(global_http_trans_stat_lock)); - for (i = 0; i < stats_size; i++) { - memcpy(p, (char *)&global_http_trans_stats[i].sum, sizeof(global_http_trans_stats[i].sum)); - p += sizeof(global_http_trans_stats[i].sum); - memcpy(p, (char *)&global_http_trans_stats[i].count, sizeof(global_http_trans_stats[i].count)); - p += sizeof(global_http_trans_stats[i].count); - } - STAT_LOCK_RELEASE(&(global_http_trans_stat_lock)); - stats_size = MAX_DYN_STATS - NO_DYN_STATS; - for (i = 0; i < stats_size; i++) { - // INKqa09981 (Clearing Host Database and DNS Statistics) - ink_statval_t count, sum; - READ_GLOBAL_DYN_STAT(i, count, sum); - memcpy(p, (char *)&sum, sizeof(sum)); - p += sizeof(sum); - memcpy(p, (char *)&count, sizeof(count)); - p += sizeof(count); - } - memcpy(p, (char *)&version, sizeof(version)); - - if (socketManager.write(fd, buf, buf_size) != buf_size) { - Warning("unable to snap statistics"); - ats_free(buf); - socketManager.close(fd); - return; - } - } - ats_free(buf); - socketManager.close(fd); - Debug("stats", "snapped stats"); -} - -struct SnapStatsContinuation : public Continuation { - int - mainEvent(int /* event ATS_UNUSED */, Event *e ATS_UNUSED) - { - write_stats_snap(); - e->schedule_every(HRTIME_SECONDS(snap_stats_every)); - return EVENT_CONT; - } - SnapStatsContinuation() : Continuation(new_ProxyMutex()) { SET_HANDLER(&SnapStatsContinuation::mainEvent); } -}; - -static void -take_rusage_snap() -{ - rusage_snap_old = rusage_snap; - rusage_snap_time_old = rusage_snap_time; - int retries = 3; - while (retries--) { - if (getrusage(RUSAGE_SELF, &rusage_snap) < 0) { - if (errno == EINTR) - continue; - Note("getrusage [%d %s]", errno, strerror(errno)); - } else - rusage_snap_time = Thread::get_hrtime(); - break; - } - Debug("rusage", "took rusage snap %" PRId64 "", rusage_snap_time); -} - -struct SnapCont; -typedef int (SnapCont::*SnapContHandler)(int, void *); - -struct SnapCont : public Continuation { - int - mainEvent(int /* event ATS_UNUSED */, Event *e) - { - take_rusage_snap(); - e->schedule_every(SNAP_USAGE_PERIOD); - return EVENT_CONT; - } - SnapCont(ProxyMutex *m) : Continuation(m) { SET_HANDLER((SnapContHandler)&SnapCont::mainEvent); } -}; - -void -start_stats_snap() -{ - eventProcessor.schedule_every(new SnapCont(rusage_snap_mutex), SNAP_USAGE_PERIOD, ET_CALL); - if (snap_stats_every) - eventProcessor.schedule_every(new SnapStatsContinuation(), HRTIME_SECONDS(snap_stats_every), ET_CALL); - else - Warning("disabling statistics snap"); -} - -static Action * -stat_callback(Continuation *cont, HTTPHdr *header) -{ - URL *url; - int length; - const char *path; - char *result = NULL; - int result_size; - bool empty; - - url = header->url_get(); - path = url->path_get(&length); - - char *buffer = NULL; - int buffer_len = 0; - int num_prefix_buffer; - - char *var_prefix = (char *)alloca((length + 1) * sizeof(char)); - - memset(var_prefix, 0, ((length + 1) * sizeof(char))); - if (path && length > 0) - ink_strlcpy(var_prefix, path, length + 1); - - num_prefix_buffer = RecGetRecordPrefix_Xmalloc(var_prefix, &buffer, &buffer_len); - empty = (num_prefix_buffer == 0); - - if (!empty) { - result_size = (buffer_len + 16) * sizeof(char); - result = (char *)ats_malloc(result_size); - memset(result, 0, result_size); - - snprintf(result, result_size - 7, "
\n%s", buffer);
-  }
-
-
-  if (!empty) {
-    StatPageData data;
-
-    ink_strlcat(result, "
\n", result_size); - - data.data = result; - data.length = strlen(result); - cont->handleEvent(STAT_PAGE_SUCCESS, &data); - } else { - ats_free(result); - cont->handleEvent(STAT_PAGE_FAILURE, NULL); - } - ats_free(buffer); - - return ACTION_RESULT_DONE; -} - -static Action * -testpage_callback(Continuation *cont, HTTPHdr *) -{ - const int buf_size = 64000; - char *buffer = (char *)ats_malloc(buf_size); - - for (int i = 0; i < buf_size; i++) { - buffer[i] = (char)('a' + (i % 26)); - } - buffer[buf_size - 1] = '\0'; - - StatPageData data; - - data.data = buffer; - data.length = strlen(buffer); - cont->handleEvent(STAT_PAGE_SUCCESS, &data); - - return ACTION_RESULT_DONE; -} - -static void -testpage_callback_init() -{ - statPagesManager.register_http("test", testpage_callback); -} - -void -initialize_all_global_stats() -{ - int istat, i; - char snap_file[PATH_NAME_MAX]; - ats_scoped_str rundir(RecConfigReadRuntimeDir()); - - if (access(rundir, R_OK | W_OK) == -1) { - Warning("Unable to access() local state directory '%s': %d, %s", (const char *)rundir, errno, strerror(errno)); - Warning(" Please set 'proxy.config.local_state_dir' to allow statistics collection"); - } - REC_ReadConfigString(snap_file, "proxy.config.stats.snap_file", PATH_NAME_MAX); - Layout::relative_to(snap_filename, sizeof(snap_filename), (const char *)rundir, snap_file); - Debug("stats", "stat snap filename %s", snap_filename); - - statPagesManager.register_http("stat", stat_callback); - - testpage_callback_init(); - - read_stats_snap(); - rusage_snap_mutex = new_ProxyMutex(); - take_rusage_snap(); - take_rusage_snap(); // fill in _old as well - - STAT_LOCK_INIT(&(global_http_trans_stat_lock), "Global Http Stats Lock"); - - for (istat = NO_HTTP_TRANS_STATS; istat < MAX_HTTP_TRANS_STATS; istat++) { - if (!persistent_stat(istat)) { - INITIALIZE_GLOBAL_TRANS_STATS(global_http_trans_stats[istat]); - } - } - - for (istat = NO_DYN_STATS; istat < MAX_DYN_STATS; istat++) { - if (!persistent_stat(istat)) { - i = istat - DYN_STAT_START; - INITIALIZE_GLOBAL_DYN_STATS(global_dyn_stats[i], "Dyn Stat Lock"); - } - } - -// TODO: HMMMM, wtf does this do? The following is that this -// function does: -// ink_atomic_swap(&this->f_update_lock, (void *) func) -// -// pmgmt->record_data->registerUpdateLockFunc(tmp_stats_lock_function); - -#ifdef DEBUG - ink_mutex_init(&http_time_lock, "Http Time Function Lock"); - last_http_local_time = 0; -#endif - - clear_http_handler_times(); -} diff --git a/proxy/StatSystem.h b/proxy/StatSystem.h deleted file mode 100644 index 16a3248c14c..00000000000 --- a/proxy/StatSystem.h +++ /dev/null @@ -1,587 +0,0 @@ -/** @file - - A brief file description - - @section license License - - 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. - */ - -/**************************************************************************** - - StatSystem.h -- - Created On : Fri Apr 3 19:41:39 1998 - ****************************************************************************/ -#if !defined(_StatSystem_h_) -#define _StatSystem_h_ - -#include "ts/ink_platform.h" -#include "ts/ink_memory.h" -#include "ts/ink_hrtime.h" -#include "ts/ink_atomic.h" - -#ifdef USE_LOCKS_FOR_DYN_STATS -#include "Lock.h" -#endif - -#include "ts/ink_apidefs.h" -#include "ts/apidefs.h" - -#define STATS_MAJOR_VERSION 6 // increment when changing the stats! -#define DEFAULT_SNAP_FILENAME "stats.snap" - -///////////////////////////////////////////////////////////// -// -// class TransactionMilestones -// -///////////////////////////////////////////////////////////// -class TransactionMilestones -{ -public: - TransactionMilestones() { ink_zero(milestones); } - - ink_hrtime &operator[](TSMilestonesType ms) { return milestones[ms]; } - - ink_hrtime operator[](TSMilestonesType ms) const { return milestones[ms]; } - - /** - * Takes two milestones and returns the difference. - * @param start The start time - * @param end The end time - * @return A double that is the time in seconds - */ - int64_t - difference_msec(TSMilestonesType ms_start, TSMilestonesType ms_end) const - { - if (milestones[ms_end] == 0) { - return -1; - } - return (milestones[ms_end] - milestones[ms_start]) / 1000000; - } - - double - difference(TSMilestonesType ms_start, TSMilestonesType ms_end) const - { - if (milestones[ms_end] == 0) { - return -1; - } - return (double)(milestones[ms_end] - milestones[ms_start]) / 1000000000; - } - - ink_hrtime - elapsed(TSMilestonesType ms_start, TSMilestonesType ms_end) const - { - return milestones[ms_end] - milestones[ms_start]; - } - -private: - ink_hrtime milestones[TS_MILESTONE_LAST_ENTRY]; -}; - -// Modularization Project: Build w/o thread-local-dyn-stats -// temporarily until we switch over to librecords. Revert to old -// non-thread-local system so that TS will still build and run. - -//---------------------------------------------------------------------// -// Welcome to enum land! // -//---------------------------------------------------------------------// - -// Before adding a stat variable, decide whether it is of -// a "transaction" type or if it is of a "dynamic" type. -// Then add the stat variable to the appropriate enumeration -// type. Make sure that DYN_STAT_START is large enough -// (read comment below). - -// -// Http Transaction Stats -// -#define _HEADER typedef enum { NO_HTTP_TRANS_STATS = 0, - -#define _FOOTER \ - MAX_HTTP_TRANS_STATS \ - } \ - HttpTransactionStat_t; - -#if defined(freebsd) -#undef _D -#endif -#define _D(_x) _x, - -#include "HttpTransStats.h" -#undef _HEADER -#undef _FOOTER -#undef _D - -struct HttpTransactionStatsString_t { - HttpTransactionStat_t i; - char *name; -}; - -// -// Note: DYN_STAT_START needs to be at least the next -// power of 2 bigger than the value of MAX_HTTP_TRANS_STATS -// -#define DYN_STAT_START 2048 -#define DYN_STAT_MASK (~(2047UL)) -// -// Dynamic Stats -// -#define _HEADER typedef enum { NO_DYN_STATS = DYN_STAT_START, - -#define _FOOTER \ - MAX_DYN_STATS \ - } \ - DynamicStat_t; - -#define _D(_x) _x, - -#include "DynamicStats.h" - -#undef _HEADER -#undef _FOOTER -#undef _D - -struct DynamicStatsString_t { - DynamicStat_t i; - const char *name; -}; - -extern HttpTransactionStatsString_t HttpTransactionStatsStrings[]; -extern DynamicStatsString_t DynamicStatsStrings[]; - -//---------------------------------------------------------------------// -// Typedefs, etc. // -//---------------------------------------------------------------------// - -// For now, use mutexes. May later change to spin_locks, try_locks. -#define ink_stat_lock_t ink_mutex - -typedef int64_t ink_statval_t; - -struct ink_local_stat_t { - ink_statval_t count; - ink_statval_t value; -}; - -struct ink_prot_global_stat_t { - ink_stat_lock_t access_lock; - ink_statval_t count; - ink_statval_t sum; - - ink_prot_global_stat_t() : count(0), sum(0) { ink_mutex_init(&access_lock, "Stats Access Lock"); } -}; - -struct ink_unprot_global_stat_t { - ink_statval_t count; - ink_statval_t sum; - ink_unprot_global_stat_t() : count(0), sum(0) {} -}; - - -//---------------------------------------------------------------------// -// External interface macros // -//---------------------------------------------------------------------// - -// Set count and sum to 0. -#define CLEAR_DYN_STAT(X) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - CLEAR_GLOBAL_DYN_STAT(X - DYN_STAT_START); \ - } - -#define DECREMENT_DYN_STAT(X) SUM_DYN_STAT(X, (ink_statval_t)-1) - -#define COUNT_DYN_STAT(X, C) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - ADD_TO_GLOBAL_DYN_COUNT((X - DYN_STAT_START), C); \ - } - -#define FSUM_DYN_STAT(X, S) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - ADD_TO_GLOBAL_DYN_FSUM((X - DYN_STAT_START), S); \ - } - -// Increment the count, sum. -#define INCREMENT_DYN_STAT(X) SUM_DYN_STAT(X, (ink_statval_t)1) - -// Get the count and sum in a single lock acquire operation. -// Would it make sense to have three functions - a combined -// read of the count and sum, and two more functions - one -// to read just the count and the other to read just the sum? -#define READ_DYN_STAT(X, C, S) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - READ_GLOBAL_DYN_STAT((X - DYN_STAT_START), C, S); \ - } - -#define READ_DYN_COUNT(X, C) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - READ_GLOBAL_DYN_COUNT((X - DYN_STAT_START), C); \ - } - -#define READ_DYN_SUM(X, S) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - READ_GLOBAL_DYN_SUM((X - DYN_STAT_START), S); \ - } - -// set the stat.count to a specific value -#define SET_DYN_COUNT(X, V) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - SET_GLOBAL_DYN_COUNT((X - DYN_STAT_START), V); \ - } - -// set the stat.count stat.sum to specific values -#define SET_DYN_STAT(X, C, S) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - SET_GLOBAL_DYN_STAT((X - DYN_STAT_START), C, S); \ - } - -// Add a specific value to the sum. -#define SUM_DYN_STAT(X, S) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - ADD_TO_GLOBAL_DYN_SUM((X - DYN_STAT_START), S); \ - } - -// Add a specific value to the sum. -#define SUM_GLOBAL_DYN_STAT(X, S) \ - { \ - ink_assert(X &DYN_STAT_MASK); \ - ADD_TO_GLOBAL_GLOBAL_DYN_SUM((X - DYN_STAT_START), S); \ - } - -#define __CLEAR_TRANS_STAT(local_stat_struct_, X) \ - { \ - ink_assert(!(X & DYN_STAT_MASK)); \ - local_stat_struct_[X].count = (ink_statval_t)0; \ - local_stat_struct_[X].value = (ink_statval_t)0; \ - } - -#define __DECREMENT_TRANS_STAT(local_stat_struct_, X) __SUM_TRANS_STAT(local_stat_struct_, X, (ink_statval_t)-1) - -#define __FSUM_TRANS_STAT(local_stat_struct_, X, S) \ - { \ - ink_assert(!(X & DYN_STAT_MASK)); \ - local_stat_struct_[X].count++; \ - (*(double *)&local_stat_struct_[X].value) += S; \ - } - -// Increment the count, sum. -#define __INCREMENT_TRANS_STAT(local_stat_struct_, X) __SUM_TRANS_STAT(local_stat_struct_, X, (ink_statval_t)1); - -#define __INITIALIZE_LOCAL_STAT_STRUCT(local_stat_struct_, X) __CLEAR_TRANS_STAT(local_stat_struct_, X) - -#define INITIALIZE_GLOBAL_TRANS_STATS(X) \ - { \ - X.count = (ink_statval_t)0; \ - X.sum = (ink_statval_t)0; \ - } - -// Get the count and sum in a single lock acquire operation. -// Would it make sense to have three functions - a combined -// read of the count and sum, and two more functions - one -// to read just the count and the other to read just the sum? -#define READ_HTTP_TRANS_STAT(X, C, S) \ - { \ - ink_assert(!(X & DYN_STAT_MASK)); \ - READ_GLOBAL_HTTP_TRANS_STAT(X, C, S); \ - } - -// set the stat.count to a specific value -#define __SET_TRANS_COUNT(local_stat_struct_, X, V) \ - { \ - ink_assert(!(X & DYN_STAT_MASK)); \ - local_stat_struct_[X].value = (ink_statval_t)V; \ - } - -// set the stat.count and the stat.sum to specific values -#define __SET_TRANS_STAT(local_stat_struct_, X, C, S) \ - { \ - ink_assert(!(X & DYN_STAT_MASK)); \ - local_stat_struct_[X].value = (ink_statval_t)S; \ - } - -// Add a specific value to local stat. -// Both ADD_TO_SUM_STAT and ADD_TO_COUNT_STAT do the same thing -// to the local copy of the transaction stat. -#define __SUM_TRANS_STAT(local_stat_struct_, X, S) \ - { \ - ink_assert(!(X & DYN_STAT_MASK)); \ - local_stat_struct_[X].count += 1; \ - local_stat_struct_[X].value += S; \ - } - -#define UPDATE_HTTP_TRANS_STATS(local_stat_struct_) \ - { \ - int i; \ - STAT_LOCK_ACQUIRE(&(global_http_trans_stat_lock)); \ - for (i = NO_HTTP_TRANS_STATS; i < MAX_HTTP_TRANS_STATS; i++) { \ - global_http_trans_stats[i].count += local_stat_struct_[i].count; \ - global_http_trans_stats[i].sum += local_stat_struct_[i].value; \ - } \ - STAT_LOCK_RELEASE(&(global_http_trans_stat_lock)); \ - } - -#define STAT_LOCK_ACQUIRE(X) (ink_mutex_acquire(X)) -#define STAT_LOCK_RELEASE(X) (ink_mutex_release(X)) -#define STAT_LOCK_INIT(X, S) (ink_mutex_init(X, S)) - -//---------------------------------------------------------------------// -// Internal macros to support adding, setting, reading, clearing, etc. // -//---------------------------------------------------------------------// - -#ifndef USE_LOCKS_FOR_DYN_STATS - -#ifdef USE_THREAD_LOCAL_DYN_STATS -// Modularization Project: See note above -#error "Should not build with USE_THREAD_LOCAL_DYN_STATS" - - -#define ADD_TO_GLOBAL_DYN_COUNT(X, C) mutex->thread_holding->global_dyn_stats[X].count += (C) - -#define ADD_TO_GLOBAL_DYN_SUM(X, S) \ - mutex->thread_holding->global_dyn_stats[X].count++; \ - mutex->thread_holding->global_dyn_stats[X].sum += (S) - -#define ADD_TO_GLOBAL_GLOBAL_DYN_SUM(X, S) \ - ink_atomic_increment(&global_dyn_stats[X].count, (ink_statval_t)1); \ - ink_atomic_increment(&global_dyn_stats[X].sum, S) -/* - * global_dyn_stats[X].count ++; \ - * global_dyn_stats[X].sum += (S) - */ - -#define ADD_TO_GLOBAL_DYN_FSUM(X, S) \ - mutex->thread_holding->global_dyn_stats[X].count++; \ - mutex->thread_holding->global_dyn_stats[X].sum += (S) - -#define CLEAR_GLOBAL_DYN_STAT(X) \ - global_dyn_stats[X].count = 0; \ - global_dyn_stats[X].sum = 0 - -#define READ_GLOBAL_DYN_STAT(X, C, S) \ - do { \ - ink_unprot_global_stat_t _s = global_dyn_stats[X]; \ - for (int _e = 0; _e < eventProcessor.n_ethreads; _e++) { \ - _s.count += eventProcessor.all_ethreads[_e]->global_dyn_stats[X].count; \ - _s.sum += eventProcessor.all_ethreads[_e]->global_dyn_stats[X].sum; \ - } \ - for (int _e = 0; _e < eventProcessor.n_dthreads; _e++) { \ - _s.count += eventProcessor.all_dthreads[_e]->global_dyn_stats[X].count; \ - _s.sum += eventProcessor.all_dthreads[_e]->global_dyn_stats[X].sum; \ - } \ - C = _s.count; \ - S = _s.sum; \ - } while (0) - -#define READ_GLOBAL_DYN_COUNT(X, C) \ - do { \ - ink_statval_t _s = global_dyn_stats[X].count; \ - for (int _e = 0; _e < eventProcessor.n_ethreads; _e++) \ - _s += eventProcessor.all_ethreads[_e]->global_dyn_stats[X].count; \ - for (int _e = 0; _e < eventProcessor.n_dthreads; _e++) \ - _s += eventProcessor.all_dthreads[_e]->global_dyn_stats[X].count; \ - C = _s; \ - } while (0) - -#define READ_GLOBAL_DYN_SUM(X, S) \ - do { \ - ink_statval_t _s = global_dyn_stats[X].sum; \ - for (int _e = 0; _e < eventProcessor.n_ethreads; _e++) \ - _s += eventProcessor.all_ethreads[_e]->global_dyn_stats[X].sum; \ - for (int _e = 0; _e < eventProcessor.n_dthreads; _e++) \ - _s += eventProcessor.all_dthreads[_e]->global_dyn_stats[X].sum; \ - S = _s; \ - } while (0) - -#define READ_GLOBAL_HTTP_TRANS_STAT(X, C, S) \ - { \ - C = global_http_trans_stats[X].count; \ - S = global_http_trans_stats[X].sum; \ - } - -#define SET_GLOBAL_DYN_COUNT(X, V) global_dyn_stats[X].count = V - -#define SET_GLOBAL_DYN_STAT(X, C, S) \ - global_dyn_stats[X].count = C; \ - global_dyn_stats[X].sum = S - -#define INITIALIZE_GLOBAL_DYN_STATS(X, T) \ - { \ - X.count = (ink_statval_t)0; \ - X.sum = (ink_statval_t)0; \ - } - -#else - -#define ADD_TO_GLOBAL_DYN_COUNT(X, C) ink_atomic_increment(&global_dyn_stats[X].count, C) - -#define ADD_TO_GLOBAL_DYN_SUM(X, S) \ - ink_atomic_increment(&global_dyn_stats[X].count, (ink_statval_t)1); \ - ink_atomic_increment(&global_dyn_stats[X].sum, S) - -#define ADD_TO_GLOBAL_GLOBAL_DYN_SUM(X, S) \ - ink_atomic_increment(&global_dyn_stats[X].count, (ink_statval_t)1); \ - ink_atomic_increment(&global_dyn_stats[X].sum, S) - -#define ADD_TO_GLOBAL_DYN_FSUM(X, S) \ - ink_atomic_increment(&global_dyn_stats[X].count, (ink_statval_t)1); \ - (*(double *)&global_dyn_stats[X].sum) += S - -#define CLEAR_GLOBAL_DYN_STAT(X) \ - global_dyn_stats[X].count = 0; \ - global_dyn_stats[X].sum = 0 - -#define READ_GLOBAL_DYN_STAT(X, C, S) \ - C = global_dyn_stats[X].count; \ - S = global_dyn_stats[X].sum - -#define READ_GLOBAL_DYN_COUNT(X, C) C = global_dyn_stats[X].count; - -#define READ_GLOBAL_DYN_SUM(X, S) S = global_dyn_stats[X].sum; - -#define READ_GLOBAL_HTTP_TRANS_STAT(X, C, S) \ - { \ - C = global_http_trans_stats[X].count; \ - S = global_http_trans_stats[X].sum; \ - } - -#define SET_GLOBAL_DYN_COUNT(X, V) global_dyn_stats[X].count = V - -#define SET_GLOBAL_DYN_STAT(X, C, S) \ - global_dyn_stats[X].count = C; \ - global_dyn_stats[X].sum = S - -#define INITIALIZE_GLOBAL_DYN_STATS(X, T) \ - { \ - X.count = (ink_statval_t)0; \ - X.sum = (ink_statval_t)0; \ - } - -#endif /* USE_THREAD_LOCAL_DYN_STATS */ - -#else /* USE_LOCKS_FOR_DYN_STATS */ - -#define ADD_TO_GLOBAL_DYN_COUNT(X, C) \ - { \ - STAT_LOCK_ACQUIRE(&(global_dyn_stats[X].access_lock)); \ - global_dyn_stats[X].count += C; \ - STAT_LOCK_RELEASE(&(global_dyn_stats[X].access_lock)); \ - } -#define ADD_TO_GLOBAL_DYN_SUM(X, S) \ - { \ - STAT_LOCK_ACQUIRE(&(global_dyn_stats[X].access_lock)); \ - global_dyn_stats[X].count += 1; \ - global_dyn_stats[X].sum += S; \ - STAT_LOCK_RELEASE(&(global_dyn_stats[X].access_lock)); \ - } -#define ADD_TO_GLOBAL_GLOBAL_DYN_SUM(X, S) \ - { \ - STAT_LOCK_ACQUIRE(&(global_dyn_stats[X].access_lock)); \ - global_dyn_stats[X].count += 1; \ - global_dyn_stats[X].sum += S; \ - STAT_LOCK_RELEASE(&(global_dyn_stats[X].access_lock)); \ - } -#define ADD_TO_GLOBAL_DYN_FSUM(X, S) \ - { \ - STAT_LOCK_ACQUIRE(&(global_dyn_stats[X].access_lock)); \ - global_dyn_stats[X].count += (ink_statval_t)1; \ - (*(double *)&global_dyn_stats[X].sum) += S; \ - STAT_LOCK_RELEASE(&(global_dyn_stats[X].access_lock)); \ - } -#define CLEAR_GLOBAL_DYN_STAT(X) \ - { \ - STAT_LOCK_ACQUIRE(&(global_dyn_stats[X].access_lock)); \ - global_dyn_stats[X].count = (ink_statval_t)0; \ - global_dyn_stats[X].sum = (ink_statval_t)0; \ - STAT_LOCK_RELEASE(&(global_dyn_stats[X].access_lock)); \ - } -#define READ_GLOBAL_DYN_STAT(X, C, S) \ - { \ - STAT_LOCK_ACQUIRE(&(global_dyn_stats[X].access_lock)); \ - C = global_dyn_stats[X].count; \ - S = global_dyn_stats[X].sum; \ - STAT_LOCK_RELEASE(&(global_dyn_stats[X].access_lock)); \ - } -#define READ_GLOBAL_HTTP_TRANS_STAT(X, C, S) \ - { \ - C = global_http_trans_stats[X].count; \ - S = global_http_trans_stats[X].sum; \ - } -#define SET_GLOBAL_DYN_COUNT(X, V) \ - { \ - STAT_LOCK_ACQUIRE(&(global_dyn_stats[X].access_lock)); \ - global_dyn_stats[X].count = V; \ - STAT_LOCK_RELEASE(&(global_dyn_stats[X].access_lock)); \ - } - -#define SET_GLOBAL_DYN_STAT(X, C, S) \ - { \ - STAT_LOCK_ACQUIRE(&(global_dyn_stats[X].access_lock)); \ - global_dyn_stats[X].count = C; \ - global_dyn_stats[X].sum = S; \ - STAT_LOCK_RELEASE(&(global_dyn_stats[X].access_lock)); \ - } - -#define INITIALIZE_GLOBAL_DYN_STATS(X, T) \ - { \ - STAT_LOCK_INIT(&(X.access_lock), T); \ - X.count = (ink_statval_t)0; \ - X.sum = (ink_statval_t)0; \ - } - -#endif /* USE_LOCKS_FOR_DYN_STATS */ - -//---------------------------------------------------------------------// -// Function prototypes // -//---------------------------------------------------------------------// -extern void start_stats_snap(void); -void initialize_all_global_stats(); - -//---------------------------------------------------------------------// -// Global variables declaration. // -//---------------------------------------------------------------------// -extern ink_stat_lock_t global_http_trans_stat_lock; -extern ink_unprot_global_stat_t global_http_trans_stats[MAX_HTTP_TRANS_STATS]; -#ifndef USE_LOCKS_FOR_DYN_STATS -extern inkcoreapi ink_unprot_global_stat_t global_dyn_stats[MAX_DYN_STATS - DYN_STAT_START]; -#else -extern inkcoreapi ink_prot_global_stat_t global_dyn_stats[MAX_DYN_STATS - DYN_STAT_START]; -#endif - -#ifdef DEBUG -extern ink_mutex http_time_lock; -extern time_t last_http_local_time; -#endif - -#define MAX_HTTP_HANDLER_EVENTS 25 -extern void clear_http_handler_times(); -extern void print_http_handler_time(int event); -extern void print_all_http_handler_times(); -#ifdef DEBUG -extern ink_hrtime http_handler_times[MAX_HTTP_HANDLER_EVENTS]; -extern int http_handler_counts[MAX_HTTP_HANDLER_EVENTS]; -#endif - - -#endif /* _StatSystem_h_ */ diff --git a/proxy/congest/CongestionStats.h b/proxy/congest/CongestionStats.h index ea45d85e7bb..0d5a90fb9bb 100644 --- a/proxy/congest/CongestionStats.h +++ b/proxy/congest/CongestionStats.h @@ -30,8 +30,6 @@ #ifndef CONGESTION_STATS_H_ #define CONGESTION_STATS_H_ - -// the stat variables are defined in StatSystem.h, StatSystem.cc void register_congest_stats(); #include "P_RecProcess.h" extern RecRawStatBlock *congest_rsb; diff --git a/proxy/http/HttpCacheSM.h b/proxy/http/HttpCacheSM.h index 9190d2a02eb..e5a9a5f523c 100644 --- a/proxy/http/HttpCacheSM.h +++ b/proxy/http/HttpCacheSM.h @@ -34,7 +34,6 @@ #define _HTTP_CACHE_SM_H_ #include "P_Cache.h" -#include "StatSystem.h" #include "ProxyConfig.h" #include "URL.h" #include "HTTP.h" diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h index 5f99cbdeaf2..ee33bbb05ea 100644 --- a/proxy/http/HttpConfig.h +++ b/proxy/http/HttpConfig.h @@ -318,9 +318,9 @@ enum { extern RecRawStatBlock *http_rsb; /* Stats should only be accessed using these macros */ -#define HTTP_INCREMENT_DYN_STAT(x) RecIncrRawStat(http_rsb, mutex->thread_holding, (int)x, 1) -#define HTTP_DECREMENT_DYN_STAT(x) RecIncrRawStat(http_rsb, mutex->thread_holding, (int)x, -1) -#define HTTP_SUM_DYN_STAT(x, y) RecIncrRawStat(http_rsb, mutex->thread_holding, (int)x, (int64_t)y) +#define HTTP_INCREMENT_DYN_STAT(x) RecIncrRawStat(http_rsb, this_ethread(), (int)x, 1) +#define HTTP_DECREMENT_DYN_STAT(x) RecIncrRawStat(http_rsb, this_ethread(), (int)x, -1) +#define HTTP_SUM_DYN_STAT(x, y) RecIncrRawStat(http_rsb, this_ethread(), (int)x, (int64_t)y) #define HTTP_SUM_GLOBAL_DYN_STAT(x, y) RecIncrGlobalRawStatSum(http_rsb, x, y) #define HTTP_CLEAR_DYN_STAT(x) \ diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc index 17877149276..f8fe4f78343 100644 --- a/proxy/http/HttpSM.cc +++ b/proxy/http/HttpSM.cc @@ -119,8 +119,6 @@ milestone_update_api_time(TransactionMilestones &milestones, ink_hrtime &api_tim ClassAllocator httpSMAllocator("httpSMAllocator"); -#define HTTP_INCREMENT_TRANS_STAT(X) HttpTransact::update_stat(&t_state, X, 1); - HttpVCTable::HttpVCTable() { memset(&vc_table, 0, sizeof(vc_table)); @@ -3272,7 +3270,7 @@ HttpSM::tunnel_handler_cache_read(int event, HttpTunnelProducer *p) p->vc->do_io_close(EHTTP_ERROR); p->read_vio = NULL; tunnel.chain_abort_all(p); - HTTP_INCREMENT_TRANS_STAT(http_cache_read_errors); + HTTP_INCREMENT_DYN_STAT(http_cache_read_errors); break; } else { tunnel.local_finish_all(p); @@ -3312,7 +3310,7 @@ HttpSM::tunnel_handler_cache_write(int event, HttpTunnelConsumer *c) c->write_vio = NULL; c->vc->do_io_close(EHTTP_ERROR); - HTTP_INCREMENT_TRANS_STAT(http_cache_write_errors); + HTTP_INCREMENT_DYN_STAT(http_cache_write_errors); DebugSM("http", "[%" PRId64 "] aborting cache write due %s event from cache", sm_id, HttpDebugNames::get_event_name(event)); // abort the producer if the cache_writevc is the only consumer. if (c->producer->alive && c->producer->num_consumers == 1) @@ -4385,7 +4383,7 @@ HttpSM::do_cache_lookup_and_read() // ink_assert(server_session == NULL); ink_assert(pending_action == 0); - HTTP_INCREMENT_TRANS_STAT(http_cache_lookups_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_lookups_stat); milestones[TS_MILESTONE_CACHE_OPEN_READ_BEGIN] = Thread::get_hrtime(); t_state.cache_lookup_result = HttpTransact::CACHE_LOOKUP_NONE; diff --git a/proxy/http/HttpSM.h b/proxy/http/HttpSM.h index d5226c1e8d6..72e7c2bf7cb 100644 --- a/proxy/http/HttpSM.h +++ b/proxy/http/HttpSM.h @@ -39,7 +39,6 @@ #include "HttpTransact.h" #include "HttpTunnel.h" #include "InkAPIInternal.h" -#include "StatSystem.h" #include "HttpClientSession.h" #include "HdrUtils.h" //#include "AuthHttpAdapter.h" diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc index 60b0dfbf687..3b096f0cc01 100644 --- a/proxy/http/HttpTransact.cc +++ b/proxy/http/HttpTransact.cc @@ -50,9 +50,6 @@ static char range_type[] = "multipart/byteranges; boundary=RANGE_SEPARATOR"; #define RANGE_NUMBERS_LENGTH 60 -#define HTTP_INCREMENT_TRANS_STAT(X) update_stat(s, X, 1); -#define HTTP_SUM_TRANS_STAT(X, S) update_stat(s, X, (ink_statval_t)S); - #define TRANSACT_REMEMBER(_s, _e, _d) \ { \ HttpSM *sm = (_s)->state_machine; \ @@ -889,7 +886,7 @@ HttpTransact::EndRemapRequest(State *s) */ if (!s->reverse_proxy && s->state_machine->plugin_tunnel_type == HTTP_NO_PLUGIN_TUNNEL) { DebugTxn("http_trans", "END HttpTransact::EndRemapRequest"); - HTTP_INCREMENT_TRANS_STAT(http_invalid_client_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_invalid_client_requests_stat); TRANSACT_RETURN(SM_ACTION_SEND_ERROR_CACHE_NOOP, NULL); } else { s->hdr_info.client_response.clear(); // anything previously set is invalid from this point forward @@ -1204,10 +1201,10 @@ HttpTransact::HandleRequest(State *s) ink_assert(!s->hdr_info.server_request.valid()); - HTTP_INCREMENT_TRANS_STAT(http_incoming_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_incoming_requests_stat); if (s->client_info.port_attribute == HttpProxyPort::TRANSPORT_SSL) { - HTTP_INCREMENT_TRANS_STAT(https_incoming_requests_stat); + HTTP_INCREMENT_DYN_STAT(https_incoming_requests_stat); } /////////////////////////////////////////////// @@ -1215,7 +1212,7 @@ HttpTransact::HandleRequest(State *s) /////////////////////////////////////////////// if (!(is_request_valid(s, &s->hdr_info.client_request))) { - HTTP_INCREMENT_TRANS_STAT(http_invalid_client_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_invalid_client_requests_stat); DebugTxn("http_seq", "[HttpTransact::HandleRequest] request invalid."); s->next_action = SM_ACTION_SEND_ERROR_CACHE_NOOP; // s->next_action = HttpTransact::PROXY_INTERNAL_CACHE_NOOP; @@ -1251,7 +1248,7 @@ HttpTransact::HandleRequest(State *s) s->hdr_info.request_content_length > s->http_config_param->max_post_size) { DebugTxn("http_trans", "Max post size %" PRId64 " Client tried to post a body that was too large.", s->http_config_param->max_post_size); - HTTP_INCREMENT_TRANS_STAT(http_post_body_too_large); + HTTP_INCREMENT_DYN_STAT(http_post_body_too_large); bootstrap_state_variables_from_request(s, &s->hdr_info.client_request); build_error_response(s, HTTP_STATUS_REQUEST_ENTITY_TOO_LARGE, "Request Entity Too Large", "request#entity_too_large", NULL); s->squid_codes.log_code = SQUID_LOG_ERR_POST_ENTITY_TOO_LARGE; @@ -1269,7 +1266,7 @@ HttpTransact::HandleRequest(State *s) if (ptr_len_casecmp(expect_hdr_val, expect_hdr_val_len, HTTP_VALUE_100_CONTINUE, HTTP_LEN_100_CONTINUE) == 0) { // Let's error out this request. DebugTxn("http_trans", "Client sent a post expect: 100-continue, sending 405."); - HTTP_INCREMENT_TRANS_STAT(disallowed_post_100_continue); + HTTP_INCREMENT_DYN_STAT(disallowed_post_100_continue); build_error_response(s, HTTP_STATUS_METHOD_NOT_ALLOWED, "Method Not Allowed", "request#method_unsupported", NULL); TRANSACT_RETURN(SM_ACTION_SEND_ERROR_CACHE_NOOP, NULL); } @@ -1398,7 +1395,7 @@ HttpTransact::setup_plugin_request_intercept(State *s) if (s->cache_info.action != HttpTransact::CACHE_DO_NO_ACTION) { s->cache_info.action = HttpTransact::CACHE_DO_NO_ACTION; s->current.mode = TUNNELLING_PROXY; - HTTP_INCREMENT_TRANS_STAT(http_tunnels_stat); + HTTP_INCREMENT_DYN_STAT(http_tunnels_stat); } // Regardless of the protocol we're gatewaying to // we see the scheme as http @@ -1886,14 +1883,14 @@ HttpTransact::DecideCacheLookup(State *s) } else { s->cache_info.action = CACHE_DO_NO_ACTION; s->current.mode = TUNNELLING_PROXY; - HTTP_INCREMENT_TRANS_STAT(http_tunnels_stat); + HTTP_INCREMENT_DYN_STAT(http_tunnels_stat); } } if (service_transaction_in_proxy_only_mode(s)) { s->cache_info.action = CACHE_DO_NO_ACTION; s->current.mode = TUNNELLING_PROXY; - HTTP_INCREMENT_TRANS_STAT(http_throttled_proxy_only_stat); + HTTP_INCREMENT_DYN_STAT(http_throttled_proxy_only_stat); } // at this point the request is ready to continue down the // traffic server path. @@ -3162,7 +3159,7 @@ HttpTransact::HandleICPLookup(State *s) { SET_VIA_STRING(VIA_DETAIL_CACHE_TYPE, VIA_DETAIL_ICP); if (s->icp_lookup_success == true) { - HTTP_INCREMENT_TRANS_STAT(http_icp_suggested_lookups_stat); + HTTP_INCREMENT_DYN_STAT(http_icp_suggested_lookups_stat); DebugTxn("http_trans", "[HandleICPLookup] Success, sending request to icp suggested host."); ats_ip4_set(&s->icp_info.dst_addr, s->icp_ip_result.sin_addr.s_addr); s->icp_info.dst_addr.port() = ntohs(s->icp_ip_result.sin_port); @@ -3305,7 +3302,7 @@ HttpTransact::HandleResponse(State *s) if (!s->cop_test_page) DUMP_HEADER("http_hdrs", &s->hdr_info.server_response, s->state_machine_id, "Incoming O.S. Response"); - HTTP_INCREMENT_TRANS_STAT(http_incoming_responses_stat); + HTTP_INCREMENT_DYN_STAT(http_incoming_responses_stat); ink_release_assert(s->current.request_to != UNDEFINED_LOOKUP); if (s->cache_info.action != CACHE_DO_WRITE) { @@ -3831,7 +3828,7 @@ HttpTransact::handle_server_connection_not_open(State *s) ink_assert(s->current.state != CONNECTION_ALIVE); SET_VIA_STRING(VIA_SERVER_RESULT, VIA_SERVER_ERROR); - HTTP_INCREMENT_TRANS_STAT(http_broken_server_connections_stat); + HTTP_INCREMENT_DYN_STAT(http_broken_server_connections_stat); // Fire off a hostdb update to mark the server as down s->state_machine->do_hostdb_update_if_necessary(); @@ -4289,7 +4286,7 @@ HttpTransact::handle_cache_operation_on_forward_server_response(State *s) base_response->set_expires(exp_time); SET_VIA_STRING(VIA_CACHE_FILL_ACTION, VIA_CACHE_UPDATED); - HTTP_INCREMENT_TRANS_STAT(http_cache_updates_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_updates_stat); // unset Cache-control: "need-revalidate-once" (if it's set) // This directive is used internally by T.S. to invalidate @@ -4451,12 +4448,12 @@ HttpTransact::handle_cache_operation_on_forward_server_response(State *s) case CACHE_DO_DELETE: DebugTxn("http_trans", "[hcoofsr] delete cached copy"); SET_VIA_STRING(VIA_CACHE_FILL_ACTION, VIA_CACHE_DELETED); - HTTP_INCREMENT_TRANS_STAT(http_cache_deletes_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_deletes_stat); break; case CACHE_DO_WRITE: DebugTxn("http_trans", "[hcoofsr] cache write"); SET_VIA_STRING(VIA_CACHE_FILL_ACTION, VIA_CACHE_WRITTEN); - HTTP_INCREMENT_TRANS_STAT(http_cache_writes_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_writes_stat); break; case CACHE_DO_SERVE_AND_UPDATE: // fall through @@ -4465,7 +4462,7 @@ HttpTransact::handle_cache_operation_on_forward_server_response(State *s) case CACHE_DO_REPLACE: DebugTxn("http_trans", "[hcoofsr] cache update/replace"); SET_VIA_STRING(VIA_CACHE_FILL_ACTION, VIA_CACHE_UPDATED); - HTTP_INCREMENT_TRANS_STAT(http_cache_updates_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_updates_stat); break; default: break; @@ -5315,7 +5312,7 @@ HttpTransact::check_request_validity(State *s, HTTPHdr *incoming_hdr) if (!incoming_hdr->presence(MIME_PRESENCE_HOST) && incoming_hdr->version_get() != HTTPVersion(0, 9)) { // Update the number of incoming 1.0 or 1.1 requests that do // not contain Host header fields. - HTTP_INCREMENT_TRANS_STAT(http_missing_host_hdr_stat); + HTTP_INCREMENT_DYN_STAT(http_missing_host_hdr_stat); } // Did the client send a "TE: identity;q=0"? We have to respond // with an error message because we only support identity @@ -5456,7 +5453,7 @@ HttpTransact::handle_trace_and_options_requests(State *s, HTTPHdr *incoming_hdr) // Trace and Options requests should not be looked up in cache. // s->cache_info.action = CACHE_DO_NO_ACTION; s->current.mode = TUNNELLING_PROXY; - HTTP_INCREMENT_TRANS_STAT(http_tunnels_stat); + HTTP_INCREMENT_DYN_STAT(http_tunnels_stat); return false; } @@ -5521,7 +5518,7 @@ HttpTransact::handle_trace_and_options_requests(State *s, HTTPHdr *incoming_hdr) // Trace and Options requests should not be looked up in cache. // s->cache_info.action = CACHE_DO_NO_ACTION; s->current.mode = TUNNELLING_PROXY; - HTTP_INCREMENT_TRANS_STAT(http_tunnels_stat); + HTTP_INCREMENT_DYN_STAT(http_tunnels_stat); } return false; @@ -5635,29 +5632,29 @@ HttpTransact::initialize_state_variables_from_request(State *s, HTTPHdr *obsolet s->method = incoming_request->method_get_wksidx(); if (s->method == HTTP_WKSIDX_GET) { - HTTP_INCREMENT_TRANS_STAT(http_get_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_get_requests_stat); } else if (s->method == HTTP_WKSIDX_HEAD) { - HTTP_INCREMENT_TRANS_STAT(http_head_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_head_requests_stat); } else if (s->method == HTTP_WKSIDX_POST) { - HTTP_INCREMENT_TRANS_STAT(http_post_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_post_requests_stat); } else if (s->method == HTTP_WKSIDX_PUT) { - HTTP_INCREMENT_TRANS_STAT(http_put_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_put_requests_stat); } else if (s->method == HTTP_WKSIDX_CONNECT) { - HTTP_INCREMENT_TRANS_STAT(http_connect_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_connect_requests_stat); } else if (s->method == HTTP_WKSIDX_DELETE) { - HTTP_INCREMENT_TRANS_STAT(http_delete_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_delete_requests_stat); } else if (s->method == HTTP_WKSIDX_PURGE) { - HTTP_INCREMENT_TRANS_STAT(http_purge_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_purge_requests_stat); } else if (s->method == HTTP_WKSIDX_TRACE) { - HTTP_INCREMENT_TRANS_STAT(http_trace_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_trace_requests_stat); } else if (s->method == HTTP_WKSIDX_PUSH) { - HTTP_INCREMENT_TRANS_STAT(http_push_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_push_requests_stat); } else if (s->method == HTTP_WKSIDX_OPTIONS) { - HTTP_INCREMENT_TRANS_STAT(http_options_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_options_requests_stat); } else if (s->method == HTTP_WKSIDX_TRACE) { - HTTP_INCREMENT_TRANS_STAT(http_trace_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_trace_requests_stat); } else { - HTTP_INCREMENT_TRANS_STAT(http_extension_method_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_extension_method_requests_stat); SET_VIA_STRING(VIA_DETAIL_TUNNEL, VIA_DETAIL_TUNNEL_METHOD); s->squid_codes.log_code = SQUID_LOG_TCP_MISS; s->hdr_info.extension_method = true; @@ -7833,7 +7830,7 @@ HttpTransact::build_request(State *s, HTTPHdr *base_request, HTTPHdr *outgoing_r if (!s->cop_test_page) DUMP_HEADER("http_hdrs", outgoing_request, s->state_machine_id, "Proxy's Request"); - HTTP_INCREMENT_TRANS_STAT(http_outgoing_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_outgoing_requests_stat); } // build a (status_code) response based upon the given info @@ -8317,16 +8314,9 @@ ink_time_t ink_cluster_time(void) { int highest_delta; + ink_time_t local_time; -#ifdef DEBUG - ink_mutex_acquire(&http_time_lock); - ink_time_t local_time = Thread::get_hrtime() / HRTIME_SECOND; - last_http_local_time = local_time; - ink_mutex_release(&http_time_lock); -#else - ink_time_t local_time = Thread::get_hrtime() / HRTIME_SECOND; -#endif - + local_time = Thread::get_hrtime() / HRTIME_SECOND; highest_delta = (int)HttpConfig::m_master.cluster_time_delta; // highest_delta = // lmgmt->record_data->readInteger("proxy.process.http.cluster_delta", @@ -8351,19 +8341,19 @@ void HttpTransact::histogram_response_document_size(State *s, int64_t doc_size) { if (doc_size >= 0 && doc_size <= 100) { - HTTP_INCREMENT_TRANS_STAT(http_response_document_size_100_stat); + HTTP_INCREMENT_DYN_STAT(http_response_document_size_100_stat); } else if (doc_size <= 1024) { - HTTP_INCREMENT_TRANS_STAT(http_response_document_size_1K_stat); + HTTP_INCREMENT_DYN_STAT(http_response_document_size_1K_stat); } else if (doc_size <= 3072) { - HTTP_INCREMENT_TRANS_STAT(http_response_document_size_3K_stat); + HTTP_INCREMENT_DYN_STAT(http_response_document_size_3K_stat); } else if (doc_size <= 5120) { - HTTP_INCREMENT_TRANS_STAT(http_response_document_size_5K_stat); + HTTP_INCREMENT_DYN_STAT(http_response_document_size_5K_stat); } else if (doc_size <= 10240) { - HTTP_INCREMENT_TRANS_STAT(http_response_document_size_10K_stat); + HTTP_INCREMENT_DYN_STAT(http_response_document_size_10K_stat); } else if (doc_size <= 1048576) { - HTTP_INCREMENT_TRANS_STAT(http_response_document_size_1M_stat); + HTTP_INCREMENT_DYN_STAT(http_response_document_size_1M_stat); } else { - HTTP_INCREMENT_TRANS_STAT(http_response_document_size_inf_stat); + HTTP_INCREMENT_DYN_STAT(http_response_document_size_inf_stat); } return; } @@ -8372,19 +8362,19 @@ void HttpTransact::histogram_request_document_size(State *s, int64_t doc_size) { if (doc_size >= 0 && doc_size <= 100) { - HTTP_INCREMENT_TRANS_STAT(http_request_document_size_100_stat); + HTTP_INCREMENT_DYN_STAT(http_request_document_size_100_stat); } else if (doc_size <= 1024) { - HTTP_INCREMENT_TRANS_STAT(http_request_document_size_1K_stat); + HTTP_INCREMENT_DYN_STAT(http_request_document_size_1K_stat); } else if (doc_size <= 3072) { - HTTP_INCREMENT_TRANS_STAT(http_request_document_size_3K_stat); + HTTP_INCREMENT_DYN_STAT(http_request_document_size_3K_stat); } else if (doc_size <= 5120) { - HTTP_INCREMENT_TRANS_STAT(http_request_document_size_5K_stat); + HTTP_INCREMENT_DYN_STAT(http_request_document_size_5K_stat); } else if (doc_size <= 10240) { - HTTP_INCREMENT_TRANS_STAT(http_request_document_size_10K_stat); + HTTP_INCREMENT_DYN_STAT(http_request_document_size_10K_stat); } else if (doc_size <= 1048576) { - HTTP_INCREMENT_TRANS_STAT(http_request_document_size_1M_stat); + HTTP_INCREMENT_DYN_STAT(http_request_document_size_1M_stat); } else { - HTTP_INCREMENT_TRANS_STAT(http_request_document_size_inf_stat); + HTTP_INCREMENT_DYN_STAT(http_request_document_size_inf_stat); } return; } @@ -8396,19 +8386,19 @@ HttpTransact::user_agent_connection_speed(State *s, ink_hrtime transfer_time, in int bytes_per_sec = (int)(bytes_per_hrtime * HRTIME_SECOND); if (bytes_per_sec <= 100) { - HTTP_INCREMENT_TRANS_STAT(http_user_agent_speed_bytes_per_sec_100_stat); + HTTP_INCREMENT_DYN_STAT(http_user_agent_speed_bytes_per_sec_100_stat); } else if (bytes_per_sec <= 1024) { - HTTP_INCREMENT_TRANS_STAT(http_user_agent_speed_bytes_per_sec_1K_stat); + HTTP_INCREMENT_DYN_STAT(http_user_agent_speed_bytes_per_sec_1K_stat); } else if (bytes_per_sec <= 10240) { - HTTP_INCREMENT_TRANS_STAT(http_user_agent_speed_bytes_per_sec_10K_stat); + HTTP_INCREMENT_DYN_STAT(http_user_agent_speed_bytes_per_sec_10K_stat); } else if (bytes_per_sec <= 102400) { - HTTP_INCREMENT_TRANS_STAT(http_user_agent_speed_bytes_per_sec_100K_stat); + HTTP_INCREMENT_DYN_STAT(http_user_agent_speed_bytes_per_sec_100K_stat); } else if (bytes_per_sec <= 1048576) { - HTTP_INCREMENT_TRANS_STAT(http_user_agent_speed_bytes_per_sec_1M_stat); + HTTP_INCREMENT_DYN_STAT(http_user_agent_speed_bytes_per_sec_1M_stat); } else if (bytes_per_sec <= 10485760) { - HTTP_INCREMENT_TRANS_STAT(http_user_agent_speed_bytes_per_sec_10M_stat); + HTTP_INCREMENT_DYN_STAT(http_user_agent_speed_bytes_per_sec_10M_stat); } else { - HTTP_INCREMENT_TRANS_STAT(http_user_agent_speed_bytes_per_sec_100M_stat); + HTTP_INCREMENT_DYN_STAT(http_user_agent_speed_bytes_per_sec_100M_stat); } return; @@ -8431,61 +8421,61 @@ HttpTransact::client_result_stat(State *s, ink_hrtime total_time, ink_hrtime req switch (s->squid_codes.log_code) { case SQUID_LOG_ERR_CONNECT_FAIL: - HTTP_INCREMENT_TRANS_STAT(http_cache_miss_cold_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_miss_cold_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_ERROR_CONNECT_FAIL; break; case SQUID_LOG_TCP_MEM_HIT: - HTTP_INCREMENT_TRANS_STAT(http_cache_hit_mem_fresh_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_hit_mem_fresh_stat); case SQUID_LOG_TCP_HIT: // It's possible to have two stat's instead of one, if needed. - HTTP_INCREMENT_TRANS_STAT(http_cache_hit_fresh_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_hit_fresh_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_HIT_FRESH; break; case SQUID_LOG_TCP_REFRESH_HIT: - HTTP_INCREMENT_TRANS_STAT(http_cache_hit_reval_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_hit_reval_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_HIT_REVALIDATED; break; case SQUID_LOG_TCP_IMS_HIT: - HTTP_INCREMENT_TRANS_STAT(http_cache_hit_ims_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_hit_ims_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_HIT_FRESH; break; case SQUID_LOG_TCP_REF_FAIL_HIT: - HTTP_INCREMENT_TRANS_STAT(http_cache_hit_stale_served_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_hit_stale_served_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_HIT_FRESH; break; case SQUID_LOG_TCP_MISS: if ((GET_VIA_STRING(VIA_CACHE_RESULT) == VIA_IN_CACHE_NOT_ACCEPTABLE) || (GET_VIA_STRING(VIA_CACHE_RESULT) == VIA_CACHE_MISS)) { - HTTP_INCREMENT_TRANS_STAT(http_cache_miss_cold_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_miss_cold_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_MISS_COLD; } else { // FIX: what case is this for? can it ever happen? - HTTP_INCREMENT_TRANS_STAT(http_cache_miss_uncacheable_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_miss_uncacheable_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_MISS_UNCACHABLE; } break; case SQUID_LOG_TCP_REFRESH_MISS: - HTTP_INCREMENT_TRANS_STAT(http_cache_miss_changed_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_miss_changed_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_MISS_CHANGED; break; case SQUID_LOG_TCP_CLIENT_REFRESH: - HTTP_INCREMENT_TRANS_STAT(http_cache_miss_client_no_cache_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_miss_client_no_cache_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_MISS_CLIENT_NO_CACHE; break; case SQUID_LOG_TCP_IMS_MISS: - HTTP_INCREMENT_TRANS_STAT(http_cache_miss_ims_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_miss_ims_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_MISS_COLD; break; case SQUID_LOG_TCP_SWAPFAIL: - HTTP_INCREMENT_TRANS_STAT(http_cache_read_error_stat); + HTTP_INCREMENT_DYN_STAT(http_cache_read_error_stat); client_transaction_result = CLIENT_TRANSACTION_RESULT_HIT_FRESH; break; @@ -8498,7 +8488,7 @@ HttpTransact::client_result_stat(State *s, ink_hrtime total_time, ink_hrtime req default: // FIX: What is the conditional below doing? // if (s->local_trans_stats[http_cache_lookups_stat].count == 1L) - // HTTP_INCREMENT_TRANS_STAT(http_cache_miss_cold_stat); + // HTTP_INCREMENT_DYN_STAT(http_cache_miss_cold_stat); // FIX: I suspect the following line should not be set here, // because it overrides the error classification above. @@ -8522,140 +8512,140 @@ HttpTransact::client_result_stat(State *s, ink_hrtime total_time, ink_hrtime req switch (status_code) { case 100: - HTTP_INCREMENT_TRANS_STAT(http_response_status_100_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_100_count_stat); break; case 101: - HTTP_INCREMENT_TRANS_STAT(http_response_status_101_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_101_count_stat); break; case 200: - HTTP_INCREMENT_TRANS_STAT(http_response_status_200_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_200_count_stat); break; case 201: - HTTP_INCREMENT_TRANS_STAT(http_response_status_201_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_201_count_stat); break; case 202: - HTTP_INCREMENT_TRANS_STAT(http_response_status_202_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_202_count_stat); break; case 203: - HTTP_INCREMENT_TRANS_STAT(http_response_status_203_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_203_count_stat); break; case 204: - HTTP_INCREMENT_TRANS_STAT(http_response_status_204_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_204_count_stat); break; case 205: - HTTP_INCREMENT_TRANS_STAT(http_response_status_205_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_205_count_stat); break; case 206: - HTTP_INCREMENT_TRANS_STAT(http_response_status_206_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_206_count_stat); break; case 300: - HTTP_INCREMENT_TRANS_STAT(http_response_status_300_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_300_count_stat); break; case 301: - HTTP_INCREMENT_TRANS_STAT(http_response_status_301_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_301_count_stat); break; case 302: - HTTP_INCREMENT_TRANS_STAT(http_response_status_302_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_302_count_stat); break; case 303: - HTTP_INCREMENT_TRANS_STAT(http_response_status_303_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_303_count_stat); break; case 304: - HTTP_INCREMENT_TRANS_STAT(http_response_status_304_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_304_count_stat); break; case 305: - HTTP_INCREMENT_TRANS_STAT(http_response_status_305_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_305_count_stat); break; case 307: - HTTP_INCREMENT_TRANS_STAT(http_response_status_307_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_307_count_stat); break; case 400: - HTTP_INCREMENT_TRANS_STAT(http_response_status_400_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_400_count_stat); break; case 401: - HTTP_INCREMENT_TRANS_STAT(http_response_status_401_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_401_count_stat); break; case 402: - HTTP_INCREMENT_TRANS_STAT(http_response_status_402_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_402_count_stat); break; case 403: - HTTP_INCREMENT_TRANS_STAT(http_response_status_403_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_403_count_stat); break; case 404: - HTTP_INCREMENT_TRANS_STAT(http_response_status_404_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_404_count_stat); break; case 405: - HTTP_INCREMENT_TRANS_STAT(http_response_status_405_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_405_count_stat); break; case 406: - HTTP_INCREMENT_TRANS_STAT(http_response_status_406_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_406_count_stat); break; case 407: - HTTP_INCREMENT_TRANS_STAT(http_response_status_407_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_407_count_stat); break; case 408: - HTTP_INCREMENT_TRANS_STAT(http_response_status_408_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_408_count_stat); break; case 409: - HTTP_INCREMENT_TRANS_STAT(http_response_status_409_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_409_count_stat); break; case 410: - HTTP_INCREMENT_TRANS_STAT(http_response_status_410_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_410_count_stat); break; case 411: - HTTP_INCREMENT_TRANS_STAT(http_response_status_411_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_411_count_stat); break; case 412: - HTTP_INCREMENT_TRANS_STAT(http_response_status_412_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_412_count_stat); break; case 413: - HTTP_INCREMENT_TRANS_STAT(http_response_status_413_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_413_count_stat); break; case 414: - HTTP_INCREMENT_TRANS_STAT(http_response_status_414_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_414_count_stat); break; case 415: - HTTP_INCREMENT_TRANS_STAT(http_response_status_415_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_415_count_stat); break; case 416: - HTTP_INCREMENT_TRANS_STAT(http_response_status_416_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_416_count_stat); break; case 500: - HTTP_INCREMENT_TRANS_STAT(http_response_status_500_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_500_count_stat); break; case 501: - HTTP_INCREMENT_TRANS_STAT(http_response_status_501_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_501_count_stat); break; case 502: - HTTP_INCREMENT_TRANS_STAT(http_response_status_502_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_502_count_stat); break; case 503: - HTTP_INCREMENT_TRANS_STAT(http_response_status_503_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_503_count_stat); break; case 504: - HTTP_INCREMENT_TRANS_STAT(http_response_status_504_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_504_count_stat); break; case 505: - HTTP_INCREMENT_TRANS_STAT(http_response_status_505_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_505_count_stat); break; default: break; } switch (status_code / 100) { case 1: - HTTP_INCREMENT_TRANS_STAT(http_response_status_1xx_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_1xx_count_stat); break; case 2: - HTTP_INCREMENT_TRANS_STAT(http_response_status_2xx_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_2xx_count_stat); break; case 3: - HTTP_INCREMENT_TRANS_STAT(http_response_status_3xx_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_3xx_count_stat); break; case 4: - HTTP_INCREMENT_TRANS_STAT(http_response_status_4xx_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_4xx_count_stat); break; case 5: - HTTP_INCREMENT_TRANS_STAT(http_response_status_5xx_count_stat); + HTTP_INCREMENT_DYN_STAT(http_response_status_5xx_count_stat); break; default: break; @@ -8663,45 +8653,45 @@ HttpTransact::client_result_stat(State *s, ink_hrtime total_time, ink_hrtime req } // Increment the completed connection count - HTTP_INCREMENT_TRANS_STAT(http_completed_requests_stat); + HTTP_INCREMENT_DYN_STAT(http_completed_requests_stat); // Set the stat now that we know what happend ink_hrtime total_msec = ink_hrtime_to_msec(total_time); ink_hrtime process_msec = ink_hrtime_to_msec(request_process_time); switch (client_transaction_result) { case CLIENT_TRANSACTION_RESULT_HIT_FRESH: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_hit_fresh_stat, total_msec); - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_hit_fresh_process_stat, process_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_hit_fresh_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_hit_fresh_process_stat, process_msec); break; case CLIENT_TRANSACTION_RESULT_HIT_REVALIDATED: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_hit_reval_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_hit_reval_stat, total_msec); break; case CLIENT_TRANSACTION_RESULT_MISS_COLD: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_miss_cold_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_miss_cold_stat, total_msec); break; case CLIENT_TRANSACTION_RESULT_MISS_CHANGED: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_miss_changed_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_miss_changed_stat, total_msec); break; case CLIENT_TRANSACTION_RESULT_MISS_CLIENT_NO_CACHE: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_miss_client_no_cache_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_miss_client_no_cache_stat, total_msec); break; case CLIENT_TRANSACTION_RESULT_MISS_UNCACHABLE: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_miss_uncacheable_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_miss_uncacheable_stat, total_msec); break; case CLIENT_TRANSACTION_RESULT_ERROR_ABORT: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_errors_aborts_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_errors_aborts_stat, total_msec); break; case CLIENT_TRANSACTION_RESULT_ERROR_POSSIBLE_ABORT: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_errors_possible_aborts_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_errors_possible_aborts_stat, total_msec); break; case CLIENT_TRANSACTION_RESULT_ERROR_CONNECT_FAIL: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_errors_connect_failed_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_errors_connect_failed_stat, total_msec); break; case CLIENT_TRANSACTION_RESULT_ERROR_OTHER: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_errors_other_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_errors_other_stat, total_msec); break; default: - HTTP_SUM_TRANS_STAT(http_ua_msecs_counts_other_unclassified_stat, total_msec); + HTTP_SUM_DYN_STAT(http_ua_msecs_counts_other_unclassified_stat, total_msec); // This can happen if a plugin manually sets the status code after an error. DebugTxn("http", "Unclassified statistic"); break; @@ -8715,19 +8705,19 @@ HttpTransact::origin_server_connection_speed(State *s, ink_hrtime transfer_time, int bytes_per_sec = (int)(bytes_per_hrtime * HRTIME_SECOND); if (bytes_per_sec <= 100) { - HTTP_INCREMENT_TRANS_STAT(http_origin_server_speed_bytes_per_sec_100_stat); + HTTP_INCREMENT_DYN_STAT(http_origin_server_speed_bytes_per_sec_100_stat); } else if (bytes_per_sec <= 1024) { - HTTP_INCREMENT_TRANS_STAT(http_origin_server_speed_bytes_per_sec_1K_stat); + HTTP_INCREMENT_DYN_STAT(http_origin_server_speed_bytes_per_sec_1K_stat); } else if (bytes_per_sec <= 10240) { - HTTP_INCREMENT_TRANS_STAT(http_origin_server_speed_bytes_per_sec_10K_stat); + HTTP_INCREMENT_DYN_STAT(http_origin_server_speed_bytes_per_sec_10K_stat); } else if (bytes_per_sec <= 102400) { - HTTP_INCREMENT_TRANS_STAT(http_origin_server_speed_bytes_per_sec_100K_stat); + HTTP_INCREMENT_DYN_STAT(http_origin_server_speed_bytes_per_sec_100K_stat); } else if (bytes_per_sec <= 1048576) { - HTTP_INCREMENT_TRANS_STAT(http_origin_server_speed_bytes_per_sec_1M_stat); + HTTP_INCREMENT_DYN_STAT(http_origin_server_speed_bytes_per_sec_1M_stat); } else if (bytes_per_sec <= 10485760) { - HTTP_INCREMENT_TRANS_STAT(http_origin_server_speed_bytes_per_sec_10M_stat); + HTTP_INCREMENT_DYN_STAT(http_origin_server_speed_bytes_per_sec_10M_stat); } else { - HTTP_INCREMENT_TRANS_STAT(http_origin_server_speed_bytes_per_sec_100M_stat); + HTTP_INCREMENT_DYN_STAT(http_origin_server_speed_bytes_per_sec_100M_stat); } return; @@ -8755,7 +8745,7 @@ HttpTransact::update_size_and_time_stats(State *s, ink_hrtime total_time, ink_hr case BACKGROUND_FILL_COMPLETED: { int64_t bg_size = origin_server_response_body_size - user_agent_response_body_size; bg_size = max((int64_t)0, bg_size); - HTTP_SUM_TRANS_STAT(http_background_fill_bytes_completed_stat, bg_size); + HTTP_SUM_DYN_STAT(http_background_fill_bytes_completed_stat, bg_size); break; } case BACKGROUND_FILL_ABORTED: { @@ -8763,7 +8753,7 @@ HttpTransact::update_size_and_time_stats(State *s, ink_hrtime total_time, ink_hr if (bg_size < 0) bg_size = 0; - HTTP_SUM_TRANS_STAT(http_background_fill_bytes_aborted_stat, bg_size); + HTTP_SUM_DYN_STAT(http_background_fill_bytes_aborted_stat, bg_size); break; } case BACKGROUND_FILL_NONE: @@ -8778,91 +8768,91 @@ HttpTransact::update_size_and_time_stats(State *s, ink_hrtime total_time, ink_hr case SQUID_LOG_TCP_HIT: case SQUID_LOG_TCP_MEM_HIT: // It's possible to have two stat's instead of one, if needed. - HTTP_INCREMENT_TRANS_STAT(http_tcp_hit_count_stat); - HTTP_SUM_TRANS_STAT(http_tcp_hit_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_tcp_hit_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_tcp_hit_count_stat); + HTTP_SUM_DYN_STAT(http_tcp_hit_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_tcp_hit_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_TCP_MISS: - HTTP_INCREMENT_TRANS_STAT(http_tcp_miss_count_stat); - HTTP_SUM_TRANS_STAT(http_tcp_miss_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_tcp_miss_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_tcp_miss_count_stat); + HTTP_SUM_DYN_STAT(http_tcp_miss_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_tcp_miss_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_TCP_EXPIRED_MISS: - HTTP_INCREMENT_TRANS_STAT(http_tcp_expired_miss_count_stat); - HTTP_SUM_TRANS_STAT(http_tcp_expired_miss_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_tcp_expired_miss_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_tcp_expired_miss_count_stat); + HTTP_SUM_DYN_STAT(http_tcp_expired_miss_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_tcp_expired_miss_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_TCP_REFRESH_HIT: - HTTP_INCREMENT_TRANS_STAT(http_tcp_refresh_hit_count_stat); - HTTP_SUM_TRANS_STAT(http_tcp_refresh_hit_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_tcp_refresh_hit_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_tcp_refresh_hit_count_stat); + HTTP_SUM_DYN_STAT(http_tcp_refresh_hit_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_tcp_refresh_hit_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_TCP_REFRESH_MISS: - HTTP_INCREMENT_TRANS_STAT(http_tcp_refresh_miss_count_stat); - HTTP_SUM_TRANS_STAT(http_tcp_refresh_miss_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_tcp_refresh_miss_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_tcp_refresh_miss_count_stat); + HTTP_SUM_DYN_STAT(http_tcp_refresh_miss_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_tcp_refresh_miss_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_TCP_CLIENT_REFRESH: - HTTP_INCREMENT_TRANS_STAT(http_tcp_client_refresh_count_stat); - HTTP_SUM_TRANS_STAT(http_tcp_client_refresh_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_tcp_client_refresh_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_tcp_client_refresh_count_stat); + HTTP_SUM_DYN_STAT(http_tcp_client_refresh_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_tcp_client_refresh_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_TCP_IMS_HIT: - HTTP_INCREMENT_TRANS_STAT(http_tcp_ims_hit_count_stat); - HTTP_SUM_TRANS_STAT(http_tcp_ims_hit_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_tcp_ims_hit_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_tcp_ims_hit_count_stat); + HTTP_SUM_DYN_STAT(http_tcp_ims_hit_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_tcp_ims_hit_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_TCP_IMS_MISS: - HTTP_INCREMENT_TRANS_STAT(http_tcp_ims_miss_count_stat); - HTTP_SUM_TRANS_STAT(http_tcp_ims_miss_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_tcp_ims_miss_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_tcp_ims_miss_count_stat); + HTTP_SUM_DYN_STAT(http_tcp_ims_miss_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_tcp_ims_miss_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_ERR_CLIENT_ABORT: - HTTP_INCREMENT_TRANS_STAT(http_err_client_abort_count_stat); - HTTP_SUM_TRANS_STAT(http_err_client_abort_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_err_client_abort_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_err_client_abort_count_stat); + HTTP_SUM_DYN_STAT(http_err_client_abort_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_err_client_abort_origin_server_bytes_stat, origin_server_bytes); break; case SQUID_LOG_ERR_CONNECT_FAIL: - HTTP_INCREMENT_TRANS_STAT(http_err_connect_fail_count_stat); - HTTP_SUM_TRANS_STAT(http_err_connect_fail_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_err_connect_fail_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_err_connect_fail_count_stat); + HTTP_SUM_DYN_STAT(http_err_connect_fail_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_err_connect_fail_origin_server_bytes_stat, origin_server_bytes); break; default: - HTTP_INCREMENT_TRANS_STAT(http_misc_count_stat); - HTTP_SUM_TRANS_STAT(http_misc_user_agent_bytes_stat, user_agent_bytes); - HTTP_SUM_TRANS_STAT(http_misc_origin_server_bytes_stat, origin_server_bytes); + HTTP_INCREMENT_DYN_STAT(http_misc_count_stat); + HTTP_SUM_DYN_STAT(http_misc_user_agent_bytes_stat, user_agent_bytes); + HTTP_SUM_DYN_STAT(http_misc_origin_server_bytes_stat, origin_server_bytes); break; } // times - HTTP_SUM_TRANS_STAT(http_total_transactions_time_stat, total_time); + HTTP_SUM_DYN_STAT(http_total_transactions_time_stat, total_time); // sizes - HTTP_SUM_TRANS_STAT(http_user_agent_request_header_total_size_stat, user_agent_request_header_size); - HTTP_SUM_TRANS_STAT(http_user_agent_response_header_total_size_stat, user_agent_response_header_size); - HTTP_SUM_TRANS_STAT(http_user_agent_request_document_total_size_stat, user_agent_request_body_size); - HTTP_SUM_TRANS_STAT(http_user_agent_response_document_total_size_stat, user_agent_response_body_size); + HTTP_SUM_DYN_STAT(http_user_agent_request_header_total_size_stat, user_agent_request_header_size); + HTTP_SUM_DYN_STAT(http_user_agent_response_header_total_size_stat, user_agent_response_header_size); + HTTP_SUM_DYN_STAT(http_user_agent_request_document_total_size_stat, user_agent_request_body_size); + HTTP_SUM_DYN_STAT(http_user_agent_response_document_total_size_stat, user_agent_response_body_size); // proxy stats if (s->current.request_to == HttpTransact::PARENT_PROXY) { - HTTP_SUM_TRANS_STAT(http_parent_proxy_request_total_bytes_stat, + HTTP_SUM_DYN_STAT(http_parent_proxy_request_total_bytes_stat, origin_server_request_header_size + origin_server_request_body_size); - HTTP_SUM_TRANS_STAT(http_parent_proxy_response_total_bytes_stat, + HTTP_SUM_DYN_STAT(http_parent_proxy_response_total_bytes_stat, origin_server_response_header_size + origin_server_response_body_size); - HTTP_SUM_TRANS_STAT(http_parent_proxy_transaction_time_stat, total_time); + HTTP_SUM_DYN_STAT(http_parent_proxy_transaction_time_stat, total_time); } // request header zero means the document was cached. // do not add to stats. if (origin_server_request_header_size > 0) { - HTTP_SUM_TRANS_STAT(http_origin_server_request_header_total_size_stat, origin_server_request_header_size); - HTTP_SUM_TRANS_STAT(http_origin_server_response_header_total_size_stat, origin_server_response_header_size); - HTTP_SUM_TRANS_STAT(http_origin_server_request_document_total_size_stat, origin_server_request_body_size); - HTTP_SUM_TRANS_STAT(http_origin_server_response_document_total_size_stat, origin_server_response_body_size); + HTTP_SUM_DYN_STAT(http_origin_server_request_header_total_size_stat, origin_server_request_header_size); + HTTP_SUM_DYN_STAT(http_origin_server_response_header_total_size_stat, origin_server_response_header_size); + HTTP_SUM_DYN_STAT(http_origin_server_request_document_total_size_stat, origin_server_request_body_size); + HTTP_SUM_DYN_STAT(http_origin_server_response_document_total_size_stat, origin_server_response_body_size); } if (s->method == HTTP_WKSIDX_PUSH) { - HTTP_SUM_TRANS_STAT(http_pushed_response_header_total_size_stat, pushed_response_header_size); - HTTP_SUM_TRANS_STAT(http_pushed_document_total_size_stat, pushed_response_body_size); + HTTP_SUM_DYN_STAT(http_pushed_response_header_total_size_stat, pushed_response_header_size); + HTTP_SUM_DYN_STAT(http_pushed_document_total_size_stat, pushed_response_body_size); } histogram_request_document_size(s, user_agent_request_body_size); @@ -8878,100 +8868,81 @@ HttpTransact::update_size_and_time_stats(State *s, ink_hrtime total_time, ink_hr // update milestones stats if (http_ua_begin_time_stat) { - HTTP_SUM_TRANS_STAT(http_ua_begin_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_BEGIN)) + HTTP_SUM_DYN_STAT(http_ua_begin_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_BEGIN)); } if (http_ua_first_read_time_stat) { - HTTP_SUM_TRANS_STAT(http_ua_first_read_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_FIRST_READ)) + HTTP_SUM_DYN_STAT(http_ua_first_read_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_FIRST_READ)); } if (http_ua_read_header_done_time_stat) { - HTTP_SUM_TRANS_STAT(http_ua_read_header_done_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_READ_HEADER_DONE)) + HTTP_SUM_DYN_STAT(http_ua_read_header_done_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_READ_HEADER_DONE)); } if (http_ua_begin_write_time_stat) { - HTTP_SUM_TRANS_STAT(http_ua_begin_write_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_BEGIN_WRITE)) + HTTP_SUM_DYN_STAT(http_ua_begin_write_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_BEGIN_WRITE)); } if (http_ua_close_time_stat) { - HTTP_SUM_TRANS_STAT(http_ua_close_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_CLOSE)) + HTTP_SUM_DYN_STAT(http_ua_close_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_UA_CLOSE)); } if (http_server_first_connect_time_stat) { - HTTP_SUM_TRANS_STAT(http_server_first_connect_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_FIRST_CONNECT)) + HTTP_SUM_DYN_STAT(http_server_first_connect_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_FIRST_CONNECT)); } if (http_server_connect_time_stat) { - HTTP_SUM_TRANS_STAT(http_server_connect_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_CONNECT)) + HTTP_SUM_DYN_STAT(http_server_connect_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_CONNECT)); } if (http_server_connect_end_time_stat) { - HTTP_SUM_TRANS_STAT(http_server_connect_end_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_CONNECT_END)) + HTTP_SUM_DYN_STAT(http_server_connect_end_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_CONNECT_END)); } if (http_server_begin_write_time_stat) { - HTTP_SUM_TRANS_STAT(http_server_begin_write_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_BEGIN_WRITE)) + HTTP_SUM_DYN_STAT(http_server_begin_write_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_BEGIN_WRITE)); } if (http_server_first_read_time_stat) { - HTTP_SUM_TRANS_STAT(http_server_first_read_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_FIRST_READ)) + HTTP_SUM_DYN_STAT(http_server_first_read_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_FIRST_READ)); } if (http_server_read_header_done_time_stat) { - HTTP_SUM_TRANS_STAT(http_server_read_header_done_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_READ_HEADER_DONE)) + HTTP_SUM_DYN_STAT(http_server_read_header_done_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_READ_HEADER_DONE)); } if (http_server_close_time_stat) { - HTTP_SUM_TRANS_STAT(http_server_close_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_CLOSE)) + HTTP_SUM_DYN_STAT(http_server_close_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SERVER_CLOSE)); } if (http_cache_open_read_begin_time_stat) { - HTTP_SUM_TRANS_STAT(http_cache_open_read_begin_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_CACHE_OPEN_READ_BEGIN)) + HTTP_SUM_DYN_STAT(http_cache_open_read_begin_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_CACHE_OPEN_READ_BEGIN)); } if (http_cache_open_read_end_time_stat) { - HTTP_SUM_TRANS_STAT(http_cache_open_read_end_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_CACHE_OPEN_READ_END)) + HTTP_SUM_DYN_STAT(http_cache_open_read_end_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_CACHE_OPEN_READ_END)); } if (http_cache_open_write_begin_time_stat) { - HTTP_SUM_TRANS_STAT(http_cache_open_write_begin_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_CACHE_OPEN_WRITE_BEGIN)) + HTTP_SUM_DYN_STAT(http_cache_open_write_begin_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_CACHE_OPEN_WRITE_BEGIN)); } if (http_cache_open_write_end_time_stat) { - HTTP_SUM_TRANS_STAT(http_cache_open_write_end_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_CACHE_OPEN_WRITE_END)) + HTTP_SUM_DYN_STAT(http_cache_open_write_end_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_CACHE_OPEN_WRITE_END)); } if (http_dns_lookup_begin_time_stat) { - HTTP_SUM_TRANS_STAT(http_dns_lookup_begin_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_DNS_LOOKUP_BEGIN)) + HTTP_SUM_DYN_STAT(http_dns_lookup_begin_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_DNS_LOOKUP_BEGIN)); } if (http_dns_lookup_end_time_stat) { - HTTP_SUM_TRANS_STAT(http_dns_lookup_end_time_stat, - milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_DNS_LOOKUP_END)) + HTTP_SUM_DYN_STAT(http_dns_lookup_end_time_stat, + milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_DNS_LOOKUP_END)); } if (http_sm_start_time_stat) { - HTTP_SUM_TRANS_STAT(http_sm_start_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SM_START)) + HTTP_SUM_DYN_STAT(http_sm_start_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SM_START)); } if (http_sm_finish_time_stat) { - HTTP_SUM_TRANS_STAT(http_sm_finish_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SM_FINISH)) + HTTP_SUM_DYN_STAT(http_sm_finish_time_stat, milestones.difference_msec(TS_MILESTONE_SM_START, TS_MILESTONE_SM_FINISH)); } } -// void HttpTransact::add_new_stat_block(State* s) -// -// Adds a new stat block -// -void -HttpTransact::add_new_stat_block(State *s) -{ - // We keep the block around till the end of transaction - // We don't need explicitly deallocate it later since - // when the transaction is over, the arena will be destroyed - ink_assert(s->current_stats->next_insert == StatBlockEntries); - StatBlock *new_block = (StatBlock *)s->arena.alloc(sizeof(StatBlock)); - new_block->init(); - s->current_stats->next = new_block; - s->current_stats = new_block; - DebugTxn("http_trans", "Adding new large stat block"); -} - - void HttpTransact::delete_warning_value(HTTPHdr *to_warn, HTTPWarningCode warning_code) { diff --git a/proxy/http/HttpTransact.h b/proxy/http/HttpTransact.h index c5a91000ba4..cb4bfb6534b 100644 --- a/proxy/http/HttpTransact.h +++ b/proxy/http/HttpTransact.h @@ -31,12 +31,12 @@ #include "HttpConfig.h" #include "HTTP.h" #include "HttpTransactCache.h" -#include "StatSystem.h" #include "ControlMatcher.h" #include "CacheControl.h" #include "ParentSelection.h" #include "ProxyConfig.h" #include "Transform.h" +#include "Milestones.h" //#include "HttpAuthParams.h" #include "api/ts/remap.h" #include "RemapPluginInfo.h" @@ -560,27 +560,6 @@ class HttpTransact CACHE_AUTH_SERVE }; -#define StatBlockEntries 28 - - struct StatBlock { - StatBlock() - { - init(); - memset(&stats, 0, sizeof(stats)); - }; - - void - init() - { - next = NULL; - next_insert = 0; - }; - - StatRecord_t stats[StatBlockEntries]; - StatBlock *next; - uint16_t next_insert; - }; - struct State; typedef void (*TransactFunc_t)(HttpTransact::State *); @@ -877,9 +856,6 @@ class HttpTransact // HttpAuthParams auth_params; - StatBlock first_stats; - StatBlock *current_stats; - // new ACL filtering result (calculated immediately after remap) bool client_connection_enabled; bool acl_filtering_performed; @@ -961,7 +937,6 @@ class HttpTransact init() { parent_params = ParentConfig::acquire(); - current_stats = &first_stats; } // Constructor @@ -978,7 +953,7 @@ class HttpTransact internal_msg_buffer_size(0), internal_msg_buffer_fast_allocator_size(-1), icp_lookup_success(false), scheme(-1), next_hop_scheme(scheme), orig_scheme(scheme), method(0), cause_of_death_errno(-UNKNOWN_INTERNAL_ERROR), client_request_time(UNDEFINED_TIME), request_sent_time(UNDEFINED_TIME), response_received_time(UNDEFINED_TIME), - plugin_set_expire_time(UNDEFINED_TIME), state_machine_id(0), first_stats(), current_stats(NULL), + plugin_set_expire_time(UNDEFINED_TIME), state_machine_id(0), client_connection_enabled(true), acl_filtering_performed(false), negative_caching(false), srv_lookup(false), www_auth_content(CACHE_AUTH_NONE), remap_plugin_instance(0), fp_tsremap_os_response(NULL), http_return_code(HTTP_STATUS_NONE), api_txn_active_timeout_value(-1), api_txn_connect_timeout_value(-1), @@ -1020,29 +995,9 @@ class HttpTransact memset(&host_db_info, 0, sizeof(host_db_info)); } - void - record_transaction_stats() - { - if (http_config_param->enable_http_stats) { - // Loop over our transaction stat blocks and record the stats - // in the global arrays - STAT_LOCK_ACQUIRE(&(global_http_trans_stat_lock)); - StatBlock *b = &first_stats; - - while (b != NULL) { - for (int i = 0; i < b->next_insert && i < StatBlockEntries; i++) { - RecIncrRawStat(http_rsb, this_ethread(), b->stats[i].index, b->stats[i].increment); - } - b = b->next; - } - STAT_LOCK_RELEASE(&(global_http_trans_stat_lock)); - } - } - void destroy() { - record_transaction_stats(); m_magic = HTTP_TRANSACT_MAGIC_DEAD; free_internal_msg_buffer(); @@ -1245,7 +1200,6 @@ class HttpTransact static const char *get_error_string(int erno); // the stat functions - static void update_stat(State *s, int stat, ink_statval_t increment); static void 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, @@ -1258,7 +1212,6 @@ class HttpTransact static void user_agent_connection_speed(State *s, ink_hrtime transfer_time, int64_t nbytes); static void origin_server_connection_speed(State *s, ink_hrtime transfer_time, int64_t nbytes); static void client_result_stat(State *s, ink_hrtime total_time, ink_hrtime request_process_time); - static void add_new_stat_block(State *s); static void delete_warning_value(HTTPHdr *to_warn, HTTPWarningCode warning_code); static bool is_connection_collapse_checks_success(State *s); // YTS Team, yamsat }; @@ -1290,20 +1243,4 @@ is_response_body_precluded(HTTPStatus status_code, int method) inkcoreapi extern ink_time_t ink_cluster_time(void); -inline void -HttpTransact::update_stat(State *s, int stat, ink_statval_t increment) -{ - if (s->current_stats->next_insert >= StatBlockEntries) { - // This a rare operation and we want to avoid the - // code bloat of inlining it everywhere so - // it's a function call - add_new_stat_block(s); - } - - uint16_t *next_insert = &s->current_stats->next_insert; - s->current_stats->stats[*next_insert].index = stat; - s->current_stats->stats[*next_insert].increment = increment; - (*next_insert)++; -} - #endif diff --git a/proxy/logging/LogField.h b/proxy/logging/LogField.h index b7cd5b92626..7dc23abad41 100644 --- a/proxy/logging/LogField.h +++ b/proxy/logging/LogField.h @@ -28,7 +28,7 @@ #include "ts/ink_platform.h" #include "ts/List.h" #include "LogFieldAliasMap.h" -#include "StatSystem.h" +#include "Milestones.h" class LogAccess;