DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
OksConfiguration.hpp
Go to the documentation of this file.
1// this is -*- c++ -*-
2#ifndef OKSCONFLIBS_OKSCONFLIBSURATION_H_
3#define OKSCONFLIBS_OKSCONFLIBSURATION_H_
4
5//
6// $Id$
7//
8
9#include <string>
10#include <list>
11#include <set>
12#include <thread>
13
15
16namespace dunedaq {
17namespace oks {
18 // forward declarations for OKS classes
19 class OksKernel;
20 class OksObject;
21 class OksClass;
22 class OksFile;
23}
24
25namespace oksconflibs {
26
27 // forward declaration
28class OksConfigObject;
29struct OksConfigurationCheckDB;
30
31
33
34 friend class OksConfigObject;
36 friend class ResubscribeGuard;
37
38 public:
39
41 virtual ~OksConfiguration() { close_db(); }
42
43 typedef std::map< std::string , std::set<std::string> > SMap;
44
45 public:
46
47 virtual bool test_object(const std::string& class_name, const std::string& name, unsigned long rlevel, const std::vector<std::string> * rclasses);
48 virtual void get(const std::string& class_name, const std::string& name, conffwk::ConfigObject& object, unsigned long rlevel, const std::vector<std::string> * rclasses);
49 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);
50 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);
51 virtual conffwk::class_t * get(const std::string& class_name, bool direct_only);
53
54 virtual void create(const std::string& at, const std::string& class_name, const std::string& id, conffwk::ConfigObject& object);
55 virtual void create(const conffwk::ConfigObject& at, const std::string& class_name, const std::string& id, conffwk::ConfigObject& object);
56 virtual void destroy(conffwk::ConfigObject& object);
57
58 virtual void open_db(const std::string& db_name);
59 virtual void close_db() { close_database(true); }
60 virtual bool loaded() const noexcept { return (m_kernel != 0); }
61 virtual void create(const std::string& db_name, const std::list<std::string>& includes);
62 virtual bool is_writable(const std::string& db_name);
63 virtual void add_include(const std::string& db_name, const std::string& include);
64 virtual void remove_include(const std::string& db_name, const std::string& include);
65 virtual void get_includes(const std::string& db_name, std::list<std::string>& includes) const;
66 virtual void get_updated_dbs(std::list<std::string>& dbs) const;
67 virtual void set_commit_credentials(const std::string& user, const std::string& password);
68 virtual void commit(const std::string& why);
69 virtual void abort();
70 virtual void prefetch_all_data() { ; } // nothing to do with OKS data already in-memory
71 virtual std::vector<dunedaq::conffwk::Version> get_changes();
72 virtual std::vector<dunedaq::conffwk::Version> get_versions(const std::string& since, const std::string& until, dunedaq::conffwk::Version::QueryType type, bool skip_irrelevant);
73
74 virtual void subscribe(const std::set<std::string>& class_names, const SMap& objs, ConfigurationImpl::notify cb, ConfigurationImpl::pre_notify pre_cb);
75 virtual void unsubscribe();
76
77 virtual void print_profiling_info() noexcept;
78
79
80 protected:
81
82 void create(oks::OksFile * at, const std::string& class_name, const std::string& id, conffwk::ConfigObject& object);
83
84 private:
85
86 virtual void check_db();
87
88 void close_database(bool unsubscribe);
89
90
91 public:
92
93 const oks::OksKernel& get_oks_kernel() const { return *m_kernel; } // required by Java oksconflibs
94
95
96 protected:
97
101 std::set<std::string> m_class_names;
105
106 // read oks::OksKernel parameters from environment (silence mode)
107
108 void init_env();
109
110
111 OksConfigObject * new_object(oks::OksObject * obj) noexcept;
112
113
114
115 // keep information about changed objects
116
117 std::list<oks::OksObject *> m_created;
118 std::set<oks::OksObject *> m_modified;
119 std::map<std::string, std::set<std::string> > m_removed;
120
121 void subscribe();
122
123 static void create_notify(oks::OksObject *, void *) noexcept;
124 static void change_notify(oks::OksObject *, void *) noexcept;
125 static void delete_notify(oks::OksObject *, void *) noexcept;
126
128 std::thread * m_check_db_thread;
129
130 std::string m_user;
131 std::string m_password;
132
133
134 // keep information about created files
135
136 std::set<oks::OksFile *> m_created_files;
137
138
139 //
140
141 unsigned int m_repo_error_count;
142
143};
144
145} // namespace oksconflibs
146} // namespace dunedaq
147
148#endif // OKSCONFLIBS_OKSCONFLIBSURATION_H_
Provides pure virtual interface used by the Configuration class.
void(*) notify(std::vector< ConfigurationChange * > &changes, Configuration *)
Callback to notify database changes.
void(*) pre_notify(Configuration *)
Callback to pre-notify database changes.
Provides interface to the OKS kernel.
Definition kernel.hpp:577
OksObject describes instance of OksClass.
Definition object.hpp:836
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
std::map< std::string, std::set< std::string > > SMap
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
Including Qt Headers.
Definition __init__.py:1