SNode.C
Loading...
Searching...
No Matches
Config.h
Go to the documentation of this file.
1/*
2 * SNode.C - a slim toolkit for network communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef UTILS_CONFIG_H
21#define UTILS_CONFIG_H
22
23#ifndef DOXYGEN_SHOULD_SKIP_THIS
24
25namespace CLI {
26 class App;
27 class Option;
28 class Formatter;
29} // namespace CLI
30
31#include <map>
32#include <memory>
33#include <string>
34
35#endif /* DOXYGEN_SHOULD_SKIP_THIS */
36
37namespace utils {
38
39 class Config {
40 public:
41 Config() = delete;
42 Config(const Config&) = delete;
43 ~Config() = delete;
44
45 Config& operator=(const Config&) = delete;
46
47 static bool init(int argc, char* argv[]);
48 static bool bootstrap();
49 static void terminate();
50
51 static CLI::App* addInstance(const std::string& name, const std::string& description, const std::string& group);
52 static bool removeInstance(CLI::App* instance);
53
54 static void required(CLI::App* instance, bool reqired = true);
55 static void disabled(CLI::App* instance, bool disabled = true);
56
57 static CLI::App* addStandardFlags(CLI::App* app);
58 static CLI::App* addSimpleHelp(CLI::App* app);
59 static CLI::App* addHelp(CLI::App* app);
60
62 static int getLogLevel();
63 static int getVerboseLevel();
64
65 static CLI::Option* addStringOption(const std::string& name, const std::string& description, const std::string& typeName);
66
67 static CLI::Option*
68 addStringOption(const std::string& name, const std::string& description, const std::string& typeName, bool configurable);
69
70 static CLI::Option* addStringOption(const std::string& name,
71 const std::string& description,
72 const std::string& typeName,
73 const std::string& defaultValue);
74
75 static CLI::Option* addStringOption(const std::string& name,
76 const std::string& description,
77 const std::string& typeName,
78 const std::string& defaultValue,
79 bool configurable);
80
81 static CLI::Option*
82 addStringOption(const std::string& name, const std::string& description, const std::string& typeName, const char* defaultValue);
83
84 static CLI::Option* addStringOption(const std::string& name,
85 const std::string& description,
86 const std::string& typeName,
87 const char* defaultValue,
88 bool configurable);
89
91
92 static void addFlag(const std::string& name,
93 bool& variable,
94 const std::string& description,
95 bool required,
96 bool configurable = true,
97 const std::string& groupName = "Application Options");
98
99 private:
100 static bool parse1();
101 static bool parse2();
102
103 static std::shared_ptr<CLI::App> app;
104 static std::shared_ptr<CLI::Formatter> sectionFormatter;
105
106 static int argc;
107 static char** argv;
108
110
114
115 static CLI::Option* daemonizeOpt;
116 static CLI::Option* logFileOpt;
117 static CLI::Option* userNameOpt;
118 static CLI::Option* groupNameOpt;
119 static CLI::Option* enforceLogFileOpt;
120 static CLI::Option* logLevelOpt;
121 static CLI::Option* verboseLevelOpt;
122 static CLI::Option* quietOpt;
123
124 static std::map<std::string, std::string> aliases; // from -> to
125 static std::map<std::string, CLI::Option*> applicationOptions; // keep all user options in memory
126 };
127
128} // namespace utils
129
130#endif // UTILS_CONFIG_H
void * operator new(std::size_t count)=delete
static void init(int argc, char *argv[])
Definition SNodeC.cpp:32
~SNodeC()=delete
static TickStatus tick(const utils::Timeval &timeOut=0)
Definition SNodeC.cpp:46
static void free()
Definition SNodeC.cpp:50
static void stop()
Definition SNodeC.cpp:42
SNodeC()=delete
static State state()
Definition SNodeC.cpp:54
static int start(const utils::Timeval &timeOut={LONG_MAX, 0})
Definition SNodeC.cpp:38
Timer(Timer &&timer) noexcept
Definition Timer.cpp:36
virtual ~Timer()
Definition Timer.cpp:56
Timer & operator=(Timer &&timer) noexcept
Definition Timer.cpp:45
Timer(core::TimerEventReceiver *timerEventReceiver)
Definition Timer.cpp:30
void restart()
Definition Timer.cpp:68
TimerEventReceiver * timerEventReceiver
Definition Timer.h:51
void cancel()
Definition Timer.cpp:62
void removeTimerEventReceiver()
Definition Timer.cpp:74
Timer()=default
Timer & operator=(const Timer &)=delete
Timer & operator=(Timer &&timer) noexcept=default
static Timer singleshotTimer(const std::function< void()> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:35
~Timer() override
Definition Timer.cpp:32
static Timer intervalTimer(const std::function< void(const std::function< void()> &)> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:39
static Timer intervalTimer(const std::function< void()> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:43
MariaDBClientASyncAPI(const MariaDBClientASyncAPI &)=default
virtual MariaDBCommandSequence & execute_async(MariaDBCommand *mariaDBCommand)=0
virtual void execute_sync(MariaDBCommandSync *mariaDBCommand)=0
MariaDBClientSyncAPI(const MariaDBClientSyncAPI &)=default
MariaDBClient(const MariaDBConnectionDetails &details)
void execute_sync(MariaDBCommandSync *mariaDBCommand) final
MariaDBCommandSequence & execute_async(MariaDBCommand *mariaDBCommand) final
MariaDBConnection * mariaDBConnection
MariaDBConnectionDetails details
MariaDBCommandSequence & operator=(MariaDBCommandSequence &&mariaDBCommandSequence)=default
void execute_sync(MariaDBCommandSync *mariaDBCommand) final
std::deque< MariaDBCommand * > & sequence()
MariaDBCommandSequence & execute_async(MariaDBCommand *mariaDBCommand) final
std::deque< MariaDBCommand * > commandSequence
MariaDBCommandSequence(MariaDBCommandSequence &&mariaDBCommandSequence) noexcept=default
static CLI::App * addStandardFlags(CLI::App *app)
Definition Config.cpp:675
static bool parse1()
Definition Config.cpp:373
Config(const Config &)=delete
static char ** argv
Definition Config.h:107
static CLI::App * addSimpleHelp(CLI::App *app)
Definition Config.cpp:786
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName)
Definition Config.cpp:862
static CLI::Option * logLevelOpt
Definition Config.h:120
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, bool configurable)
Definition Config.cpp:876
static void disabled(CLI::App *instance, bool disabled=true)
Definition Config.cpp:826
static std::map< std::string, CLI::Option * > applicationOptions
Definition Config.h:125
static std::string getStringOptionValue(const std::string &name)
Definition Config.cpp:919
static int getVerboseLevel()
Definition Config.cpp:947
static bool parse2()
Definition Config.cpp:532
static std::string configDirectory
Definition Config.h:111
static std::shared_ptr< CLI::App > app
Definition Config.h:103
~Config()=delete
static CLI::Option * groupNameOpt
Definition Config.h:118
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, const std::string &defaultValue)
Definition Config.cpp:882
static CLI::App * addHelp(CLI::App *app)
Definition Config.cpp:739
static CLI::Option * verboseLevelOpt
Definition Config.h:121
static CLI::Option * quietOpt
Definition Config.h:122
static bool init(int argc, char *argv[])
Definition Config.cpp:106
static int argc
Definition Config.h:106
static std::string pidDirectory
Definition Config.h:113
static bool removeInstance(CLI::App *instance)
Definition Config.cpp:856
static std::shared_ptr< CLI::Formatter > sectionFormatter
Definition Config.h:104
static std::map< std::string, std::string > aliases
Definition Config.h:124
static void addFlag(const std::string &name, bool &variable, const std::string &description, bool required, bool configurable=true, const std::string &groupName="Application Options")
Definition Config.cpp:927
static std::string getApplicationName()
Definition Config.cpp:939
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, const std::string &defaultValue, bool configurable)
Definition Config.cpp:897
Config & operator=(const Config &)=delete
static void required(CLI::App *instance, bool reqired=true)
Definition Config.cpp:804
static CLI::Option * logFileOpt
Definition Config.h:116
Config()=delete
static CLI::Option * enforceLogFileOpt
Definition Config.h:119
static bool bootstrap()
Definition Config.cpp:343
static int getLogLevel()
Definition Config.cpp:943
static std::string applicationName
Definition Config.h:109
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, const char *defaultValue, bool configurable)
Definition Config.cpp:914
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, const char *defaultValue)
Definition Config.cpp:907
static CLI::App * addInstance(const std::string &name, const std::string &description, const std::string &group)
Definition Config.cpp:652
static std::string logDirectory
Definition Config.h:112
static void terminate()
Definition Config.cpp:614
static CLI::Option * userNameOpt
Definition Config.h:117
static CLI::Option * daemonizeOpt
Definition Config.h:115
int main(int argc, char *argv[])
Definition Timer.h:37
TickStatus
Definition TickStatus.h:29
State
Definition State.h:29
State eventLoopState()
Definition State.cpp:30
Definition Config.h:37