/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#ifndef POLYGRAPH__RUNTIME_NOTIFMSG_H
#define POLYGRAPH__RUNTIME_NOTIFMSG_H
#include "xstd/NetDouble.h"
class NetAddr;
// messages used to send notifications to some [remote] monitor
class NotifMsg {
public:
enum Type { mtNone, mtStatus };
public:
NotifMsg(int anId = mtNone): theId(anId), theSize(sizeof(NotifMsg)) {};
protected:
void hton();
void ntoh();
public:
int theId;
int theSize;
};
class StatusNotifMsg: public NotifMsg {
public:
StatusNotifMsg(const String &aLabel = 0);
void hton();
void ntoh();
public:
char theLabel[16]; // a short 0-terminated description of an experiment
Time theStartTime;
Time theSndTime; // when the message is sent
Time theRespTime;
NetDouble theReqRate; // req / sec
NetDouble theRepRate; // rep / sec
NetDouble theBwidth; // network I/O bandwidth (r/w) [B/s]
NetDouble theDHR;
NetDouble theConnUse; // req / connection
NetDouble theErrRatio;
int theXactTotCnt; // total so far
int theErrTotCnt; // total so far
int theSockInstCnt; // at the moment
int theCat; // entry category (aka "side")
};
// status message forwarded by the first recepient
class StatusFwdMsg: public StatusNotifMsg {
public:
StatusFwdMsg();
StatusFwdMsg(const StatusNotifMsg &m, Time aRcvTime, const NetAddr &aSndAddr);
void hton();
void ntoh();
public:
Time theRcvTime; // when the message is received
struct { // original sender (set by first recepient)
struct sockaddr_storage addr;
int port;
} theSndAddr;
int theCopyCnt; // number of copies forwarded (to various recepients)
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1