DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
kernel.hpp
Go to the documentation of this file.
1
10#ifndef OKS_KERNEL_H
11#define OKS_KERNEL_H
12
13#include <sys/time.h>
14
15#include <ctime>
16#include <string>
17#include <list>
18#include <mutex>
19#include <shared_mutex>
20#include <set>
21#include <vector>
22
23#include <boost/shared_ptr.hpp>
24
25#include "oks/defs.hpp"
26#include "oks/xml.hpp"
27#include "oks/file.hpp"
28#include "oks/class.hpp"
29#include "oks/object.hpp"
30#include "oks/exceptions.hpp"
31
32
33namespace dunedaq {
34namespace oks {
35 //
36 // Forward declarations
37 //
38
39class OksMethod;
40class OksProfiler;
41class OksString;
42class OksPipeline;
43
44
46
56 class FailedLoadFile : public exception {
57
58 public:
59
61 FailedLoadFile(const std::string& item, const std::string& name, const exception& reason) noexcept : exception (fill(item, name, reason.what()), reason.level() + 1) { }
62
64 FailedLoadFile(const std::string& item, const std::string& name, const std::string& reason) noexcept : exception (fill(item, name, reason), 0) { }
65
66 virtual ~FailedLoadFile() noexcept { }
67
68
69 private:
70
71 static std::string fill(const std::string& item, const std::string& name, const std::string& reason) noexcept;
72
73 };
74
75
82 class FailedReloadFile : public exception {
83
84 public:
85
87 FailedReloadFile(const std::string& names, const exception& reason) noexcept : exception (fill(names, reason.what()), reason.level() + 1) { }
88
90 FailedReloadFile(const std::string& names, const std::string& reason) noexcept : exception (fill(names, reason), 0) { }
91
92 virtual ~FailedReloadFile() noexcept { }
93
94
95 private:
96
97 static std::string fill(const std::string& names, const std::string& reason) noexcept;
98
99 };
100
101
109
110 public:
111
113 RepositoryOperationFailed(const char * op, const exception& reason) noexcept : exception (fill(op, reason.what()), reason.level() + 1) { }
114
116 RepositoryOperationFailed(const char * op, const std::string& reason) noexcept : exception (fill(op, reason), 0) { }
117
118 virtual ~RepositoryOperationFailed() noexcept { }
119
120
121 private:
122
123 static std::string fill(const char * op, const std::string& reason) noexcept;
124
125 };
126
127
135 class CanNotOpenFile : public exception {
136
137 public:
138
139 CanNotOpenFile(const char * prefix, const std::string& name, const std::string& reason) noexcept : exception (fill(prefix, name, reason), 0) { }
140
141 virtual ~CanNotOpenFile() noexcept { }
142
143
144 private:
145
146 static std::string fill(const char * prefix, const std::string& name, const std::string& reason) noexcept;
147
148 };
149
150
158
159 public:
160
161 CanNotCreateFile(const char * prefix, const char * item, const std::string& name, const exception& reason) noexcept : exception (fill(prefix, item, name, reason.what()), reason.level() + 1) { }
162 CanNotCreateFile(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept : exception (fill(prefix, item, name, reason), 0) { }
163
164 virtual ~CanNotCreateFile() noexcept { }
165
166
167 private:
168
169 static std::string fill(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept;
170
171 };
172
173
181
182 public:
183
184 CanNotCreateRepositoryDir(const char * prefix, const std::string& name) noexcept : exception (fill(prefix, name), 0) { }
185
186 virtual ~CanNotCreateRepositoryDir() noexcept { }
187
188
189 private:
190
191 static std::string fill(const char * prefix, const std::string& name) noexcept;
192
193 };
194
202
203 public:
204
206 CanNotWriteToFile(const char * prefix, const char * item, const std::string& name, const exception& reason) noexcept : exception (fill(prefix, item, name, reason.what()), reason.level() + 1) {}
207
209 CanNotWriteToFile(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept : exception (fill(prefix, item, name, reason), 0) {}
210
211 virtual ~CanNotWriteToFile() noexcept { }
212
213
214 private:
215
216 static std::string fill(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept;
217
218 };
219
220
228
229 public:
230
232 CanNotBackupFile(const std::string& name, const exception& reason) noexcept : exception (fill(name, reason.what()), reason.level() + 1) {}
233
234 virtual ~CanNotBackupFile() noexcept { }
235
236
237 private:
238
239 static std::string fill(const std::string& name, const std::string& reason) noexcept;
240
241 };
242
243
251
252 public:
253
255 CanNotSetActiveFile(const char * item, const std::string& name, const exception& reason) noexcept : exception (fill(item, name, reason.what()), reason.level() + 1) {}
256
258 CanNotSetActiveFile(const char * item, const std::string& name, const std::string& reason) noexcept : exception (fill(item, name, reason), 0) {}
259
260 virtual ~CanNotSetActiveFile() noexcept { }
261
262
263 private:
264
265 static std::string fill(const char * item, const std::string& name, const std::string& reason) noexcept;
266
267 };
268
269
276 class CanNotSetFile : public exception {
277
278 public:
279
281 CanNotSetFile(const OksClass * c, const OksObject * o, const OksFile& file, const exception& reason) noexcept : exception (fill(c, o, file, reason.what()), reason.level() + 1) {}
282
284 CanNotSetFile(const OksClass * c, const OksObject * o, const OksFile& file, const std::string& reason) noexcept : exception (fill(c, o, file, reason), 0) {}
285
286 virtual ~CanNotSetFile() noexcept { }
287
288
289 private:
290
291 static std::string fill(const OksClass * c, const OksObject * o, const OksFile& file, const std::string& reason) noexcept;
292
293 };
294
295
302 class CannotAddClass : public exception {
303
304 public:
305
307 CannotAddClass(const OksClass &c, const exception& reason) noexcept : exception (fill(c, reason.what()), reason.level() + 1) {}
308
310 CannotAddClass(const OksClass &c, const std::string& reason) noexcept : exception (fill(c, reason), 0) {}
311
312 virtual ~CannotAddClass() noexcept { }
313
314 private:
315
316 static std::string fill(const OksClass &c, const std::string& reason) noexcept;
317
318 };
319
320
328
329 public:
330
332 AuthenticationFailure(const std::string& reason) noexcept : exception (reason, 0) {}
333
334 virtual ~AuthenticationFailure() noexcept { }
335
336 };
337
338
346
347 public:
348
350 CannotResolvePath(const std::string& path, int error_code) noexcept : exception (fill(path, error_code), 0) {}
351
352 virtual ~CannotResolvePath() noexcept { }
353
354 private:
355
356 static std::string fill(const std::string& path, int error_code) noexcept;
357
358 };
359
361 {
362 public:
363
364 void add_error(const OksFile& file, std::exception& ex);
365 bool is_empty() { std::lock_guard lock(p_mutex); return m_errors.empty(); }
366 void clear() { std::lock_guard lock(p_mutex); m_errors.clear(); }
367 std::string get_text();
368
369 private:
370
371 std::list<std::string> m_errors;
372 std::string m_error_string;
373 std::mutex p_mutex;
374
375 void add_parents(std::string& text, const OksFile * file, std::set<const OksFile *>& parents);
376
377 };
378
379 double get_time_interval(const timeval * t1, const timeval * t2);
380
388
389 std::ostream&
391
392
393
411
413
414 OksString * get();
415 void reset() {count = -1;}
416
417
418 private:
419
420 static const char symbols[];
421 long count;
422};
423
424
447
449
450
451 // struct Value stores pointer to class (if loaded) or pointer to its name
452
453 struct Value {
454
455 struct SortByName {
456 bool operator() (const OksString * s1, const OksString * s2) const {
457 return *s1 < *s2;
458 }
459 };
460
461 typedef std::map<const OksString *, Value *, SortByName> Map;
462
463
464 Value (OksString * n, const OksClass * p) : class_name (n), class_ptr(p) {;}
465
468 };
469
470 inline void add_key(OksString *); // class is not loaded
471 inline void add_value(OksString * vn, const OksClass * vp); // class was loaded
472 inline const Value * get(const OksString * key) const;
473 const Value * get(const char * key) const { OksString str(key); return get(&str); }
474
475
476 private:
477
480
481};
482
483
488inline void
490{
491 p_aliases[key] = new Value(p_nameTable.get(), 0);
492}
493
494inline void
496{
497 p_aliases[p_nameTable.get()] = new Value(vn, vp);
498}
499
500inline const OksAliasTable::Value *
502{
503 Value::Map::const_iterator i = p_aliases.find(key);
504
505 if(i != p_aliases.end()) return i->second;
506 else return 0;
507}
508
510{
511 std::string m_commit_hash;
512 std::string m_user;
513 std::time_t m_date;
514 std::string m_comment;
515 std::vector<std::string> m_files;
516
517 void clear()
518 {
519 m_commit_hash.clear();
520 m_user.clear();
521 m_date = 0;
522 m_comment.clear();
523 m_files.clear();
524 }
525};
526
577{
578 friend std::ostream& operator<<(std::ostream&, OksKernel&);
579 friend class OksFile;
580 friend class OksClass;
581 friend class OksObject;
582 friend struct OksLoadObjectsJob;
583 friend struct OksData;
584
585 template<typename T>
586 using map_str_t = std::map<std::string, T>;
587
588 public:
589
599 OksKernel(bool silence_mode = false, bool verbose_mode = false, bool profiling_mode = false, bool allow_repository = true, const char * version = nullptr, std::string branch_name = "");
600
601
610 OksKernel(const OksKernel& src, bool copy_repository = false);
611
612 ~OksKernel();
613
615
616
622 static const char * GetVersion();
623
624
629 static std::string& get_host_name();
630
631
636 static std::string& get_domain_name();
637
638
643 static std::string& get_user_name();
644
645
646 /* /\** */
647 /* * \brief Validate user credentials (used by rdb and oksconflibs). */
648 /* * */
649 /* * PAM authentication is used. */
650 /* * */
651 /* * \param user - user name */
652 /* * \param passwd - user password */
653 /* * */
654 /* * \throw Throw std::exception in case of problems. */
655 /* *\/ */
656
657 /* static void validate_credentials(const char * user, const char * passwd); */
658
659
665 bool get_verbose_mode() const {return p_verbose;}
666
667
677 void set_verbose_mode(const bool b) {p_verbose = b;}
678
679
686 bool get_silence_mode() const {return p_silence;}
687
688
698 void set_silence_mode(const bool b) {p_silence = b;}
699
700
708 bool get_profiling_mode() const {return p_profiling;}
709
710
720 void set_profiling_mode(const bool b);
721
722
731
732
733
742
743
757
758
766
767
778
779
790
791
800
801
811 static void set_skip_string_range(const bool b) {p_skip_string_range = b;}
812
820 std::shared_mutex& get_mutex() {return p_kernel_mutex;}
821
822
823 //
824 // Methods to work with OKS database files
825 //
826
837 OksFile * find_schema_file(const std::string & s) const;
838
839
850 OksFile * find_data_file(const std::string & s) const;
851
852
864 std::list<OksClass *> * create_list_of_schema_classes(OksFile *) const;
865
866
878 std::list<OksObject *> * create_list_of_data_objects(OksFile *) const;
879
880
893 OksFile * create_file_info(const std::string& short_file_name, const std::string& file_name);
894
895
905 static bool check_read_only(OksFile * f);
906
907
923 std::string get_file_path(const std::string& path, const OksFile * parent_file = 0, bool strict_paths = true) const;
924
925
933 static const std::string& get_repository_root();
934
935 const std::string&
940
941 bool
946
955 static const std::string& get_repository_mapping_dir();
956
957
965 const std::string& get_user_repository_root() const;
966
967
974 void set_user_repository_root(const std::string& path, const std::string& version = "");
975
976
988 static std::string get_tmp_file(const std::string& file_name);
989
990
1000 void get_includes(const std::string& file_name, std::set< std::string >& includes, bool use_repository_name = false);
1001
1002
1012
1013
1031 OksFile * load_file(const std::string& name, bool bind = true);
1032
1033
1050 OksFile * load_schema(const std::string& name, const OksFile * parent = 0);
1051
1052
1067 OksFile * new_schema(const std::string& name);
1068
1069
1084 void save_schema(OksFile * file_h, bool force = false, OksFile * true_file_h = 0);
1085
1086
1102 void save_schema(OksFile * file_h, bool force, const OksClass::Map& classes);
1103
1104
1119 void backup_schema(OksFile * pf, const char * suffix = ".bak");
1120
1121
1135 void save_as_schema(const std::string& name, OksFile * file_h);
1136
1137
1148 void save_all_schema();
1149
1150
1161 void close_schema(OksFile * file_h);
1162
1163
1172 void close_all_schema();
1173
1174
1188 void set_active_schema(OksFile * file_h);
1189
1190
1197 void k_set_active_schema(OksFile * file_h);
1198
1199
1211
1212
1223 const OksFile::Map & schema_files() const {return p_schema_files;}
1224
1225
1244 void create_lists_of_updated_schema_files(std::list<OksFile *> ** updated, std::list<OksFile *> ** removed) const;
1245
1246
1265 void get_updated_repository_files(std::set<std::string>& updated, std::set<std::string>& added, std::set<std::string>& removed);
1266
1267
1287 OksFile * load_data(const std::string& name, bool bind = true);
1288
1289
1310 void reload_data(std::set<OksFile *>& files, bool allow_schema_extension = true);
1311
1312
1330 OksFile * new_data(const std::string& name, const std::string& logical_name = "", const std::string& type = "");
1331
1332
1348 void save_data(OksFile * file_h, bool ignore_bad_objects = false, OksFile * true_file_h = nullptr, bool force_defaults = false);
1349
1350
1364 void save_data(OksFile * file_h, const OksObject::FSet& objects);
1365
1366
1382 void backup_data(OksFile * pf, const char * suffix = ".bak");
1383
1384
1398 void save_as_data(const std::string& new_name, OksFile * file_h);
1399
1400
1413 void save_all_data(bool force_defaults=false);
1414
1415
1432 void close_data(OksFile * file_h, bool unbind_objects = true);
1433
1434
1443 void close_all_data();
1444
1445
1459 void set_active_data(OksFile * file_h);
1460
1461
1470 void k_set_active_data(OksFile *);
1471
1472
1482
1483
1493 const OksFile::Map & data_files() const {return p_data_files;}
1494
1495
1514 void create_lists_of_updated_data_files(std::list<OksFile *> ** updated, std::list<OksFile *> ** removed) const;
1515
1516
1533 void
1534 get_modified_files(std::set<OksFile *>& mfs, std::set<OksFile *>& rfs, const std::string& version);
1535
1536
1545 const std::list<std::string>& get_repository_dirs() const {return p_repository_dirs;}
1546
1547
1559 void
1560 commit_repository(const std::string& comments, const std::string& credentials = "");
1561
1562
1573 void
1574 tag_repository(const std::string& tag);
1575
1576
1583 std::time_t
1585 {
1587 }
1588
1589
1594
1595
1607 void
1608 update_repository(const std::string& hash_val, RepositoryUpdateType update_type)
1609 {
1610 update_repository("hash", hash_val, update_type);
1611 }
1612
1613
1627 void
1628 update_repository(const std::string& param, const std::string& val, RepositoryUpdateType update_type);
1629
1630
1637 std::list<std::string>
1638 get_repository_versions_diff(const std::string& sha1, const std::string& sha2);
1639
1640
1645 std::list<std::string>
1650
1651
1661 std::vector<OksRepositoryVersion>
1662 get_repository_versions(bool skip_irrelevant, const std::string& command_line);
1663
1664
1675 std::vector<OksRepositoryVersion>
1676 get_repository_versions_by_hash(bool skip_irrelevant = true, const std::string& sha1 = "", const std::string& sha2 = "");
1677
1678
1689 std::vector<OksRepositoryVersion>
1690 get_repository_versions_by_date(bool skip_irrelevant = true, const std::string& since = "", const std::string& until = "");
1691
1692
1699 std::string
1701
1702
1703
1708 static const char * get_cwd();
1709
1714 static void reset_cwd() { s_cwd = 0;}
1715
1716
1721 static void
1726
1727
1741 std::string insert_repository_dir(const std::string& dir, bool push_back = true);
1742
1743
1753 void remove_repository_dir(const std::string& dir);
1754
1755
1767 const OksClass::Map & classes() const {return p_classes;}
1768
1769
1776 size_t number_of_classes() const {return p_classes.size();}
1777
1778
1790 const OksObject::Set & objects() const {return p_objects;}
1791
1792
1799 size_t number_of_objects() const {return p_objects.size();}
1800
1801
1814 OksClass * find_class(const std::string& class_name) const { return find_class(class_name.c_str()); }
1815
1816
1829 OksClass * find_class(const char * class_name) const;
1830
1831
1839 void get_all_classes(const std::vector<std::string>& names_in, ClassSet& classes_out) const;
1840
1841
1850 void registrate_all_classes(bool skip_registered = false);
1851
1852
1869 bool is_dangling(OksClass * class_ptr) const;
1870
1871
1888 bool is_dangling(OksObject * obj_ptr) const;
1889
1890
1901 void subscribe_create_class(void (*f)(OksClass *));
1902
1903
1914 void subscribe_change_class(void (*f)(OksClass *, OksClass::ChangeType, const void *));
1915
1916
1927 void subscribe_delete_class(void (*f)(OksClass *));
1928
1929
1941 void subscribe_create_object(OksObject::notify_obj cb_f, void * parameter);
1942
1943
1955
1956
1969
1970
1983 void bind_objects();
1984
1985
1995 const std::string& get_bind_objects_status() const noexcept { return p_bind_objects_status; }
1996
1997
2007 const std::string& get_bind_classes_status() const noexcept { return p_bind_classes_status; }
2008
2009
2014 void
2016
2017
2018 private:
2026
2029
2030 static std::string p_repository_root;
2031 static std::string p_repository_mapping_dir;
2038
2039
2040 // kernel mutexes
2041
2042 mutable std::shared_mutex p_kernel_mutex;
2043 mutable std::mutex p_objects_mutex;
2045 std::shared_mutex p_schema_mutex;
2046 static std::mutex p_parallel_out_mutex;
2047
2048 // schema and data files members
2049
2052
2055
2057
2058
2059 // repository directories
2060
2061 std::list<std::string> p_repository_dirs;
2062
2063 static char * s_cwd;
2064
2065
2067
2068 static unsigned long p_count;
2069
2071
2073
2075
2077 mutable std::string p_bind_classes_status;
2078
2080
2081 std::map<const OksFile *, OksFile *> p_preload_file_info;
2082 std::vector<OksFile *> p_preload_added_files;
2083
2084
2085 // to be used by the kernel only
2086
2087 std::string create_user_repository_dir();
2089
2090 void k_copy_repository(const std::string& source, const std::string& destination);
2091
2092
2107 void k_checkout_repository(const std::string& param, const std::string& val, const std::string& branch);
2108
2109
2110 OksFile * find_file(const std::string &s, const OksFile::Map& files) const;
2111 void k_rename_repository_file(OksFile * file_h, const std::string& new_name);
2112
2113 OksFile * k_load_file(const std::string& name, bool bind, const OksFile * parent, OksPipeline * pipeline);
2114
2115 void k_load_includes(const OksFile&, OksPipeline *);
2116 bool k_preload_includes(OksFile * file_h, std::set<OksFile *>& new_files, bool allow_schema_extension);
2119
2120 OksFile * k_load_schema(const std::string&, const OksFile *);
2121 void k_load_schema(OksFile * fp, std::shared_ptr<OksXmlInputStream> xmls, const OksFile * parent_h);
2122 void k_close_schema(OksFile *);
2123 void k_save_schema(OksFile *, bool force = false, OksFile * = 0, const OksClass::Map * = 0);
2124 void k_rename_schema(OksFile *, const std::string& short_name, const std::string& long_name);
2125
2126 OksFile * k_load_data(const std::string&, bool, const OksFile *, OksPipeline *);
2127 void k_load_data(OksFile * fp, char format, std::shared_ptr<OksXmlInputStream> xmls, long file_length, bool bind, const OksFile * parent_h, OksPipeline *);
2128 void k_close_data(OksFile *, bool);
2129 void k_save_data(OksFile *, bool = false, OksFile * = nullptr, const OksObject::FSet * = nullptr, bool force_defaults = false);
2130 void k_rename_data(OksFile *, const std::string& short_name, const std::string& long_name);
2131
2132 void k_bind_objects();
2133 void k_check_bind_classes_status() const noexcept;
2134
2135
2143 void unbind_all_rels(const OksObject::FSet& rm_objs, OksObject::FSet& updated) const;
2144
2145 void k_add(OksClass*);
2146 void k_remove(OksClass*);
2147
2148 void define(OksObject *o) { std::lock_guard lock(p_objects_mutex); p_objects.insert(o); }
2149 void undefine(OksObject *o) { if(!p_objects.empty()) { std::lock_guard lock(p_objects_mutex); p_objects.erase(o); } }
2150
2151 void add_data_file(OksFile *);
2152 void add_schema_file(OksFile *);
2153 void remove_data_file(OksFile *);
2155
2156 bool test_parent(OksFile * file, OksFile::IMap::iterator& i);
2157
2160
2163
2166
2167};
2168
2169
2174inline void
2180
2181
2182inline void
2188
2189
2190inline void
2196
2197
2198inline void
2203
2204
2205inline void
2210
2211
2212inline void
2217
2218} // namespace oks
2219} // namespace dunedaq
2220
2221#endif
Failed to authenticate user.
Definition kernel.hpp:327
virtual ~AuthenticationFailure() noexcept
Definition kernel.hpp:334
AuthenticationFailure(const std::string &reason) noexcept
Definition kernel.hpp:332
Failed backup file.
Definition kernel.hpp:227
virtual ~CanNotBackupFile() noexcept
Definition kernel.hpp:234
CanNotBackupFile(const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:232
static std::string fill(const std::string &name, const std::string &reason) noexcept
Cannot create file.
Definition kernel.hpp:157
CanNotCreateFile(const char *prefix, const char *item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:162
CanNotCreateFile(const char *prefix, const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:161
virtual ~CanNotCreateFile() noexcept
Definition kernel.hpp:164
static std::string fill(const char *prefix, const char *item, const std::string &name, const std::string &reason) noexcept
virtual ~CanNotCreateRepositoryDir() noexcept
Definition kernel.hpp:186
CanNotCreateRepositoryDir(const char *prefix, const std::string &name) noexcept
Definition kernel.hpp:184
static std::string fill(const char *prefix, const std::string &name) noexcept
Cannot open file.
Definition kernel.hpp:135
virtual ~CanNotOpenFile() noexcept
Definition kernel.hpp:141
CanNotOpenFile(const char *prefix, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:139
static std::string fill(const char *prefix, const std::string &name, const std::string &reason) noexcept
Failed to set active file.
Definition kernel.hpp:250
CanNotSetActiveFile(const char *item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:258
virtual ~CanNotSetActiveFile() noexcept
Definition kernel.hpp:260
CanNotSetActiveFile(const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:255
static std::string fill(const char *item, const std::string &name, const std::string &reason) noexcept
Failed move item to file.
Definition kernel.hpp:276
CanNotSetFile(const OksClass *c, const OksObject *o, const OksFile &file, const std::string &reason) noexcept
Definition kernel.hpp:284
static std::string fill(const OksClass *c, const OksObject *o, const OksFile &file, const std::string &reason) noexcept
CanNotSetFile(const OksClass *c, const OksObject *o, const OksFile &file, const exception &reason) noexcept
Definition kernel.hpp:281
virtual ~CanNotSetFile() noexcept
Definition kernel.hpp:286
Failed write to file.
Definition kernel.hpp:201
CanNotWriteToFile(const char *prefix, const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:206
CanNotWriteToFile(const char *prefix, const char *item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:209
static std::string fill(const char *prefix, const char *item, const std::string &name, const std::string &reason) noexcept
virtual ~CanNotWriteToFile() noexcept
Definition kernel.hpp:211
Failed add new class.
Definition kernel.hpp:302
CannotAddClass(const OksClass &c, const exception &reason) noexcept
Definition kernel.hpp:307
static std::string fill(const OksClass &c, const std::string &reason) noexcept
CannotAddClass(const OksClass &c, const std::string &reason) noexcept
Definition kernel.hpp:310
virtual ~CannotAddClass() noexcept
Definition kernel.hpp:312
Failed resolve path.
Definition kernel.hpp:345
static std::string fill(const std::string &path, int error_code) noexcept
CannotResolvePath(const std::string &path, int error_code) noexcept
Definition kernel.hpp:350
virtual ~CannotResolvePath() noexcept
Definition kernel.hpp:352
Cannot load file.
Definition kernel.hpp:56
virtual ~FailedLoadFile() noexcept
Definition kernel.hpp:66
static std::string fill(const std::string &item, const std::string &name, const std::string &reason) noexcept
FailedLoadFile(const std::string &item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:61
FailedLoadFile(const std::string &item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:64
Cannot re-load files.
Definition kernel.hpp:82
FailedReloadFile(const std::string &names, const exception &reason) noexcept
Definition kernel.hpp:87
static std::string fill(const std::string &names, const std::string &reason) noexcept
FailedReloadFile(const std::string &names, const std::string &reason) noexcept
Definition kernel.hpp:90
virtual ~FailedReloadFile() noexcept
Definition kernel.hpp:92
The OKS class.
Definition class.hpp:200
static NotifyFN create_notify_fn
Definition class.hpp:966
static NotifyFN delete_notify_fn
Definition class.hpp:968
static ChangeNotifyFN change_notify_fn
Definition class.hpp:967
std::map< const char *, OksClass *, SortStr > Map
Definition class.hpp:233
ChangeType
Information about class property changes.
Definition class.hpp:889
Provides interface to the OKS XML schema and data files.
Definition file.hpp:340
std::map< const std::string *, OksFile *, SortByName > Map
Definition file.hpp:367
Provides interface to the OKS kernel.
Definition kernel.hpp:577
OksObject::notify_obj p_change_object_notify_fn
Definition kernel.hpp:2161
void define(OksObject *o)
Definition kernel.hpp:2148
OksFile * get_active_schema() const
Get active OKS schema file.
Definition kernel.hpp:1210
static const std::string & get_repository_mapping_dir()
Get OKS repository name.
Definition kernel.cpp:350
std::mutex p_objects_mutex
Definition kernel.hpp:2043
OksFile * get_active_data() const
Get active OKS data file.
Definition kernel.hpp:1481
void subscribe_change_object(OksObject::notify_obj, void *)
Subscribe on object changing.
Definition kernel.hpp:2183
static void reset_cwd()
Reset current working dir in case of chdir() call.
Definition kernel.hpp:1714
const std::string & get_user_repository_root() const
Get user OKS repository root.
Definition kernel.cpp:370
void k_save_schema(OksFile *, bool force=false, OksFile *=0, const OksClass::Map *=0)
Definition kernel.cpp:2593
void subscribe_delete_object(OksObject::notify_obj, void *)
Subscribe on object deleting.
Definition kernel.hpp:2191
OksFile * load_file(const std::string &name, bool bind=true)
Load OKS database file.
Definition kernel.cpp:1788
static std::string & get_host_name()
Get hostname of given process.
Definition kernel.cpp:429
static std::string & get_user_name()
Get username of given process.
Definition kernel.cpp:468
bool get_profiling_mode() const
Get status of profiling mode. The method returns true, if the profiling mode is switched 'On'....
Definition kernel.hpp:708
bool is_dangling(OksClass *class_ptr) const
Check pointer on oks class.
Definition kernel.cpp:4638
std::list< std::string > get_repository_versions_diff(const std::string &sha1, const std::string &sha2)
Definition kernel.cpp:5249
OksFile * load_data(const std::string &name, bool bind=true)
Load OKS data file.
Definition kernel.cpp:3559
static char * s_cwd
Definition kernel.hpp:2063
void k_set_active_data(OksFile *)
Set active OKS data file.
Definition kernel.cpp:4285
static bool check_read_only(OksFile *f)
Check if the OKS file is read-only.
Definition kernel.cpp:1532
void k_rename_repository_file(OksFile *file_h, const std::string &new_name)
Definition kernel.cpp:4862
static bool p_use_strict_repository_paths
Definition kernel.hpp:2028
void update_repository(const std::string &hash_val, RepositoryUpdateType update_type)
Update user repository files from origin by hash.
Definition kernel.hpp:1608
static std::mutex p_parallel_out_mutex
Definition kernel.hpp:2046
void remove_repository_dir(const std::string &dir)
Remove repository search directory.
Definition kernel.cpp:1424
void get_modified_files(std::set< OksFile * > &mfs, std::set< OksFile * > &rfs, const std::string &version)
Get modified data files.
Definition kernel.cpp:3017
const OksFile::Map & data_files() const
Get all data files.
Definition kernel.hpp:1493
std::string p_repository_version
Definition kernel.hpp:2035
void k_check_bind_classes_status() const noexcept
Definition kernel.cpp:5710
void save_as_data(const std::string &new_name, OksFile *file_h)
Save OKS data file under new name.
Definition kernel.cpp:4118
std::list< std::string > get_repository_unmerged_files()
Definition kernel.hpp:1646
void create_lists_of_updated_data_files(std::list< OksFile * > **updated, std::list< OksFile * > **removed) const
Get modified data files.
Definition kernel.cpp:3009
OksFile * new_data(const std::string &name, const std::string &logical_name="", const std::string &type="")
Create OKS data file.
Definition kernel.cpp:3718
static std::string p_repository_root
Definition kernel.hpp:2030
std::list< OksObject * > * create_list_of_data_objects(OksFile *) const
Creates list of objects which belong to given file.
Definition kernel.cpp:4327
void set_active_schema(OksFile *file_h)
Set active OKS schema file.
Definition kernel.cpp:2903
void k_close_dangling_includes()
Close files which lost their parent.
Definition kernel.cpp:1961
OksFile * find_data_file(const std::string &s) const
Finds OKS data file.
Definition kernel.cpp:2287
std::time_t p_repository_checkout_ts
Definition kernel.hpp:2036
void k_rename_schema(OksFile *, const std::string &short_name, const std::string &long_name)
Definition kernel.cpp:2746
OksClass::Map p_classes
Definition kernel.hpp:2066
bool is_user_repository_created() const
Definition kernel.hpp:942
std::map< std::string, T > map_str_t
Definition kernel.hpp:586
void registrate_all_classes(bool skip_registered=false)
The method rebuilds all classes taking into account inheritance.
Definition kernel.cpp:4499
void k_close_schema(OksFile *)
Definition kernel.cpp:2829
void set_user_repository_root(const std::string &path, const std::string &version="")
Set user OKS repository root.
Definition kernel.cpp:389
std::string p_bind_objects_status
Definition kernel.hpp:2076
const std::string & get_bind_classes_status() const noexcept
Return status of oks classes binding.
Definition kernel.hpp:2007
void add_data_file(OksFile *)
Definition kernel.cpp:3767
const OksObject::Set & objects() const
Get objects.
Definition kernel.hpp:1790
OksFile::Map p_schema_files
Definition kernel.hpp:2050
OksFile * create_file_info(const std::string &short_file_name, const std::string &file_name)
Creates OKS file descriptor.
Definition kernel.cpp:1568
OksFile * k_load_file(const std::string &name, bool bind, const OksFile *parent, OksPipeline *pipeline)
Definition kernel.cpp:1798
OksProfiler * profiler
Definition kernel.hpp:2070
bool get_verbose_mode() const
Get status of verbose mode. The method returns true, if the verbose mode is switched 'On'.
Definition kernel.hpp:665
void subscribe_change_class(void(*f)(OksClass *, OksClass::ChangeType, const void *))
Subscribe on class changing.
Definition kernel.hpp:2206
bool get_test_duplicated_objects_via_inheritance_mode() const
Get status of test inherited duplicated objects mode. The method returns true, if the mode is switche...
Definition kernel.hpp:765
std::string create_user_repository_dir()
Definition kernel.cpp:2225
OksKernel(bool silence_mode=false, bool verbose_mode=false, bool profiling_mode=false, bool allow_repository=true, const char *version=nullptr, std::string branch_name="")
Constructor to build OksKernel object.
Definition kernel.cpp:733
void k_add(OksClass *)
Definition kernel.cpp:4459
void backup_schema(OksFile *pf, const char *suffix=".bak")
Backup OKS schema file.
Definition kernel.cpp:2554
std::string get_file_path(const std::string &path, const OksFile *parent_file=0, bool strict_paths=true) const
Calculates full path to file.
Definition kernel.cpp:1660
void reload_data(std::set< OksFile * > &files, bool allow_schema_extension=true)
Reload OKS data files.
Definition kernel.cpp:3211
void k_rename_data(OksFile *, const std::string &short_name, const std::string &long_name)
Definition kernel.cpp:4110
friend std::ostream & operator<<(std::ostream &, OksKernel &)
Definition kernel.cpp:1492
OksObject::notify_obj p_delete_object_notify_fn
Definition kernel.hpp:2164
bool get_allow_duplicated_objects_mode() const
Get status of duplicated objects mode. The method returns true, if the duplicated objects mode is swi...
Definition kernel.hpp:741
std::list< std::string > p_repository_dirs
Definition kernel.hpp:2061
void subscribe_delete_class(void(*f)(OksClass *))
Subscribe on class destroying.
Definition kernel.hpp:2213
void k_close_data(OksFile *, bool)
Definition kernel.cpp:4192
void k_set_active_schema(OksFile *file_h)
Set active OKS schema file. Non thread-safe version of the set_active_schema() method;.
Definition kernel.cpp:2910
void create_lists_of_updated_schema_files(std::list< OksFile * > **updated, std::list< OksFile * > **removed) const
Get modified schema files.
Definition kernel.cpp:3001
static void set_use_strict_repository_paths(bool flag)
Set flag to use strict-repository-paths check.
Definition kernel.hpp:1722
void remove_user_repository_dir()
Definition kernel.cpp:4941
const OksClass::Map & classes() const
Get classes.
Definition kernel.hpp:1767
std::vector< OksRepositoryVersion > get_repository_versions(bool skip_irrelevant, const std::string &command_line)
Return repository versions.
Definition kernel.cpp:5329
OksFile * find_schema_file(const std::string &s) const
Finds OKS schema file.
Definition kernel.cpp:2281
std::vector< OksRepositoryVersion > get_repository_versions_by_date(bool skip_irrelevant=true, const std::string &since="", const std::string &until="")
Return repository versions between timestamps.
Definition kernel.cpp:5486
void set_allow_duplicated_objects_mode(const bool b)
Set status of duplicated objects mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:789
static std::string p_repository_mapping_dir
Definition kernel.hpp:2031
OksFile * find_file(const std::string &s, const OksFile::Map &files) const
Definition kernel.cpp:2257
std::vector< OksFile * > p_preload_added_files
Definition kernel.hpp:2082
void * p_delete_object_notify_param
Definition kernel.hpp:2165
static void set_skip_string_range(const bool b)
Set status of string range validator. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:811
std::time_t p_repository_update_ts
Definition kernel.hpp:2037
void undefine(OksObject *o)
Definition kernel.hpp:2149
static int p_threads_pool_size
Definition kernel.hpp:2074
void k_load_includes(const OksFile &, OksPipeline *)
Definition kernel.cpp:1880
void tag_repository(const std::string &tag)
Tag current state of repository.
Definition kernel.cpp:5202
void backup_data(OksFile *pf, const char *suffix=".bak")
Backup OKS data file.
Definition kernel.cpp:3808
std::shared_mutex & get_mutex()
Return OKS kernel mutex.
Definition kernel.hpp:820
void remove_schema_file(OksFile *)
Definition kernel.cpp:3785
void set_silence_mode(const bool b)
Set status of silence mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:698
void get_updated_repository_files(std::set< std::string > &updated, std::set< std::string > &added, std::set< std::string > &removed)
Get repository modified schema files.
Definition kernel.cpp:5546
void unset_repository_created()
Set repository created flag to false to avoid created repository removal in destructor;.
Definition kernel.cpp:4952
void subscribe_create_object(OksObject::notify_obj cb_f, void *parameter)
Subscribe on object creation.
Definition kernel.hpp:2175
static bool get_skip_string_range()
Get status of string range validator.
Definition kernel.hpp:799
void k_copy_repository(const std::string &source, const std::string &destination)
Definition kernel.cpp:4959
void save_schema(OksFile *file_h, bool force=false, OksFile *true_file_h=0)
Save OKS schema file.
Definition kernel.cpp:2538
void set_profiling_mode(const bool b)
Set status of profiling mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.cpp:1439
std::string p_bind_classes_status
Definition kernel.hpp:2077
std::mutex p_objects_refs_mutex
Definition kernel.hpp:2044
bool get_allow_duplicated_classes_mode() const
Get status of duplicated classes mode. The method returns true, if the duplicated classes mode is swi...
Definition kernel.hpp:730
size_t number_of_classes() const
Get number of classes.
Definition kernel.hpp:1776
std::time_t get_repository_checkout_ts() const
Return repository checkout timestamp.
Definition kernel.hpp:1584
static unsigned long p_count
Definition kernel.hpp:2068
OksFile * k_load_schema(const std::string &, const OksFile *)
Definition kernel.cpp:2306
void close_all_data()
Close all OKS data files.
Definition kernel.cpp:4243
std::string read_repository_version()
Read and return current repository version.
Definition kernel.cpp:5509
bool test_parent(OksFile *file, OksFile::IMap::iterator &i)
Definition kernel.cpp:1943
std::string p_user_repository_root
Definition kernel.hpp:2032
static bool p_skip_string_range
Definition kernel.hpp:2027
void k_remove(OksClass *)
Definition kernel.cpp:4488
void save_data(OksFile *file_h, bool ignore_bad_objects=false, OksFile *true_file_h=nullptr, bool force_defaults=false)
Save OKS data file.
Definition kernel.cpp:3794
void set_test_duplicated_objects_via_inheritance_mode(const bool b)
Set status of test inherited duplicated objects mode. To switch 'On'/'Off' use the method's parameter...
Definition kernel.hpp:756
void bind_objects()
Bind oks objects.
Definition kernel.cpp:4361
static const std::string & get_repository_root()
Get OKS repository root.
Definition kernel.cpp:304
void * p_change_object_notify_param
Definition kernel.hpp:2162
void commit_repository(const std::string &comments, const std::string &credentials="")
Commit user modifications into repository.
Definition kernel.cpp:5057
size_t number_of_objects() const
Get number of objects.
Definition kernel.hpp:1799
const std::string & get_repository_version()
Definition kernel.hpp:936
void save_as_schema(const std::string &name, OksFile *file_h)
Save OKS schema file under new name.
Definition kernel.cpp:2755
void close_data(OksFile *file_h, bool unbind_objects=true)
Close OKS data file.
Definition kernel.cpp:4183
const std::string & get_bind_objects_status() const noexcept
Return status of oks objects binding.
Definition kernel.hpp:1995
static std::string get_tmp_file(const std::string &file_name)
Generates temporal file name.
Definition kernel.cpp:665
static const char * get_cwd()
Definition kernel.cpp:689
OksFile * k_load_data(const std::string &, bool, const OksFile *, OksPipeline *)
Definition kernel.cpp:3569
OksFile * new_schema(const std::string &name)
Create OKS schema file.
Definition kernel.cpp:2485
std::vector< OksRepositoryVersion > get_repository_versions_by_hash(bool skip_irrelevant=true, const std::string &sha1="", const std::string &sha2="")
Return repository versions between hash keys.
Definition kernel.cpp:5450
std::shared_mutex p_kernel_mutex
Definition kernel.hpp:2042
bool p_test_duplicated_objects_via_inheritance
Definition kernel.hpp:2025
void set_allow_duplicated_classes_mode(const bool b)
Set status of duplicated classes mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:777
void save_all_schema()
Save all OKS schema files.
Definition kernel.cpp:2794
OksObject::notify_obj p_create_object_notify_fn
Definition kernel.hpp:2158
std::list< OksClass * > * create_list_of_schema_classes(OksFile *) const
Creates list of classes which belong to given file.
Definition kernel.cpp:2950
OksObject::Set p_objects
Definition kernel.hpp:2072
void save_all_data(bool force_defaults=false)
Save all OKS data files.
Definition kernel.cpp:4160
void add_schema_file(OksFile *)
Definition kernel.cpp:3773
static const char * GetVersion()
Get OKS version. The method returns string containing CVS tag and date of OKS build.
Definition kernel.cpp:297
void subscribe_create_class(void(*f)(OksClass *))
Subscribe on class creation.
Definition kernel.hpp:2199
OksClass * find_class(const std::string &class_name) const
Find class by name (C++ string).
Definition kernel.hpp:1814
bool get_silence_mode() const
Get status of silence mode. The method returns true, if the silence mode is switched 'On'....
Definition kernel.hpp:686
void close_schema(OksFile *file_h)
Close OKS schema file.
Definition kernel.cpp:2820
void remove_data_file(OksFile *)
Definition kernel.cpp:3779
const std::list< std::string > & get_repository_dirs() const
Get repository search directories.
Definition kernel.hpp:1545
void set_verbose_mode(const bool b)
Set status of verbose mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:677
OksProfiler * GetOksProfiler() const
Definition kernel.hpp:614
bool k_preload_includes(OksFile *file_h, std::set< OksFile * > &new_files, bool allow_schema_extension)
Definition kernel.cpp:2077
std::shared_mutex p_schema_mutex
Definition kernel.hpp:2045
void close_all_schema()
Close all OKS schema files.
Definition kernel.cpp:2883
static std::string & get_domain_name()
Get domain name of host.
Definition kernel.cpp:447
void set_active_data(OksFile *file_h)
Set active OKS data file.
Definition kernel.cpp:4278
OksFile * load_schema(const std::string &name, const OksFile *parent=0)
Load OKS schema file.
Definition kernel.cpp:2297
void unbind_all_rels(const OksObject::FSet &rm_objs, OksObject::FSet &updated) const
Unbind all references on given oks objects. The method unbinds all relationships referencing given ob...
Definition kernel.cpp:4403
std::string insert_repository_dir(const std::string &dir, bool push_back=true)
Insert repository search directory.
Definition kernel.cpp:1398
void k_checkout_repository(const std::string &param, const std::string &val, const std::string &branch)
Check out repository files into local user directory.
Definition kernel.cpp:4880
const OksFile::Map & schema_files() const
Get all schema files.
Definition kernel.hpp:1223
OksFile::Map p_data_files
Definition kernel.hpp:2051
std::map< const OksFile *, OksFile * > p_preload_file_info
Definition kernel.hpp:2081
void get_all_classes(const std::vector< std::string > &names_in, ClassSet &classes_out) const
The method searches all classes including subclasses for given names.
Definition kernel.cpp:4675
void * p_create_object_notify_param
Definition kernel.hpp:2159
void get_includes(const std::string &file_name, std::set< std::string > &includes, bool use_repository_name=false)
Opens file and reads its shallow includes.
Definition kernel.cpp:1914
void k_save_data(OksFile *, bool=false, OksFile *=nullptr, const OksObject::FSet *=nullptr, bool force_defaults=false)
Definition kernel.cpp:3849
OksObject describes instance of OksClass.
Definition object.hpp:836
std::set< OksObject *, std::less< OksObject * > > Set
Definition object.hpp:871
std::unordered_set< OksObject *, oks::hash_obj_ptr, oks::equal_obj_ptr > FSet
Definition object.hpp:866
void(*) notify_obj(OksObject *, void *)
Definition object.hpp:848
Class OKS string.
Definition object.hpp:369
Cannot commit, checkout or release files.
Definition kernel.hpp:108
RepositoryOperationFailed(const char *op, const std::string &reason) noexcept
Definition kernel.hpp:116
RepositoryOperationFailed(const char *op, const exception &reason) noexcept
Definition kernel.hpp:113
virtual ~RepositoryOperationFailed() noexcept
Definition kernel.hpp:118
static std::string fill(const char *op, const std::string &reason) noexcept
caught dunedaq::conffwk::Exception exception
std::ostream & log_timestamp(__LogSeverity__ severity=Log)
Definition kernel.cpp:5722
double get_time_interval(const timeval *t1, const timeval *t2)
std::unordered_set< const OksClass *, oks::hash_class_ptr, oks::equal_class_ptr > ClassSet
Definition object.hpp:820
Including Qt Headers.
Definition __init__.py:1
std::string get_text()
Definition kernel.cpp:3084
void add_parents(std::string &text, const OksFile *file, std::set< const OksFile * > &parents)
Definition kernel.cpp:3052
std::string m_error_string
Definition kernel.hpp:372
std::list< std::string > m_errors
Definition kernel.hpp:371
void add_error(const OksFile &file, std::exception &ex)
Definition kernel.cpp:3067
bool operator()(const OksString *s1, const OksString *s2) const
Definition kernel.hpp:456
Value(OksString *n, const OksClass *p)
Definition kernel.hpp:464
std::map< const OksString *, Value *, SortByName > Map
Definition kernel.hpp:461
The struct OksAliasTable is used to support aliases.
Definition kernel.hpp:446
void add_value(OksString *vn, const OksClass *vp)
Definition kernel.hpp:495
const Value * get(const char *key) const
Definition kernel.hpp:473
void add_key(OksString *)
Definition kernel.hpp:489
const Value * get(const OksString *key) const
Definition kernel.hpp:501
the structure to pass common parameters to various read() methods of OksData and OksObject class
Definition object.hpp:449
The struct OksNameTable is used to generate unique strings.
Definition kernel.hpp:410
static const char symbols[]
Definition kernel.hpp:420
std::vector< std::string > m_files
Definition kernel.hpp:515