00001 // ***************************************************************************** 00002 // 00003 // Copyright (c) 2015, Southwest Research Institute® (SwRI®) 00004 // All rights reserved. 00005 // 00006 // Redistribution and use in source and binary forms, with or without 00007 // modification, are permitted provided that the following conditions are met: 00008 // * Redistributions of source code must retain the above copyright 00009 // notice, this list of conditions and the following disclaimer. 00010 // * Redistributions in binary form must reproduce the above copyright 00011 // notice, this list of conditions and the following disclaimer in the 00012 // documentation and/or other materials provided with the distribution. 00013 // * Neither the name of Southwest Research Institute® (SwRI®) nor the 00014 // names of its contributors may be used to endorse or promote products 00015 // derived from this software without specific prior written permission. 00016 // 00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00018 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00019 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00020 // ARE DISCLAIMED. IN NO EVENT SHALL Southwest Research Institute® BE LIABLE 00021 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00022 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00023 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00024 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00025 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00026 // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 00027 // DAMAGE. 00028 // 00029 // ***************************************************************************** 00030 00031 #include <swri_console/log_database.h> 00032 00033 namespace swri_console 00034 { 00035 LogDatabase::LogDatabase() 00036 : 00037 min_time_(ros::TIME_MAX) 00038 { 00039 } 00040 00041 LogDatabase::~LogDatabase() 00042 { 00043 } 00044 00045 void LogDatabase::clear() 00046 { 00047 std::map<std::string, size_t>::iterator iter; 00048 msg_counts_.clear(); 00049 log_.clear(); 00050 Q_EMIT databaseCleared(); 00051 } 00052 00053 void LogDatabase::queueMessage(const rosgraph_msgs::LogConstPtr msg) 00054 { 00055 if (msg->header.stamp < min_time_) { 00056 min_time_ = msg->header.stamp; 00057 Q_EMIT minTimeUpdated(); 00058 } 00059 00060 msg_counts_[msg->name]++; 00061 00062 LogEntry log; 00063 log.stamp = msg->header.stamp; 00064 log.level = msg->level; 00065 log.node = msg->name; 00066 log.file = msg->file; 00067 log.function = msg->function; 00068 log.line = msg->line; 00069 log.text = QString(msg->msg.c_str()).split('\n'); 00070 log.seq = msg->header.seq; 00071 new_msgs_.push_back(log); 00072 } 00073 00074 void LogDatabase::processQueue() 00075 { 00076 if (new_msgs_.empty()) { 00077 return; 00078 } 00079 00080 log_.insert(log_.end(), 00081 new_msgs_.begin(), 00082 new_msgs_.end()); 00083 new_msgs_.clear(); 00084 00085 Q_EMIT messagesAdded(); 00086 } 00087 } // namespace swri_console