blob: 95c64e651a6ecb2499b07fd6002de2e7362e541c [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_SYSTEM_LOG_RECORDER_WRITER_H_
#define SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_SYSTEM_LOG_RECORDER_WRITER_H_
#include <deque>
#include <string>
#include <vector>
#include <fbl/unique_fd.h>
#include "src/developer/forensics/feedback_data/system_log_recorder/log_message_store.h"
namespace forensics {
namespace feedback_data {
namespace system_log_recorder {
// Consumes the full content of a store on request, writing it to a rotating set of files.
class SystemLogWriter {
public:
SystemLogWriter(const std::string& logs_dir, size_t max_num_files, LogMessageStore* store);
void Write();
// Instructs the class to call `fsync` on the currently open file to ensure data makes it disk.
void Fsync();
private:
// Truncates the first file to start anew.
void StartNewFile();
// Returns the path the |file_num|'th file created.
std::string Path(size_t file_num) const;
const std::string logs_dir_;
const size_t max_num_files_;
std::deque<size_t> file_queue_;
fbl::unique_fd current_file_descriptor_;
LogMessageStore* store_;
};
} // namespace system_log_recorder
} // namespace feedback_data
} // namespace forensics
#endif // SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_SYSTEM_LOG_RECORDER_WRITER_H_