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 <list>
22#include <mutex>
23#include <set>
24#include <shared_mutex>
25#include <string>
26#include <vector>
27
28#include <boost/shared_ptr.hpp>
29
30#include "oks/class.hpp"
31#include "oks/defs.hpp"
32#include "oks/exceptions.hpp"
33#include "oks/file.hpp"
34#include "oks/object.hpp"
35#include "oks/xml.hpp"
36
37namespace dunedaq {
38namespace oks {
39//
40// Forward declarations
41//
42
43class OksMethod;
44class OksProfiler;
45class OksString;
46class OksPipeline;
47
49
58
60{
61
62public:
64 FailedLoadFile(const std::string& item, const std::string& name, const exception& reason) noexcept
65 : exception(fill(item, name, reason.what()), reason.level() + 1)
66 {
67 }
68
70 FailedLoadFile(const std::string& item, const std::string& name, const std::string& reason) noexcept
71 : exception(fill(item, name, reason), 0)
72 {
73 }
74
75 virtual ~FailedLoadFile() noexcept {}
76
77private:
78 static std::string fill(const std::string& item, const std::string& name, const std::string& reason) noexcept;
79};
80
86
88{
89
90public:
92 FailedReloadFile(const std::string& names, const exception& reason) noexcept
93 : exception(fill(names, reason.what()), reason.level() + 1)
94 {
95 }
96
98 FailedReloadFile(const std::string& names, const std::string& reason) noexcept
99 : exception(fill(names, reason), 0)
100 {
101 }
102
103 virtual ~FailedReloadFile() noexcept {}
104
105private:
106 static std::string fill(const std::string& names, const std::string& reason) noexcept;
107};
108
114
116{
117
118public:
120 RepositoryOperationFailed(const char* op, const exception& reason) noexcept
121 : exception(fill(op, reason.what()), reason.level() + 1)
122 {
123 }
124
126 RepositoryOperationFailed(const char* op, const std::string& reason) noexcept
127 : exception(fill(op, reason), 0)
128 {
129 }
130
131 virtual ~RepositoryOperationFailed() noexcept {}
132
133private:
134 static std::string fill(const char* op, const std::string& reason) noexcept;
135};
136
143
145{
146
147public:
148 CanNotOpenFile(const char* prefix, const std::string& name, const std::string& reason) noexcept
149 : exception(fill(prefix, name, reason), 0)
150 {
151 }
152
153 virtual ~CanNotOpenFile() noexcept {}
154
155private:
156 static std::string fill(const char* prefix, const std::string& name, const std::string& reason) noexcept;
157};
158
164
166{
167
168public:
169 CanNotCreateFile(const char* prefix, const char* item, const std::string& name, const exception& reason) noexcept
170 : exception(fill(prefix, item, name, reason.what()), reason.level() + 1)
171 {
172 }
173 CanNotCreateFile(const char* prefix, const char* item, const std::string& name, const std::string& reason) noexcept
174 : exception(fill(prefix, item, name, reason), 0)
175 {
176 }
177
178 virtual ~CanNotCreateFile() noexcept {}
179
180private:
181 static std::string fill(const char* prefix,
182 const char* item,
183 const std::string& name,
184 const std::string& reason) noexcept;
185};
186
192
194{
195
196public:
197 CanNotCreateRepositoryDir(const char* prefix, const std::string& name) noexcept
198 : exception(fill(prefix, name), 0)
199 {
200 }
201
202 virtual ~CanNotCreateRepositoryDir() noexcept {}
203
204private:
205 static std::string fill(const char* prefix, const std::string& name) noexcept;
206};
207
213
215{
216
217public:
219 CanNotWriteToFile(const char* prefix, const char* item, const std::string& name, const exception& reason) noexcept
220 : exception(fill(prefix, item, name, reason.what()), reason.level() + 1)
221 {
222 }
223
225 CanNotWriteToFile(const char* prefix, const char* item, const std::string& name, const std::string& reason) noexcept
226 : exception(fill(prefix, item, name, reason), 0)
227 {
228 }
229
230 virtual ~CanNotWriteToFile() noexcept {}
231
232private:
233 static std::string fill(const char* prefix,
234 const char* item,
235 const std::string& name,
236 const std::string& reason) noexcept;
237};
238
244
246{
247
248public:
250 CanNotBackupFile(const std::string& name, const exception& reason) noexcept
251 : exception(fill(name, reason.what()), reason.level() + 1)
252 {
253 }
254
255 virtual ~CanNotBackupFile() noexcept {}
256
257private:
258 static std::string fill(const std::string& name, const std::string& reason) noexcept;
259};
260
266
268{
269
270public:
272 CanNotSetActiveFile(const char* item, const std::string& name, const exception& reason) noexcept
273 : exception(fill(item, name, reason.what()), reason.level() + 1)
274 {
275 }
276
278 CanNotSetActiveFile(const char* item, const std::string& name, const std::string& reason) noexcept
279 : exception(fill(item, name, reason), 0)
280 {
281 }
282
283 virtual ~CanNotSetActiveFile() noexcept {}
284
285private:
286 static std::string fill(const char* item, const std::string& name, const std::string& reason) noexcept;
287};
288
294
296{
297
298public:
300 CanNotSetFile(const OksClass* c, const OksObject* o, const OksFile& file, const exception& reason) noexcept
301 : exception(fill(c, o, file, reason.what()), reason.level() + 1)
302 {
303 }
304
306 CanNotSetFile(const OksClass* c, const OksObject* o, const OksFile& file, const std::string& reason) noexcept
307 : exception(fill(c, o, file, reason), 0)
308 {
309 }
310
311 virtual ~CanNotSetFile() noexcept {}
312
313private:
314 static std::string fill(const OksClass* c,
315 const OksObject* o,
316 const OksFile& file,
317 const std::string& reason) noexcept;
318};
319
325
327{
328
329public:
331 CannotAddClass(const OksClass& c, const exception& reason) noexcept
332 : exception(fill(c, reason.what()), reason.level() + 1)
333 {
334 }
335
337 CannotAddClass(const OksClass& c, const std::string& reason) noexcept
338 : exception(fill(c, reason), 0)
339 {
340 }
341
342 virtual ~CannotAddClass() noexcept {}
343
344private:
345 static std::string fill(const OksClass& c, const std::string& reason) noexcept;
346};
347
353
355{
356
357public:
359 AuthenticationFailure(const std::string& reason) noexcept
360 : exception(reason, 0)
361 {
362 }
363
364 virtual ~AuthenticationFailure() noexcept {}
365};
366
372
374{
375
376public:
378 CannotResolvePath(const std::string& path, int error_code) noexcept
379 : exception(fill(path, error_code), 0)
380 {
381 }
382
383 virtual ~CannotResolvePath() noexcept {}
384
385private:
386 static std::string fill(const std::string& path, int error_code) noexcept;
387};
388
390{
391public:
392 void add_error(const OksFile& file, std::exception& ex);
393 bool is_empty()
394 {
395 std::lock_guard lock(p_mutex);
396 return m_errors.empty();
397 }
398 void clear()
399 {
400 std::lock_guard lock(p_mutex);
401 m_errors.clear();
402 }
403 std::string get_text();
404
405private:
406 std::list<std::string> m_errors;
407 std::string m_error_string;
408 std::mutex p_mutex;
409
410 void add_parents(std::string& text, const OksFile* file, std::set<const OksFile*>& parents);
411};
412
413double
414get_time_interval(const timeval* t1, const timeval* t2);
415
423
424std::ostream&
426
442
444{
445
447
448 OksString* get();
449 void reset() { count = -1; }
450
451private:
452 static const char symbols[];
453 long count;
454};
455
476
478{
479
481
482 // struct Value stores pointer to class (if loaded) or pointer to its name
483
484 struct Value
485 {
486
488 {
489 bool operator()(const OksString* s1, const OksString* s2) const { return *s1 < *s2; }
490 };
491
492 typedef std::map<const OksString*, Value*, SortByName> Map;
493
495 : class_name(n)
496 , class_ptr(p)
497 {
498 ;
499 }
500
503 };
504
505 inline void add_key(OksString*); // class is not loaded
506 inline void add_value(OksString* vn, const OksClass* vp); // class was loaded
507 inline const Value* get(const OksString* key) const;
508 const Value* get(const char* key) const
509 {
510 OksString str(key);
511 return get(&str);
512 }
513
514private:
517};
518
522
523inline void
525{
526 p_aliases[key] = new Value(p_nameTable.get(), 0);
527}
528
529inline void
531{
532 p_aliases[p_nameTable.get()] = new Value(vn, vp);
533}
534
535inline const OksAliasTable::Value*
537{
538 Value::Map::const_iterator i = p_aliases.find(key);
539
540 if (i != p_aliases.end())
541 return i->second;
542 else
543 return 0;
544}
545
547{
548 std::string m_commit_hash;
549 std::string m_user;
550 std::time_t m_date;
551 std::string m_comment;
552 std::vector<std::string> m_files;
553
554 void clear()
555 {
556 m_commit_hash.clear();
557 m_user.clear();
558 m_date = 0;
559 m_comment.clear();
560 m_files.clear();
561 }
562};
563
613
615{
616 friend std::ostream& operator<<(std::ostream&, OksKernel&);
617 friend class OksFile;
618 friend class OksClass;
619 friend class OksObject;
620 friend struct OksLoadObjectsJob;
621 friend struct OksData;
622
623 template<typename T>
624 using map_str_t = std::map<std::string, T>;
625
626public:
635
636 OksKernel(bool silence_mode = false,
637 bool verbose_mode = false,
638 bool profiling_mode = false,
639 bool allow_repository = true,
640 const char* version = nullptr,
641 std::string branch_name = "");
642
650
651 OksKernel(const OksKernel& src, bool copy_repository = false);
652
653 ~OksKernel();
654
656
661
662 static const char* GetVersion();
663
667
668 static std::string& get_host_name();
669
673
674 static std::string& get_domain_name();
675
679
680 static std::string& get_user_name();
681
682 /* /\** */
683 /* * \brief Validate user credentials (used by rdb and oksconflibs). */
684 /* * */
685 /* * PAM authentication is used. */
686 /* * */
687 /* * \param user - user name */
688 /* * \param passwd - user password */
689 /* * */
690 /* * \throw Throw std::exception in case of problems. */
691 /* *\/ */
692
693 /* static void validate_credentials(const char * user, const char * passwd); */
694
699
700 bool get_verbose_mode() const { return p_verbose; }
701
710
711 void set_verbose_mode(const bool b) { p_verbose = b; }
712
718
719 bool get_silence_mode() const { return p_silence; }
720
729
730 void set_silence_mode(const bool b) { p_silence = b; }
731
738
739 bool get_profiling_mode() const { return p_profiling; }
740
749
750 void set_profiling_mode(const bool b);
751
758
760
767
769
781
783
790
792
801
803
812
814
821
823
833
834 static void set_skip_string_range(const bool b) { p_skip_string_range = b; }
835
842
843 std::shared_mutex& get_mutex() { return p_kernel_mutex; }
844
845 //
846 // Methods to work with OKS database files
847 //
848
858
859 OksFile* find_schema_file(const std::string& s) const;
860
870
871 OksFile* find_data_file(const std::string& s) const;
872
883
884 std::list<OksClass*>* create_list_of_schema_classes(OksFile*) const;
885
896
897 std::list<OksObject*>* create_list_of_data_objects(OksFile*) const;
898
910
911 OksFile* create_file_info(const std::string& short_file_name, const std::string& file_name);
912
921
922 static bool check_read_only(OksFile* f);
923
938
939 std::string get_file_path(const std::string& path, const OksFile* parent_file = 0, bool strict_paths = true) const;
940
947
948 static const std::string& get_repository_root();
949
950 const std::string& get_repository_version() { return p_repository_version; }
951
953
961
962 static const std::string& get_repository_mapping_dir();
963
970
971 const std::string& get_user_repository_root() const;
972
978
979 void set_user_repository_root(const std::string& path, const std::string& version = "");
980
991
992 static std::string get_tmp_file(const std::string& file_name);
993
1002
1003 void get_includes(const std::string& file_name, std::set<std::string>& includes, bool use_repository_name = false);
1004
1012
1014
1031
1032 OksFile* load_file(const std::string& name, bool bind = true);
1033
1049
1050 OksFile* load_schema(const std::string& name, const OksFile* parent = 0);
1051
1065
1066 OksFile* new_schema(const std::string& name);
1067
1081
1082 void save_schema(OksFile* file_h, bool force = false, OksFile* true_file_h = 0);
1083
1098
1099 void save_schema(OksFile* file_h, bool force, const OksClass::Map& classes);
1100
1114
1115 void backup_schema(OksFile* pf, const char* suffix = ".bak");
1116
1129
1130 void save_as_schema(const std::string& name, OksFile* file_h);
1131
1141
1142 void save_all_schema();
1143
1153
1154 void close_schema(OksFile* file_h);
1155
1163
1164 void close_all_schema();
1165
1178
1179 void set_active_schema(OksFile* file_h);
1180
1186
1187 void k_set_active_schema(OksFile* file_h);
1188
1198
1200
1210
1211 const OksFile::Map& schema_files() const { return p_schema_files; }
1212
1230
1231 void create_lists_of_updated_schema_files(std::list<OksFile*>** updated, std::list<OksFile*>** removed) const;
1232
1250
1251 void get_updated_repository_files(std::set<std::string>& updated,
1252 std::set<std::string>& added,
1253 std::set<std::string>& removed);
1254
1274
1275 OksFile* load_data(const std::string& name, bool bind = true);
1276
1296
1297 void reload_data(std::set<OksFile*>& files, bool allow_schema_extension = true);
1298
1315
1316 OksFile* new_data(const std::string& name, const std::string& logical_name = "", const std::string& type = "");
1317
1332
1333 void save_data(OksFile* file_h,
1334 bool ignore_bad_objects = false,
1335 OksFile* true_file_h = nullptr,
1336 bool force_defaults = false);
1337
1350
1351 void save_data(OksFile* file_h, const OksObject::FSet& objects);
1352
1367
1368 void backup_data(OksFile* pf, const char* suffix = ".bak");
1369
1382
1383 void save_as_data(const std::string& new_name, OksFile* file_h);
1384
1396
1397 void save_all_data(bool force_defaults = false);
1398
1415
1416 void close_data(OksFile* file_h, bool unbind_objects = true);
1417
1425
1426 void close_all_data();
1427
1440
1441 void set_active_data(OksFile* file_h);
1442
1450
1452
1460
1462
1471
1472 const OksFile::Map& data_files() const { return p_data_files; }
1473
1491
1492 void create_lists_of_updated_data_files(std::list<OksFile*>** updated, std::list<OksFile*>** removed) const;
1493
1509
1510 void get_modified_files(std::set<OksFile*>& mfs, std::set<OksFile*>& rfs, const std::string& version);
1511
1519
1520 const std::list<std::string>& get_repository_dirs() const { return p_repository_dirs; }
1521
1532
1533 void commit_repository(const std::string& comments, const std::string& credentials = "");
1534
1544
1545 void tag_repository(const std::string& tag);
1546
1552
1554
1561
1572
1573 void update_repository(const std::string& hash_val, RepositoryUpdateType update_type)
1574 {
1575 update_repository("hash", hash_val, update_type);
1576 }
1577
1590
1591 void update_repository(const std::string& param, const std::string& val, RepositoryUpdateType update_type);
1592
1598
1599 std::list<std::string> get_repository_versions_diff(const std::string& sha1, const std::string& sha2);
1600
1604
1605 std::list<std::string> get_repository_unmerged_files() { return get_repository_versions_diff("", ""); }
1606
1615
1616 std::vector<OksRepositoryVersion> get_repository_versions(bool skip_irrelevant, const std::string& command_line);
1617
1629
1630 std::vector<OksRepositoryVersion> get_repository_versions_by_hash(bool skip_irrelevant = true,
1631 const std::string& sha1 = "",
1632 const std::string& sha2 = "");
1633
1643
1644 std::vector<OksRepositoryVersion> get_repository_versions_by_date(bool skip_irrelevant = true,
1645 const std::string& since = "",
1646 const std::string& until = "");
1647
1653
1654 std::string read_repository_version();
1655
1659
1660 static const char* get_cwd();
1661
1665
1666 static void reset_cwd() { s_cwd = 0; }
1667
1671
1673
1686
1687 std::string insert_repository_dir(const std::string& dir, bool push_back = true);
1688
1697
1698 void remove_repository_dir(const std::string& dir);
1699
1710
1711 const OksClass::Map& classes() const { return p_classes; }
1712
1718
1719 size_t number_of_classes() const { return p_classes.size(); }
1720
1731
1732 const OksObject::Set& objects() const { return p_objects; }
1733
1739
1740 size_t number_of_objects() const { return p_objects.size(); }
1741
1753
1754 OksClass* find_class(const std::string& class_name) const { return find_class(class_name.c_str()); }
1755
1767
1768 OksClass* find_class(const char* class_name) const;
1769
1776
1777 void get_all_classes(const std::vector<std::string>& names_in, ClassSet& classes_out) const;
1778
1786
1787 void registrate_all_classes(bool skip_registered = false);
1788
1804
1805 bool is_dangling(OksClass* class_ptr) const;
1806
1822
1823 bool is_dangling(OksObject* obj_ptr) const;
1824
1834
1835 void subscribe_create_class(void (*f)(OksClass*));
1836
1846
1847 void subscribe_change_class(void (*f)(OksClass*, OksClass::ChangeType, const void*));
1848
1858
1859 void subscribe_delete_class(void (*f)(OksClass*));
1860
1871
1872 void subscribe_create_object(OksObject::notify_obj cb_f, void* parameter);
1873
1883
1885
1896
1898
1910
1911 void bind_objects();
1912
1921
1922 const std::string& get_bind_objects_status() const noexcept { return p_bind_objects_status; }
1923
1933
1934 const std::string& get_bind_classes_status() const noexcept { return p_bind_classes_status; }
1935
1939
1941
1942private:
1950
1953
1954 static std::string p_repository_root;
1955 static std::string p_repository_mapping_dir;
1962
1963 // kernel mutexes
1964
1965 mutable std::shared_mutex p_kernel_mutex;
1966 mutable std::mutex p_objects_mutex;
1968 std::shared_mutex p_schema_mutex;
1969 static std::mutex p_parallel_out_mutex;
1970
1971 // schema and data files members
1972
1975
1978
1980
1981 // repository directories
1982
1983 std::list<std::string> p_repository_dirs;
1984
1985 static char* s_cwd;
1986
1988
1989 static unsigned long p_count;
1990
1992
1994
1996
1998 mutable std::string p_bind_classes_status;
1999
2001
2002 std::map<const OksFile*, OksFile*> p_preload_file_info;
2003 std::vector<OksFile*> p_preload_added_files;
2004
2005 // to be used by the kernel only
2006
2007 std::string create_user_repository_dir();
2009
2010 void k_copy_repository(const std::string& source, const std::string& destination);
2011
2025
2026 void k_checkout_repository(const std::string& param, const std::string& val, const std::string& branch);
2027
2028 OksFile* find_file(const std::string& s, const OksFile::Map& files) const;
2029 void k_rename_repository_file(OksFile* file_h, const std::string& new_name);
2030
2031 OksFile* k_load_file(const std::string& name, bool bind, const OksFile* parent, OksPipeline* pipeline);
2032
2033 void k_load_includes(const OksFile&, OksPipeline*);
2034 bool k_preload_includes(OksFile* file_h, std::set<OksFile*>& new_files, bool allow_schema_extension);
2037
2038 OksFile* k_load_schema(const std::string&, const OksFile*);
2039 void k_load_schema(OksFile* fp, std::shared_ptr<OksXmlInputStream> xmls, const OksFile* parent_h);
2040 void k_close_schema(OksFile*);
2041 void k_save_schema(OksFile*, bool force = false, OksFile* = 0, const OksClass::Map* = 0);
2042 void k_rename_schema(OksFile*, const std::string& short_name, const std::string& long_name);
2043
2044 OksFile* k_load_data(const std::string&, bool, const OksFile*, OksPipeline*);
2045 void k_load_data(OksFile* fp,
2046 char format,
2047 std::shared_ptr<OksXmlInputStream> xmls,
2048 long file_length,
2049 bool bind,
2050 const OksFile* parent_h,
2051 OksPipeline*);
2052 void k_close_data(OksFile*, bool);
2053 void k_save_data(OksFile*,
2054 bool = false,
2055 OksFile* = nullptr,
2056 const OksObject::FSet* = nullptr,
2057 bool force_defaults = false);
2058 void k_rename_data(OksFile*, const std::string& short_name, const std::string& long_name);
2059
2060 void k_bind_objects();
2061 void k_check_bind_classes_status() const noexcept;
2062
2069
2070 void unbind_all_rels(const OksObject::FSet& rm_objs, OksObject::FSet& updated) const;
2071
2072 void k_add(OksClass*);
2073 void k_remove(OksClass*);
2074
2076 {
2077 std::lock_guard lock(p_objects_mutex);
2078 p_objects.insert(o);
2079 }
2081 {
2082 if (!p_objects.empty()) {
2083 std::lock_guard lock(p_objects_mutex);
2084 p_objects.erase(o);
2085 }
2086 }
2087
2088 void add_data_file(OksFile*);
2089 void add_schema_file(OksFile*);
2092
2093 bool test_parent(OksFile* file, OksFile::IMap::iterator& i);
2094
2097
2100
2103};
2104
2108
2109inline void
2115
2116inline void
2122
2123inline void
2129
2130inline void
2135
2136inline void
2141
2142inline void
2147
2148} // namespace oks
2149} // namespace dunedaq
2150
2151#endif
virtual ~AuthenticationFailure() noexcept
Definition kernel.hpp:364
AuthenticationFailure(const std::string &reason) noexcept
Definition kernel.hpp:359
virtual ~CanNotBackupFile() noexcept
Definition kernel.hpp:255
CanNotBackupFile(const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:250
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:173
CanNotCreateFile(const char *prefix, const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:169
virtual ~CanNotCreateFile() noexcept
Definition kernel.hpp:178
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:202
CanNotCreateRepositoryDir(const char *prefix, const std::string &name) noexcept
Definition kernel.hpp:197
static std::string fill(const char *prefix, const std::string &name) noexcept
virtual ~CanNotOpenFile() noexcept
Definition kernel.hpp:153
CanNotOpenFile(const char *prefix, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:148
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:278
virtual ~CanNotSetActiveFile() noexcept
Definition kernel.hpp:283
CanNotSetActiveFile(const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:272
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:306
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:300
virtual ~CanNotSetFile() noexcept
Definition kernel.hpp:311
CanNotWriteToFile(const char *prefix, const char *item, const std::string &name, const exception &reason) noexcept
Definition kernel.hpp:219
CanNotWriteToFile(const char *prefix, const char *item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:225
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:230
CannotAddClass(const OksClass &c, const exception &reason) noexcept
Definition kernel.hpp:331
static std::string fill(const OksClass &c, const std::string &reason) noexcept
CannotAddClass(const OksClass &c, const std::string &reason) noexcept
Definition kernel.hpp:337
virtual ~CannotAddClass() noexcept
Definition kernel.hpp:342
static std::string fill(const std::string &path, int error_code) noexcept
CannotResolvePath(const std::string &path, int error_code) noexcept
Definition kernel.hpp:378
virtual ~CannotResolvePath() noexcept
Definition kernel.hpp:383
virtual ~FailedLoadFile() noexcept
Definition kernel.hpp:75
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:64
FailedLoadFile(const std::string &item, const std::string &name, const std::string &reason) noexcept
Definition kernel.hpp:70
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:98
virtual ~FailedReloadFile() noexcept
Definition kernel.hpp:103
The OKS class.
Definition class.hpp:223
static NotifyFN create_notify_fn
Definition class.hpp:911
static NotifyFN delete_notify_fn
Definition class.hpp:913
static ChangeNotifyFN change_notify_fn
Definition class.hpp:912
ChangeType
Information about class property changes.
Definition class.hpp:840
std::map< const char *, OksClass *, SortStr > Map
Definition class.hpp:252
Provides interface to the OKS XML schema and data files.
Definition file.hpp:355
std::map< const std::string *, OksFile *, SortByName > Map
Definition file.hpp:382
OksObject::notify_obj p_change_object_notify_fn
Definition kernel.hpp:2098
void define(OksObject *o)
Definition kernel.hpp:2075
OksFile * get_active_schema() const
Get active OKS schema file.
Definition kernel.hpp:1199
static const std::string & get_repository_mapping_dir()
Get OKS repository name.
Definition kernel.cpp:318
std::mutex p_objects_mutex
Definition kernel.hpp:1966
OksFile * get_active_data() const
Get active OKS data file.
Definition kernel.hpp:1461
void subscribe_change_object(OksObject::notify_obj, void *)
Subscribe on object changing.
Definition kernel.hpp:2117
static void reset_cwd()
Reset current working dir in case of chdir() call.
Definition kernel.hpp:1666
friend class OksClass
Definition kernel.hpp:618
const std::string & get_user_repository_root() const
Get user OKS repository root.
Definition kernel.cpp:335
void k_save_schema(OksFile *, bool force=false, OksFile *=0, const OksClass::Map *=0)
Definition kernel.cpp:2403
void subscribe_delete_object(OksObject::notify_obj, void *)
Subscribe on object deleting.
Definition kernel.hpp:2124
OksFile * load_file(const std::string &name, bool bind=true)
Load OKS database file.
Definition kernel.cpp:1625
static std::string & get_host_name()
Get hostname of given process.
Definition kernel.cpp:392
static std::string & get_user_name()
Get username of given process.
Definition kernel.cpp:427
bool get_profiling_mode() const
Get status of profiling mode. The method returns true, if the profiling mode is switched 'On'....
Definition kernel.hpp:739
bool is_dangling(OksClass *class_ptr) const
Check pointer on oks class.
Definition kernel.cpp:4415
std::list< std::string > get_repository_versions_diff(const std::string &sha1, const std::string &sha2)
Definition kernel.cpp:5026
OksFile * load_data(const std::string &name, bool bind=true)
Load OKS data file.
Definition kernel.cpp:3347
static char * s_cwd
Definition kernel.hpp:1985
void k_set_active_data(OksFile *)
Set active OKS data file.
Definition kernel.cpp:4069
static bool check_read_only(OksFile *f)
Check if the OKS file is read-only.
Definition kernel.cpp:1394
void k_rename_repository_file(OksFile *file_h, const std::string &new_name)
Definition kernel.cpp:4629
static bool p_use_strict_repository_paths
Definition kernel.hpp:1952
void update_repository(const std::string &hash_val, RepositoryUpdateType update_type)
Update user repository files from origin by hash.
Definition kernel.hpp:1573
static std::mutex p_parallel_out_mutex
Definition kernel.hpp:1969
void remove_repository_dir(const std::string &dir)
Remove repository search directory.
Definition kernel.cpp:1292
void get_modified_files(std::set< OksFile * > &mfs, std::set< OksFile * > &rfs, const std::string &version)
Get modified data files.
Definition kernel.cpp:2817
const OksFile::Map & data_files() const
Get all data files.
Definition kernel.hpp:1472
std::string p_repository_version
Definition kernel.hpp:1959
void k_check_bind_classes_status() const noexcept
Definition kernel.cpp:5459
void save_as_data(const std::string &new_name, OksFile *file_h)
Save OKS data file under new name.
Definition kernel.cpp:3906
std::list< std::string > get_repository_unmerged_files()
Definition kernel.hpp:1605
void create_lists_of_updated_data_files(std::list< OksFile * > **updated, std::list< OksFile * > **removed) const
Get modified data files.
Definition kernel.cpp:2809
OksFile * new_data(const std::string &name, const std::string &logical_name="", const std::string &type="")
Create OKS data file.
Definition kernel.cpp:3500
static std::string p_repository_root
Definition kernel.hpp:1954
std::list< OksObject * > * create_list_of_data_objects(OksFile *) const
Creates list of objects which belong to given file.
Definition kernel.cpp:4106
void set_active_schema(OksFile *file_h)
Set active OKS schema file.
Definition kernel.cpp:2699
void k_close_dangling_includes()
Close files which lost their parent.
Definition kernel.cpp:1800
OksFile * find_data_file(const std::string &s) const
Finds OKS data file.
Definition kernel.cpp:2119
std::time_t p_repository_checkout_ts
Definition kernel.hpp:1960
void k_rename_schema(OksFile *, const std::string &short_name, const std::string &long_name)
Definition kernel.cpp:2550
OksClass::Map p_classes
Definition kernel.hpp:1987
friend struct OksLoadObjectsJob
Definition kernel.hpp:620
bool is_user_repository_created() const
Definition kernel.hpp:952
std::map< std::string, T > map_str_t
Definition kernel.hpp:624
void registrate_all_classes(bool skip_registered=false)
The method rebuilds all classes taking into account inheritance.
Definition kernel.cpp:4271
void k_close_schema(OksFile *)
Definition kernel.cpp:2625
void set_user_repository_root(const std::string &path, const std::string &version="")
Set user OKS repository root.
Definition kernel.cpp:353
std::string p_bind_objects_status
Definition kernel.hpp:1997
const std::string & get_bind_classes_status() const noexcept
Return status of oks classes binding.
Definition kernel.hpp:1934
void add_data_file(OksFile *)
Definition kernel.cpp:3546
const OksObject::Set & objects() const
Get objects.
Definition kernel.hpp:1732
OksFile::Map p_schema_files
Definition kernel.hpp:1973
OksFile * create_file_info(const std::string &short_file_name, const std::string &file_name)
Creates OKS file descriptor.
Definition kernel.cpp:1428
OksFile * k_load_file(const std::string &name, bool bind, const OksFile *parent, OksPipeline *pipeline)
Definition kernel.cpp:1634
OksProfiler * profiler
Definition kernel.hpp:1991
bool get_verbose_mode() const
Get status of verbose mode. The method returns true, if the verbose mode is switched 'On'.
Definition kernel.hpp:700
void subscribe_change_class(void(*f)(OksClass *, OksClass::ChangeType, const void *))
Subscribe on class changing.
Definition kernel.hpp:2137
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:791
std::string create_user_repository_dir()
Definition kernel.cpp:2061
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:675
void k_add(OksClass *)
Definition kernel.cpp:4231
void backup_schema(OksFile *pf, const char *suffix=".bak")
Backup OKS schema file.
Definition kernel.cpp:2371
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:1516
void reload_data(std::set< OksFile * > &files, bool allow_schema_extension=true)
Reload OKS data files.
Definition kernel.cpp:3000
friend struct OksData
Definition kernel.hpp:621
void k_rename_data(OksFile *, const std::string &short_name, const std::string &long_name)
Definition kernel.cpp:3898
friend std::ostream & operator<<(std::ostream &, OksKernel &)
Definition kernel.cpp:1359
OksObject::notify_obj p_delete_object_notify_fn
Definition kernel.hpp:2101
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:768
std::list< std::string > p_repository_dirs
Definition kernel.hpp:1983
void subscribe_delete_class(void(*f)(OksClass *))
Subscribe on class destroying.
Definition kernel.hpp:2143
void k_close_data(OksFile *, bool)
Definition kernel.cpp:3975
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:2706
void create_lists_of_updated_schema_files(std::list< OksFile * > **updated, std::list< OksFile * > **removed) const
Get modified schema files.
Definition kernel.cpp:2801
static void set_use_strict_repository_paths(bool flag)
Set flag to use strict-repository-paths check.
Definition kernel.hpp:1672
void remove_user_repository_dir()
Definition kernel.cpp:4706
const OksClass::Map & classes() const
Get classes.
Definition kernel.hpp:1711
std::vector< OksRepositoryVersion > get_repository_versions(bool skip_irrelevant, const std::string &command_line)
Return repository versions.
Definition kernel.cpp:5103
OksFile * find_schema_file(const std::string &s) const
Finds OKS schema file.
Definition kernel.cpp:2113
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:5238
std::vector< OksFile * > p_preload_added_files
Definition kernel.hpp:2003
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:813
static std::string p_repository_mapping_dir
Definition kernel.hpp:1955
OksFile * find_file(const std::string &s, const OksFile::Map &files) const
Definition kernel.cpp:2091
void * p_delete_object_notify_param
Definition kernel.hpp:2102
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:834
std::time_t p_repository_update_ts
Definition kernel.hpp:1961
void undefine(OksObject *o)
Definition kernel.hpp:2080
static int p_threads_pool_size
Definition kernel.hpp:1995
void k_load_includes(const OksFile &, OksPipeline *)
Definition kernel.cpp:1711
void tag_repository(const std::string &tag)
Tag current state of repository.
Definition kernel.cpp:4975
void backup_data(OksFile *pf, const char *suffix=".bak")
Backup OKS data file.
Definition kernel.cpp:3586
std::shared_mutex & get_mutex()
Return OKS kernel mutex.
Definition kernel.hpp:843
void remove_schema_file(OksFile *)
Definition kernel.cpp:3564
void set_silence_mode(const bool b)
Set status of silence mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:730
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:5296
void unset_repository_created()
Set repository created flag to false to avoid created repository removal in destructor;.
Definition kernel.cpp:4716
void subscribe_create_object(OksObject::notify_obj cb_f, void *parameter)
Subscribe on object creation.
Definition kernel.hpp:2110
static bool get_skip_string_range()
Get status of string range validator.
Definition kernel.hpp:822
void k_copy_repository(const std::string &source, const std::string &destination)
Definition kernel.cpp:4723
void save_schema(OksFile *file_h, bool force=false, OksFile *true_file_h=0)
Save OKS schema file.
Definition kernel.cpp:2357
friend class OksFile
Definition kernel.hpp:617
void set_profiling_mode(const bool b)
Set status of profiling mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.cpp:1306
std::string p_bind_classes_status
Definition kernel.hpp:1998
std::mutex p_objects_refs_mutex
Definition kernel.hpp:1967
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:759
size_t number_of_classes() const
Get number of classes.
Definition kernel.hpp:1719
std::time_t get_repository_checkout_ts() const
Return repository checkout timestamp.
Definition kernel.hpp:1553
static unsigned long p_count
Definition kernel.hpp:1989
OksFile * k_load_schema(const std::string &, const OksFile *)
Definition kernel.cpp:2138
void close_all_data()
Close all OKS data files.
Definition kernel.cpp:4027
std::string read_repository_version()
Read and return current repository version.
Definition kernel.cpp:5258
bool test_parent(OksFile *file, OksFile::IMap::iterator &i)
Definition kernel.cpp:1782
std::string p_user_repository_root
Definition kernel.hpp:1956
static bool p_skip_string_range
Definition kernel.hpp:1951
void k_remove(OksClass *)
Definition kernel.cpp:4260
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:3572
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:782
void bind_objects()
Bind oks objects.
Definition kernel.cpp:4138
static const std::string & get_repository_root()
Get OKS repository root.
Definition kernel.cpp:280
void * p_change_object_notify_param
Definition kernel.hpp:2099
void commit_repository(const std::string &comments, const std::string &credentials="")
Commit user modifications into repository.
Definition kernel.cpp:4828
size_t number_of_objects() const
Get number of objects.
Definition kernel.hpp:1740
const std::string & get_repository_version()
Definition kernel.hpp:950
void save_as_schema(const std::string &name, OksFile *file_h)
Save OKS schema file under new name.
Definition kernel.cpp:2558
void close_data(OksFile *file_h, bool unbind_objects=true)
Close OKS data file.
Definition kernel.cpp:3966
const std::string & get_bind_objects_status() const noexcept
Return status of oks objects binding.
Definition kernel.hpp:1922
static std::string get_tmp_file(const std::string &file_name)
Generates temporal file name.
Definition kernel.cpp:611
static const char * get_cwd()
Definition kernel.cpp:636
OksFile * k_load_data(const std::string &, bool, const OksFile *, OksPipeline *)
Definition kernel.cpp:3356
OksFile * new_schema(const std::string &name)
Create OKS schema file.
Definition kernel.cpp:2307
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:5208
std::shared_mutex p_kernel_mutex
Definition kernel.hpp:1965
bool p_test_duplicated_objects_via_inheritance
Definition kernel.hpp:1949
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:802
void save_all_schema()
Save all OKS schema files.
Definition kernel.cpp:2594
friend class OksObject
Definition kernel.hpp:619
OksObject::notify_obj p_create_object_notify_fn
Definition kernel.hpp:2095
std::map< const OksFile *, OksFile * > p_preload_file_info
Definition kernel.hpp:2002
std::list< OksClass * > * create_list_of_schema_classes(OksFile *) const
Creates list of classes which belong to given file.
Definition kernel.cpp:2743
OksObject::Set p_objects
Definition kernel.hpp:1993
void save_all_data(bool force_defaults=false)
Save all OKS data files.
Definition kernel.cpp:3944
void add_schema_file(OksFile *)
Definition kernel.cpp:3552
static const char * GetVersion()
Get OKS version. The method returns string containing CVS tag and date of OKS build.
Definition kernel.cpp:274
void subscribe_create_class(void(*f)(OksClass *))
Subscribe on class creation.
Definition kernel.hpp:2131
OksClass * find_class(const std::string &class_name) const
Find class by name (C++ string).
Definition kernel.hpp:1754
bool get_silence_mode() const
Get status of silence mode. The method returns true, if the silence mode is switched 'On'....
Definition kernel.hpp:719
void close_schema(OksFile *file_h)
Close OKS schema file.
Definition kernel.cpp:2616
void remove_data_file(OksFile *)
Definition kernel.cpp:3558
const std::list< std::string > & get_repository_dirs() const
Get repository search directories.
Definition kernel.hpp:1520
void set_verbose_mode(const bool b)
Set status of verbose mode. To switch 'On'/'Off' use the method's parameter:
Definition kernel.hpp:711
OksProfiler * GetOksProfiler() const
Definition kernel.hpp:655
bool k_preload_includes(OksFile *file_h, std::set< OksFile * > &new_files, bool allow_schema_extension)
Definition kernel.cpp:1914
std::shared_mutex p_schema_mutex
Definition kernel.hpp:1968
void close_all_schema()
Close all OKS schema files.
Definition kernel.cpp:2679
static std::string & get_domain_name()
Get domain name of host.
Definition kernel.cpp:408
void set_active_data(OksFile *file_h)
Set active OKS data file.
Definition kernel.cpp:4062
OksFile * load_schema(const std::string &name, const OksFile *parent=0)
Load OKS schema file.
Definition kernel.cpp:2129
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:4178
std::string insert_repository_dir(const std::string &dir, bool push_back=true)
Insert repository search directory.
Definition kernel.cpp:1264
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:4643
const OksFile::Map & schema_files() const
Get all schema files.
Definition kernel.hpp:1211
OksFile::Map p_data_files
Definition kernel.hpp:1974
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:4451
void * p_create_object_notify_param
Definition kernel.hpp:2096
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:1752
void k_save_data(OksFile *, bool=false, OksFile *=nullptr, const OksObject::FSet *=nullptr, bool force_defaults=false)
Definition kernel.cpp:3619
OKS method class.
Definition method.hpp:147
OksObject describes instance of OksClass.
Definition object.hpp:1144
std::unordered_set< OksObject *, oks::hash_obj_ptr, oks::equal_obj_ptr > FSet
Definition object.hpp:1171
void(*) notify_obj(OksObject *, void *)
Definition object.hpp:1155
std::set< OksObject *, std::less< OksObject * > > Set
Definition object.hpp:1175
Class OKS string.
Definition object.hpp:417
RepositoryOperationFailed(const char *op, const std::string &reason) noexcept
Definition kernel.hpp:126
RepositoryOperationFailed(const char *op, const exception &reason) noexcept
Definition kernel.hpp:120
virtual ~RepositoryOperationFailed() noexcept
Definition kernel.hpp:131
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:41
std::ostream & log_timestamp(__LogSeverity__ severity=Log)
Definition kernel.cpp:5470
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:1129
The DUNE-DAQ namespace.
std::string get_text()
Definition kernel.cpp:2880
void add_parents(std::string &text, const OksFile *file, std::set< const OksFile * > &parents)
Definition kernel.cpp:2847
std::string m_error_string
Definition kernel.hpp:407
std::list< std::string > m_errors
Definition kernel.hpp:406
void add_error(const OksFile &file, std::exception &ex)
Definition kernel.cpp:2862
bool operator()(const OksString *s1, const OksString *s2) const
Definition kernel.hpp:489
Value(OksString *n, const OksClass *p)
Definition kernel.hpp:494
std::map< const OksString *, Value *, SortByName > Map
Definition kernel.hpp:492
The struct OksAliasTable is used to support aliases.
Definition kernel.hpp:478
void add_value(OksString *vn, const OksClass *vp)
Definition kernel.hpp:530
const Value * get(const char *key) const
Definition kernel.hpp:508
void add_key(OksString *)
Definition kernel.hpp:524
const Value * get(const OksString *key) const
Definition kernel.hpp:536
The struct OksNameTable is used to generate unique strings.
Definition kernel.hpp:444
static const char symbols[]
Definition kernel.hpp:452
std::vector< std::string > m_files
Definition kernel.hpp:552