#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...
 
virtual void * toCbdata ()=0
 

Static Public Member Functions

static int Open (Logfile *lf, const char *path, size_t bufSz, int fatalFlag)
 
static Pointer Start (AsyncJob *job)
 starts a freshly created job (i.e., makes the job asynchronous) 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...
 
const InstanceId< AsyncJobid
 job identifier 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...
 
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 27 of file TcpLogger.h.

Member Typedef Documentation

Definition at line 32 of file TcpLogger.h.

Constructor & Destructor Documentation

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.

Log::TcpLogger::~TcpLogger ( )
protectedvirtual

Definition at line 61 of file TcpLogger.cc.

References assert.

Member Function Documentation

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

Definition at line 222 of file TcpLogger.cc.

References debugs, len, Must, and MY_DEBUG_SECTION.

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

Definition at line 202 of file TcpLogger.cc.

References len, and min().

void AsyncJob::callEnd ( )
virtualinherited
void AsyncJob::callStart ( AsyncCall call)
inherited
bool AsyncJob::canBeCalled ( AsyncCall call) const
inherited

Definition at line 101 of file AsyncJob.cc.

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

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.

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

Definition at line 431 of file TcpLogger.cc.

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

void Log::TcpLogger::connectDone ( const CommConnectCbParams conn)
private
void Log::TcpLogger::DelayedReconnect ( void *  data)
staticprivate
void Log::TcpLogger::delayedReconnect ( )
private

Definition at line 320 of file TcpLogger.cc.

References conn, and Must.

Referenced by DelayedReconnect().

void AsyncJob::deleteThis ( const char *  aReason)
protectedinherited
void Log::TcpLogger::disconnect ( )
private

Definition at line 377 of file TcpLogger.cc.

References comm_remove_close_handler(), conn, and NULL.

bool AsyncJob::done ( ) const
protectedinherited

Definition at line 90 of file AsyncJob.cc.

References AsyncJob::doneAll(), NULL, and AsyncJob::stopReason.

Referenced by AsyncJob::callEnd(), and Downloader::downloadFinished().

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.

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().

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

Definition at line 419 of file TcpLogger.cc.

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

void Log::TcpLogger::flush ( )
protected

Definition at line 112 of file TcpLogger.cc.

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

Definition at line 400 of file TcpLogger.cc.

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 366 of file TcpLogger.cc.

References assert, conn, and NULL.

Referenced by connectDone().

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

Definition at line 119 of file TcpLogger.cc.

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

Definition at line 426 of file TcpLogger.cc.

void Log::TcpLogger::start ( )
protectedvirtual

Reimplemented from AsyncJob.

Definition at line 68 of file TcpLogger.cc.

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

Definition at line 414 of file TcpLogger.cc.

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 392 of file TcpLogger.cc.

References Logfile::data, and NULL.

void Log::TcpLogger::swanSong ( )
protectedvirtual

Reimplemented from AsyncJob.

Definition at line 96 of file TcpLogger.cc.

References AsyncJob::swanSong().

virtual void* CbdataParent::toCbdata ( )
pure virtualinherited
void Log::TcpLogger::writeDone ( const CommIoCbParams io)
private
void Log::TcpLogger::writeIfNeeded ( )
private

Definition at line 127 of file TcpLogger.cc.

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

Definition at line 407 of file TcpLogger.cc.

Member Data Documentation

size_t Log::TcpLogger::bufferCapacity
private

Definition at line 94 of file TcpLogger.h.

Referenced by TcpLogger().

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

Definition at line 86 of file TcpLogger.h.

Referenced by TcpLogger().

size_t Log::TcpLogger::bufferedSize
private

Definition at line 95 of file TcpLogger.h.

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

Definition at line 93 of file TcpLogger.h.

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

Definition at line 104 of file TcpLogger.h.

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

Definition at line 102 of file TcpLogger.h.

uint64_t Log::TcpLogger::connectFailures
private

Definition at line 106 of file TcpLogger.h.

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 91 of file TcpLogger.h.

uint64_t Log::TcpLogger::drops
private

Definition at line 107 of file TcpLogger.h.

size_t Log::TcpLogger::flushDebt
private

Definition at line 96 of file TcpLogger.h.

const InstanceId<AsyncJob> AsyncJob::id
protectedinherited

Definition at line 70 of file AsyncJob.h.

AsyncCall::Pointer AsyncJob::inCall
protectedinherited
const size_t Log::TcpLogger::IoBufSize = 2*MAX_URL
staticprivate

Definition at line 85 of file TcpLogger.h.

bool Log::TcpLogger::quitOnEmpty
private

Definition at line 98 of file TcpLogger.h.

bool Log::TcpLogger::reconnectScheduled
private

Definition at line 99 of file TcpLogger.h.

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

Definition at line 103 of file TcpLogger.h.

Referenced by TcpLogger().

const char* AsyncJob::stopReason
protectedinherited
bool Log::TcpLogger::writeScheduled
private

Definition at line 100 of file TcpLogger.h.


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

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors