/** * @file collector.hpp * Collects file events and acts upon them * * @author Tobias Schmidl * @copyright Copyright © 2022, Tobias Schmidl * SPDX-License-Identifier: MIT */ #pragma once #include "monitor.hpp" #include #include // for system() #include #include constexpr const char* FILTER = "^Core\\.[^.][^.]*\\..*\\.lz4"; namespace collector::collector { class Collector { monitor::Monitor _monitor; std::filesystem::path _target_file; public: Collector(boost::asio::io_service& service, std::filesystem::path&& root_path, std::filesystem::path&& target_file) : _monitor(service, std::move(root_path)) , _target_file(std::move(target_file)) { } Collector(boost::asio::io_service& service, const std::filesystem::path& root_path, const std::filesystem::path& target_file) : _monitor(service, root_path) , _target_file(target_file) { } bool operator()() { const auto& fs_event = _monitor.watch(std::regex(FILTER), boost::asio::dir_monitor_event::event_type::added); // big fugly hack std::string call_command = std::string("/usr/bin/tar cvf ") + _target_file.generic_string() + std::string(" ") + _monitor.get_root_path().generic_string(); return system(call_command.c_str()) == 0; } }; }