Added collector
This commit is contained in:
		
							parent
							
								
									c88ea6a9a0
								
							
						
					
					
						commit
						1e534a6c67
					
				
					 2 changed files with 81 additions and 1 deletions
				
			
		
							
								
								
									
										56
									
								
								collector.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								collector.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | |||
| /**
 | ||||
|  * @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 <filesystem> | ||||
| #include <regex> | ||||
| 
 | ||||
| // for system()
 | ||||
| #include <cstdlib> | ||||
| #include <string> | ||||
| 
 | ||||
| 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; | ||||
|     } | ||||
| }; | ||||
| } | ||||
							
								
								
									
										26
									
								
								test.cpp
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								test.cpp
									
										
									
									
									
								
							|  | @ -7,9 +7,9 @@ | |||
|  * SPDX-License-Identifier: MIT | ||||
|  */ | ||||
| 
 | ||||
| #include "collector.hpp" | ||||
| #include "monitor.hpp" | ||||
| #include "version.hpp" | ||||
| #include "collector.hpp" | ||||
| #define BOOST_TEST_MODULE Collector test | ||||
| #include <boost/test/unit_test.hpp> | ||||
| #include <chrono> | ||||
|  | @ -40,3 +40,27 @@ BOOST_AUTO_TEST_CASE(monitor_test) | |||
|                                            watch_result.path.generic_string())); | ||||
|     std::filesystem::remove(test_file); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(collector_test) | ||||
| { | ||||
|     BOOST_TEST_MESSAGE("Test version " << VERSION); | ||||
|     const std::filesystem::path target_file{ "test.tar" }, | ||||
|       test_input_dir{ "test_input" }; | ||||
|     std::filesystem::remove(target_file); | ||||
|     std::filesystem::remove_all(test_input_dir); | ||||
|     std::filesystem::create_directory(test_input_dir); | ||||
|     const auto create_file_result = std::async([&test_input_dir]() { | ||||
|         std::this_thread::sleep_for(5s); | ||||
|         std::ofstream test_file{ test_input_dir / "should_be_in_it" }; | ||||
|         test_file << "Hello World." << std::endl; | ||||
|         test_file.flush(); | ||||
| 
 | ||||
|         std::ofstream{ test_input_dir / "Core.TEST.00.lz4" }; | ||||
|         std::ofstream{ test_input_dir / "might_not_be_in_it" }; | ||||
|     }); | ||||
|     Collector collector(service, test_input_dir, target_file); | ||||
|     BOOST_TEST(collector()); | ||||
|     BOOST_TEST(std::filesystem::is_regular_file(target_file)); | ||||
|     std::filesystem::remove(target_file); | ||||
|     std::filesystem::remove_all(test_input_dir); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue