diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2015-06-20 00:22:50 -0400 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2015-06-20 10:56:02 -0400 |
commit | 9c2ed42daa8fbbef4a919c21ec564e2db55e8d60 (patch) | |
tree | 3814f79c10d7b490948d8cb7b112ac1dd41ceff1 /src/mongo/logger/ramlog.h | |
parent | 01965cf52bce6976637ecb8f4a622aeb05ab256a (diff) | |
download | mongo-9c2ed42daa8fbbef4a919c21ec564e2db55e8d60.tar.gz |
SERVER-18579: Clang-Format - reformat code, no comment reflow
Diffstat (limited to 'src/mongo/logger/ramlog.h')
-rw-r--r-- | src/mongo/logger/ramlog.h | 246 |
1 files changed, 125 insertions, 121 deletions
diff --git a/src/mongo/logger/ramlog.h b/src/mongo/logger/ramlog.h index 60e401e92f1..c69fb1e4814 100644 --- a/src/mongo/logger/ramlog.h +++ b/src/mongo/logger/ramlog.h @@ -45,141 +45,145 @@ namespace mongo { +/** + * Fixed-capacity log of line-oriented messages. + * + * Holds up to RamLog::N lines of up to RamLog::C bytes, each. + * + * RamLogs are stored in a global registry, accessed via RamLog::get() and + * RamLog::getIfExists(). + * + * RamLogs and their registry are self-synchronizing. See documentary comments. + * To read a RamLog, instantiate a RamLog::LineIterator, documented below. + */ +class RamLog : public logger::Tee { + MONGO_DISALLOW_COPYING(RamLog); + +public: + class LineIterator; + friend class RamLog::LineIterator; + /** - * Fixed-capacity log of line-oriented messages. + * Returns a pointer to the ramlog named "name", creating one if it did not already exist. * - * Holds up to RamLog::N lines of up to RamLog::C bytes, each. + * Synchronizes on the RamLog catalog lock, _namedLock. + */ + static RamLog* get(const std::string& name); + + /** + * Returns a pointer to the ramlog named "name", or NULL if no such ramlog exists. * - * RamLogs are stored in a global registry, accessed via RamLog::get() and - * RamLog::getIfExists(). + * Synchronizes on the RamLog catalog lock, _namedLock. + */ + static RamLog* getIfExists(const std::string& name); + + /** + * Writes the names of all existing ramlogs into "names". * - * RamLogs and their registry are self-synchronizing. See documentary comments. - * To read a RamLog, instantiate a RamLog::LineIterator, documented below. + * Synchronizes on the RamLog catalog lock, _namedLock. */ - class RamLog : public logger::Tee { - MONGO_DISALLOW_COPYING(RamLog); - public: - class LineIterator; - friend class RamLog::LineIterator; - - /** - * Returns a pointer to the ramlog named "name", creating one if it did not already exist. - * - * Synchronizes on the RamLog catalog lock, _namedLock. - */ - static RamLog* get(const std::string& name); - - /** - * Returns a pointer to the ramlog named "name", or NULL if no such ramlog exists. - * - * Synchronizes on the RamLog catalog lock, _namedLock. - */ - static RamLog* getIfExists(const std::string& name); - - /** - * Writes the names of all existing ramlogs into "names". - * - * Synchronizes on the RamLog catalog lock, _namedLock. - */ - static void getNames( std::vector<std::string>& names ); - - /** - * Writes "str" as a line into the RamLog. If "str" is longer than the maximum - * line size, RamLog::C, truncates the line to the first C bytes. If "str" - * is shorter than RamLog::C and has a terminal '\n', it omits that character. - * - * Synchronized on the instance's own mutex, _mutex. - */ - void write(const std::string& str); - - - /** - * Writes an HTML representation of the log to "s". - * - * Synchronized on the instance's own mutex, _mutex. - */ - void toHTML(std::stringstream& s); - - private: - static int repeats(const std::vector<const char *>& v, int i); - static std::string clean(const std::vector<const char *>& v, int i, std::string line=""); - static std::string color(const std::string& line); - - /* turn http:... into an anchor */ - static std::string linkify(const char *s); - - explicit RamLog( const std::string& name ); - ~RamLog(); // want this private as we want to leak so we can use them till the very end - - enum { - N = 1024, // number of lines - C = 512 // max size of line - }; - - const char* getLine_inlock(unsigned lineNumber) const; - - stdx::mutex _mutex; // Guards all non-static data. - char lines[N][C]; - unsigned h; // current position - unsigned n; // number of lines stores 0 o N - std::string _name; - long long _totalLinesWritten; - - time_t _lastWrite; - }; + static void getNames(std::vector<std::string>& names); /** - * Iterator over the lines of a RamLog. + * Writes "str" as a line into the RamLog. If "str" is longer than the maximum + * line size, RamLog::C, truncates the line to the first C bytes. If "str" + * is shorter than RamLog::C and has a terminal '\n', it omits that character. * - * Also acts as a means of inspecting other properites of a ramlog consistently. + * Synchronized on the instance's own mutex, _mutex. + */ + void write(const std::string& str); + + + /** + * Writes an HTML representation of the log to "s". * - * Instances of LineIterator hold the lock for the underlying RamLog for their whole lifetime, - * and so should not be kept around. + * Synchronized on the instance's own mutex, _mutex. */ - class RamLog::LineIterator { - MONGO_DISALLOW_COPYING(LineIterator); - public: - explicit LineIterator(RamLog* ramlog); - - /** - * Returns true if there are more lines available to return by calls to next(). - */ - bool more() const { return _nextLineIndex < _ramlog->n; } - - /** - * Returns the next line and advances the iterator. - */ - const char* next() { - return _ramlog->getLine_inlock(_nextLineIndex++); // Postfix increment. - } - - /** - * Returns the time of the last write to the ramlog. - */ - time_t lastWrite(); - - /** - * Returns the total number of lines ever written to the ramlog. - */ - long long getTotalLinesWritten(); - - private: - const RamLog* _ramlog; - stdx::lock_guard<stdx::mutex> _lock; - unsigned _nextLineIndex; + void toHTML(std::stringstream& s); + +private: + static int repeats(const std::vector<const char*>& v, int i); + static std::string clean(const std::vector<const char*>& v, int i, std::string line = ""); + static std::string color(const std::string& line); + + /* turn http:... into an anchor */ + static std::string linkify(const char* s); + + explicit RamLog(const std::string& name); + ~RamLog(); // want this private as we want to leak so we can use them till the very end + + enum { + N = 1024, // number of lines + C = 512 // max size of line }; + const char* getLine_inlock(unsigned lineNumber) const; + + stdx::mutex _mutex; // Guards all non-static data. + char lines[N][C]; + unsigned h; // current position + unsigned n; // number of lines stores 0 o N + std::string _name; + long long _totalLinesWritten; + + time_t _lastWrite; +}; + +/** + * Iterator over the lines of a RamLog. + * + * Also acts as a means of inspecting other properites of a ramlog consistently. + * + * Instances of LineIterator hold the lock for the underlying RamLog for their whole lifetime, + * and so should not be kept around. + */ +class RamLog::LineIterator { + MONGO_DISALLOW_COPYING(LineIterator); + +public: + explicit LineIterator(RamLog* ramlog); + /** - * Appender for appending MessageEvents to a RamLog. + * Returns true if there are more lines available to return by calls to next(). */ - class RamLogAppender : public logger::Appender<logger::MessageEventEphemeral> { - public: - explicit RamLogAppender(RamLog* ramlog); - virtual ~RamLogAppender(); + bool more() const { + return _nextLineIndex < _ramlog->n; + } - virtual Status append(const logger::MessageEventEphemeral& event); + /** + * Returns the next line and advances the iterator. + */ + const char* next() { + return _ramlog->getLine_inlock(_nextLineIndex++); // Postfix increment. + } - private: - RamLog* _ramlog; - }; + /** + * Returns the time of the last write to the ramlog. + */ + time_t lastWrite(); + + /** + * Returns the total number of lines ever written to the ramlog. + */ + long long getTotalLinesWritten(); + +private: + const RamLog* _ramlog; + stdx::lock_guard<stdx::mutex> _lock; + unsigned _nextLineIndex; +}; + +/** + * Appender for appending MessageEvents to a RamLog. + */ +class RamLogAppender : public logger::Appender<logger::MessageEventEphemeral> { +public: + explicit RamLogAppender(RamLog* ramlog); + virtual ~RamLogAppender(); + + virtual Status append(const logger::MessageEventEphemeral& event); + +private: + RamLog* _ramlog; +}; } |