Diagnostics.h
Go to the documentation of this file.
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


schunk_powercube_chain
Author(s): Florian Weisshardt
autogenerated on Thu Aug 27 2015 15:06:58