$search
00001 00060 #ifndef __DIAGNOSTICS_H_ 00061 #define __DIAGNOSTICS_H_ 00062 00063 #include <chrono> 00064 #include <deque> 00065 00075 class ErrorcodeReport // Errorcode from library 00076 { 00077 public: 00078 bool Code_Exists; // true when errorcode returned 00079 int ErrorCode; // code number 00080 std::string Errorcode_Namespace; // namespace of the code (for lookup) 00081 00083 ErrorcodeReport(): 00084 Code_Exists(false), ErrorCode(0), Errorcode_Namespace("") {}; 00085 }; 00086 00094 class DiagnosticStatus 00095 { 00096 public: 00097 short Level; // 0 = OK, 1 = WARN, 2=ERROR 00098 std::string Message; // Description of the error 00099 std::string Recommendation; // Possible solutions for the user 00100 ErrorcodeReport Errorcode_Report; // Errorcode that is returned from a function 00101 00102 std::chrono::time_point<std::chrono::system_clock> Time; // time when status is reported 00103 00105 DiagnosticStatus(): 00106 Level(0), Message(""), Recommendation(""), Time(std::chrono::system_clock::now()) {}; 00107 }; 00108 00116 class Diagnosics 00117 { 00118 00119 /*TODO: - select format for errorlookups (.h, .txt, yaml) 00120 * - implement report status 00121 * - implement read methodes 00122 * - implement QueLength methodes 00123 */ 00124 public: 00125 00127 Diagnosics() 00128 { 00129 m_StatusQueLength = 5; // 5 is default value 00130 00131 // initialize member variabeles 00132 m_StatusList = new std::deque<DiagnosticStatus>[m_StatusQueLength]; 00133 00134 // initialize default ok return value (default 0) 00135 m_Default_Ok_Value = 0; 00136 00137 //TODO: read in errorcode lists 00138 00139 } 00140 00142 ~Diagnosics() 00143 { 00144 delete m_StatusList; 00145 }; 00146 00147 /*******************************************| 00148 | Useage interface | 00149 |*******************************************/ 00150 00152 00156 void ReportStatus(short Level, std::string Message) 00157 { 00158 DiagnosticStatus NewStatus; 00159 00160 NewStatus.Level = Level; 00161 NewStatus.Time = std::chrono::system_clock::now(); 00162 NewStatus.Message = Message; 00163 00164 m_StatusList->push_front(NewStatus); 00165 m_StatusList->pop_back(); 00166 } 00167 00171 void ReportStatus(short Level, std::string Message, std::string Recommendation) 00172 { 00173 DiagnosticStatus NewStatus; 00174 00175 NewStatus.Level = Level; 00176 NewStatus.Time = std::chrono::system_clock::now(); 00177 NewStatus.Message = Message; 00178 NewStatus.Message = Recommendation; 00179 00180 m_StatusList->push_front(NewStatus); 00181 m_StatusList->pop_back(); 00182 } 00183 00187 void ReportStatus(short Level, int Errorcode, std::string Errorcode_Namespace, std::string Recommendation) 00188 { 00189 DiagnosticStatus NewStatus; 00190 00191 NewStatus.Level = Level; 00192 NewStatus.Time = std::chrono::system_clock::now(); 00193 00194 //TODO: generate message from errorcode 00195 00196 NewStatus.Message = Recommendation; 00197 00198 m_StatusList->push_front(NewStatus); 00199 m_StatusList->pop_back(); 00200 } 00201 00205 void ReportStatus(int Errorcode, std::string Errorcode_Namespace) 00206 { 00207 DiagnosticStatus NewStatus; 00208 00209 //TODO: get message from errorcodelist 00210 00211 NewStatus.Time = std::chrono::system_clock::now(); 00212 00213 m_StatusList->push_front(NewStatus); 00214 m_StatusList->pop_back(); 00215 } 00216 00217 00219 00225 void ReadActualStatus(short* Level, std::string* Message, std::string* Recommendation) 00226 { 00227 DiagnosticStatus ActualStatus = m_StatusList->at(0); 00228 00229 // resize strings for the size of the upcoming message 00230 Message->clear(); 00231 Recommendation->clear(); 00232 00233 // write output 00234 Level = (short*) ActualStatus.Level; 00235 Message->append(ActualStatus.Message); 00236 Recommendation->append(ActualStatus.Recommendation); 00237 } 00238 00242 int ReadActualStatusLevel() 00243 { 00244 DiagnosticStatus ActualStatus = m_StatusList->at(0); 00245 return ActualStatus.Level; 00246 } 00247 00251 std::string ReadActualStatusMessage() 00252 { 00253 DiagnosticStatus ActualStatus = m_StatusList->at(0); 00254 return ActualStatus.Message; 00255 } 00256 00260 std::string ReadActualStatusRecommendation() 00261 { 00262 DiagnosticStatus ActualStatus = m_StatusList->at(0); 00263 return ActualStatus.Recommendation; 00264 } 00265 00266 /*******************************************| 00267 | Configurations | 00268 |*******************************************/ 00269 00271 00275 int GetActualStatusQueLength() 00276 { 00277 return m_StatusQueLength; 00278 } 00279 00283 void SetMaxStatusQueLength(int StatusQueLength) 00284 { 00285 m_StatusQueLength = StatusQueLength; 00286 } 00287 00291 int GetMaxStatusQueLength() 00292 { 00293 return m_StatusQueLength; 00294 } 00295 00296 00298 00302 int GetDefaultOKValue() 00303 { 00304 return m_Default_Ok_Value = 0; 00305 } 00306 00310 void SetDefaultOKValue(int Default_Ok_Value) 00311 { 00312 m_Default_Ok_Value = Default_Ok_Value; 00313 } 00314 00315 private: 00316 00317 std::deque<DiagnosticStatus> *m_StatusList; // List that holds the last status messages in a deque 00318 00319 int m_StatusQueLength; // maximal length of status que 00320 int m_Default_Ok_Value; // is used for check if return value needs to 00321 // be reported 00322 00323 }; 00324 00325 #endif