9#include <unordered_set>
10#include <unordered_map>
17#define ADAPTYST_INTERNAL
21 namespace fs = std::filesystem;
27 std::unordered_map<fs::path, fs::path> paths;
32 this->parent =
nullptr;
36 throw std::runtime_error(name +
": " + msg);
45 this->parent = identifiable;
57 if (this->paths.find(start) == this->paths.end()) {
58 std::vector<std::string> chain;
60 chain.push_back(this->name);
65 chain.push_back(current->name);
66 current = current->parent;
69 fs::path result = start;
71 for (
int i = chain.size() - 1; i >= 0; i--) {
75 this->paths[start] = result;
78 return this->paths[start];
103 static std::vector<std::unique_ptr<Module> >
get_all_modules(fs::path library_path);
105 Module(std::string backend_name,
106 fs::path library_path);
107 Module(std::string backend_name,
108 std::unordered_map<std::string, std::string> &options,
109 std::unordered_map<std::string, std::vector<std::string>> &array_options,
110 fs::path library_path,
111 bool never_directing);
114 void process(std::string sdfg);
120 std::unordered_map<std::string, option> &
get_options();
121 std::unique_ptr<Path> &
get_dir();
122 std::unordered_set<std::string> &
get_tags();
153 std::unordered_map<std::string, option> options;
154 std::unordered_map<std::string, OptionMetadata> option_metadata;
155 std::unique_ptr<Path> dir;
160 std::future<bool> process_future;
161 std::vector<std::string> log_types;
162 std::vector<void *> malloced;
163 std::unordered_set<std::string> tags;
166 bool never_directing;
168 std::string api_error_msg;
170 std::unordered_set<fs::path> src_code_paths;
172 unsigned int max_count_per_entity;
174 void construct(std::string backend_name,
175 std::unordered_map<std::string, std::string> &options,
176 std::unordered_map<std::string, std::vector<std::string>> &array_options,
177 fs::path library_path,
bool never_directing);
182 Node(std::string name,
183 std::shared_ptr<Entity> &entity);
185 void process(std::string &sdfg);
188 std::unordered_set<std::string> &
get_tags();
189 void add_in_tags(std::unordered_set<std::string> &tags);
190 void add_out_tags(std::unordered_set<std::string> &tags);
193 void add_module(std::unique_ptr<Module> &mod);
210 std::unique_ptr<Path> dir;
211 std::vector<std::unique_ptr<Module> > modules;
212 std::shared_ptr<Entity> entity;
213 std::unordered_set<std::string> tags;
214 std::unordered_set<std::string> in_tags;
215 std::unordered_set<std::string> out_tags;
221 std::shared_ptr<Node> departure_node;
222 std::shared_ptr<Node> arrival_node;
226 std::shared_ptr<Node> &departure_node,
227 std::shared_ptr<Node> &arrival_node);
244 unsigned int processing_threads,
245 fs::path local_config_path,
247 void add_node(std::shared_ptr<Node> &node);
249 std::string departure_node,
250 std::string arrival_node);
251 std::shared_ptr<Node> &
get_node(std::string
id);
257 void process(
bool save_src_code_paths);
273 std::unordered_map<std::string, std::shared_ptr<Node> > nodes;
274 std::unordered_map<std::string, std::shared_ptr<NodeConnection> > connections;
275 std::string directing_node;
277 std::unique_ptr<Path> entity_dir;
278 unsigned int processing_threads;
279 fs::path local_config_path;
281 std::string cpu_mask;
284 std::unique_ptr<Process> profiled_process;
285 std::unordered_set<fs::path> src_code_paths;
286 bool src_code_paths_collected;
287 bool workflow_finish_printed;
288 long long workflow_start_time;
289 std::mutex workflow_finish_print_mutex;
294 std::unordered_map<std::string, std::shared_ptr<Entity> > entities;
295 std::unordered_map<std::string,
296 std::shared_ptr<NodeConnection> > connections;
297 std::unique_ptr<Path> root_dir;
298 std::variant<fs::path, int> codes_dst;
299 bool custom_src_code_paths_save;
301 void init(fs::path def_file, fs::path root_dir,
302 fs::path library_path, fs::path local_config_path,
305 System(fs::path def_file, fs::path root_dir,
306 fs::path library_path, fs::path local_config_path,
308 System(fs::path def_file, fs::path root_dir,
309 fs::path library_path, fs::path local_config_path,
310 fs::path tmp_dir, std::variant<fs::path, int> codes_dst);
Definition system.hpp:234
void init()
Definition system.cpp:1216
void set_directing_node(std::string node)
Definition system.cpp:1200
int profile_wait()
Definition system.cpp:1362
std::string get_directing_node()
Definition system.cpp:1204
void add_node(std::shared_ptr< Node > &node)
Definition system.cpp:1175
void set_profile_info(profile_info &info)
Definition system.cpp:1212
std::vector< std::shared_ptr< Node > > get_all_nodes()
Definition system.cpp:1511
fs::path & get_local_config_dir()
Definition system.cpp:1507
void profile_notify()
Definition system.cpp:1356
const char * get_cpu_mask()
Definition system.cpp:1424
std::unordered_set< fs::path > & get_src_code_paths()
Definition system.cpp:1533
void process(bool save_src_code_paths)
Definition system.cpp:1226
Entity(std::string id, AccessMode access_mode, unsigned int processing_threads, fs::path local_config_path, fs::path tmp_dir)
Definition system.cpp:1163
profile_info & get_profile_info()
Definition system.cpp:1208
std::vector< std::string > get_log_types()
Definition system.cpp:1521
void set_sdfg(std::string sdfg)
Definition system.cpp:1529
void set_entity_dir(fs::path &entity_dir)
Definition system.cpp:1347
void add_connection(std::string id, std::string departure_node, std::string arrival_node)
Definition system.cpp:1180
fs::path & get_tmp_dir()
Definition system.cpp:1503
AccessMode
Definition system.hpp:236
@ REMOTE
Definition system.hpp:238
@ CUSTOM_REMOTE
Definition system.hpp:240
@ LOCAL
Definition system.hpp:237
@ CUSTOM
Definition system.hpp:239
void close()
Definition system.cpp:1341
std::shared_ptr< Node > & get_node(std::string id)
Definition system.cpp:1192
std::string get_type()
Definition system.cpp:1525
void set_parent(Identifiable *identifiable)
Definition system.hpp:44
Identifiable(std::string name)
Definition system.hpp:30
fs::path & get_path(fs::path start)
Definition system.hpp:56
virtual std::string get_type()=0
std::string & get_name()
Definition system.hpp:40
virtual std::vector< std::string > get_log_types()=0
void throw_error(std::string msg)
Definition system.hpp:35
std::string get_parent_name()
Definition system.hpp:48
void close()
Definition system.cpp:856
void add_src_code_path(fs::path path)
Definition system.cpp:951
std::vector< int > get_version_nums()
Definition system.cpp:468
std::string get_type()
Definition system.cpp:925
const char * get_cpu_mask()
Definition system.cpp:983
std::unordered_map< std::string, option > & get_options()
Definition system.cpp:888
std::unordered_set< std::string > & get_tags()
Definition system.cpp:896
bool has_in_tag(std::string tag)
Definition system.cpp:963
unsigned int get_max_count_per_entity()
Definition system.cpp:492
std::string & get_node_name()
Definition system.cpp:917
std::unordered_map< std::string, OptionMetadata > & get_all_options()
Definition system.cpp:900
void set_will_profile(bool will_profile)
Definition system.cpp:872
void set_profile_info(profile_info info)
Definition system.cpp:975
int profile_wait()
Definition system.cpp:913
bool is_initialising()
Definition system.cpp:979
void set_error(std::string error)
Definition system.cpp:884
void profile_notify()
Definition system.cpp:909
std::vector< std::string > get_log_types()
Definition system.cpp:921
std::string & get_api_error_msg()
Definition system.cpp:938
~Module()
Definition system.cpp:509
void process(std::string sdfg)
Definition system.cpp:832
bool get_will_profile()
Definition system.cpp:880
static amod_t next_module_id
Definition system.hpp:92
std::unique_ptr< Path > & get_dir()
Definition system.cpp:892
std::string get_name()
Definition system.cpp:428
fs::path get_lib_path()
Definition system.cpp:488
bool wait()
Definition system.cpp:846
Module(std::string backend_name, fs::path library_path)
Definition system.cpp:496
static std::unordered_map< amod_t, Module * > all_modules
Definition system.hpp:91
fs::path & get_local_config_dir()
Definition system.cpp:959
int get_api_error_code()
Definition system.cpp:942
void set_api_error(std::string msg, int code)
Definition system.cpp:933
bool has_out_tag(std::string tag)
Definition system.cpp:967
static std::vector< std::unique_ptr< Module > > get_all_modules(fs::path library_path)
Definition system.cpp:403
fs::path & get_tmp_dir()
Definition system.cpp:955
bool init()
Definition system.cpp:809
void set_dir(fs::path dir)
Definition system.cpp:904
bool is_directing_node()
Definition system.cpp:946
std::unordered_set< fs::path > & get_src_code_paths()
Definition system.cpp:987
profile_info & get_profile_info()
Definition system.cpp:971
std::string get_version()
Definition system.cpp:448
void set_node(Node *node)
Definition system.cpp:929
std::string get_type()
Definition system.cpp:1159
std::shared_ptr< Node > & get_departure_node()
Definition system.cpp:1147
std::vector< std::string > get_log_types()
Definition system.cpp:1155
NodeConnection(std::string id, std::shared_ptr< Node > &departure_node, std::shared_ptr< Node > &arrival_node)
Definition system.cpp:1140
std::shared_ptr< Node > & get_arrival_node()
Definition system.cpp:1151
Definition system.hpp:180
std::unordered_set< fs::path > get_src_code_paths()
Definition system.cpp:1120
void profile_notify()
Definition system.cpp:1046
std::string get_type()
Definition system.cpp:1136
void set_dir(fs::path path)
Definition system.cpp:1088
fs::path & get_tmp_dir()
Definition system.cpp:1112
const char * get_cpu_mask()
Definition system.cpp:1108
int profile_wait()
Definition system.cpp:1050
void close()
Definition system.cpp:1036
bool wait()
Definition system.cpp:1025
std::unordered_set< std::string > & get_tags()
Definition system.cpp:1042
void add_module(std::unique_ptr< Module > &mod)
Definition system.cpp:1074
bool has_out_tag(std::string tag)
Definition system.cpp:1070
void add_in_tags(std::unordered_set< std::string > &tags)
Definition system.cpp:1054
bool is_directing()
Definition system.cpp:1096
void set_profile_info(profile_info info)
Definition system.cpp:1104
void process(std::string &sdfg)
Definition system.cpp:1019
profile_info & get_profile_info()
Definition system.cpp:1100
std::vector< std::string > get_log_types()
Definition system.cpp:1132
fs::path & get_local_config_dir()
Definition system.cpp:1116
bool has_in_tag(std::string tag)
Definition system.cpp:1066
void add_out_tags(std::unordered_set< std::string > &tags)
Definition system.cpp:1060
bool get_will_profile()
Definition system.cpp:1080
void set_will_profile(bool will_profile)
Definition system.cpp:1084
bool init()
Definition system.cpp:996
Node(std::string name, std::shared_ptr< Entity > &entity)
Definition system.cpp:991
Definition system.hpp:292
System(fs::path def_file, fs::path root_dir, fs::path library_path, fs::path local_config_path, fs::path tmp_dir)
Definition system.cpp:1892
void process()
Definition system.cpp:1926
bool with_custom_src_code_paths()
~System()
Definition system.cpp:1914
void set_sdfg(std::string sdfg)
Definition system.cpp:1920
option_type
Definition hw.h:59
unsigned int amod_t
Definition hw.h:115