1 /* 2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors 3 * 4 * Squid software is distributed under GPLv2+ license and includes 5 * contributions from numerous individuals and organizations. 6 * Please see the COPYING and CONTRIBUTORS files for details. 7 */ 8 9 #ifndef SQUID_ICAPHISTORY_H 10 #define SQUID_ICAPHISTORY_H 11 12 #include "base/RefCount.h" 13 #include "enums.h" 14 #include "LogTags.h" 15 #include "SquidString.h" 16 17 namespace Adaptation 18 { 19 namespace Icap 20 { 21 22 /// collects information about ICAP processing related to an HTTP transaction 23 class History: public RefCountable 24 { 25 public: 26 typedef RefCount<History> Pointer; 27 28 History(); 29 30 /// record the start of an ICAP processing interval 31 void start(const char *context); 32 /// note the end of an ICAP processing interval 33 void stop(const char *context); 34 35 /// the total time of all ICAP processing intervals 36 /// \param[out] total time taken for all ICAP processing 37 void processingTime(struct timeval &total) const; 38 39 String rfc931; ///< the username from ident 40 #if USE_OPENSSL 41 String ssluser; ///< the username from SSL 42 #endif 43 LogTags logType; ///< the squid request status (TCP_MISS etc) 44 45 String log_uri; ///< the request uri 46 size_t req_sz; ///< the request size 47 48 private: 49 void currentTime(struct timeval &) const; ///< time since current start or zero 50 51 timeval currentStart; ///< when the current processing interval started 52 struct timeval pastTime; ///< sum of closed processing interval durations 53 int concurrencyLevel; ///< number of concurrent processing threads 54 }; 55 56 } // namespace Icap 57 } // namespace Adaptation 58 59 #endif /*SQUID_HISTORY_H*/ 60 61