2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
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.
9 #ifndef SQUID_ADAPT_HISTORY_H
10 #define SQUID_ADAPT_HISTORY_H
12 #include "adaptation/DynamicGroupCfg.h"
13 #include "base/RefCount.h"
14 #include "HttpHeader.h"
17 #include "SquidString.h"
22 /// collects information about adaptations related to a master transaction
23 class History
: public RefCountable
26 typedef RefCount
<Adaptation::History
> Pointer
;
30 /// record the start of a xact, return xact history ID
31 int recordXactStart(const String
&serviceId
, const timeval
&when
, bool retrying
);
33 /// record the end of a xact identified by its history ID
34 void recordXactFinish(int hid
);
36 /// dump individual xaction times to a string
37 void allLogString(const char *serviceId
, String
&buf
);
39 /// dump xaction times, merging retried and retry times together
40 void sumLogString(const char *serviceId
, String
&buf
);
42 /// sets or resets a cross-transactional database record
43 void updateXxRecord(const char *name
, const String
&value
);
45 /// returns true and fills the record fields iff there is a db record
46 bool getXxRecord(String
&name
, String
&value
) const;
48 /// sets or resets next services for the Adaptation::Iterator to notice
49 void updateNextServices(const String
&services
);
51 /// returns true, fills the value, and resets iff next services were set
52 bool extractNextServices(String
&value
);
54 /// store the last meta header fields received from the adaptation service
55 void recordMeta(const HttpHeader
*lm
);
57 void recordAdaptationService(SBuf
&srvId
);
59 /// Last received meta header (REQMOD or RESPMOD, whichever comes last).
61 /// All REQMOD and RESPMOD meta headers merged. Last field wins conflicts.
63 /// key:value pairs set by adaptation_meta, to be added to
64 /// AccessLogEntry::notes when ALE becomes available
65 NotePairs::Pointer metaHeaders
;
67 typedef std::vector
<SBuf
> AdaptationServices
;
68 AdaptationServices theAdaptationServices
; ///< The service groups used
70 /// sets future services for the Adaptation::AccessCheck to notice
71 void setFutureServices(const DynamicGroupCfg
&services
);
73 /// returns true, fills the value, and resets iff future services were set
74 bool extractFutureServices(DynamicGroupCfg
&services
);
77 /// single Xaction stats (i.e., a historical record entry)
81 Entry(const String
&serviceId
, const timeval
&when
);
82 Entry(); // required by Vector<>
84 void stop(); ///< updates stats on transaction end
85 int rptm(); ///< returns response time [msec], calculates it if needed
87 String service
; ///< adaptation service ID
88 timeval start
; ///< when the xaction was started
91 int theRptm
; ///< calculated and cached response time value in msec
94 bool retried
; ///< whether the xaction was replaced by another
97 typedef std::vector
<Entry
> Entries
;
98 Entries theEntries
; ///< historical record, in the order of xact starts
100 // theXx* will become a map<string,string>, but we only support one record
101 String theXxName
; ///< name part of the cross-transactional database record
102 String theXxValue
; ///< value part of the cross-xactional database record
104 String theNextServices
; ///< services Adaptation::Iterator must use next
105 DynamicGroupCfg theFutureServices
; ///< services AccessCheck must use
108 } // namespace Adaptation