libassa 3.5.1
Loading...
Searching...
No Matches
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
ASSA::RemoteLogger Class Reference

#include <RemoteLogger.h>

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

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_)
 
- Public Member Functions inherited from ASSA::Logger_Impl
 Logger_Impl ()
 
virtual ~Logger_Impl ()
 
void enable_group (Group g_)
 
void disable_group (Group g_)
 
void enable_groups (u_long g_)
 
void disable_groups (u_long g_)
 
void enable_all_groups (void)
 
void disable_all_groups (void)
 
bool group_enabled (Group g_) const
 
void enable_timestamp (void)
 
void disable_timestamp (void)
 
bool timestamp_enabled (void) const
 
void set_timezone (int zone_)
 
void set_indent_step (u_short step_)
 
u_short get_indent_step (void) const
 
virtual int log_open (u_long groups_)
 Open StdErr Logger.
 
virtual int log_open (const char *logfname_, u_long groups_, u_long maxsize_)
 Open File Logger.
 
- Public Member Functions inherited from ASSA::ServiceHandler< ASSA::IPv4Socket >
 ServiceHandler ()
 Default constructor.
 
 ServiceHandler (ASSA::IPv4Socket *ps_)
 Constructor that takes PEER_STREAM as a parameter.
 
virtual ~ServiceHandler ()
 Destructor closes and deletes PEER_STREAM.
 
virtual void close (void)
 Pure virtual method defined by subclass.
 
 operator ASSA::IPv4Socket & ()
 Conversion operator to type PEER_STREAM &.
 
ASSA::IPv4Socketget_stream ()
 Return referenct to underlying PEER_STREAM.
 
- Public Member Functions inherited from ASSA::EventHandler
 EventHandler ()
 Constructor.
 
virtual ~EventHandler ()
 Virtual destructor.
 
virtual int handle_read (int fd)
 Read event callback.
 
virtual int handle_write (int fd)
 Write handler callback.
 
virtual int handle_except (int fd)
 Exception handler callback.
 
virtual int handle_timeout (TimerId tid)
 Timeout handler callback.
 
virtual int handle_signal (int signum_)
 Signal handler callback.
 
virtual void resetState (void)
 A hook for derived class to reset internal state as needed.
 
void set_id (const std::string &id_)
 Set EventHandler ID.
 
std::string get_id () const
 Retrieve EventHandler ID.
 

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.
 

Additional Inherited Members

- Static Public Attributes inherited from ASSA::Logger_Impl
static const unsigned int LOGGER_MAXLINE = 6660
 Maximum length of the formatted message.
 
- Protected Member Functions inherited from ASSA::Logger_Impl
virtual u_short add_timestamp (ostream &sink_)
 
virtual u_short indent_func_name (ostream &sink_, const string &funcname_, size_t indent_level_, marker_t type_)
 
charformat_msg (size_t expected_sz_, const char *fmt_, va_list vap_, bool &release_)
 Format and put the message in the buffer.
 
- Protected Attributes inherited from ASSA::Logger_Impl
u_short m_indent_step
 Indentation step.
 
u_long m_groups
 Enabled groups.
 
string m_logfname
 Log file name.
 
bool m_tmflg
 Timestamp on/off flag.
 
int m_tz
 Timezone: 0-GMT, 1-Local.
 
- Protected Attributes inherited from ASSA::ServiceHandler< ASSA::IPv4Socket >
ASSA::IPv4Socketm_peerStream
 Concrete Socket instance.
 
- Protected Attributes inherited from ASSA::EventHandler
std::string m_id
 
- Static Protected Attributes inherited from ASSA::Logger_Impl
static char m_msgbuf [LOGGER_MAXLINE]
 Static buffer for formatted message.
 

Detailed Description

Definition at line 38 of file RemoteLogger.h.

Member Enumeration Documentation

◆ msg_t

Enumerator
SIGN_ON 
SIGN_OFF 
LOG_MSG 

Definition at line 83 of file RemoteLogger.h.

◆ state_t

Enumerator
opened 
closed 

Definition at line 82 of file RemoteLogger.h.

Constructor & Destructor Documentation

◆ RemoteLogger() [1/2]

RemoteLogger::RemoteLogger ( )

Definition at line 29 of file RemoteLogger.cpp.

30 :
32 m_recursive_call (false)
33{
34 // no-op
35}
bool m_recursive_call
If true, recursive call is in progress.

◆ RemoteLogger() [2/2]

ASSA::RemoteLogger::RemoteLogger ( const RemoteLogger )
private

Member Function Documentation

◆ handle_close()

int RemoteLogger::handle_close ( int  fd_)
virtual

Called by Reactor when we close connection with log_close()

Reimplemented from ASSA::EventHandler.

Definition at line 104 of file RemoteLogger.cpp.

106{
107 m_state = closed;
108 m_logfname.empty ();
109 return 0;
110}
string m_logfname
Log file name.

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

◆ log_close()

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 88 of file RemoteLogger.cpp.

90{
94 if (m_state == opened) {
95 m_recursive_call = true;
96 get_stream () << 1234567890 << SIGN_OFF << 0 << ASSA::flush;
98 m_recursive_call = false;
99 }
100 return 0;
101}
bool removeHandler(EventHandler *eh_, EventType et_=ALL_EVENTS)
Remove Event handler from reactor for either all I/O events or timeout event or both.
Definition Reactor.cpp:173
ASSA::IPv4Socket & get_stream()
Return referenct to underlying PEER_STREAM.
@ READ_EVENT
Notify when there will be at least 1 byte available for reading from IO channel without blocking .
Socket & flush(Socket &os_)
flush manipulator.
Definition Socket.h:587

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.

◆ log_func()

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 174 of file RemoteLogger.cpp.

179{
180 if (m_recursive_call) {
181 return 0;
182 }
183 if (m_state == closed) {
184 return -1;
185 }
186 if (! group_enabled (groups_)) {
187 return 0;
188 }
189
190 std::ostringstream os;
193 os << ((type_ == FUNC_ENTRY) ? "---v---\n" : "---^---\n");
194
197 if (get_stream ().good ()) {
198 m_recursive_call = true;
199 get_stream () << 1234567890 << LOG_MSG << Socket::xdr_length (os.str ())
200 << os.str () << ASSA::flush;
201 m_recursive_call = false;
202 }
203 else {
204 m_state = closed;
205 }
206
207 return 0;
208}
A wrapper class to provide AutoPtr with reference semantics.
Definition AutoPtr.h:32
virtual u_short indent_func_name(ostream &sink_, const string &funcname_, size_t indent_level_, marker_t type_)
bool group_enabled(Group g_) const
virtual u_short add_timestamp(ostream &sink_)
static size_t xdr_length(const std::string &s_)
Give the true length of the XDR-encoded STL string.
Definition Socket.h:343
@ FUNC_ENTRY
Definition LogMask.h:69

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

◆ log_msg()

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 124 of file RemoteLogger.cpp.

131{
132 if (m_recursive_call) {
133 return 0;
134 }
135 if (m_state == closed) {
136 return -1;
137 }
138 if (!group_enabled (groups_)) {
139 return 0;
140 }
141
142 std::ostringstream os;
145
146 bool release = false;
147 char* msgbuf_ptr = format_msg (expected_sz_, fmt_, msg_list_, release);
148 if (msgbuf_ptr == NULL) {
149 return -1; // failed to format
150 }
151
152 os << msgbuf_ptr;
153
154 if (release) {
155 delete [] msgbuf_ptr;
156 }
157
160 if (get_stream ()) {
161 m_recursive_call = true;
162 Assure_exit (os.str ().length () != 0);
163 get_stream () << 1234567890 << LOG_MSG << Socket::xdr_length (os.str ())
164 << os.str () << ASSA::flush;
165 m_recursive_call = false;
166 }
167 else {
168 m_state = closed;
169 }
170 return 0;
171}
#define Assure_exit(exp_)
Macro that makes program exit if assert fails.
Definition Assure.h:39
char * format_msg(size_t expected_sz_, const char *fmt_, va_list vap_, bool &release_)
Format and put the message in the buffer.
@ FUNC_MSG
Definition LogMask.h:68

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

◆ log_open()

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 45 of file RemoteLogger.cpp.

51{
52 if (m_recursive_call) {
53 return 0;
54 }
55 m_recursive_call = true;
56
57 if (m_state == opened) {
58 return 0;
59 }
63
64 m_reactor->registerIOHandler (this, get_stream ().getHandler(),
66
71
74 size_t len = sizeof (maxsize_) +
77
80 get_stream () << 1234567890 << SIGN_ON << len
83 m_recursive_call = false;
84 return 0;
85}
u_long m_groups
Enabled groups.
bool registerIOHandler(EventHandler *eh_, handler_t fd_, EventType et_=RWE_EVENTS)
Register I/O Event handler with Reactor.
Definition Reactor.cpp:93
bool turnOptionOff(opt_t opt_)
Disable socket option.
Definition Socket.cpp:204
@ nonblocking
Set Socket to a non-blocking mode (O_RDWR|O_NONBLOCK).
Definition Socket.h:115

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

◆ log_resync()

void RemoteLogger::log_resync ( void  )
virtual

Flush output buffer.

Reimplemented from ASSA::Logger_Impl.

Definition at line 113 of file RemoteLogger.cpp.

115{
116 if (m_state == opened) {
117 m_recursive_call = true;
119 m_recursive_call = false;
120 }
121}

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

◆ open()

int RemoteLogger::open ( void  )
virtual

Called by Connector upon establishing connection.

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

Definition at line 38 of file RemoteLogger.cpp.

40{
41 return 0;
42}

◆ operator=()

RemoteLogger & ASSA::RemoteLogger::operator= ( const RemoteLogger )
private

Member Data Documentation

◆ m_reactor

Reactor* ASSA::RemoteLogger::m_reactor
private

Definition at line 86 of file RemoteLogger.h.

Referenced by log_close(), and log_open().

◆ m_recursive_call

bool ASSA::RemoteLogger::m_recursive_call
private

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

◆ m_state

state_t ASSA::RemoteLogger::m_state
private

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: