9#include <unordered_set>
10#include <unordered_map>
19 namespace fs = std::filesystem;
25 std::unordered_map<fs::path, fs::path> paths;
30 this->parent =
nullptr;
34 throw std::runtime_error(name +
": " + msg);
43 this->parent = identifiable;
55 if (this->paths.find(start) == this->paths.end()) {
56 std::vector<std::string> chain;
58 chain.push_back(this->name);
63 chain.push_back(current->name);
64 current = current->parent;
67 fs::path result = start;
69 for (
int i = chain.size() - 1; i >= 0; i--) {
73 this->paths[start] = result;
76 return this->paths[start];
109 static std::vector<std::unique_ptr<Module> >
get_all_modules(std::vector<fs::path> &library_paths);
111 Module(std::string backend_name,
112 std::vector<fs::path> &library_paths);
113 Module(std::string backend_name,
114 std::unordered_map<std::string, std::string> &options,
115 std::unordered_map<std::string, std::vector<std::string>> &array_options,
116 std::vector<fs::path> &library_paths,
117 bool never_directing,
120 bool init(
unsigned int buf_size);
121 void process(std::shared_ptr<IR> ir_obj);
127 std::unordered_map<std::string, option> &
get_options();
128 std::unique_ptr<Path> &
get_dir();
129 std::unordered_set<std::string> &
get_tags();
160 std::shared_ptr<FileDescriptor>
get_fd();
167 std::string state, std::string timestamp_str);
171 std::unordered_map<std::string, option> options;
172 std::unordered_map<std::string, OptionMetadata> option_metadata;
173 std::unique_ptr<Path> dir;
178 fs::path inject_lib_path;
179 bool injecting_process;
180 bool injection_available;
181 std::future<bool> process_future;
182 std::vector<std::string> log_types;
183 std::vector<void *> malloced;
184 std::unordered_set<std::string> tags;
187 bool never_directing;
189 std::string api_error_msg;
191 std::unordered_set<fs::path> src_code_paths;
193 unsigned int max_count_per_entity;
196 std::shared_ptr<FileDescriptor> fd;
197 std::string last_received_message_inject;
199 void construct(std::string backend_name,
200 std::unordered_map<std::string, std::string> &options,
201 std::unordered_map<std::string, std::vector<std::string>> &array_options,
202 std::vector<fs::path> &library_paths,
bool never_directing,
bool no_inject);
207 Node(std::string name,
208 std::shared_ptr<Entity> &entity);
209 bool init(
unsigned int buf_size);
210 void process(std::shared_ptr<IR> ir_obj);
213 std::unordered_set<std::string> &
get_tags();
214 void add_in_tags(std::unordered_set<std::string> &tags);
215 void add_out_tags(std::unordered_set<std::string> &tags);
218 void add_module(std::unique_ptr<Module> &mod);
239 std::string state, std::string timestamp_str);
242 std::unique_ptr<Path> dir;
243 std::vector<std::unique_ptr<Module> > modules;
244 std::shared_ptr<Entity> entity;
245 std::unordered_set<std::string> tags;
246 std::unordered_set<std::string> in_tags;
247 std::unordered_set<std::string> out_tags;
248 int modules_profiling;
249 std::mutex modules_profiling_mutex;
254 std::shared_ptr<Node> departure_node;
255 std::shared_ptr<Node> arrival_node;
259 std::shared_ptr<Node> &departure_node,
260 std::shared_ptr<Node> &arrival_node);
277 unsigned int processing_threads,
278 fs::path local_config_path,
279 fs::path tmp_dir,
bool no_inject,
280 unsigned int buf_size);
281 void add_node(std::shared_ptr<Node> &node);
283 std::string departure_node,
284 std::string arrival_node);
285 std::shared_ptr<Node> &
get_node(std::string
id);
291 void process(
bool save_src_code_paths);
302 void set_ir(std::shared_ptr<IR> ir_obj);
311 std::unordered_map<std::string, std::shared_ptr<Node> > nodes;
312 std::unordered_map<std::string, std::shared_ptr<NodeConnection> > connections;
313 std::string directing_node;
315 std::unique_ptr<Path> entity_dir;
316 unsigned int processing_threads;
317 fs::path local_config_path;
319 std::string cpu_mask;
320 std::shared_ptr<IR> ir_obj;
321 std::unique_ptr<Process> profiled_process;
322 std::unordered_set<fs::path> src_code_paths;
323 bool src_code_paths_collected;
324 bool workflow_finish_printed;
325 unsigned long long workflow_start_time;
326 bool workflow_start_time_set;
327 std::mutex workflow_finish_print_mutex;
328 std::mutex profile_notify_mutex;
329 int modules_notified;
330 int modules_profiling;
332 unsigned int buf_size;
333 std::future<void> workflow_comm;
334 unsigned long long workflow_timestamp;
335 bool workflow_timestamp_error;
336 unsigned long long workflow_end_timestamp;
337 bool workflow_end_timestamp_error;
338 bool process_notified;
339 fs::path workflow_stdout_path;
340 fs::path workflow_stderr_path;
341 std::mutex profile_wait_mutex;
342 bool process_finished;
343 int process_exit_code;
348 std::unordered_map<std::string, std::shared_ptr<Entity> > entities;
349 std::unordered_map<std::string,
350 std::shared_ptr<NodeConnection> > connections;
351 std::unique_ptr<Path> root_dir;
352 std::variant<fs::path, int> codes_dst;
353 bool custom_src_code_paths_save;
355 void init(fs::path def_file, fs::path root_dir,
356 std::vector<fs::path> &library_paths, fs::path local_config_path,
357 fs::path tmp_dir,
bool no_inject,
unsigned int buf_size);
359 System(fs::path def_file, fs::path root_dir,
360 std::vector<fs::path> &library_paths, fs::path local_config_path,
361 fs::path tmp_dir,
bool no_inject,
unsigned int buf_size);
362 System(fs::path def_file, fs::path root_dir,
363 std::vector<fs::path> &library_paths, fs::path local_config_path,
364 fs::path tmp_dir,
bool no_inject,
unsigned int buf_size,
365 std::variant<fs::path, int> codes_dst);
367 void set_ir(std::shared_ptr<IR> ir_obj);
unsigned int amod_t
Definition amod_t.h:7
Definition system.hpp:267
void init()
Definition system.cpp:1631
void set_directing_node(std::string node)
Definition system.cpp:1615
int profile_wait()
Definition system.cpp:1838
std::string get_directing_node()
Definition system.cpp:1619
bool is_workflow_ever_run()
Definition system.cpp:2064
unsigned long long get_workflow_start_time(bool &err)
Definition system.cpp:2072
void add_node(std::shared_ptr< Node > &node)
Definition system.cpp:1590
void set_ir(std::shared_ptr< IR > ir_obj)
Definition system.cpp:2038
unsigned long long get_workflow_end_time(bool &err)
Definition system.cpp:2077
void set_profile_info(profile_info &info)
Definition system.cpp:1627
Entity(std::string id, AccessMode access_mode, unsigned int processing_threads, fs::path local_config_path, fs::path tmp_dir, bool no_inject, unsigned int buf_size)
Definition system.cpp:1566
std::vector< std::shared_ptr< Node > > get_all_nodes()
Definition system.cpp:2020
fs::path & get_local_config_dir()
Definition system.cpp:2016
bool is_workflow_running()
Definition system.cpp:2056
void profile_notify()
Definition system.cpp:1800
const char * get_cpu_mask()
Definition system.cpp:1933
std::unordered_set< fs::path > & get_src_code_paths()
Definition system.cpp:2042
void process(bool save_src_code_paths)
Definition system.cpp:1639
profile_info & get_profile_info()
Definition system.cpp:1623
std::vector< std::string > get_log_types()
Definition system.cpp:2030
void set_entity_dir(fs::path &entity_dir)
Definition system.cpp:1791
void add_connection(std::string id, std::string departure_node, std::string arrival_node)
Definition system.cpp:1595
fs::path & get_tmp_dir()
Definition system.cpp:2012
AccessMode
Definition system.hpp:269
@ REMOTE
Definition system.hpp:271
@ CUSTOM_REMOTE
Definition system.hpp:273
@ LOCAL
Definition system.hpp:270
@ CUSTOM
Definition system.hpp:272
void close()
Definition system.cpp:1785
std::shared_ptr< Node > & get_node(std::string id)
Definition system.cpp:1607
std::string get_type()
Definition system.cpp:2034
void set_parent(Identifiable *identifiable)
Definition system.hpp:42
Identifiable(std::string name)
Definition system.hpp:28
fs::path & get_path(fs::path start)
Definition system.hpp:54
virtual std::string get_type()=0
std::string & get_name()
Definition system.hpp:38
virtual std::vector< std::string > get_log_types()=0
void throw_error(std::string msg)
Definition system.hpp:33
std::string get_parent_name()
Definition system.hpp:46
void close()
Definition system.cpp:1157
void add_src_code_path(fs::path path)
Definition system.cpp:1252
std::vector< int > get_version_nums()
Definition system.cpp:693
bool is_workflow_ever_run()
Definition system.cpp:1317
std::string get_type()
Definition system.cpp:1226
const char * get_cpu_mask()
Definition system.cpp:1284
std::unordered_map< std::string, option > & get_options()
Definition system.cpp:1189
std::unordered_set< std::string > & get_tags()
Definition system.cpp:1197
bool has_in_tag(std::string tag)
Definition system.cpp:1264
unsigned long long get_workflow_end_time(bool &err)
Definition system.cpp:1325
unsigned int get_max_count_per_entity()
Definition system.cpp:717
std::string & get_node_name()
Definition system.cpp:1218
unsigned long long get_workflow_start_time(bool &err)
Definition system.cpp:1321
bool is_injection_available()
Definition system.cpp:1292
static std::vector< std::unique_ptr< Module > > get_all_modules(std::vector< fs::path > &library_paths)
Definition system.cpp:620
std::unordered_map< std::string, OptionMetadata > & get_all_options()
Definition system.cpp:1201
void set_will_profile(bool will_profile)
Definition system.cpp:1173
void set_profile_info(profile_info info)
Definition system.cpp:1276
std::shared_ptr< FileDescriptor > get_fd()
Definition system.cpp:1304
int profile_wait()
Definition system.cpp:1214
bool is_initialising()
Definition system.cpp:1280
fs::path & get_lib_path()
Definition system.cpp:713
void set_error(std::string error)
Definition system.cpp:1185
void profile_notify()
Definition system.cpp:1210
std::vector< std::string > get_log_types()
Definition system.cpp:1222
std::string & get_api_error_msg()
Definition system.cpp:1239
~Module()
Definition system.cpp:736
bool get_will_profile()
Definition system.cpp:1181
std::string & receive_string_inject(long timeout_seconds=NO_TIMEOUT)
Definition system.cpp:1308
static amod_t next_module_id
Definition system.hpp:98
std::unique_ptr< Path > & get_dir()
Definition system.cpp:1193
std::string get_name()
Definition system.cpp:653
bool wait()
Definition system.cpp:1147
static std::unordered_map< amod_t, Module * > all_modules
Definition system.hpp:97
fs::path & get_local_config_dir()
Definition system.cpp:1260
fs::path get_inject_lib_path()
Definition system.cpp:1296
int get_api_error_code()
Definition system.cpp:1243
void set_api_error(std::string msg, int code)
Definition system.cpp:1234
bool has_out_tag(std::string tag)
Definition system.cpp:1268
void process(std::shared_ptr< IR > ir_obj)
Definition system.cpp:1130
bool init(unsigned int buf_size)
Definition system.cpp:1091
Module(std::string backend_name, std::vector< fs::path > &library_paths)
Definition system.cpp:721
fs::path & get_tmp_dir()
Definition system.cpp:1256
void set_dir(fs::path dir)
Definition system.cpp:1205
void region_switch(std::string name, std::string part_id, std::string state, std::string timestamp_str)
Definition system.cpp:1329
amod_t get_id()
Definition system.cpp:1300
bool is_directing_node()
Definition system.cpp:1247
std::unordered_set< fs::path > & get_src_code_paths()
Definition system.cpp:1288
profile_info & get_profile_info()
Definition system.cpp:1272
std::string get_version()
Definition system.cpp:673
bool is_workflow_running()
Definition system.cpp:1313
void set_node(Node *node)
Definition system.cpp:1230
std::string get_type()
Definition system.cpp:1562
std::shared_ptr< Node > & get_departure_node()
Definition system.cpp:1550
std::vector< std::string > get_log_types()
Definition system.cpp:1558
NodeConnection(std::string id, std::shared_ptr< Node > &departure_node, std::shared_ptr< Node > &arrival_node)
Definition system.cpp:1543
std::shared_ptr< Node > & get_arrival_node()
Definition system.cpp:1554
Definition system.hpp:205
unsigned long long get_workflow_start_time(bool &err)
Definition system.cpp:1528
std::unordered_set< fs::path > get_src_code_paths()
Definition system.cpp:1475
void profile_notify()
Definition system.cpp:1401
std::string get_type()
Definition system.cpp:1491
void process(std::shared_ptr< IR > ir_obj)
Definition system.cpp:1374
void set_dir(fs::path path)
Definition system.cpp:1443
fs::path & get_tmp_dir()
Definition system.cpp:1467
bool is_workflow_ever_run()
Definition system.cpp:1524
int get_modules_profiling()
Definition system.cpp:1435
const char * get_cpu_mask()
Definition system.cpp:1463
int profile_wait()
Definition system.cpp:1405
std::vector< InjectPath > get_module_inject_paths()
Definition system.cpp:1495
void close()
Definition system.cpp:1391
bool wait()
Definition system.cpp:1380
std::unordered_set< std::string > & get_tags()
Definition system.cpp:1397
void add_module(std::unique_ptr< Module > &mod)
Definition system.cpp:1429
bool has_out_tag(std::string tag)
Definition system.cpp:1425
void add_in_tags(std::unordered_set< std::string > &tags)
Definition system.cpp:1409
bool is_directing()
Definition system.cpp:1451
bool is_workflow_running()
Definition system.cpp:1520
unsigned long long get_workflow_end_time(bool &err)
Definition system.cpp:1532
void set_profile_info(profile_info info)
Definition system.cpp:1459
profile_info & get_profile_info()
Definition system.cpp:1455
std::vector< std::string > get_log_types()
Definition system.cpp:1487
void inc_modules_profiling()
Definition system.cpp:1439
fs::path & get_local_config_dir()
Definition system.cpp:1471
bool has_in_tag(std::string tag)
Definition system.cpp:1421
void add_out_tags(std::unordered_set< std::string > &tags)
Definition system.cpp:1415
Node(std::string name, std::shared_ptr< Entity > &entity)
Definition system.cpp:1345
bool init(unsigned int buf_size)
Definition system.cpp:1351
void region_switch(std::string name, std::string part_id, std::string state, std::string timestamp_str)
Definition system.cpp:1536
Definition system.hpp:346
void process()
Definition system.cpp:2467
void set_ir(std::shared_ptr< IR > ir_obj)
Definition system.cpp:2461
bool with_custom_src_code_paths()
~System()
Definition system.cpp:2455
System(fs::path def_file, fs::path root_dir, std::vector< fs::path > &library_paths, fs::path local_config_path, fs::path tmp_dir, bool no_inject, unsigned int buf_size)
Definition system.cpp:2429
option_type
Definition hw.h:123
struct adaptyst::InjectPath InjectPath
#define NO_TIMEOUT
Definition socket.hpp:25
int read_fd[2]
Definition system.hpp:90
std::string name
Definition system.hpp:88
amod_t id
Definition system.hpp:89
int write_fd[2]
Definition system.hpp:91
std::string path
Definition system.hpp:92