diff options
Diffstat (limited to 'src/mongo/db/stats/service_stats.cpp')
-rw-r--r-- | src/mongo/db/stats/service_stats.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/mongo/db/stats/service_stats.cpp b/src/mongo/db/stats/service_stats.cpp new file mode 100644 index 00000000000..d69147fe969 --- /dev/null +++ b/src/mongo/db/stats/service_stats.cpp @@ -0,0 +1,68 @@ +// 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 <http://www.gnu.org/licenses/>. +*/ + +#include <sstream> + +#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 |