DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
kernel.hpp
Go to the documentation of this file.
1// DUNE DAQ modification notice:
2// This file has been modified from the original ATLAS oks source for the DUNE DAQ project.
3// Fork baseline commit: oks-08-03-04 (2022-04-14).
4// Renamed since fork: yes (from oks/kernel.h to include/oks/kernel.hpp).
5
14
15#ifndef OKS_KERNEL_H
16#define OKS_KERNEL_H
17
18#include <sys/time.h>
19
20#include <ctime>
21#include <string>
22#include <list>
23#include <mutex>
24#include <shared_mutex>
25#include <set>
26#include <vector>
27
28#include <boost/shared_ptr.hpp>
29
30#include "oks/defs.hpp"
31#include "oks/xml.hpp"
32#include "oks/file.hpp"
33#include "oks/class.hpp"
34#include "oks/object.hpp"
35#include "oks/exceptions.hpp"
36
37
38namespace dunedaq {
39namespace oks {
40 //
41 // Forward declarations
42 //
43
44class OksMethod;
45class OksProfiler;
46class OksString;
47class OksPipeline;
48
49
51
60
61 class FailedLoadFile : public exception {
62
63 public:
64
66 FailedLoadFile(const std::string& item, const std::string& name, const exception& reason) noexcept : exception (fill(item, name, reason.what()), reason.level() + 1) { }
67
69 FailedLoadFile(const std::string& item, const std::string& name, const std::string& reason) noexcept : exception (fill(item, name, reason), 0) { }
70
71 virtual ~FailedLoadFile() noexcept { }
72
73
74 private:
75
76 static std::string fill(const std::string& item, const std::string& name, const std::string& reason) noexcept;
77
78 };
79
80
86
87 class FailedReloadFile : public exception {
88
89 public:
90
92 FailedReloadFile(const std::string& names, const exception& reason) noexcept : exception (fill(names, reason.what()), reason.level() + 1) { }
93
95 FailedReloadFile(const std::string& names, const std::string& reason) noexcept : exception (fill(names, reason), 0) { }
96
97 virtual ~FailedReloadFile() noexcept { }
98
99
100 private:
101
102 static std::string fill(const std::string& names, const std::string& reason) noexcept;
103
104 };
105
106
112
114
115 public:
116
118 RepositoryOperationFailed(const char * op, const exception& reason) noexcept : exception (fill(op, reason.what()), reason.level() + 1) { }
119
121 RepositoryOperationFailed(const char * op, const std::string& reason) noexcept : exception (fill(op, reason), 0) { }
122
123 virtual ~RepositoryOperationFailed() noexcept { }
124
125
126 private:
127
128 static std::string fill(const char * op, const std::string& reason) noexcept;
129
130 };
131
132
139
140 class CanNotOpenFile : public exception {
141
142 public:
143
144 CanNotOpenFile(const char * prefix, const std::string& name, const std::string& reason) noexcept : exception (fill(prefix, name, reason), 0) { }
145
146 virtual ~CanNotOpenFile() noexcept { }
147
148
149 private:
150
151 static std::string fill(const char * prefix, const std::string& name, const std::string& reason) noexcept;
152
153 };
154
155
161
163
164 public:
165
166 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) { }
167 CanNotCreateFile(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept : exception (fill(prefix, item, name, reason), 0) { }
168
169 virtual ~CanNotCreateFile() noexcept { }
170
171
172 private:
173
174 static std::string fill(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept;
175
176 };
177
178
184
186
187 public:
188
189 CanNotCreateRepositoryDir(const char * prefix, const std::string& name) noexcept : exception (fill(prefix, name), 0) { }
190
191 virtual ~CanNotCreateRepositoryDir() noexcept { }
192
193
194 private:
195
196 static std::string fill(const char * prefix, const std::string& name) noexcept;
197
198 };
199
205
207
208 public:
209
211 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) {}
212
214 CanNotWriteToFile(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept : exception (fill(prefix, item, name, reason), 0) {}
215
216 virtual ~CanNotWriteToFile() noexcept { }
217
218
219 private:
220
221 static std::string fill(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept;
222
223 };
224
225
231
233
234 public:
235
237 CanNotBackupFile(const std::string& name, const exception& reason) noexcept : exception (fill(name, reason.what()), reason.level() + 1) {}
238
239 virtual ~CanNotBackupFile() noexcept { }
240
241
242 private:
243
244 static std::string fill(const std::string& name, const std::string& reason) noexcept;
245
246 };
247
248
254
256
257 public:
258
260 CanNotSetActiveFile(const char * item, const std::string& name, const exception& reason) noexcept : exception (fill(item, name, reason.what()), reason.level() + 1) {}
261
263 CanNotSetActiveFile(const char * item, const std::string& name, const std::string& reason) noexcept : exception (fill(item, name, reason), 0) {}
264
265 virtual ~CanNotSetActiveFile() noexcept { }
266
267
268 private:
269
270 static std::string fill(const char * item, const std::string& name, const std::string& reason) noexcept;
271
272 };
273
274
280
281 class CanNotSetFile : public exception {
282
283 public:
284
286 CanNotSetFile(const OksClass * c, const OksObject * o, const OksFile& file, const exception& reason) noexcept : exception (fill(c, o, file, reason.what()), reason.level() + 1) {}
287
289 CanNotSetFile(const OksClass * c, const OksObject * o, const OksFile& file, const std::string& reason) noexcept : exception (fill(c, o, file, reason), 0) {}
290
291 virtual ~CanNotSetFile() noexcept { }
292
293
294 private:
295
296 static std::string fill(const OksClass * c, const OksObject * o, const OksFile& file, const std::string& reason) noexcept;
297
298 };
299
300
306
307 class CannotAddClass : public exception {
308
309 public:
310
312 CannotAddClass(const OksClass &c, const exception& reason) noexcept : exception (fill(c, reason.what()), reason.level() + 1) {}
313
315 CannotAddClass(const OksClass &c, const std::string& reason) noexcept : exception (fill(c, reason), 0) {}
316
317 virtual ~CannotAddClass() noexcept { }
318
319 private:
320
321 static std::string fill(const OksClass &c, const std::string& reason) noexcept;
322
323 };
324
325
331
333
334 public:
335
337 AuthenticationFailure(const std::string& reason) noexcept : exception (reason, 0) {}
338
339 virtual ~AuthenticationFailure() noexcept { }
340
341 };
342
343
349
351
352 public:
353
355 CannotResolvePath(const std::string& path, int error_code) noexcept : exception (fill(path, error_code), 0) {}
356
357 virtual ~CannotResolvePath() noexcept { }
358
359 private:
360
361 static std::string fill(const std::string& path, int error_code) noexcept;
362
363 };
364
366 {
367 public:
368
369 void add_error(const OksFile& file, std::exception& ex);
370 bool is_empty() { std::lock_guard lock(p_mutex); return m_errors.empty(); }
371 void clear() { std::lock_guard lock(p_mutex); m_errors.clear(); }
372 std::string get_text();
373
374 private:
375
376 std::list<std::string> m_errors;
377 std::string m_error_string;
378 std::mutex p_mutex;
379
380 void add_parents(std::string& text, const OksFile * file, std::set<const OksFile *>& parents);
381
382 };
383
384 double get_time_interval(const timeval * t1, const timeval * t2);
385
393
394 std::ostream&
396
397
398
414
416
418
419 OksString * get();
420 void reset() {count = -1;}
421
422
423 private:
424
425 static const char symbols[];
426 long count;
427};
428
429
450
452
454
455
456 // struct Value stores pointer to class (if loaded) or pointer to its name
457
458 struct Value {
459
460 struct SortByName {
461 bool operator() (const OksString * s1, const OksString * s2) const {
462 return *s1 < *s2;
463 }
464 };
465
466 typedef std::map<const OksString *, Value *, SortByName> Map;
467
468
469 Value (OksString * n, const OksClass * p) : class_name (n), class_ptr(p) {;}
470
473 };
474
475 inline void add_key(OksString *); // class is not loaded
476 inline void add_value(OksString * vn, const OksClass * vp); // class was loaded
477 inline const Value * get(const OksString * key) const;
478 const Value * get(const char * key) const { OksString str(key); return get(&str); }
479
480
481 private:
482
485
486};
487
488
492
493inline void
495{
496 p_aliases[key] = new Value(p_nameTable.get(), 0);
497}
498
499inline void
501{
502 p_aliases[p_nameTable.get()] = new Value(vn, vp);
503}
504
505inline const OksAliasTable::Value *
507{
508 Value::Map::const_iterator i = p_aliases.find(key);
509
510 if(i != p_aliases.end()) return i->second;
511 else return 0;
512}
513
515{
516 std::string m_commit_hash;
517 std::string m_user;
518 std::time_t m_date;
519 std::string m_comment;
520 std::vector<std::string> m_files;
521
522 void clear()
523 {
524 m_commit_hash.clear();
525 m_user.clear();
526 m_date = 0;
527 m_comment.clear();
528 m_files.clear();
529 }
530};
531
580
582{
583 friend std::ostream& operator<<(std::ostream&, OksKernel&);
584 friend class OksFile;
585 friend class OksClass;
586 friend class OksObject;
587 friend struct OksLoadObjectsJob;
588 friend struct OksData;
589
590 template<typename T>
591 using map_str_t = std::map<std::string, T>;
592
593 public:
594
603
604 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 = "");
605
606
614
615 OksKernel(const OksKernel& src, bool copy_repository = false);
616
617 ~OksKernel();
618
620
621
626
627 static const char * GetVersion();
628
629
633
634 static std::string& get_host_name();
635
636
640
641 static std::string& get_domain_name();
642
643
647
648 static std::string& get_user_name();
649
650
651 /* /\** */
652 /* * \brief Validate user credentials (used by rdb and oksconflibs). */
653 /* * */
654 /* * PAM authentication is used. */
655 /* * */
656 /* * \param user - user name */
657 /* * \param passwd - user password */
658 /* * */
659 /* * \throw Throw std::exception in case of problems. */
660 /* *\/ */
661
662 /* static void validate_credentials(const char * user, const char * passwd); */
663
664
669
670 bool get_verbose_mode() const {return p_verbose;}
671
672
681
682 void set_verbose_mode(const bool b) {p_verbose = b;}
683
684
690
691 bool get_silence_mode() const {return p_silence;}
692
693
702
703 void set_silence_mode(const bool b) {p_silence = b;}
704
705
712
713 bool get_profiling_mode() const {return p_profiling;}
714
715
724
725 void set_profiling_mode(const bool b);
726
727
734
736
737
738
745
747
748
760
762
763
769
771
772
781
783
784
793
795
796
803
805
806
815
816 static void set_skip_string_range(const bool b) {p_skip_string_range = b;}
817
824
825 std::shared_mutex& get_mutex() {return p_kernel_mutex;}
826
827
828 //
829 // Methods to work with OKS database files
830 //
831
841
842 OksFile * find_schema_file(const std::string & s) const;
843
844
854
855 OksFile * find_data_file(const std::string & s) const;
856
857
868
869 std::list<OksClass *> * create_list_of_schema_classes(OksFile *) const;
870
871
882
883 std::list<OksObject *> * create_list_of_data_objects(OksFile *) const;
884
885
897
898 OksFile * create_file_info(const std::string& short_file_name, const std::string& file_name);
899
900
909
910 static bool check_read_only(OksFile * f);
911
912
927
928 std::string get_file_path(const std::string& path, const OksFile * parent_file = 0, bool strict_paths = true) const;
929
930
937
938 static const std::string& get_repository_root();
939
940 const std::string&
945
946 bool
951
959
960 static const std::string& get_repository_mapping_dir();
961
962
969
970 const std::string& get_user_repository_root() const;
971
972
978
979 void set_user_repository_root(const std::string& path, const std::string& version = "");
980
981
992
993 static std::string get_tmp_file(const std::string& file_name);
994
995
1004
1005 void get_includes(const std::string& file_name, std::set< std::string >& includes, bool use_repository_name = false);
1006
1007
1015
1017
1018
1035
1036 OksFile * load_file(const std::string& name, bool bind = true);
1037
1038
1054
1055 OksFile * load_schema(const std::string& name, const OksFile * parent = 0);
1056
1057
1071
1072 OksFile * new_schema(const std::string& name);
1073
1074
1088
1089 void save_schema(OksFile * file_h, bool force = false, OksFile * true_file_h = 0);
1090
1091
1106
1107 void save_schema(OksFile * file_h, bool force, const OksClass::Map& classes);
1108
1109
1123
1124 void backup_schema(OksFile * pf, const char * suffix = ".bak");
1125
1126
1139
1140 void save_as_schema(const std::string& name, OksFile * file_h);
1141
1142
1152
1153 void save_all_schema();
1154
1155
1165
1166 void close_schema(OksFile * file_h);
1167
1168
1176
1177 void close_all_schema();
1178
1179
1192
1193 void set_active_schema(OksFile * file_h);
1194
1195
1201
1202 void k_set_active_schema(OksFile * file_h);
1203
1204
1214
1216
1217
1227
1228 const OksFile::Map & schema_files() const {return p_schema_files;}
1229
1230
1248
1249 void create_lists_of_updated_schema_files(std::list<OksFile *> ** updated, std::list<OksFile *> ** removed) const;
1250
1251
1269
1270 void get_updated_repository_files(std::set<std::string>& updated, std::set<std::string>& added, std::set<std::string>& removed);
1271
1272
1291
1292 OksFile * load_data(const std::string& name, bool bind = true);
1293
1294
1314
1315 void reload_data(std::set<OksFile *>& files, bool allow_schema_extension = true);
1316
1317
1334
1335 OksFile * new_data(const std::string& name, const std::string& logical_name = "", const std::string& type = "");
1336
1337
1352
1353 void save_data(OksFile * file_h, bool ignore_bad_objects = false, OksFile * true_file_h = nullptr, bool force_defaults = false);
1354
1355
1368
1369 void save_data(OksFile * file_h, const OksObject::FSet& objects);
1370
1371
1386
1387 void backup_data(OksFile * pf, const char * suffix = ".bak");
1388
1389
1402
1403 void save_as_data(const std::string& new_name, OksFile * file_h);
1404
1405
1417
1418 void save_all_data(bool force_defaults=false);
1419
1420
1436
1437 void close_data(OksFile * file_h, bool unbind_objects = true);
1438
1439
1447
1448 void close_all_data();
1449
1450
1463
1464 void set_active_data(OksFile * file_h);
1465
1466
1474
1475 void k_set_active_data(OksFile *);
1476
1477
1485
1487
1488
1497
1498 const OksFile::Map & data_files() const {return p_data_files;}
1499
1500
1518
1519 void create_lists_of_updated_data_files(std::list<OksFile *> ** updated, std::list<OksFile *> ** removed) const;
1520
1521
1537
1538 void
1539 get_modified_files(std::set<OksFile *>& mfs, std::set<OksFile *>& rfs, const std::string& version);
1540
1541
1549
1550 const std::list<std::string>& get_repository_dirs() const {return p_repository_dirs;}
1551
1552
1563
1564 void
1565 commit_repository(const std::string& comments, const std::string& credentials = "");
1566
1567
1577
1578 void
1579 tag_repository(const std::string& tag);
1580
1581
1587
1588 std::time_t
1590 {
1592 }
1593
1594
1599
1600
1611
1612 void
1613 update_repository(const std::string& hash_val, RepositoryUpdateType update_type)
1614 {
1615 update_repository("hash", hash_val, update_type);
1616 }
1617
1618
1631
1632 void
1633 update_repository(const std::string& param, const std::string& val, RepositoryUpdateType update_type);
1634
1635
1641
1642 std::list<std::string>
1643 get_repository_versions_diff(const std::string& sha1, const std::string& sha2);
1644
1645
1649
1650 std::list<std::string>
1655
1656
1665
1666 std::vector<OksRepositoryVersion>
1667 get_repository_versions(bool skip_irrelevant, const std::string& command_line);
1668
1669
1679
1680 std::vector<OksRepositoryVersion>
1681 get_repository_versions_by_hash(bool skip_irrelevant = true, const std::string& sha1 = "", const std::string& sha2 = "");
1682
1683
1693
1694 std::vector<OksRepositoryVersion>
1695 get_repository_versions_by_date(bool skip_irrelevant = true, const std::string& since = "", const std::string& until = "");
1696
1697
1703
1704 std::string
1706
1707
1708
1712
1713 static const char * get_cwd();
1714
1718
1719 static void reset_cwd() { s_cwd = 0;}
1720
1721
1725
1726 static void
1731
1732
1745
1746 std::string insert_repository_dir(const std::string& dir, bool push_back = true);
1747
1748
1757
1758 void remove_repository_dir(const std::string& dir);
1759
1760
1771
1772 const OksClass::Map & classes() const {return p_classes;}
1773
1774
1780
1781 size_t number_of_classes() const {return p_classes.size();}
1782
1783
1794
1795 const OksObject::Set & objects() const {return p_objects;}
1796
1797
1803
1804 size_t number_of_objects() const {return p_objects.size();}
1805
1806
1818
1819 OksClass * find_class(const std::string& class_name) const { return find_class(class_name.c_str()); }
1820
1821
1833
1834 OksClass * find_class(const char * class_name) const;
1835
1836
1843
1844 void get_all_classes(const std::vector<std::string>& names_in, ClassSet& classes_out) const;
1845
1846
1854
1855 void registrate_all_classes(bool skip_registered = false);
1856
1857
1873
1874 bool is_dangling(OksClass * class_ptr) const;
1875
1876
1892
1893 bool is_dangling(OksObject * obj_ptr) const;
1894
1895
1905
1906 void subscribe_create_class(void (*f)(OksClass *));
1907
1908
1918
1919 void subscribe_change_class(void (*f)(OksClass *, OksClass::ChangeType, const void *));
1920
1921
1931
1932 void subscribe_delete_class(void (*f)(OksClass *));
1933
1934
1945
1946 void subscribe_create_object(OksObject::notify_obj cb_f, void * parameter);
1947
1948
1958
1960
1961
1972
1974
1975
1987
1988 void bind_objects();
1989
1990
1999
2000 const std::string& get_bind_objects_status() const noexcept { return p_bind_objects_status; }
2001
2002
2011
2012 const std::string& get_bind_classes_status() const noexcept { return p_bind_classes_status; }
2013
2014
2018
2019 void
2021
2022
2023 private:
2031
2034
2035 static std::string p_repository_root;
2036 static std::string p_repository_mapping_dir;
2043
2044
2045 // kernel mutexes
2046
2047 mutable std::shared_mutex p_kernel_mutex;
2048 mutable std::mutex p_objects_mutex;
2050 std::shared_mutex p_schema_mutex;
2051 static std::mutex p_parallel_out_mutex;
2052
2053 // schema and data files members
2054
2057
2060
2062
2063
2064 // repository directories
2065
2066 std::list<std::string> p_repository_dirs;
2067
2068 static char * s_cwd;
2069
2070
2072
2073 static unsigned long p_count;
2074
2076
2078
2080
2082 mutable std::string p_bind_classes_status;
2083
2085
2086 std::map<const OksFile *, OksFile *> p_preload_file_info;
2087 std::vector<OksFile *> p_preload_added_files;
2088
2089
2090 // to be used by the kernel only
2091
2092 std::string create_user_repository_dir();
2094
2095 void k_copy_repository(const std::string& source, const std::string& destination);
2096
2097
2111
2112 void k_checkout_repository(const std::string& param, const std::string& val, const std::string& branch);
2113
2114
2115 OksFile * find_file(const std::string &s, const OksFile::Map& files) const;
2116 void k_rename_repository_file(OksFile * file_h, const std::string& new_name);
2117
2118 OksFile * k_load_file(const std::string& name, bool bind, const OksFile * parent, OksPipeline * pipeline);
2119
2120 void k_load_includes(const OksFile&, OksPipeline *);
2121 bool k_preload_includes(OksFile * file_h, std::set<OksFile *>& new_files, bool allow_schema_extension);
2124
2125 OksFile * k_load_schema(const std::string&, const OksFile *);
2126 void k_load_schema(OksFile * fp, std::shared_ptr<OksXmlInputStream> xmls, const OksFile * parent_h);
2127 void k_close_schema(OksFile *);
2128 void k_save_schema(OksFile *, bool force = false, OksFile * = 0, const OksClass::Map * = 0);
2129 void k_rename_schema(OksFile *, const std::string& short_name, const std::string& long_name);
2130
2131 OksFile * k_load_data(const std::string&, bool, const OksFile *, OksPipeline *);
2132 void k_load_data(OksFile * fp, char format, std::shared_ptr<OksXmlInputStream> xmls, long file_length, bool bind, const OksFile * parent_h, OksPipeline *);
2133 void k_close_data(OksFile *, bool);
2134 void k_save_data(OksFile *, bool = false, OksFile * = nullptr, const OksObject::FSet * = nullptr, bool force_defaults = false);
2135 void k_rename_data(OksFile *, const std::string& short_name, const std::string& long_name);
2136
2137 void k_bind_objects();
2138 void k_check_bind_classes_status() const noexcept;
2139
2140
2147
2148 void unbind_all_rels(const OksObject::FSet& rm_objs, OksObject::FSet& updated) const;
2149
2150 void k_add(OksClass*);
2151 void k_remove(OksClass*);
2152
2153 void define(OksObject *o) { std::lock_guard lock(p_objects_mutex); p_objects.insert(o); }
2154 void undefine(OksObject *o) { if(!p_objects.empty()) { std::lock_guard lock(p_objects_mutex); p_objects.erase(o); } }
2155
2156 void add_data_file(OksFile *);
2157 void add_schema_file(OksFile *);
2158 void remove_data_file(OksFile *);
2160
2161 bool test_parent(OksFile * file, OksFile::IMap::iterator& i);
2162
2165
2168
2171
2172};
2173
2174
2178
2179inline void
2185
2186
2187inline void
2193
2194
2195inline void
2201
2202
2203inline void
2208
2209
2210inline void
2215
2216
2217inline void
2222
2223} // namespace oks
2224} // namespace dunedaq
2225
2226#endif
virtual ~AuthenticationFailure() noexcept
Definition kernel.hpp:339
AuthenticationFailure(const std::string &reason) noexcept
Definition kernel.hpp:337
virtual ~CanNotBackupFile() noexcept
Definition kernel.hpp:239
CanNotBackupFile(const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:237
static std::string fill(const std::string &name, const std::string &reason) noexcept
CanNotCreateFile(const char *prefix, const char *item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:167
CanNotCreateFile(const char *prefix, const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:166
virtual ~CanNotCreateFile() noexcept
Definition kernel.hpp:169
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:191
CanNotCreateRepositoryDir(const char *prefix, const std::string &name) noexcept
Definition kernel.hpp:189
static std::string fill(const char *prefix, const std::string &name) noexcept
virtual ~CanNotOpenFile() noexcept
Definition kernel.hpp:146
CanNotOpenFile(const char *prefix, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:144
static std::string fill(const char *prefix, const std::string &name, const std::string &reason) noexcept
CanNotSetActiveFile(const char *item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:263
virtual ~CanNotSetActiveFile() noexcept
Definition kernel.hpp:265
CanNotSetActiveFile(const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:260
static std::string fill(const char *item, const std::string &name, const std::string &reason) noexcept
CanNotSetFile(const OksClass *c, const OksObject *o, const OksFile &file, const std::string &reason) noexcept
Definition kernel.hpp:289
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:286
virtual ~CanNotSetFile() noexcept
Definition kernel.hpp:291
CanNotWriteToFile(const char *prefix, const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:211
CanNotWriteToFile(const char *prefix, const char *item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:214
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:216
CannotAddClass(const OksClass &c, const exception &reason) noexcept
Definition kernel.hpp:312
static std::string fill(const OksClass &c, const std::string &reason) noexcept
CannotAddClass(const OksClass &c, const std::string &reason) noexcept
Definition kernel.hpp:315
virtual ~CannotAddClass() noexcept
Definition kernel.hpp:317
static std::string fill(const std::string &path, int error_code) noexcept
CannotResolvePath(const std::string &path, int error_code) noexcept
Definition kernel.hpp:355
virtual ~CannotResolvePath() noexcept
Definition kernel.hpp:357
virtual ~FailedLoadFile() noexcept
Definition kernel.hpp:71
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:66
FailedLoadFile(const std::string &item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:69
FailedReloadFile(const std::string &names, const exception &reason) noexcept
Definition kernel.hpp:92
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:95
virtual ~FailedReloadFile() noexcept
Definition kernel.hpp:97
The OKS class.
Definition class.hpp:205
static NotifyFN create_notify_fn
Definition class.hpp:971
static NotifyFN delete_notify_fn
Definition class.hpp:973
static ChangeNotifyFN change_notify_fn
Definition class.hpp:972
std::map< const char *, OksClass *, SortStr > Map
Definition class.hpp:238
ChangeType
Information about class property changes.
Definition class.hpp:894
Provides interface to the OKS XML schema and data files.
Definition file.hpp:345
std::map< const std::string *, OksFile *, SortByName > Map
Definition file.hpp:372
OksObject::notify_obj p_change_object_notify_fn
Definition kernel.hpp:2166
void define(OksObject *o)
Definition kernel.hpp:2153
OksFile * get_active_schema() const
Get active OKS schema file.
Definition kernel.hpp:1215
static const std::string & get_repository_mapping_dir()
Get OKS repository name.
Definition kernel.cpp:355
std::mutex p_objects_mutex
Definition kernel.hpp:2048
OksFile * get_active_data() const
Get active OKS data file.
Definition kernel.hpp:1486
void subscribe_change_object(OksObject::notify_obj, void *)
Subscribe on object changing.
Definition kernel.hpp:2188
static void reset_cwd()
Reset current working dir in case of chdir() call.
Definition kernel.hpp:1719
friend class OksClass
Definition kernel.hpp:585
const std::string & get_user_repository_root() const
Get user OKS repository root.
Definition kernel.cpp:375
void k_save_schema(OksFile *, bool force=false, OksFile *=0, const OksClass::Map *=0)
Definition kernel.cpp:2598
void subscribe_delete_object(OksObject::notify_obj, void *)
Subscribe on object deleting.
Definition kernel.hpp:2196
OksFile * load_file(const std::string &name, bool bind=true)
Load OKS database file.
Definition kernel.cpp:1793
static std::string & get_host_name()
Get hostname of given process.
Definition kernel.cpp:434
static std::string & get_user_name()
Get username of given process.
Definition kernel.cpp:473
bool get_profiling_mode() const
Get status of profiling mode. The method returns true, if the profiling mode is switched 'On'....
Definition kernel.hpp:713
bool is_dangling(OksClass *class_ptr) const
Check pointer on oks class.
Definition kernel.cpp:4643
std::list< std::string > get_repository_versions_diff(const std::string &sha1, const std::string &sha2)
Definition kernel.cpp:5254
OksFile * load_data(const std::string &name, bool bind=true)
Load OKS data file.
Definition kernel.cpp:3564
static char * s_cwd
Definition kernel.hpp:2068
void k_set_active_data(OksFile *)
Set active OKS data file.
Definition kernel.cpp:4290
static bool check_read_only(OksFile *f)
Check if the OKS file is read-only.
Definition kernel.cpp:1537
void k_rename_repository_file(OksFile *file_h, const std::string &new_name)
Definition kernel.cpp:4867
static bool p_use_strict_repository_paths
Definition kernel.hpp:2033
void update_repository(const std::string &hash_val, RepositoryUpdateType update_type)
Update user repository files from origin by hash.
Definition kernel.hpp:1613
static std::mutex p_parallel_out_mutex
Definition kernel.hpp:2051
void remove_repository_dir(const std::string &dir)
Remove repository search directory.
Definition kernel.cpp:1429
void get_modified_files(std::set< OksFile * > &mfs, std::set< OksFile * > &rfs, const std::string &version)
Get modified data files.
Definition kernel.cpp:3022
const OksFile::Map & data_files() const
Get all data files.
Definition kernel.hpp:1498
std::string p_repository_version
Definition kernel.hpp:2040
void k_check_bind_classes_status() const noexcept
Definition kernel.cpp:5715
void save_as_data(const std::string &new_name, OksFile *file_h)
Save OKS data file under new name.
Definition kernel.cpp:4123
std::list< std::string > get_repository_unmerged_files()
Definition kernel.hpp:1651
void create_lists_of_updated_data_files(std::list< OksFile * > **updated, std::list< OksFile * > **removed) const
Get modified data files.
Definition kernel.cpp:3014
OksFile * new_data(const std::string &name, const std::string &logical_name="", const std::string &type="")
Create OKS data file.
Definition kernel.cpp:3723
static std::string p_repository_root
Definition kernel.hpp:2035
std::list< OksObject * > * create_list_of_data_objects(OksFile *) const
Creates list of objects which belong to given file.
Definition kernel.cpp:4332
void set_active_schema(OksFile *file_h)
Set active OKS schema file.
Definition kernel.cpp:2908
void k_close_dangling_includes()
Close files which lost their parent.
Definition kernel.cpp:1966
OksFile * find_data_file(const std::string &s) const
Finds OKS data file.
Definition kernel.cpp:2292
std::time_t p_repository_checkout_ts
Definition kernel.hpp:2041
void k_rename_schema(OksFile *, const std::string &short_name, const std::string &long_name)
Definition kernel.cpp:2751
OksClass::Map p_classes
Definition kernel.hpp:2071
friend struct OksLoadObjectsJob
Definition kernel.hpp:587
bool is_user_repository_created() const
Definition kernel.hpp:947
std::map< std::string, T > map_str_t
Definition kernel.hpp:591
void registrate_all_classes(bool skip_registered=false)
The method rebuilds all classes taking into account inheritance.
Definition kernel.cpp:4504
void k_close_schema(OksFile *)
Definition kernel.cpp:2834
void set_user_repository_root(const std::string &path, const std::string &version="")
Set user OKS repository root.
Definition kernel.cpp:394
std::string p_bind_objects_status
Definition kernel.hpp:2081
const std::string & get_bind_classes_status() const noexcept
Return status of oks classes binding.
Definition kernel.hpp:2012
void add_data_file(OksFile *)
Definition kernel.cpp:3772
const OksObject::Set & objects() const
Get objects.
Definition kernel.hpp:1795
OksFile::Map p_schema_files
Definition kernel.hpp:2055
OksFile * create_file_info(const std::string &short_file_name, const std::string &file_name)
Creates OKS file descriptor.
Definition kernel.cpp:1573
OksFile * k_load_file(const std::string &name, bool bind, const OksFile *parent, OksPipeline *pipeline)
Definition kernel.cpp:1803
OksProfiler * profiler
Definition kernel.hpp:2075
bool get_verbose_mode() const
Get status of verbose mode. The method returns true, if the verbose mode is switched 'On'.
Definition kernel.hpp:670
void subscribe_change_class(void(*f)(OksClass *, OksClass::ChangeType, const void *))
Subscribe on class changing.
Definition kernel.hpp:2211
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:770
std::string create_user_repository_dir()
Definition kernel.cpp:2230
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:738
void k_add(OksClass *)
Definition kernel.cpp:4464
void backup_schema(OksFile *pf, const char *suffix=".bak")
Backup OKS schema file.
Definition kernel.cpp:2559
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:1665
void reload_data(std::set< OksFile * > &files, bool allow_schema_extension=true)
Reload OKS data files.
Definition kernel.cpp:3216
friend struct OksData
Definition kernel.hpp:588
void k_rename_data(OksFile *, const std::string &short_name, const std::string &long_name)
Definition kernel.cpp:4115
friend std::ostream & operator<<(std::ostream &, OksKernel &)
Definition kernel.cpp:1497
OksObject::notify_obj p_delete_object_notify_fn
Definition kernel.hpp:2169
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:746
std::list< std::string > p_repository_dirs
Definition kernel.hpp:2066
void subscribe_delete_class(void(*f)(OksClass *))
Subscribe on class destroying.
Definition kernel.hpp:2218
void k_close_data(OksFile *, bool)
Definition kernel.cpp:4197
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:2915
void create_lists_of_updated_schema_files(std::list< OksFile * > **updated, std::list< OksFile * > **removed) const
Get modified schema files.
Definition kernel.cpp:3006
static void set_use_strict_repository_paths(bool flag)
Set flag to use strict-repository-paths check.
Definition kernel.hpp:1727
void remove_user_repository_dir()
Definition kernel.cpp:4946
const OksClass::Map & classes() const
Get classes.
Definition kernel.hpp:1772
std::vector< OksRepositoryVersion > get_repository_versions(bool skip_irrelevant, const std::string &command_line)
Return repository versions.
Definition kernel.cpp:5334
OksFile * find_schema_file(const std::string &s) const
Finds OKS schema file.
Definition kernel.cpp:2286
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:5491
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:794
static std::string p_repository_mapping_dir
Definition kernel.hpp:2036
OksFile * find_file(const std::string &s, const OksFile::Map &files) const
Definition kernel.cpp:2262
std::vector< OksFile * > p_preload_added_files
Definition kernel.hpp:2087
void * p_delete_object_notify_param
Definition kernel.hpp:2170
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:816
std::time_t p_repository_update_ts
Definition kernel.hpp:2042
void undefine(OksObject *o)
Definition kernel.hpp:2154
static int p_threads_pool_size
Definition kernel.hpp:2079
void k_load_includes(const OksFile &, OksPipeline *)
Definition kernel.cpp:1885
void tag_repository(const std::string &tag)
Tag current state of repository.
Definition kernel.cpp:5207
void backup_data(OksFile *pf, const char *suffix=".bak")
Backup OKS data file.
Definition kernel.cpp:3813
std::shared_mutex & get_mutex()
Return OKS kernel mutex.
Definition kernel.hpp:825
void remove_schema_file(OksFile *)
Definition kernel.cpp:3790
void set_silence_mode(const bool b)
Set status of silence mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:703
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:5551
void unset_repository_created()
Set repository created flag to false to avoid created repository removal in destructor;.
Definition kernel.cpp:4957
void subscribe_create_object(OksObject::notify_obj cb_f, void *parameter)
Subscribe on object creation.
Definition kernel.hpp:2180
static bool get_skip_string_range()
Get status of string range validator.
Definition kernel.hpp:804
void k_copy_repository(const std::string &source, const std::string &destination)
Definition kernel.cpp:4964
void save_schema(OksFile *file_h, bool force=false, OksFile *true_file_h=0)
Save OKS schema file.
Definition kernel.cpp:2543
friend class OksFile
Definition kernel.hpp:584
void set_profiling_mode(const bool b)
Set status of profiling mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.cpp:1444
std::string p_bind_classes_status
Definition kernel.hpp:2082
std::mutex p_objects_refs_mutex
Definition kernel.hpp:2049
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:735
size_t number_of_classes() const
Get number of classes.
Definition kernel.hpp:1781
std::time_t get_repository_checkout_ts() const
Return repository checkout timestamp.
Definition kernel.hpp:1589
static unsigned long p_count
Definition kernel.hpp:2073
OksFile * k_load_schema(const std::string &, const OksFile *)
Definition kernel.cpp:2311
void close_all_data()
Close all OKS data files.
Definition kernel.cpp:4248
std::string read_repository_version()
Read and return current repository version.
Definition kernel.cpp:5514
bool test_parent(OksFile *file, OksFile::IMap::iterator &i)
Definition kernel.cpp:1948
std::string p_user_repository_root
Definition kernel.hpp:2037
static bool p_skip_string_range
Definition kernel.hpp:2032
void k_remove(OksClass *)
Definition kernel.cpp:4493
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:3799
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:761
void bind_objects()
Bind oks objects.
Definition kernel.cpp:4366
static const std::string & get_repository_root()
Get OKS repository root.
Definition kernel.cpp:309
void * p_change_object_notify_param
Definition kernel.hpp:2167
void commit_repository(const std::string &comments, const std::string &credentials="")
Commit user modifications into repository.
Definition kernel.cpp:5062
size_t number_of_objects() const
Get number of objects.
Definition kernel.hpp:1804
const std::string & get_repository_version()
Definition kernel.hpp:941
void save_as_schema(const std::string &name, OksFile *file_h)
Save OKS schema file under new name.
Definition kernel.cpp:2760
void close_data(OksFile *file_h, bool unbind_objects=true)
Close OKS data file.
Definition kernel.cpp:4188
const std::string & get_bind_objects_status() const noexcept
Return status of oks objects binding.
Definition kernel.hpp:2000
static std::string get_tmp_file(const std::string &file_name)
Generates temporal file name.
Definition kernel.cpp:670
static const char * get_cwd()
Definition kernel.cpp:694
OksFile * k_load_data(const std::string &, bool, const OksFile *, OksPipeline *)
Definition kernel.cpp:3574
OksFile * new_schema(const std::string &name)
Create OKS schema file.
Definition kernel.cpp:2490
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:5455
std::shared_mutex p_kernel_mutex
Definition kernel.hpp:2047
bool p_test_duplicated_objects_via_inheritance
Definition kernel.hpp:2030
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:782
void save_all_schema()
Save all OKS schema files.
Definition kernel.cpp:2799
friend class OksObject
Definition kernel.hpp:586
OksObject::notify_obj p_create_object_notify_fn
Definition kernel.hpp:2163
std::list< OksClass * > * create_list_of_schema_classes(OksFile *) const
Creates list of classes which belong to given file.
Definition kernel.cpp:2955
OksObject::Set p_objects
Definition kernel.hpp:2077
void save_all_data(bool force_defaults=false)
Save all OKS data files.
Definition kernel.cpp:4165
void add_schema_file(OksFile *)
Definition kernel.cpp:3778
static const char * GetVersion()
Get OKS version. The method returns string containing CVS tag and date of OKS build.
Definition kernel.cpp:302
void subscribe_create_class(void(*f)(OksClass *))
Subscribe on class creation.
Definition kernel.hpp:2204
OksClass * find_class(const std::string &class_name) const
Find class by name (C++ string).
Definition kernel.hpp:1819
bool get_silence_mode() const
Get status of silence mode. The method returns true, if the silence mode is switched 'On'....
Definition kernel.hpp:691
void close_schema(OksFile *file_h)
Close OKS schema file.
Definition kernel.cpp:2825
void remove_data_file(OksFile *)
Definition kernel.cpp:3784
const std::list< std::string > & get_repository_dirs() const
Get repository search directories.
Definition kernel.hpp:1550
void set_verbose_mode(const bool b)
Set status of verbose mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:682
OksProfiler * GetOksProfiler() const
Definition kernel.hpp:619
bool k_preload_includes(OksFile *file_h, std::set< OksFile * > &new_files, bool allow_schema_extension)
Definition kernel.cpp:2082
std::shared_mutex p_schema_mutex
Definition kernel.hpp:2050
void close_all_schema()
Close all OKS schema files.
Definition kernel.cpp:2888
static std::string & get_domain_name()
Get domain name of host.
Definition kernel.cpp:452
void set_active_data(OksFile *file_h)
Set active OKS data file.
Definition kernel.cpp:4283
OksFile * load_schema(const std::string &name, const OksFile *parent=0)
Load OKS schema file.
Definition kernel.cpp:2302
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:4408
std::string insert_repository_dir(const std::string &dir, bool push_back=true)
Insert repository search directory.
Definition kernel.cpp:1403
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:4885
const OksFile::Map & schema_files() const
Get all schema files.
Definition kernel.hpp:1228
OksFile::Map p_data_files
Definition kernel.hpp:2056
std::map< const OksFile *, OksFile * > p_preload_file_info
Definition kernel.hpp:2086
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:4680
void * p_create_object_notify_param
Definition kernel.hpp:2164
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:1919
void k_save_data(OksFile *, bool=false, OksFile *=nullptr, const OksObject::FSet *=nullptr, bool force_defaults=false)
Definition kernel.cpp:3854
OKS method class.
Definition method.hpp:158
OksObject describes instance of OksClass.
Definition object.hpp:841
std::unordered_set< OksObject *, oks::hash_obj_ptr, oks::equal_obj_ptr > FSet
Definition object.hpp:871
void(* notify_obj)(OksObject *, void *)
Definition object.hpp:853
std::set< OksObject *, std::less< OksObject * > > Set
Definition object.hpp:876
Class OKS string.
Definition object.hpp:374
RepositoryOperationFailed(const char *op, const std::string &reason) noexcept
Definition kernel.hpp:121
RepositoryOperationFailed(const char *op, const exception &reason) noexcept
Definition kernel.hpp:118
virtual ~RepositoryOperationFailed() noexcept
Definition kernel.hpp:123
static std::string fill(const char *op, const std::string &reason) noexcept
exception(const std::string &what_arg, int level_arg) noexcept
Definition xml.cpp:42
caught dunedaq::conffwk::Exception exception
std::ostream & log_timestamp(__LogSeverity__ severity=Log)
Definition kernel.cpp:5727
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:825
Including Qt Headers.
Definition module.cpp:16
std::string get_text()
Definition kernel.cpp:3089
void add_parents(std::string &text, const OksFile *file, std::set< const OksFile * > &parents)
Definition kernel.cpp:3057
std::string m_error_string
Definition kernel.hpp:377
std::list< std::string > m_errors
Definition kernel.hpp:376
void add_error(const OksFile &file, std::exception &ex)
Definition kernel.cpp:3072
bool operator()(const OksString *s1, const OksString *s2) const
Definition kernel.hpp:461
Value(OksString *n, const OksClass *p)
Definition kernel.hpp:469
std::map< const OksString *, Value *, SortByName > Map
Definition kernel.hpp:466
The struct OksAliasTable is used to support aliases.
Definition kernel.hpp:451
void add_value(OksString *vn, const OksClass *vp)
Definition kernel.hpp:500
const Value * get(const char *key) const
Definition kernel.hpp:478
void add_key(OksString *)
Definition kernel.hpp:494
const Value * get(const OksString *key) const
Definition kernel.hpp:506
The struct OksNameTable is used to generate unique strings.
Definition kernel.hpp:415
static const char symbols[]
Definition kernel.hpp:425
std::vector< std::string > m_files
Definition kernel.hpp:520