// Copyright 2017 The Chromium OS 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 VM_TOOLS_SYSLOG_COLLECTOR_H_
#define VM_TOOLS_SYSLOG_COLLECTOR_H_

#include <memory>

#include <base/callback.h>
#include <base/files/file_descriptor_watcher_posix.h>
#include <base/files/file_path.h>
#include <base/files/scoped_file.h>
#include <base/macros.h>
#include <base/memory/weak_ptr.h>
#include <base/time/time.h>
#include <base/timer/timer.h>
#include <google/protobuf/arena.h>
#include <vm_protos/proto_bindings/vm_host.grpc.pb.h>

namespace vm_tools {
namespace syslog {

class Collector {
 public:
  virtual ~Collector();

  void SetSyslogFDForTesting(base::ScopedFD syslog_fd);

  // Called periodically to flush any logs that have been buffered.
  void FlushLogs();

 protected:
  // Override SendUserLogs to deliver logs to listening services.
  virtual bool SendUserLogs() = 0;

  bool BindLogSocket(const base::FilePath& name);

  bool StartWatcher(base::TimeDelta flush_period);

  // Called when |syslog_fd_| becomes readable.
  void OnSyslogReadable();

  const LogRequest& syslog_request() const { return *syslog_request_; }

  // Periodic interval for flushing buffered logs.
  static constexpr base::TimeDelta kFlushPeriod =
      base::TimeDelta::FromMilliseconds(5000);

  // Periodic interval for flushing buffered logs during testing.
  static constexpr base::TimeDelta kFlushPeriodForTesting =
      base::TimeDelta::FromMilliseconds(500);

 private:
  // File descriptor bound to logging socket.
  base::ScopedFD syslog_fd_;
  std::unique_ptr<base::FileDescriptorWatcher::Controller> syslog_controller_;

  // Shared arena used for allocating log records.
  google::protobuf::Arena arena_;

  // Non-owning pointer to the current syslog LogRequest.  Owned by arena_.
  vm_tools::LogRequest* syslog_request_;

  // Size of all the currently buffered log records.
  size_t buffered_size_;

  // Timer used for periodically flushing buffered log records.
  base::RepeatingTimer timer_;

  // Reads one log record from the socket and adds it to |syslog_request_|.
  // Returns true if there may still be more data to read from the socket.
  bool ReadOneSyslogRecord();

  base::WeakPtrFactory<Collector> weak_factory_{this};
};

}  // namespace syslog
}  // namespace vm_tools

#endif  // VM_TOOLS_SYSLOG_COLLECTOR_H_
