This is an automated email from the git hooks/post-receive script.

hmmr-guest pushed a commit to branch master
in repository aghermann.

commit d36d90cdd43d0c88d9c72e2da014215129f6bec0
Author: Andrei Zavada <[email protected]>
Date:   Fri Sep 27 02:45:05 2013 +0300

    borrow log-facility from cnrun, let it lie spare for now
---
 upstream/src/common/log-facility.cc |  145 +++++++++++++++++++++++++++++++++++
 upstream/src/common/log-facility.hh |   75 ++++++++++++++++++
 2 files changed, 220 insertions(+)

diff --git a/upstream/src/common/log-facility.cc 
b/upstream/src/common/log-facility.cc
new file mode 100644
index 0000000..be7fc86
--- /dev/null
+++ b/upstream/src/common/log-facility.cc
@@ -0,0 +1,145 @@
+/*
+ * Author: Andrei Zavada <[email protected]>
+ *
+ * License: GPL-2+
+ *
+ * Initial version: 2009-06-28
+ *
+ */
+
+#include <sys/time.h>
+#include <cstdarg>
+#include <cstring>
+#include <cmath>
+#include <fstream>
+
+#include "config.h"
+
+#include "log-facility.hh"
+
+using namespace std;
+
+
+Stilton::CLogFacility::
+CLogFacility( const char *log_fname,
+             int inlog_threshold,
+             int instdout_tee_threshold,
+             unsigned short insec_dec_place,
+             int bits,
+             size_t buf_size)
+      : status (bits),
+       log_threshold (inlog_threshold),
+       stdout_tee_threshold (instdout_tee_threshold),
+       sec_dec_places (insec_dec_place)
+{
+       _line_buf = new char[_buf_size = buf_size];
+       if ( log_fname && strlen(log_fname) ) {
+               _log_fname = string(log_fname);
+               _log_strm.open( log_fname);
+               unitbuf( _log_strm);
+       }
+}
+
+Stilton::CLogFacility::
+~CLogFacility()
+{
+       if ( _log_fname.size() )
+               _log_strm.close();
+       delete[] _line_buf;
+}
+
+
+void
+Stilton::CLogFacility::
+msg( int vrb, const char *client_name, const char* fmt, ...)
+{
+       va_list ap;
+       va_start (ap, fmt);
+       msgv( vrb, client_name, fmt, ap);
+       va_end (ap);
+}
+
+
+void
+Stilton::CLogFacility::
+msgv( int vrb, const char *client_name, const char* fmt, va_list ap)
+{
+//     if ( status & STILTON_LOG_NOLOCK )
+//             
boost::interprocess::scoped_lock<boost::interprocess::interprocess_mutex> L( 
_log_lock);
+
+       if ( log_threshold < vrb && stdout_tee_threshold < vrb )
+               return;
+
+       char timestampbuf[32];
+       time_t timestamp; time( &timestamp);
+       struct timeval tp; gettimeofday( &tp, nullptr);
+       strftime( timestampbuf, 31, "%F %T", localtime( &timestamp));
+       char secfracbuf[sec_dec_places+3];
+       snprintf( secfracbuf, sec_dec_places+2, ".%0*u", sec_dec_places,
+                 (unsigned)round( tp.tv_usec / pow( 10., 6-sec_dec_places-1)));
+
+       vsnprintf( _line_buf, _buf_size, fmt, ap);
+
+       char *line = strtok( _line_buf, "\n");
+       do {
+               if ( vrb < 0 )
+                       printf( "%s%sError: %s\n", client_name ? client_name : 
"", (client_name && strlen(client_name)) ? ": " : "", line);
+               else if ( stdout_tee_threshold >= vrb )
+                       printf( "%s%s%s\n", client_name ? client_name : "", 
(client_name && strlen(client_name)) ? ": " : "", line);
+
+               if ( log_threshold >= vrb && _log_fname.size() )
+                       _log_strm << timestampbuf << (sec_dec_places > 0 ? 
secfracbuf : "") << ' '
+                                 << client_name << ": "
+                                 << (vrb < 0 ? "Error: " : "") << line << endl;
+       } while ( (line = strtok( nullptr, "\n")) );
+
+       if ( _log_fname.size() )
+               _log_strm.flush();
+}
+
+
+
+// a one-liner, possibly unterminated by \n
+void
+Stilton::CLogFacility::
+msg_( int vrb, const char *client_name, const char* fmt, ...)
+{
+       va_list ap;
+       va_start (ap, fmt);
+       msgv_( vrb, client_name, fmt, ap);
+       va_end (ap);
+}
+
+void
+Stilton::CLogFacility::
+msgv_( int vrb, const char *client_name, const char* fmt, va_list ap)
+{
+//     if ( status & STILTON_LOG_NOLOCK )
+//             
boost::interprocess::scoped_lock<boost::interprocess::interprocess_mutex> L( 
_log_lock);
+
+       if ( log_threshold < vrb && stdout_tee_threshold < vrb )
+               return;
+
+       char timestampbuf[32];
+       time_t timestamp; time( &timestamp);
+       struct timeval tp; gettimeofday( &tp, nullptr);
+       strftime( timestampbuf, 31, "%F %T", localtime( &timestamp));
+       char secfracbuf[sec_dec_places+3];
+       snprintf( secfracbuf, sec_dec_places+2, ".%0*u", sec_dec_places,
+                 (unsigned)round( tp.tv_usec / pow( 10., 6-sec_dec_places-1)));
+
+       vsnprintf( _line_buf, _buf_size, fmt, ap);
+
+       if ( vrb < 0 )
+               printf( "%s%sError: %s", client_name ? client_name : "", 
(client_name && strlen(client_name)) ? ": " : "", _line_buf);
+       else if ( stdout_tee_threshold >= vrb )
+               printf( "%s%s%s", client_name ? client_name : "", (client_name 
&& strlen(client_name)) ? ": " : "", _line_buf);
+
+       if ( log_threshold >= vrb && _log_fname.size() )
+               _log_strm << timestampbuf << (sec_dec_places > 0 ? secfracbuf : 
"") << ' '
+                         << client_name << ": "
+                         << (vrb < 0 ? "Error: " : "") << _line_buf << endl;
+}
+
+
+// eof
diff --git a/upstream/src/common/log-facility.hh 
b/upstream/src/common/log-facility.hh
new file mode 100644
index 0000000..e48c807
--- /dev/null
+++ b/upstream/src/common/log-facility.hh
@@ -0,0 +1,75 @@
+/*
+ * Author: Andrei Zavada <[email protected]>
+ *
+ * License: GPL-2+
+ *
+ * Initial version: 2009-06-28
+ *
+ */
+
+#ifndef STILTON_LOG_FACILITY_H
+#define STILTON_LOG_FACILITY_H
+
+#include <cstdarg>
+#include <fstream>
+
+//#include <boost/interprocess/sync/interprocess_mutex.hpp>
+//#include <boost/interprocess/sync/interprocess_condition.hpp>
+
+
+namespace Stilton {
+
+using namespace std;
+using namespace Stilton;
+
+
+// bitwise OR this with CLogFacility::status to prevent locking even if 
supported
+#define STILTON_LOG_NOLOCK     1
+
+class CLogFacility {
+
+    public:
+       CLogFacility( const char *log_fname,
+                     int log_threshold = 4,
+                     int stdout_tee_threshold = 2,
+                     unsigned short sec_dec_places = 2,
+                     int bits = 0,
+                     size_t buf_size = 2048);
+
+       int     status;
+
+       int     log_threshold,
+               stdout_tee_threshold;
+       unsigned short
+               sec_dec_places;
+      // full-featured; always terminating lines with a \n
+       void msg( int vrb, const char *client_name, const char* fmt, ...);
+       void msgv( int vrb, const char *client_name, const char* fmt, va_list);
+      // raw output: no parsing, not timestamping each line
+       void msg_( int vrb, const char *client_name, const char* fmt, ...);
+       void msgv_( int vrb, const char *client_name, const char* fmt, va_list);
+
+       const char *log_fname() const
+               { return _log_fname.c_str(); }
+       size_t buf_size() const
+               { return _buf_size; }
+
+       ~CLogFacility();
+
+    private:
+       string  _log_fname;
+       size_t  _buf_size;
+       ofstream
+               _log_strm;
+       char
+               *_line_buf;
+//     boost::interprocess::interprocess_mutex
+//             _log_lock;
+};
+
+
+}
+
+#endif
+
+// EOF

-- 
Alioth's /git/debian-med/git-commit-notice on 
/srv/git.debian.org/git/debian-med/aghermann.git

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to