event_logger.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/drive/event_logger.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/logging.h"
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/strings/stringprintf.h"
90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace drive {
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)EventLogger::Event::Event(
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    int id, logging::LogSeverity severity, const std::string& what)
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    : id(id),
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      severity(severity),
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      when(base::Time::Now()),
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      what(what) {
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EventLogger::EventLogger()
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    : history_size_(kDefaultHistorySize),
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      next_event_id_(0) {
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EventLogger::~EventLogger() {
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EventLogger::LogRawString(logging::LogSeverity severity,
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                               const std::string& what) {
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::AutoLock auto_lock(lock_);
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  history_.push_back(Event(next_event_id_, severity, what));
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ++next_event_id_;
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (history_.size() > history_size_)
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    history_.pop_front();
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void EventLogger::Log(logging::LogSeverity severity, const char* format, ...) {
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string what;
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  va_list args;
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  va_start(args, format);
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::StringAppendV(&what, format, args);
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  va_end(args);
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DVLOG(1) << what;
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  LogRawString(severity, what);
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void EventLogger::SetHistorySize(size_t history_size) {
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  base::AutoLock auto_lock(lock_);
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  history_.clear();
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  history_size_ = history_size;
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)std::vector<EventLogger::Event> EventLogger::GetHistory() {
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::AutoLock auto_lock(lock_);
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  std::vector<Event> output;
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  output.assign(history_.begin(), history_.end());
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return output;
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace drive
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)