]> git.ipfire.org Git - thirdparty/squid.git/blob - src/adaptation/icap/History.h
8f4f155c034d2c22c6feaab3f6a65e93fb826024
[thirdparty/squid.git] / src / adaptation / icap / History.h
1 /*
2 * Copyright (C) 1996-2022 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