// service_stats.cpp
/**
* Copyright (C) 2010 10gen Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
#include
#include "../../util/histogram.h"
#include "service_stats.h"
namespace mongo {
using std::ostringstream;
ServiceStats::ServiceStats() {
// Time histogram covers up to 128msec in exponential intervals
// starting at 125usec.
Histogram::Options timeOpts;
timeOpts.numBuckets = 12;
timeOpts.bucketSize = 125;
timeOpts.exponential = true;
_timeHistogram = new Histogram( timeOpts );
// Space histogram covers up to 1MB in exponentialintervals starting
// at 1K.
Histogram::Options spaceOpts;
spaceOpts.numBuckets = 12;
spaceOpts.bucketSize = 1024;
spaceOpts.exponential = true;
_spaceHistogram = new Histogram( spaceOpts );
}
ServiceStats::~ServiceStats() {
delete _timeHistogram;
delete _spaceHistogram;
}
void ServiceStats::logResponse( uint64_t duration, uint64_t bytes ) {
_spinLock.lock();
_timeHistogram->insert( duration / 1000 /* in usecs */ );
_spaceHistogram->insert( bytes );
_spinLock.unlock();
}
string ServiceStats::toHTML() const {
ostringstream res ;
res << "Cumulative wire stats\n"
<< "Response times\n" << _timeHistogram->toHTML()
<< "Response sizes\n" << _spaceHistogram->toHTML()
<< '\n';
return res.str();
}
} // mongo