/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #ifndef POLYGRAPH__APP_POLYAPP_H #define POLYGRAPH__APP_POLYAPP_H #include "xstd/NetAddr.h" #include "xstd/String.h" #include "xstd/Array.h" #include "xstd/FileScanner.h" #include "base/CmdLine.h" #include "runtime/BcastRcver.h" class OLog; class Agent; class AgentSym; class ContentSel; class SizeOpt; class NetAddrSym; class BeepDoorman; // common interface for polyclt and polysrv applications class PolyApp: public FileScanTicker, public BcastRcver { public: typedef Array AddrSyms; public: PolyApp(); virtual ~PolyApp(); virtual void noteMsgStrEvent(BcastChannel *ch, const char *msg); virtual void begCycle(int readyCount); virtual void endCycle(); virtual bool tick(); int run(int argc, char *argv[]); void flushState(); protected: bool handleCmdLine(int argc, char *argv[]); void makeAgents(); void checkProgressReport() const; void reportRUsage() const; virtual void configure(); virtual void reportCfg(); virtual void logCfg(); virtual void step(); // except for random seeds that are handled earlier virtual void loadPersistence(); virtual void storePersistence(); void configureBinLog(OLog &log, const String &fname, SizeOpt &bufSz); void configureLogs(int prec); void configureRnd(); void configureHosts(); void buildSchedule(); void parseConfigFile(const String &fname); int scan(Time *toutp); void checkTiming(Time drift); void getIfaces(); void getFakeIfaces(); void getHostAddrs(Array &hosts) const; NetAddrSym *getAgentAddrMask() const; void makeAddresses(); ostream &makeAddresses(Array &hosts, AddrSyms &agents, ostream &err); int makeAddresses(int hidx, AddrSyms &agents, int agentsPerHost); void deleteAddresses(const String &ifname); void getAgentAddrs(AddrSyms &agents) const; void addAgent(Agent *agent); void describeLocals() const; virtual void startServices(); virtual void startAgents(); virtual void getOpts(Array &opts); virtual void wasIdle(Time tout); virtual Agent *makeAgent(const AgentSym &agent, const NetAddr &address) = 0; virtual void logState(OLog &log); virtual const String sideName() const = 0; virtual int logCat() const = 0; protected: CmdLine theCmdLine; String thePglCfg; // temporary cache for logging purposes Array theIfaces; // list of interface or fake addresses Array theCleanIfaces; // iface names with deleted aliases Array theLocals; Array theContentSels; String theAgentType; BeepDoorman *theBeepDoorman; Time theIdleBeg; // the start of an idle period Time theIdleEnd; // beg + idle_tout bool isIdle; int theTickCount; // see PolyApp::tick() int theStateCount; // number of states [flushed] }; #endif