DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
OksConfiguration.hpp
Go to the documentation of this file.
1//
2// DUNE DAQ modification notice:
3// This file has been modified from the original ATLAS oksconfig source for the DUNE DAQ project.
4// Fork baseline commit: oksconfig-03-02-00 (2021-04-20).
5// Renamed since fork: yes (from oksconfig/OksConfiguration.h to include/oksconflibs/OksConfiguration.hpp).
6//
7
8// this is -*- c++ -*-
9#ifndef OKSCONFLIBS_OKSCONFLIBSURATION_H_
10#define OKSCONFLIBS_OKSCONFLIBSURATION_H_
11
12//
13// $Id$
14//
15
16#include <string>
17#include <list>
18#include <set>
19#include <thread>
20
22
23namespace dunedaq {
24namespace oks {
25 // forward declarations for OKS classes
26 class OksKernel;
27 class OksObject;
28 class OksClass;
29 class OksFile;
30}
31
32namespace oksconflibs {
33
34 // forward declaration
35class OksConfigObject;
36struct OksConfigurationCheckDB;
37
38
40
41 friend class OksConfigObject;
43 friend class ResubscribeGuard;
44
45 public:
46
48 virtual ~OksConfiguration() { close_db(); }
49
50 typedef std::map< std::string , std::set<std::string> > SMap;
51
52 public:
53
54 virtual bool test_object(const std::string& class_name, const std::string& name, unsigned long rlevel, const std::vector<std::string> * rclasses);
55 virtual void get(const std::string& class_name, const std::string& name, conffwk::ConfigObject& object, unsigned long rlevel, const std::vector<std::string> * rclasses);
56 virtual void get(const std::string& class_name, std::vector<conffwk::ConfigObject>& objects, const std::string& query, unsigned long rlevel, const std::vector<std::string> * rclasses);
57 virtual void get(const conffwk::ConfigObject& obj_from, const std::string& query, std::vector<conffwk::ConfigObject>& objects, unsigned long rlevel, const std::vector<std::string> * rclasses);
58 virtual conffwk::class_t * get(const std::string& class_name, bool direct_only);
60
61 virtual void create(const std::string& at, const std::string& class_name, const std::string& id, conffwk::ConfigObject& object);
62 virtual void create(const conffwk::ConfigObject& at, const std::string& class_name, const std::string& id, conffwk::ConfigObject& object);
63 virtual void destroy(conffwk::ConfigObject& object);
64
65 virtual void open_db(const std::string& db_name);
66 virtual void close_db() { close_database(true); }
67 virtual bool loaded() const noexcept { return (m_kernel != 0); }
68 virtual void create(const std::string& db_name, const std::list<std::string>& includes);
69 virtual bool is_writable(const std::string& db_name);
70 virtual void add_include(const std::string& db_name, const std::string& include);
71 virtual void remove_include(const std::string& db_name, const std::string& include);
72 virtual void get_includes(const std::string& db_name, std::list<std::string>& includes) const;
73 virtual void get_updated_dbs(std::list<std::string>& dbs) const;
74 virtual void set_commit_credentials(const std::string& user, const std::string& password);
75 virtual void commit(const std::string& why);
76 virtual void abort();
77 virtual void prefetch_all_data() { ; } // nothing to do with OKS data already in-memory
78 virtual std::vector<dunedaq::conffwk::Version> get_changes();
79 virtual std::vector<dunedaq::conffwk::Version> get_versions(const std::string& since, const std::string& until, dunedaq::conffwk::Version::QueryType type, bool skip_irrelevant);
80
81 virtual void subscribe(const std::set<std::string>& class_names, const SMap& objs, ConfigurationImpl::notify cb, ConfigurationImpl::pre_notify pre_cb);
82 virtual void unsubscribe();
83
84 virtual void print_profiling_info() noexcept;
85
86
87 protected:
88
89 void create(oks::OksFile * at, const std::string& class_name, const std::string& id, conffwk::ConfigObject& object);
90
91 private:
92
93 virtual void check_db();
94
95 void close_database(bool unsubscribe);
96
97
98 public:
99
100 const oks::OksKernel& get_oks_kernel() const { return *m_kernel; } // required by Java oksconflibs
101
102
103 protected:
104
108 std::set<std::string> m_class_names;
112
113 // read oks::OksKernel parameters from environment (silence mode)
114
115 void init_env();
116
117
119
120
121
122 // keep information about changed objects
123
124 std::list<oks::OksObject *> m_created;
125 std::set<oks::OksObject *> m_modified;
126 std::map<std::string, std::set<std::string> > m_removed;
127
128 void subscribe();
129
130 static void create_notify(oks::OksObject *, void *) noexcept;
131 static void change_notify(oks::OksObject *, void *) noexcept;
132 static void delete_notify(oks::OksObject *, void *) noexcept;
133
135 std::thread * m_check_db_thread;
136
137 std::string m_user;
138 std::string m_password;
139
140
141 // keep information about created files
142
143 std::set<oks::OksFile *> m_created_files;
144
145
146 //
147
148 unsigned int m_repo_error_count;
149
150};
151
152} // namespace oksconflibs
153} // namespace dunedaq
154
155#endif // OKSCONFLIBS_OKSCONFLIBSURATION_H_
Provides pure virtual interface used by the Configuration class.
void(* pre_notify)(Configuration *)
Callback to pre-notify database changes.
void(* notify)(std::vector< ConfigurationChange * > &changes, Configuration *)
Callback to notify database changes.
The OKS class.
Definition class.hpp:205
Provides interface to the OKS XML schema and data files.
Definition file.hpp:345
Provides interface to the OKS kernel.
Definition kernel.hpp:582
OksObject describes instance of OksClass.
Definition object.hpp:841
virtual bool test_object(const std::string &class_name, const std::string &name, unsigned long rlevel, const std::vector< std::string > *rclasses)
Test object existence (used by Python binding).
conffwk::ConfigurationImpl::pre_notify m_pre_fn
static void change_notify(oks::OksObject *, void *) noexcept
const oks::OksKernel & get_oks_kernel() const
virtual void open_db(const std::string &db_name)
Open database implementation in accordance with given name.
static void delete_notify(oks::OksObject *, void *) noexcept
virtual void print_profiling_info() noexcept
Print implementation specific profiling information.
virtual void get_includes(const std::string &db_name, std::list< std::string > &includes) const
Get included files.
virtual void prefetch_all_data()
Prefetch all data into client cache.
virtual bool loaded() const noexcept
Check if a database is loaded.
virtual void destroy(conffwk::ConfigObject &object)
Destroy object of class by id.
static void create_notify(oks::OksObject *, void *) noexcept
std::list< oks::OksObject * > m_created
virtual void remove_include(const std::string &db_name, const std::string &include)
Remove include file.
std::set< oks::OksFile * > m_created_files
OksConfigObject * new_object(oks::OksObject *obj) noexcept
virtual void get_updated_dbs(std::list< std::string > &dbs) const
Get uncommitted files.
virtual void close_db()
Close database implementation.
std::map< std::string, std::set< std::string > > m_removed
virtual void set_commit_credentials(const std::string &user, const std::string &password)
Set commit credentials.
virtual std::vector< dunedaq::conffwk::Version > get_versions(const std::string &since, const std::string &until, dunedaq::conffwk::Version::QueryType type, bool skip_irrelevant)
Get archived versions.
virtual void unsubscribe()
Remove subscription on database changes.
virtual void add_include(const std::string &db_name, const std::string &include)
Add include file.
virtual std::vector< dunedaq::conffwk::Version > get_changes()
Get newly available versions.
virtual void create(const std::string &at, const std::string &class_name, const std::string &id, conffwk::ConfigObject &object)
Create object of class by id at given file.
virtual void abort()
Abort database changes.
virtual void get_superclasses(conffwk::fmap< conffwk::fset > &schema)
Get inheritance hierarchy.
std::set< oks::OksObject * > m_modified
virtual bool is_writable(const std::string &db_name)
Return write access status.
virtual void get(const std::string &class_name, const std::string &name, conffwk::ConfigObject &object, unsigned long rlevel, const std::vector< std::string > *rclasses)
Get object of class by id.
virtual void commit(const std::string &why)
Commit database changes.
conffwk::ConfigurationImpl::notify m_fn
std::map< std::string, std::set< std::string > > SMap
Including Qt Headers.
Definition module.cpp:16
msgpack::object obj
Definition ral.hpp:35