| /** |
| * @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_; |
| }; |