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