diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/goodies.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/util/goodies.h b/util/goodies.h index 45a4a7dc96b..4689e32ec4d 100644 --- a/util/goodies.h +++ b/util/goodies.h @@ -321,4 +321,46 @@ namespace mongo { boost::thread_specific_ptr<int> _val; }; + class ProgressMeter { + public: + ProgressMeter( long long total , int secondsBetween = 3 , int checkInterval = 100 ) + : _total( total ) , _secondsBetween( secondsBetween ) , _checkInterval( checkInterval ) , + _done(0) , _hits(0) , _lastTime( time(0) ){ + } + + void hit( int n = 1 ){ + _done += n; + _hits++; + if ( _hits % _checkInterval ) + return; + + int t = time(0); + if ( t - _lastTime < _secondsBetween ) + return; + + int per = (int)( ( (double)_done * 100.0 ) / (double)_total ); + cout << "\t\t" << _done << "/" << _total << "\t" << per << "%" << endl; + _lastTime = t; + } + + long long done(){ + return _done; + } + + long long hits(){ + return _hits; + } + + private: + + long long _total; + int _secondsBetween; + int _checkInterval; + + long long _done; + long long _hits; + int _lastTime; + }; + + } // namespace mongo |