X-TraceC++Library
|
00001 #include "XtrMetadata.h" 00002 #include "XtrReporter.h" 00003 #include <string> 00004 #include <sstream> 00005 #include <vector> 00006 #include <map> 00007 00008 using namespace std; 00009 00010 00011 #ifndef _XTR_EVENT_CTX_H 00012 #define _XTR_EVENT_CTX_H 00013 00014 namespace xtr { 00015 00023 class EventEdge 00024 { 00025 public: 00026 enum EdgeDir { 00027 NEXT = 0, 00028 UP, 00029 DOWN, 00030 }; 00031 00032 EventEdge() : opId(), dir(NEXT), chainId(0) {}; 00033 EventEdge(OpId _opId, EdgeDir _dir, u_int16_t _chainId = 0) 00034 : opId(_opId), dir(_dir), chainId(_chainId) {}; 00035 00036 static const char* DirName(EdgeDir dir) { 00037 switch(dir) { 00038 case NEXT: return "next"; 00039 case UP : return "up"; 00040 case DOWN: return "down"; 00041 default: return ""; 00042 } 00043 } 00044 00045 OpId opId; 00046 EdgeDir dir; 00047 u_int16_t chainId; 00048 }; 00049 00053 class Event 00054 { 00055 public: 00059 Event(); 00060 00066 Event(const Metadata& xtr); 00067 00074 Event(const Event& model); 00075 00082 xtr_result setTaskId(const TaskId& taskId); 00083 00087 xtr_result setRandomOpId(size_t opIdLen = 4); 00088 00094 xtr_result setSeverity(u_int8_t severity); 00095 00099 u_int8_t getSeverity(); 00100 00125 xtr_result addEdge(const Metadata& xtr, EventEdge::EdgeDir dir = EventEdge::NEXT); 00126 00135 xtr_result addInfo(const char* key, const char* value); 00136 00139 void addTimestamp(const char* label); 00140 00141 00154 size_t fork(); 00155 00162 const Metadata& getMetadata(); 00163 00170 const Metadata& getMetadata(size_t index); 00171 00176 string getReport(); 00177 00184 xtr_result sendReport(); 00185 00189 //XtrReport getReport() 00190 private: 00194 void setTimestamp(); 00195 00196 Metadata my_xtr; //this event's taskId, optionId, options 00197 u_int8_t severity; //this event's severity level 00198 00199 vector<u_int16_t> out_chain_ids; //this event's outgoing chainIds 00200 size_t chain_id_index; 00201 00202 vector<EventEdge> in_edges; //incoming edges 00203 string info; //append-only string for holding key-value pairs 00204 00205 struct timeval timestamp; 00206 bool timeset; 00207 }; 00208 00209 }; //namespace xtr 00210 00211 #if 0 00212 edge opId, chain, type 00213 end-chain 00214 fork (?) 00215 timestamp: time, value 00216 00217 This is a multiset... 00218 class XtrReport() 00219 { 00220 put(key, value) 00221 get(key) 00222 del(key) 00223 returns a fully formatted X-Trace report 00224 toString 00225 X-Trace Report 1.0 00226 Key: Value 00227 Key: Value 00228 Key: Value 00229 } 00230 00231 /* Talks to the local daemon */ 00232 class Reporter() 00233 { 00234 Reporter(); 00235 virtual send(XtrReport& r); 00236 } 00237 #endif 00238 00239 #endif