#include <TcpLogger.h>

Inheritance diagram for Log::TcpLogger:
Collaboration diagram for Log::TcpLogger:

Public Types

typedef CbcPointer< TcpLoggerPointer
 

Public Member Functions

bool canBeCalled (AsyncCall &call) const
 whether we can be called More...
 
void callStart (AsyncCall &call)
 
virtual void callEnd ()
 called right after the called job method More...
 
virtual void callException (const std::exception &e)
 called when the job throws during an async call More...
 
void handleStopRequest ()
 process external request to terminate now (i.e. during this async call) More...
 
virtual void * toCbdata ()=0
 

Static Public Member Functions

static int Open (Logfile *lf, const char *path, size_t bufSz, int fatalFlag)
 
static void Start (const Pointer &job)
 

Public Attributes

const InstanceId< AsyncJobid
 job identifier More...
 

Protected Member Functions

 TcpLogger (size_t, bool, Ip::Address)
 
virtual ~TcpLogger ()
 
void endGracefully ()
 
void logRecord (const char *buf, size_t len)
 buffers record and possibly writes it to the remote logger More...
 
void flush ()
 write all currently buffered records ASAP More...
 
virtual void start ()
 called by AsyncStart; do not call directly More...
 
virtual bool doneAll () const
 whether positive goal has been reached More...
 
virtual void swanSong ()
 
void deleteThis (const char *aReason)
 
void mustStop (const char *aReason)
 
bool done () const
 the job is destroyed in callEnd() when done() More...
 
virtual const char * status () const
 internal cleanup; do not call directly More...
 

Protected Attributes

const char * stopReason
 reason for forcing done() to be true More...
 
const char * typeName
 kid (leaf) class name, for debugging More...
 
AsyncCall::Pointer inCall
 the asynchronous call being handled, if any More...
 
bool started_ = false
 Start() has finished successfully. More...
 
bool swanSang_ = false
 swanSong() was called More...
 

Private Member Functions

 CBDATA_CLASS (TcpLogger)
 
void delayedReconnect ()
 "sleep a little before trying to connect again" event callback More...
 
bool canFit (const size_t len) const
 whether len more bytes can be buffered More...
 
void appendRecord (const char *buf, size_t len)
 buffer a record that might exceed IoBufSize More...
 
void appendChunk (const char *chunk, const size_t len)
 buffer a record chunk without splitting it across buffers More...
 
void writeIfNeeded ()
 starts writing if and only if it is time to write accumulated records More...
 
void writeIfPossible ()
 starts writing if possible More...
 
void doConnect ()
 starts [re]connecting to the remote logger More...
 
void disconnect ()
 close our connection now, without flushing More...
 
void connectDone (const CommConnectCbParams &conn)
 Comm::ConnOpener callback. More...
 
void writeDone (const CommIoCbParams &io)
 Comm::Write callback. More...
 
void handleClosure (const CommCloseCbParams &io)
 

Static Private Member Functions

static void Flush (Logfile *lf)
 
static void WriteLine (Logfile *lf, const char *buf, size_t len)
 
static void StartLine (Logfile *lf)
 
static void EndLine (Logfile *lf)
 
static void Rotate (Logfile *lf, const int16_t)
 
static void Close (Logfile *lf)
 
static TcpLoggerStillLogging (Logfile *lf)
 
static void DelayedReconnect (void *data)
 Log::TcpLogger::delayedReconnect() wrapper. More...
 

Private Attributes

bool dieOnError
 
std::list< MemBlobPointerbuffers
 I/O buffers. More...
 
size_t bufferCapacity
 bufferedSize limit More...
 
size_t bufferedSize
 number of log record bytes stored in RAM now More...
 
size_t flushDebt
 how many record bytes we still need to write ASAP More...
 
bool quitOnEmpty
 whether this job should quit when buffers are empty More...
 
bool reconnectScheduled
 we are sleeping before the next connection attempt More...
 
bool writeScheduled
 we are waiting for the latest write() results More...
 
Comm::ConnectionPointer conn
 opened connection to the remote logger More...
 
Ip::Address remote
 where the remote logger expects our records More...
 
AsyncCall::Pointer closer
 handles unexpected/external conn closures More...
 
JobWait< Comm::ConnOpenerconnWait
 waits for a connection to the remote logger to be established/opened More...
 
uint64_t connectFailures
 number of sequential connection failures More...
 
uint64_t drops
 number of records dropped during the current outage More...
 

Static Private Attributes

static const size_t IoBufSize = 2*MAX_URL
 fixed I/O buffer size More...
 
static const size_t BufferCapacityMin = 2*Log::TcpLogger::IoBufSize
 minimum bufferCapacity value More...
 

Detailed Description

Sends log records to a remote TCP logger at the configured IP:port address. Handles loss of connectivity, record buffering, and buffer overflows.

Definition at line 29 of file TcpLogger.h.

Member Typedef Documentation

◆ Pointer

Definition at line 34 of file TcpLogger.h.

Constructor & Destructor Documentation

◆ TcpLogger()

Log::TcpLogger::TcpLogger ( size_t  bufCap,
bool  dieOnErr,
Ip::Address  them 
)
protected

Definition at line 37 of file TcpLogger.cc.

References bufferCapacity, BufferCapacityMin, DBG_IMPORTANT, debugs, MY_DEBUG_SECTION, and remote.

◆ ~TcpLogger()

Log::TcpLogger::~TcpLogger ( )
protectedvirtual

Definition at line 61 of file TcpLogger.cc.

References assert.

Member Function Documentation

◆ appendChunk()

void Log::TcpLogger::appendChunk ( const char *  chunk,
const size_t  len 
)
private

Definition at line 222 of file TcpLogger.cc.

References debugs, Must, and MY_DEBUG_SECTION.

◆ appendRecord()

void Log::TcpLogger::appendRecord ( const char *  buf,
size_t  len 
)
private

Definition at line 202 of file TcpLogger.cc.

References min().

◆ callEnd()

void AsyncJob::callEnd ( )
virtualinherited

◆ callException()

◆ callStart()

void AsyncJob::callStart ( AsyncCall call)
inherited

◆ canBeCalled()

bool AsyncJob::canBeCalled ( AsyncCall call) const
inherited

Definition at line 102 of file AsyncJob.cc.

References AsyncCall::cancel(), debugs, HERE(), AsyncJob::inCall, and NULL.

◆ canFit()

bool Log::TcpLogger::canFit ( const size_t  len) const
private

Definition at line 159 of file TcpLogger.cc.

References DBG_CRITICAL, DBG_IMPORTANT, debugs, fatal(), and MY_DEBUG_SECTION.

◆ CBDATA_CLASS()

Log::TcpLogger::CBDATA_CLASS ( TcpLogger  )
private

◆ Close()

void Log::TcpLogger::Close ( Logfile lf)
staticprivate

Definition at line 437 of file TcpLogger.cc.

References asyncCall(), Logfile::data, debugs, endGracefully(), NULL, and ScheduleCallHere.

◆ connectDone()

void Log::TcpLogger::connectDone ( const CommConnectCbParams conn)
private

◆ delayedReconnect()

void Log::TcpLogger::delayedReconnect ( )
private

Definition at line 323 of file TcpLogger.cc.

References conn, and Must.

Referenced by DelayedReconnect().

◆ DelayedReconnect()

void Log::TcpLogger::DelayedReconnect ( void *  data)
staticprivate

Definition at line 306 of file TcpLogger.cc.

References assert, Logfile::data, delayedReconnect(), JobCallback, MY_DEBUG_SECTION, and ScheduleCallHere.

Referenced by connectDone().

◆ deleteThis()

void AsyncJob::deleteThis ( const char *  aReason)
protectedinherited

◆ disconnect()

void Log::TcpLogger::disconnect ( )
private

Definition at line 383 of file TcpLogger.cc.

References comm_remove_close_handler(), conn, and NULL.

◆ doConnect()

◆ done()

bool AsyncJob::done ( ) const
protectedinherited

◆ doneAll()

bool Log::TcpLogger::doneAll ( ) const
protectedvirtual

Reimplemented from AsyncJob.

Definition at line 74 of file TcpLogger.cc.

References conn, debugs, AsyncJob::doneAll(), and MY_DEBUG_SECTION.

◆ endGracefully()

void Log::TcpLogger::endGracefully ( )
protected

Called when Squid is reconfiguring (or exiting) to give us a chance to flush remaining buffers and end this job w/o loss of data. No new log records are expected. Must be used as (or inside) an async job call and will result in [eventual] job termination.

Definition at line 103 of file TcpLogger.cc.

References assert, and NULL.

Referenced by Close().

◆ EndLine()

void Log::TcpLogger::EndLine ( Logfile lf)
staticprivate

Definition at line 425 of file TcpLogger.cc.

References SquidConfig::buffered_logs, Config, and SquidConfig::onoff.

◆ flush()

void Log::TcpLogger::flush ( )
protected

Definition at line 112 of file TcpLogger.cc.

◆ Flush()

void Log::TcpLogger::Flush ( Logfile lf)
staticprivate

Definition at line 406 of file TcpLogger.cc.

◆ handleClosure()

void Log::TcpLogger::handleClosure ( const CommCloseCbParams io)
private

This is our comm_close_handler. It is called when some external force (e.g., reconfigure or shutdown) is closing the connection (rather than us).

Definition at line 369 of file TcpLogger.cc.

References assert, conn, and NULL.

Referenced by connectDone().

◆ handleStopRequest()

void AsyncJob::handleStopRequest ( )
inlineinherited

Definition at line 71 of file AsyncJob.h.

References AsyncJob::mustStop().

◆ logRecord()

void Log::TcpLogger::logRecord ( const char *  buf,
size_t  len 
)
protected

Definition at line 119 of file TcpLogger.cc.

◆ mustStop()

◆ Open()

◆ Rotate()

void Log::TcpLogger::Rotate ( Logfile lf,
const int16_t   
)
staticprivate

Definition at line 432 of file TcpLogger.cc.

◆ start()

void Log::TcpLogger::start ( )
protectedvirtual

Reimplemented from AsyncJob.

Definition at line 68 of file TcpLogger.cc.

◆ Start()

◆ StartLine()

void Log::TcpLogger::StartLine ( Logfile lf)
staticprivate

Definition at line 420 of file TcpLogger.cc.

◆ status()

◆ StillLogging()

Log::TcpLogger * Log::TcpLogger::StillLogging ( Logfile lf)
staticprivate

Converts Logfile into a pointer to a valid TcpLogger job or, if the logger job has quit, into a nill pointer

Definition at line 398 of file TcpLogger.cc.

References Logfile::data, and NULL.

◆ swanSong()

void Log::TcpLogger::swanSong ( )
protectedvirtual

Reimplemented from AsyncJob.

Definition at line 96 of file TcpLogger.cc.

References AsyncJob::swanSong().

◆ toCbdata()

virtual void* CbdataParent::toCbdata ( )
pure virtualinherited

◆ writeDone()

void Log::TcpLogger::writeDone ( const CommIoCbParams io)
private

◆ writeIfNeeded()

void Log::TcpLogger::writeIfNeeded ( )
private

Definition at line 127 of file TcpLogger.cc.

◆ writeIfPossible()

void Log::TcpLogger::writeIfPossible ( )
private

◆ WriteLine()

void Log::TcpLogger::WriteLine ( Logfile lf,
const char *  buf,
size_t  len 
)
staticprivate

Definition at line 413 of file TcpLogger.cc.

Member Data Documentation

◆ bufferCapacity

size_t Log::TcpLogger::bufferCapacity
private

Definition at line 96 of file TcpLogger.h.

Referenced by TcpLogger().

◆ BufferCapacityMin

const size_t Log::TcpLogger::BufferCapacityMin = 2*Log::TcpLogger::IoBufSize
staticprivate

Definition at line 88 of file TcpLogger.h.

Referenced by TcpLogger().

◆ bufferedSize

size_t Log::TcpLogger::bufferedSize
private

Definition at line 97 of file TcpLogger.h.

◆ buffers

std::list<MemBlobPointer> Log::TcpLogger::buffers
private

Definition at line 95 of file TcpLogger.h.

◆ closer

AsyncCall::Pointer Log::TcpLogger::closer
private

Definition at line 106 of file TcpLogger.h.

◆ conn

Comm::ConnectionPointer Log::TcpLogger::conn
private

Definition at line 104 of file TcpLogger.h.

◆ connectFailures

uint64_t Log::TcpLogger::connectFailures
private

Definition at line 111 of file TcpLogger.h.

◆ connWait

JobWait<Comm::ConnOpener> Log::TcpLogger::connWait
private

Definition at line 109 of file TcpLogger.h.

◆ dieOnError

bool Log::TcpLogger::dieOnError
private

Whether this job must kill Squid on the first unrecoverable error. Note that we may be able to recover from a failure to connect, but we cannot recover from forgetting (dropping) a record while connecting.

Definition at line 93 of file TcpLogger.h.

◆ drops

uint64_t Log::TcpLogger::drops
private

Definition at line 112 of file TcpLogger.h.

◆ flushDebt

size_t Log::TcpLogger::flushDebt
private

Definition at line 98 of file TcpLogger.h.

◆ id

const InstanceId<AsyncJob> AsyncJob::id
inherited

Definition at line 73 of file AsyncJob.h.

◆ inCall

AsyncCall::Pointer AsyncJob::inCall
protectedinherited

◆ IoBufSize

const size_t Log::TcpLogger::IoBufSize = 2*MAX_URL
staticprivate

Definition at line 87 of file TcpLogger.h.

◆ quitOnEmpty

bool Log::TcpLogger::quitOnEmpty
private

Definition at line 100 of file TcpLogger.h.

◆ reconnectScheduled

bool Log::TcpLogger::reconnectScheduled
private

Definition at line 101 of file TcpLogger.h.

◆ remote

Ip::Address Log::TcpLogger::remote
private

Definition at line 105 of file TcpLogger.h.

Referenced by TcpLogger().

◆ started_

bool AsyncJob::started_ = false
protectedinherited

Definition at line 83 of file AsyncJob.h.

Referenced by AsyncJob::~AsyncJob(), AsyncJob::callEnd(), and AsyncJob::Start().

◆ stopReason

const char* AsyncJob::stopReason
protectedinherited

◆ swanSang_

bool AsyncJob::swanSang_ = false
protectedinherited

Definition at line 84 of file AsyncJob.h.

Referenced by AsyncJob::~AsyncJob(), and AsyncJob::callEnd().

◆ typeName

◆ writeScheduled

bool Log::TcpLogger::writeScheduled
private

Definition at line 102 of file TcpLogger.h.


The documentation for this class was generated from the following files:

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors