/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #include "base/polygraph.h" #include "xstd/gadgets.h" #include "base/ILog.h" #include "base/OLog.h" #include "base/SslIntvlStat.h" SslIntvlStat::SslIntvlStat(): theErrXacts(0) { } void SslIntvlStat::restart() { theDoneXacts.reset(); theXactLvl.restart(); theConnLvl.restart(); theErrXacts = 0; } bool SslIntvlStat::active() const { return theDoneXacts.active() || theXactLvl.active() || theConnLvl.active() || theErrXacts > 0; } bool SslIntvlStat::sane() const { return theDoneXacts.sane() && theXactLvl.sane() && theConnLvl.sane() && theErrXacts >= 0; } void SslIntvlStat::keepLevel(const SslIntvlStat &s) { theXactLvl.keepLevel(s.theXactLvl); theConnLvl.keepLevel(s.theConnLvl); } double SslIntvlStat::reqRate(Time duration) const { return duration > 0 ? Ratio(theErrXacts + theDoneXacts.xacts().count(), duration.secd()) : -1; } double SslIntvlStat::repRate(Time duration) const { return duration > 0 ? Ratio(theDoneXacts.xacts().count(), duration.secd()) : -1; } OLog &SslIntvlStat::store(OLog &log) const { const bool a = active(); log << a; if (a) log << theDoneXacts << theXactLvl << theConnLvl << theErrXacts; return log; } ILog &SslIntvlStat::load(ILog &log) { if (log.getb()) // active? log >> theDoneXacts >> theXactLvl >> theConnLvl >> theErrXacts; else restart(); return log; } void SslIntvlStat::merge(const SslIntvlStat &s) { theXactLvl.merge(s.theXactLvl); theConnLvl.merge(s.theConnLvl); join(s); } void SslIntvlStat::concat(const SslIntvlStat &s) { theXactLvl.concat(s.theXactLvl); theConnLvl.concat(s.theConnLvl); join(s); } void SslIntvlStat::join(const SslIntvlStat &s) { theDoneXacts += s.theDoneXacts; theErrXacts += s.theErrXacts; } ostream &SslIntvlStat::print(ostream &os, const String &pfx, Time duration) const { os << pfx << "req.rate:\t " << reqRate(duration) << endl; os << pfx << "rep.rate:\t " << repRate(duration) << endl; theDoneXacts.xacts().print(os, pfx + "rep."); theDoneXacts.print(os, "hit", "miss", pfx); theXactLvl.print(os, pfx + "xact."); theConnLvl.print(os, pfx + "conn."); os << pfx << "errors.count:\t " << theErrXacts << endl; return os; }