CARMA C++
SyslogMessage.h
1 #ifndef CARMA_DBMS_SYSLOGMESSAGE_H
2 #define CARMA_DBMS_SYSLOGMESSAGE_H
3 
4 
5 #include <iosfwd>
6 #include <sstream>
7 #include <string>
8 #include <cstring>
9 
10 #include "carma/util/Time.h"
11 
12 namespace carma
13 {
14  namespace dbms
15  {
16  class SyslogMessage
17  {
18  public:
19 
20  static const size_t S_SHORT_LEN = 10;
21  static const size_t S_STD_LEN = 80;
22  static const size_t S_LONG_LEN = 1024;
23 
24  size_t setDate( double v )
25  {
26  _mjd = v;
27  return sizeof( double );
28  }
29  double getDate() { return _mjd; };
30 
31  size_t setLog( const char *v )
32  {
33  return setLog( (char *)v );
34  }
35  size_t setLog( char *v )
36  {
37  size_t r = strnlen(v, S_STD_LEN)+1;
38  memset( _log, 0, r );
39  strncpy( _log, v, r );
40  _log[r] = '\0';
41  return r;
42  }
43  char *getLog() { return _log; };
44 
45  size_t setHost( const char *v )
46  {
47  return setHost( (char *)v );
48  }
49 
50  size_t setHost( char *v )
51  {
52  size_t r = strnlen(v, S_STD_LEN)+1;
53  memset( _host, 0, r );
54  strncpy( _host, v, r );
55  _host[r] = '\0';
56  return r;
57  }
58  char *getHost() { return _host; };
59 
60  size_t setProgram( const char *v )
61  {
62  return setProgram( (char *)v );
63  }
64 
65  size_t setProgram( char *v )
66  {
67  size_t r = strnlen(v, S_STD_LEN)+1;
68  memset( _program, 0, r );
69  strncpy( _program, v, r );
70  _program[r] = '\0';
71  return r;
72  }
73  char *getProgram() { return _program; };
74 
75  size_t setPrio( const char *v )
76  {
77  return setPrio( (char *)v );
78  }
79  size_t setPrio( char *v )
80  {
81  size_t r = strnlen(v, S_SHORT_LEN)+1;
82  memset( _prio, 0, r );
83  strncpy( _prio, v, r );
84  _prio[r] = '\0';
85  return r;
86  }
87  char *getCharPrio() { return _prio; };
88 
89  int getIntPrio()
90  {
91  if ( ! strcmp( _prio, "DEBUG" ) )
92  return 25;
93  if ( ! strcmp( _prio, "INFO" ) )
94  return 30;
95  if ( ! strcmp( _prio, "NOTICE" ) )
96  return 40;
97  if ( ! strcmp( _prio, "WARN" ) )
98  return 50;
99  if ( ! strcmp( _prio, "ERROR" ) )
100  return 60;
101  if ( ! strcmp( _prio, "CRIT" ) )
102  return 70;
103  if ( ! strcmp( _prio, "ALERT" ) )
104  return 80;
105  if ( ! strcmp( _prio, "FATAL" ) )
106  return 90;
107 
108  return -1; // stifle warning
109  };
110 
111  size_t setFullyQualifiedProgramName( const char *v )
112  {
113  return setFullyQualifiedProgramName( (char *)v );
114  }
115  size_t setFullyQualifiedProgramName( char *v )
116  {
117  size_t r = strnlen(v, S_STD_LEN)+1;
118  memset( _fullyQualifiedProgramName, 0, r );
119  strncpy( _fullyQualifiedProgramName, v, r );
120  _fullyQualifiedProgramName[r] = '\0';
121  return r;
122  }
123  char *getFullyQualifiedProgramName() {
124  return _fullyQualifiedProgramName; };
125 
126  size_t setThreadInfo( const char *v )
127  {
128  return setThreadInfo( (char *)v );
129  }
130  size_t setThreadInfo( char *v )
131  {
132  size_t r = strnlen(v, S_STD_LEN)+1;
133  memset( _threadInfo, 0, r );
134  strncpy( _threadInfo, v, r );
135  _threadInfo[r] = '\0';
136 // std::cout << " v:{" << v << "}" << std::endl;
137 // std::cout << " t:{" << _threadInfo << "}" << std::endl;
138  return r;
139  }
140  char *getThreadInfo() { return _threadInfo; };
141 
142  size_t setMessage( const char *v )
143  {
144  return setMessage( (char *)v );
145  }
146  size_t setMessage( char *v )
147  {
148  size_t r = strnlen(v, S_LONG_LEN)+1;
149  memset( _message, 0, r );
150  strncpy( _message, v, r );
151  _message[r] = '\0';
152 // std::cout << " v:{" << v << "}" << std::endl;
153 // std::cout << " m:{" << _message << "}" << std::endl;
154  return r;
155  }
156  char *getMessage() { return _message; };
157 
158  size_t length()
159  {
160  size_t len = sizeof(double);
161  len += strnlen(_log,S_STD_LEN)+1;
162  len += strnlen(_host,S_STD_LEN)+1;
163  len += strnlen(_program,S_STD_LEN)+1;
164  len += strnlen(_prio,S_SHORT_LEN)+1;
165  len += strnlen(_fullyQualifiedProgramName,S_STD_LEN)+1;
166  len += strnlen(_threadInfo,S_STD_LEN)+1;
167  len += strnlen(_message,S_LONG_LEN)+1;
168 
169  return len;
170  }
171 
172  std::string toString() const
173  {
174  std::ostringstream oss;
175  oss.precision(12);
176  oss
177  << "date:'"<< ::carma::util::Time::getDateTimeString(_mjd)
178  << "' log:'"<< _log
179  << "' host:'"<< _host
180  << "' program:'"<< _program
181  << "' prio:'"<< _prio
182  << "' fqpn:'"<< _fullyQualifiedProgramName
183  << "' threadInfo:'"<< _threadInfo
184  << "' message:'"<< _message << "'";
185 
186  return oss.str();
187  }
188 
189  private:
190  // no wide characters/internationalization.
191  // poop. Add on 5 bytes to each, just
192  // to give breathing room.
193  double _mjd;
194  char _log[S_STD_LEN+5];
195  char _host[S_STD_LEN+5];
196  char _program[S_STD_LEN+5];
197  char _prio[S_SHORT_LEN+5];
198  char _fullyQualifiedProgramName[S_STD_LEN+5];
199  char _threadInfo[S_STD_LEN+5];
200  char _message[S_LONG_LEN+5];
201 
202  }; // class SyslogMessage
203  } // namespace dbms
204 } // namespace carma
205 
206 namespace
207 {
208  ::std::ostream& operator<<(::std::ostream &os, const ::carma::dbms::SyslogMessage *msg)
209  {
210  os << msg->toString();
211  return os;
212  }
213 
214  ::std::ostream& operator<<(::std::ostream &os, const ::carma::dbms::SyslogMessage &msg)
215  {
216  os << msg.toString();
217  return os;
218  }
219 }
220 
221 #endif // CARMA_DBMS_SYSLOGMESSAGE_H
std::ostream & operator<<(::std::ostream &os, const carma::dbms::Table &table)
Common time functions.
static std::string getDateTimeString(int precision=0, const std::string &dateFormat="%d%b%y")
Get date and time of day string for current time.
std::string toString(const SortOrder &sortOrder)
get a string representing the specified sort order