1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/drive/event_logger.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/logging.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace drive { 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)EventLogger::Event::Event( 13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int id, logging::LogSeverity severity, const std::string& what) 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : id(id), 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) severity(severity), 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) when(base::Time::Now()), 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) what(what) { 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)EventLogger::EventLogger() 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : history_size_(kDefaultHistorySize), 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) next_event_id_(0) { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)EventLogger::~EventLogger() { 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void EventLogger::LogRawString(logging::LogSeverity severity, 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& what) { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::AutoLock auto_lock(lock_); 31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) history_.push_back(Event(next_event_id_, severity, what)); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++next_event_id_; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (history_.size() > history_size_) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history_.pop_front(); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void EventLogger::Log(logging::LogSeverity severity, const char* format, ...) { 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string what; 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) va_list args; 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) va_start(args, format); 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringAppendV(&what, format, args); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) va_end(args); 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DVLOG(1) << what; 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LogRawString(severity, what); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EventLogger::SetHistorySize(size_t history_size) { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::AutoLock auto_lock(lock_); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history_.clear(); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history_size_ = history_size; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::vector<EventLogger::Event> EventLogger::GetHistory() { 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::AutoLock auto_lock(lock_); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<Event> output; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) output.assign(history_.begin(), history_.end()); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return output; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace drive 64