libassa  3.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Member Functions | Private Types | Private Member Functions | Private Attributes
ASSA::RemoteLogger Class Reference

#include <RemoteLogger.h>

Inheritance diagram for ASSA::RemoteLogger:
ASSA::Logger_Impl ASSA::ServiceHandler< ASSA::IPv4Socket > ASSA::EventHandler

List of all members.

Public Member Functions

 RemoteLogger ()
virtual int open ()
 Called by Connector upon establishing connection.
virtual int handle_close (int fd_)
 Called by Reactor when we close connection with log_close()
virtual int log_open (const char *appname_, const char *logfname_, u_long groups_, u_long maxsize_, Reactor *reactor_)
 Calling results into sending SIGN-ON message.
virtual int log_close (void)
 Close connection to the assa-logd.
virtual void log_resync (void)
 Flush output buffer.
virtual int log_msg (Group g_, size_t indent_level_, const string &func_name_, size_t expected_sz_, const char *fmt_, va_list)
virtual int log_func (Group g_, size_t indent_level_, const string &func_name_, marker_t type_)

Private Types

enum  state_t { opened, closed }
enum  msg_t { SIGN_ON = 0, SIGN_OFF, LOG_MSG }

Private Member Functions

 RemoteLogger (const RemoteLogger &)
RemoteLoggeroperator= (const RemoteLogger &)

Private Attributes

state_t m_state
Reactorm_reactor
bool m_recursive_call
 If true, recursive call is in progress.

Detailed Description

Definition at line 38 of file RemoteLogger.h.


Member Enumeration Documentation

enum ASSA::RemoteLogger::msg_t [private]
Enumerator:
SIGN_ON 
SIGN_OFF 
LOG_MSG 

Definition at line 83 of file RemoteLogger.h.

Enumerator:
opened 
closed 

Definition at line 82 of file RemoteLogger.h.

{ opened, closed };

Constructor & Destructor Documentation

Definition at line 30 of file RemoteLogger.cpp.

                :
    m_state (closed),
    m_recursive_call (false)
{
    // no-op
}

Member Function Documentation

int RemoteLogger::handle_close ( int  fd_) [virtual]

Called by Reactor when we close connection with log_close()

Reimplemented from ASSA::EventHandler.

Definition at line 105 of file RemoteLogger.cpp.

References closed, ASSA::Logger_Impl::m_logfname, and m_state.

{
    m_state = closed;
    m_logfname.empty ();
    return 0;
}
int RemoteLogger::log_close ( void  ) [virtual]

Close connection to the assa-logd.

Send SIGN_OFF message to the log server and stop data processing. We are managed by Logger class.

Implements ASSA::Logger_Impl.

Definition at line 89 of file RemoteLogger.cpp.

References ASSA::flush(), ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), m_reactor, m_recursive_call, m_state, opened, ASSA::READ_EVENT, ASSA::Reactor::removeHandler(), and SIGN_OFF.

{
    if (m_state == opened) {
        m_recursive_call = true;
        get_stream () << 1234567890 << SIGN_OFF << 0 << ASSA::flush;
        m_reactor->removeHandler (this, READ_EVENT);
        m_recursive_call = false;
    }
    return 0;
}
int RemoteLogger::log_func ( Group  g_,
size_t  indent_level_,
const string &  func_name_,
marker_t  type_ 
) [virtual]

Header + body (preamble;LOG_MSG;length;msg)

Implements ASSA::Logger_Impl.

Definition at line 175 of file RemoteLogger.cpp.

References ASSA::Logger_Impl::add_timestamp(), closed, ASSA::flush(), ASSA::FUNC_ENTRY, ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), ASSA::Logger_Impl::group_enabled(), ASSA::Logger_Impl::indent_func_name(), LOG_MSG, m_recursive_call, m_state, and ASSA::Socket::xdr_length().

{
    if (m_recursive_call) {
        return 0;
    }
    if (m_state == closed) {
        return -1;
    }
    if (! group_enabled (groups_)) { 
        return 0; 
    }

    std::ostringstream os;
    add_timestamp (os);
    indent_func_name (os, func_name_, indent_level_, type_);
    os << ((type_ == FUNC_ENTRY) ? "---v---\n" : "---^---\n");

    if (get_stream ().good ()) {
        m_recursive_call = true;
        get_stream () << 1234567890 << LOG_MSG << Socket::xdr_length (os.str ())
                      << os.str () << ASSA::flush;
        m_recursive_call = false;
    }
    else {
        m_state = closed;
    }

    return 0;
}
int RemoteLogger::log_msg ( Group  g_,
size_t  indent_level_,
const string &  func_name_,
size_t  expected_sz_,
const char *  fmt_,
va_list  msg_list_ 
) [virtual]

Header + body (preamble;LOG_MSG;length;msg)

Implements ASSA::Logger_Impl.

Definition at line 125 of file RemoteLogger.cpp.

References ASSA::Logger_Impl::add_timestamp(), Assure_exit, closed, ASSA::flush(), ASSA::Logger_Impl::format_msg(), ASSA::FUNC_MSG, ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), ASSA::Logger_Impl::group_enabled(), ASSA::Logger_Impl::indent_func_name(), LOG_MSG, m_recursive_call, m_state, and ASSA::Socket::xdr_length().

{
    if (m_recursive_call) {
        return 0;
    }
    if (m_state == closed) {
        return -1;
    }
    if (!group_enabled (groups_)) { 
        return 0; 
    }

    std::ostringstream os;
    add_timestamp (os);
    indent_func_name (os, func_name_, indent_level_, FUNC_MSG);

    bool release = false;
    char* msgbuf_ptr = format_msg (expected_sz_, fmt_, msg_list_, release);
    if (msgbuf_ptr == NULL) {
        return -1;              // failed to format
    }

    os << msgbuf_ptr;

    if (release) {
        delete [] msgbuf_ptr;
    }

    if (get_stream ()) {
        m_recursive_call = true;
        Assure_exit (os.str ().length () != 0);
        get_stream () << 1234567890 << LOG_MSG << Socket::xdr_length (os.str ())
                      << os.str () << ASSA::flush;
        m_recursive_call = false;
    }
    else {
        m_state = closed;
    }
    return 0;
}
int RemoteLogger::log_open ( const char *  appname_,
const char *  logfname_,
u_long  groups_,
u_long  maxsize_,
Reactor reactor_ 
) [virtual]

Calling results into sending SIGN-ON message.

Put stream in a blocking mode. Otherwise, fast clients can override log server.

Send SIGN_ON message to the log server.

Header + Body

Reimplemented from ASSA::Logger_Impl.

Definition at line 46 of file RemoteLogger.cpp.

References ASSA::flush(), ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), ASSA::Logger_Impl::m_groups, ASSA::Logger_Impl::m_logfname, m_reactor, m_recursive_call, m_state, ASSA::Socket::nonblocking, opened, ASSA::READ_EVENT, ASSA::Reactor::registerIOHandler(), SIGN_ON, ASSA::Socket::turnOptionOff(), and ASSA::Socket::xdr_length().

{
    if (m_recursive_call) {
        return 0;
    }
    m_recursive_call = true;

    if (m_state == opened) {
        return 0;
    }
    m_logfname = logfname_;
    m_groups   = groups_;
    m_reactor  = reactor_;

    m_reactor->registerIOHandler (this, get_stream ().getHandler(), 
                                  ASSA::READ_EVENT);

    get_stream ().turnOptionOff (Socket::nonblocking);

    size_t len = sizeof (maxsize_) +
        Socket::xdr_length (appname_) +
        Socket::xdr_length (logfname_);

    get_stream () << 1234567890 << SIGN_ON << len
                  << maxsize_ << appname_ << logfname_ << ASSA::flush;
    m_state = opened;
    m_recursive_call = false;
    return 0;
}
void RemoteLogger::log_resync ( void  ) [virtual]

Flush output buffer.

Reimplemented from ASSA::Logger_Impl.

Definition at line 114 of file RemoteLogger.cpp.

References ASSA::flush(), ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), m_recursive_call, m_state, and opened.

{
    if (m_state == opened) {
        m_recursive_call = true;
        get_stream () << ASSA::flush;
        m_recursive_call = false;
    }
}
int RemoteLogger::open ( void  ) [virtual]

Called by Connector upon establishing connection.

Implements ASSA::ServiceHandler< ASSA::IPv4Socket >.

Definition at line 39 of file RemoteLogger.cpp.

{
    return 0;
}
RemoteLogger& ASSA::RemoteLogger::operator= ( const RemoteLogger ) [private]

Member Data Documentation

Definition at line 86 of file RemoteLogger.h.

Referenced by log_close(), and log_open().

If true, recursive call is in progress.

Definition at line 89 of file RemoteLogger.h.

Referenced by log_close(), log_func(), log_msg(), log_open(), and log_resync().

Definition at line 85 of file RemoteLogger.h.

Referenced by handle_close(), log_close(), log_func(), log_msg(), log_open(), and log_resync().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines