blob: 5dac0f9558634e16d0436f24769fd716503b4bce [file] [log] [blame]
/**
* @brief Log manager.
*
* This file is part of HostLogger project.
*
* Copyright (c) 2018 YADRO
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "log_storage.hpp"
/** @class LogManager
* @brief Log manager.
* All functions within this class are not thread-safe.
*/
class LogManager
{
public:
/** @brief Constructor. */
LogManager();
/** @brief Destructor. */
~LogManager();
/** @brief Open the host's log stream.
*
* @return error code, 0 if operation completed successfully
*/
int openHostLog();
/** @brief Close the host's log stream.
*/
void closeHostLog();
/** @brief Get file descriptor by host's log stream.
* Descriptor can be used to register it in an external polling manager.
*
* @return file descriptor (actually it is an opened socket)
*/
int getHostLogFd() const;
/** @brief Handle incoming data from host's log stream.
*
* @return error code, 0 if operation completed successfully
*/
int handleHostLog();
/** @brief Flush log storage: save currently collected messages to a file,
* reset the storage and rotate log files.
*
* @return error code, 0 if operation completed successfully
*/
int flush();
private:
/** @brief Read incoming data from host's log stream.
*
* @param[out] buffer - buffer to write incoming data
* @param[in] bufferLen - maximum size of the buffer in bytes
* @param[out] readLen - on output contain number of bytes read from stream
*
* @return error code, 0 if operation completed successfully
*/
int readHostLog(char* buffer, size_t bufferLen, size_t& readLen) const;
/** @brief Prepare the path to save the log.
* Warning: the name is used in function rotateLogFiles(),
* make sure you don't brake sorting rules.
*
* @return path to new log file including its name
*/
std::string prepareLogPath() const;
/** @brief Create path for log files.
*
* @return error code, 0 if operation completed successfully
*/
int createLogPath() const;
/** @brief Rotate log files in the directory.
* Function remove oldest files and keep up to maxFiles_ log files.
*
* @return error code, 0 if operation completed successfully
*/
int rotateLogFiles() const;
private:
/** @brief Log storage. */
LogStorage storage_;
/** @brief File descriptor of the input log stream. */
int fd_;
};