// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_EXTENSIONS_API_LOG_PRIVATE_SYSLOG_PARSER_H_
#define CHROME_BROWSER_EXTENSIONS_API_LOG_PRIVATE_SYSLOG_PARSER_H_

#include <string>
#include <vector>

#include "base/memory/linked_ptr.h"
#include "chrome/browser/extensions/api/log_private/log_parser.h"
#include "chrome/common/extensions/api/log_private.h"

namespace extensions {

// A parser that parses syslog into LogEntry objects.
class SyslogParser : public LogParser {
 public:
  SyslogParser();
  virtual ~SyslogParser();

 protected:
  // Parses one line log text into a LogEntry object.
  virtual Error ParseEntry(
      const std::string& input,
      std::vector<linked_ptr<api::log_private::LogEntry> >* output,
      FilterHandler* filter_handler) const
      OVERRIDE;

 private:
  // Parses time token and get time in milliseconds.
  Error ParseTime(const std::string& input, double* output) const;
  // Parses process token and get process name and ID.
  Error ParseProcess(const std::string& input,
                     api::log_private::LogEntry* entry) const;
  // Parses level token and get log level.
  void ParseLevel(const std::string& input,
                  api::log_private::LogEntry* entry) const;

  DISALLOW_COPY_AND_ASSIGN(SyslogParser);
};

}  // namespace extensions

#endif  // CHROME_BROWSER_EXTENSIONS_API_LOG_PRIVATE_SYSLOG_PARSER_H_
