/*
- * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
#ifndef SQUID_SRC_LOGTAGS_H
#define SQUID_SRC_LOGTAGS_H
+#include "CollapsingHistory.h"
+
+/// Things that may happen to a transaction while it is being
+/// processed according to its LOG_* category. Logged as _SUFFIX(es).
+/// Unlike LOG_* categories, these flags may not be mutually exclusive.
+class LogTagsErrors
+{
+public:
+ /// Update each of this object flags to "set" if the corresponding
+ /// flag of the given object is set
+ void update(const LogTagsErrors &other);
+
+ bool ignored = false; ///< _IGNORED: the response was not used for anything
+ bool timedout = false; ///< _TIMEDOUT: terminated due to a lifetime or I/O timeout
+ bool aborted = false; ///< _ABORTED: other abnormal termination (e.g., I/O error)
+};
+
/** Squid transaction result code/tag set.
*
* These codes indicate how the request was received
LOG_TCP_REFRESH, // refresh from origin started, but still pending
LOG_TCP_CLIENT_REFRESH_MISS,
LOG_TCP_IMS_HIT,
+ LOG_TCP_INM_HIT,
LOG_TCP_SWAPFAIL_MISS,
LOG_TCP_NEGATIVE_HIT,
LOG_TCP_MEM_HIT,
class LogTags
{
public:
- LogTags(LogTags_ot t) : oldType(t) {assert(oldType < LOG_TYPE_MAX);}
- // XXX: this operator does not reset flags
- // TODO: either replace with a category-only setter or remove
- LogTags &operator =(const LogTags_ot &t) {assert(t < LOG_TYPE_MAX); oldType = t; return *this;}
+ LogTags() = default;
+ explicit LogTags(const LogTags_ot t) { update(t); }
+
+ void update(const LogTags_ot t);
/// compute the status access.log field
const char *c_str() const;
/// determine if the log tag code indicates a cache HIT
bool isTcpHit() const;
- /// Things that may happen to a transaction while it is being
- /// processed according to its LOG_* category. Logged as _SUFFIX(es).
- /// Unlike LOG_* categories, these flags may not be mutually exclusive.
- class Errors {
- public:
- Errors() : ignored(false), timedout(false), aborted(false) {}
+ /// \returns Cache-Status "hit" or "fwd=..." parameter (or nil)
+ const char *cacheStatusSource() const;
- bool ignored; ///< _IGNORED: the response was not used for anything
- bool timedout; ///< _TIMEDOUT: terminated due to a lifetime or I/O timeout
- bool aborted; ///< _ABORTED: other abnormal termination (e.g., I/O error)
- } err;
+ /// various problems augmenting the primary log tag
+ LogTagsErrors err;
private:
/// list of string representations for LogTags_ot
public: // XXX: only until client_db.cc stats are redesigned.
- // deprecated LogTag enum value
- LogTags_ot oldType;
+ /// a set of client protocol, cache use, and other transaction outcome tags
+ LogTags_ot oldType = LOG_TAG_NONE;
+ /// controls CF tag presence
+ CollapsingHistory collapsingHistory;
};
/// iterator for LogTags_ot enumeration