TcpLogger.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2023 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_SRC_LOG_TCPLOGGER_H
10#define _SQUID_SRC_LOG_TCPLOGGER_H
11
12#include "base/AsyncJob.h"
13#include "base/JobWait.h"
14#include "comm/forward.h"
15#include "ip/Address.h"
16#include "log/forward.h"
17
18#include <list>
19
22class CommIoCbParams;
23class MemBlob;
25
26namespace Log
27{
28
33class TcpLogger : public AsyncJob
34{
36
37public:
39
40 /* Logfile API */
41 static int Open(Logfile *lf, const char *path, size_t bufSz, int fatalFlag);
42
43protected:
44 TcpLogger(size_t, bool, Ip::Address);
45 ~TcpLogger() override;
46
51 void endGracefully();
52
54 void logRecord(const char *buf, size_t len);
55
57 void flush();
58
59 /* AsyncJob API */
60 void start() override;
61 bool doneAll() const override;
62 void swanSong() override;
63
64private:
65 /* Logfile API. Map c-style Logfile calls to TcpLogger method calls. */
66 static void Flush(Logfile *lf);
67 static void WriteLine(Logfile *lf, const char *buf, size_t len);
68 static void StartLine(Logfile *lf);
69 static void EndLine(Logfile *lf);
70 static void Rotate(Logfile *lf, const int16_t);
71 static void Close(Logfile *lf);
72
73 static TcpLogger *StillLogging(Logfile *lf);
74
75 static void DelayedReconnect(void *data);
76 void delayedReconnect();
77
78 bool canFit(const size_t len) const;
79 void appendRecord(const char *buf, size_t len);
80 void appendChunk(const char *chunk, const size_t len);
81 void writeIfNeeded();
82 void writeIfPossible();
83 void doConnect();
84 void disconnect();
85
86 /* comm callbacks */
88 void writeDone(const CommIoCbParams &io);
89 void handleClosure(const CommCloseCbParams &io);
90
91 static const size_t IoBufSize;
92 static const size_t BufferCapacityMin;
93
98
99 std::list<MemBlobPointer> buffers;
102 size_t flushDebt;
103
107
111
114
116 uint64_t drops;
117};
118
119} // namespace Log
120
121#endif /* _SQUID_SRC_LOG_TCPLOGGER_H */
122
RefCount< MemBlob > MemBlobPointer
Definition: TcpLogger.h:24
bool reconnectScheduled
we are sleeping before the next connection attempt
Definition: TcpLogger.h:105
JobWait< Comm::ConnOpener > connWait
waits for a connection to the remote logger to be established/opened
Definition: TcpLogger.h:113
void swanSong() override
Definition: TcpLogger.cc:95
void writeDone(const CommIoCbParams &io)
Comm::Write callback.
Definition: TcpLogger.cc:331
void writeIfNeeded()
starts writing if and only if it is time to write accumulated records
Definition: TcpLogger.cc:126
void disconnect()
close our connection now, without flushing
Definition: TcpLogger.cc:381
void logRecord(const char *buf, size_t len)
buffers record and possibly writes it to the remote logger
Definition: TcpLogger.cc:118
bool quitOnEmpty
whether this job should quit when buffers are empty
Definition: TcpLogger.h:104
void writeIfPossible()
starts writing if possible
Definition: TcpLogger.cc:135
bool writeScheduled
we are waiting for the latest write() results
Definition: TcpLogger.h:106
static void EndLine(Logfile *lf)
Definition: TcpLogger.cc:423
bool canFit(const size_t len) const
whether len more bytes can be buffered
Definition: TcpLogger.cc:158
void appendChunk(const char *chunk, const size_t len)
buffer a record chunk without splitting it across buffers
Definition: TcpLogger.cc:220
static void Flush(Logfile *lf)
Definition: TcpLogger.cc:404
void delayedReconnect()
"sleep a little before trying to connect again" event callback
Definition: TcpLogger.cc:321
size_t flushDebt
how many record bytes we still need to write ASAP
Definition: TcpLogger.h:102
static void DelayedReconnect(void *data)
Log::TcpLogger::delayedReconnect() wrapper.
Definition: TcpLogger.cc:304
uint64_t connectFailures
number of sequential connection failures
Definition: TcpLogger.h:115
TcpLogger(size_t, bool, Ip::Address)
Definition: TcpLogger.cc:36
~TcpLogger() override
Definition: TcpLogger.cc:60
static TcpLogger * StillLogging(Logfile *lf)
Definition: TcpLogger.cc:396
void handleClosure(const CommCloseCbParams &io)
Definition: TcpLogger.cc:367
Ip::Address remote
where the remote logger expects our records
Definition: TcpLogger.h:109
CbcPointer< TcpLogger > Pointer
Definition: TcpLogger.h:38
AsyncCall::Pointer closer
handles unexpected/external conn closures
Definition: TcpLogger.h:110
static void WriteLine(Logfile *lf, const char *buf, size_t len)
Definition: TcpLogger.cc:411
Comm::ConnectionPointer conn
opened connection to the remote logger
Definition: TcpLogger.h:108
static void Close(Logfile *lf)
Definition: TcpLogger.cc:435
void endGracefully()
Definition: TcpLogger.cc:102
void doConnect()
starts [re]connecting to the remote logger
Definition: TcpLogger.cc:241
static const size_t IoBufSize
fixed I/O buffer size
Definition: TcpLogger.h:91
static const size_t BufferCapacityMin
minimum bufferCapacity value
Definition: TcpLogger.h:92
void connectDone(const CommConnectCbParams &conn)
Comm::ConnOpener callback.
Definition: TcpLogger.cc:263
size_t bufferedSize
number of log record bytes stored in RAM now
Definition: TcpLogger.h:101
bool doneAll() const override
whether positive goal has been reached
Definition: TcpLogger.cc:73
void appendRecord(const char *buf, size_t len)
buffer a record that might exceed IoBufSize
Definition: TcpLogger.cc:200
uint64_t drops
number of records dropped during the current outage
Definition: TcpLogger.h:116
CBDATA_CHILD(TcpLogger)
std::list< MemBlobPointer > buffers
I/O buffers.
Definition: TcpLogger.h:99
static int Open(Logfile *lf, const char *path, size_t bufSz, int fatalFlag)
Definition: TcpLogger.cc:452
bool dieOnError
Definition: TcpLogger.h:97
void flush()
write all currently buffered records ASAP
Definition: TcpLogger.cc:111
size_t bufferCapacity
bufferedSize limit
Definition: TcpLogger.h:100
static void Rotate(Logfile *lf, const int16_t)
Definition: TcpLogger.cc:430
static void StartLine(Logfile *lf)
Definition: TcpLogger.cc:418
void start() override
called by AsyncStart; do not call directly
Definition: TcpLogger.cc:67
Definition: File.h:39
Definition: Config.h:18

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors