ICP  1
DAEstatus.h
Go to the documentation of this file.
1 #ifndef DAE_STATUS
2 #define DAE_STATUS
3 
4 #include "DAEstatus_codes.h"
5 
6 class DAEstatus;
7 
9 {
10  friend class DAEstatus;
11 private:
13  int m_errtype;
15  std::string m_text;
16  time_t m_time;
17 
18  static void make_iso_time(time_t time, char* buffer, int len, bool format_with_T)
19  {
20  struct tm *tm_struct;
21  buffer[0] = '\0';
22  tm_struct = localtime(&time);
23  if (tm_struct != 0)
24  {
25  if (format_with_T)
26  {
27  strftime(buffer, len, "%Y-%m-%dT%H:%M:%S", tm_struct);
28  }
29  else
30  {
31  strftime(buffer, len, "%Y-%m-%d %H:%M:%S", tm_struct);
32  }
33  }
34  else
35  {
36  strncpy(buffer, "<UNKNOWN>", len);
37  }
38  buffer[len-1] = '\0';
39  }
40 
41 public:
43  DAEstatus_message(int severity, int errtype, int facility, const std::string& text);
44  std::ostream& print(std::ostream& str, bool format_with_T = false, bool add_cr = false) const;
45  bool checkEQ(int severity) const { return compareEQ(m_severity, severity); }
46  bool checkLE(int severity) const { return compareLE(m_severity, severity); }
47  bool checkGE(int severity) const { return compareGE(m_severity, severity); }
48  bool check(int severity, int direction) const { return compare(m_severity, severity, direction); }
49  bool operator==(int severity) const { return checkEQ(severity); }
50  bool operator!=(int severity) const { return !checkEQ(severity); }
51  bool operator<=(int severity) const { return checkLE(severity); }
52  bool operator>=(int severity) const { return checkGE(severity); }
53  static bool compareEQ(int left_sev, int right_sev);
54  static bool compareLE(int left_sev, int right_sev);
55  static bool compareGE(int left_sev, int right_sev);
56  static bool compare(int left_sev, int right_sev, int direction);
57  int resetSeverityToAtMost(int severity)
58  {
59  if (!compareLE(m_severity, severity))
60  {
61  m_severity = severity;
62  }
63  return m_severity;
64  }
65 
66  int resetSeverityToAtLeast(int severity)
67  {
68  if (compareLE(m_severity, severity))
69  {
70  m_severity = severity;
71  }
72  return m_severity;
73  }
74 
75  std::string timeStr(bool format_with_T) const
76  {
77  char time_buffer[128];
78  make_iso_time(m_time, time_buffer, sizeof(time_buffer), format_with_T);
79  return time_buffer;
80  }
81 
82  std::string str() const
83  {
84  return m_text;
85  }
86 };
87 
88 inline bool DAEstatus_message::compare(int left_sev, int right_sev, int direction)
89 {
90  switch(direction)
91  {
92  case SEV_LE:
93  return compareLE(left_sev, right_sev);
94  break;
95 
96  case SEV_EQ:
97  return compareEQ(left_sev, right_sev);
98  break;
99 
100  case SEV_GE:
101  return compareGE(left_sev, right_sev);
102  break;
103 
104  case SEV_ALL:
105  return true;
106  break;
107 
108  default:
109  break;
110  }
111  return false;
112 }
113 
114 inline std::ostream& operator<<(std::ostream& str, const DAEstatus_message& sm)
115 {
116  return sm.print(str);
117 }
118 
119 typedef int DAEreport_func_t(const DAEstatus_message& mess, void* arg);
120 
122 {
123 private:
124  typedef std::list<DAEstatus_message> status_list_t;
132  CRITICAL_SECTION m_critical;
133 
134  DAEstatus(const DAEstatus&) { }
135  void operator=(const DAEstatus&) { }
136 
137 public:
138  DAEstatus();
139  ~DAEstatus();
140  static const int Success;
141  static const int Failure;
142  int severity() { return m_severity; }
143  bool OK() { return check(SEV_WARNING, SEV_LE); }
144  int result() { return ( OK() ? Success : Failure ); }
145  int size() { return static_cast<int>(m_status_list.size()); }
146  bool operator==(int severity) const { return check(severity, SEV_EQ); }
147  bool operator!=(int severity) const { return !check(severity, SEV_EQ); }
148  bool operator<=(int severity) const { return check(severity, SEV_LE); }
149  bool operator>=(int severity) const { return check(severity, SEV_GE); }
150 
151  int add(DAEstatus& dstatus, bool clear);
152  int add(const DAEstatus_message& mess);
153  int add(int facility, int severity, int errtype, const std::string& text);
154  int addVa(int facility, int severity, int errtype, const char* format, ... );
155 // int addHrVa(int facility, int severity, int errtype, HRESULT hr, const char* format, ... );
156  int addInfo(int facility, const std::string& text);
157  int addInfoVa(int facility, const char* format, ... );
158  int addWarning(int facility, const std::string& text);
159  int addWarningVa(int facility, const char* format, ... );
160  int addDebug(int facility, const std::string& text);
161  int addDebugVa(int facility, const char* format, ... );
162  void reportImmediately(bool value) { m_report_immediately = value; }
163  bool check(int severity, int direction) const;
164  int clear(int severity, int direction, bool reset_overall_severity = true);
165  int clearAll(bool reset_overall_severity = true) { return clear(SEV_OK, SEV_ALL, reset_overall_severity); }
166  int report(int severity, int direction, bool reset_overall_severity = true, bool remove_messages = true);
167  int report(std::ostream& str, int severity, int direction, bool reset_overall_severity = true, bool remove_messages = true);
168  int report(DAEreport_func_t* report_func, void* report_arg, int severity, int direction, bool reset_overall_severity = true, bool remove_messages = true);
169  int reportAll(bool reset_overall_severity = true, bool remove_messages = true) { return report(SEV_OK, SEV_ALL, reset_overall_severity, remove_messages); }
170  int reportAll(std::ostream& str, bool reset_overall_severity = true, bool remove_messages = true) { return report(str, SEV_OK, SEV_ALL, reset_overall_severity, remove_messages); }
171  int reportAll(DAEreport_func_t* report_func, void* report_arg, bool reset_overall_severity = true, bool remove_messages = true) { return report(report_func, report_arg, SEV_OK, SEV_ALL, reset_overall_severity, remove_messages); }
172 
175 
176  std::ostream& print(std::ostream& str);
177 
178  int setReportFunction(DAEreport_func_t* report_func, void* arg)
179  {
180  m_report_func = report_func;
181  m_report_func_arg = arg;
182  return 0;
183  }
184 
185  int setReportCopyFunction(DAEreport_func_t* report_func, void* arg)
186  {
187  m_report_copy_func = report_func;
189  return 0;
190  }
191 
192  static int ostreamReportFunction(const DAEstatus_message& mess, void* arg)
193  {
194  std::ostream* pStr = (std::ostream*)arg;
195  (*pStr) << mess << '\n';
196  return 0;
197  }
198 
199 
200 protected:
201  int addVaMain(int facility, int severity, int errtype, const char* format, va_list ap);
202  int recalculateSeverity();
203 };
204 
205 
206 inline std::ostream& operator<<(std::ostream& str, DAEstatus& s)
207 {
208  return s.print(str);
209 }
210 
211 
212 // error macros
213 #define STATUS_CHECK_HR(a, status) \
214  hr = (a); \
215  if (FAILED(hr)) { \
216  status.addVa(FAC_DAE, SEV_ERROR, ERRTYPE_OUTOFMEM, \
217  "%s %d %s failed error 0x%.8x", __FILE__, __LINE__ , #a , hr); \
218  }
219 
220 #endif /* DAE_STATUS */
bool check(int severity, int direction) const
Definition: DAEstatus.h:48
bool check(int severity, int direction) const
Definition: DAEstatus.cpp:162
int addVa(int facility, int severity, int errtype, const char *format,...)
Definition: DAEstatus.cpp:54
#define SEV_WARNING
bool operator<=(int severity) const
Definition: DAEstatus.h:148
static void make_iso_time(time_t time, char *buffer, int len, bool format_with_T)
Definition: DAEstatus.h:18
int clearAll(bool reset_overall_severity=true)
Definition: DAEstatus.h:165
int report(int severity, int direction, bool reset_overall_severity=true, bool remove_messages=true)
Definition: DAEstatus.cpp:224
static bool compareEQ(int left_sev, int right_sev)
Definition: DAEstatus.cpp:303
#define SEV_LE
int DAEreport_func_t(const DAEstatus_message &mess, void *arg)
Definition: DAEstatus.h:119
DAEstatus(const DAEstatus &)
Definition: DAEstatus.h:134
#define SEV_OK
static const int Failure
Definition: DAEstatus.h:141
int add(DAEstatus &dstatus, bool clear)
Definition: DAEstatus.cpp:131
int resetSeverityToAtMost(int severity)
Definition: DAEstatus.h:57
int addDebug(int facility, const std::string &text)
Definition: DAEstatus.cpp:116
std::list< DAEstatus_message > status_list_t
Definition: DAEstatus.h:124
static const int Success
Definition: DAEstatus.h:140
static bool compareLE(int left_sev, int right_sev)
Definition: DAEstatus.cpp:309
int setReportFunction(DAEreport_func_t *report_func, void *arg)
Definition: DAEstatus.h:178
bool checkEQ(int severity) const
Definition: DAEstatus.h:45
DAEreport_func_t * m_report_func
Definition: DAEstatus.h:127
std::string str() const
Definition: DAEstatus.h:82
int resetSeverityToAtLeast(int severity)
Definition: DAEstatus.h:66
int setReportCopyFunction(DAEreport_func_t *report_func, void *arg)
Definition: DAEstatus.h:185
int reportAll(std::ostream &str, bool reset_overall_severity=true, bool remove_messages=true)
Definition: DAEstatus.h:170
bool operator==(int severity) const
Definition: DAEstatus.h:49
int reportAll(bool reset_overall_severity=true, bool remove_messages=true)
Definition: DAEstatus.h:169
void * m_report_copy_func_arg
Definition: DAEstatus.h:130
int reportAll(DAEreport_func_t *report_func, void *report_arg, bool reset_overall_severity=true, bool remove_messages=true)
Definition: DAEstatus.h:171
int clear(int severity, int direction, bool reset_overall_severity=true)
Definition: DAEstatus.cpp:201
std::ostream & print(std::ostream &str, bool format_with_T=false, bool add_cr=false) const
Definition: DAEstatus.cpp:273
bool OK()
Definition: DAEstatus.h:143
int m_severity
Definition: DAEstatus.h:126
bool operator!=(int severity) const
Definition: DAEstatus.h:147
int addVaMain(int facility, int severity, int errtype, const char *format, va_list ap)
Definition: DAEstatus.cpp:64
int addDebugVa(int facility, const char *format,...)
Definition: DAEstatus.cpp:121
int addWarning(int facility, const std::string &text)
Definition: DAEstatus.cpp:101
bool operator<=(int severity) const
Definition: DAEstatus.h:51
#define SEV_ALL
int resetSeverityToAtLeast(int severity)
Definition: DAEstatus.cpp:184
status_list_t m_status_list
Definition: DAEstatus.h:125
int addWarningVa(int facility, const char *format,...)
Definition: DAEstatus.cpp:106
int recalculateSeverity()
Definition: DAEstatus.cpp:147
bool operator>=(int severity) const
Definition: DAEstatus.h:52
void * m_report_func_arg
Definition: DAEstatus.h:128
int severity()
Definition: DAEstatus.h:142
void reportImmediately(bool value)
Definition: DAEstatus.h:162
bool operator==(int severity) const
Definition: DAEstatus.h:146
std::ostream & print(std::ostream &str)
Definition: DAEstatus.cpp:265
static bool compareGE(int left_sev, int right_sev)
Definition: DAEstatus.cpp:326
static bool compare(int left_sev, int right_sev, int direction)
Definition: DAEstatus.h:88
CRITICAL_SECTION m_critical
Definition: DAEstatus.h:132
int addInfo(int facility, const std::string &text)
Definition: DAEstatus.cpp:86
static int ostreamReportFunction(const DAEstatus_message &mess, void *arg)
Definition: DAEstatus.h:192
int resetSeverityToAtMost(int severity)
Definition: DAEstatus.cpp:167
bool operator>=(int severity) const
Definition: DAEstatus.h:149
bool m_report_immediately
Definition: DAEstatus.h:131
#define SEV_EQ
#define SEV_GE
bool checkLE(int severity) const
Definition: DAEstatus.h:46
std::string timeStr(bool format_with_T) const
Definition: DAEstatus.h:75
std::string m_text
Definition: DAEstatus.h:15
int result()
Definition: DAEstatus.h:144
void operator=(const DAEstatus &)
Definition: DAEstatus.h:135
int addInfoVa(int facility, const char *format,...)
Definition: DAEstatus.cpp:91
DAEreport_func_t * m_report_copy_func
Definition: DAEstatus.h:129
std::ostream & operator<<(std::ostream &os, const DAEEventHeader::DAETime &t)
Definition: dae_events.h:69
bool checkGE(int severity) const
Definition: DAEstatus.h:47
bool operator!=(int severity) const
Definition: DAEstatus.h:50
int size()
Definition: DAEstatus.h:145