X-TraceC++Library
XtrEvent.h
Go to the documentation of this file.
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