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/*
21 * MIT License
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining a copy
24 * of this software and associated documentation files (the "Software"), to deal
25 * in the Software without restriction, including without limitation the rights
26 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
27 * copies of the Software, and to permit persons to whom the Software is
28 * furnished to do so, subject to the following conditions:
29 *
30 * The above copyright notice and this permission notice shall be included in
31 * all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
39 * THE SOFTWARE.
40 */
41
42#ifndef UTILS_CONFIG_H
43#define UTILS_CONFIG_H
44
45#ifndef DOXYGEN_SHOULD_SKIP_THIS
46
47namespace CLI {
48 class App;
49 class Option;
50 class Formatter;
51} // namespace CLI
52
53#include <map>
54#include <memory>
55#include <string>
56
57#endif /* DOXYGEN_SHOULD_SKIP_THIS */
58
59namespace utils {
60
61 class Config {
62 public:
63 Config() = delete;
64 Config(const Config&) = delete;
65 ~Config() = delete;
66
67 Config& operator=(const Config&) = delete;
68
69 static bool init(int argc, char* argv[]);
70 static bool bootstrap();
71 static void terminate();
72
73 static CLI::App* addInstance(const std::string& name, const std::string& description, const std::string& group);
74 static bool removeInstance(CLI::App* instance);
75
76 static void required(CLI::App* instance, bool reqired = true);
77 static void disabled(CLI::App* instance, bool disabled = true);
78
79 static CLI::App* addStandardFlags(CLI::App* app);
80 static CLI::App* addSimpleHelp(CLI::App* app);
81 static CLI::App* addHelp(CLI::App* app);
82
84 static int getLogLevel();
85 static int getVerboseLevel();
86
87 static CLI::Option* addStringOption(const std::string& name, const std::string& description, const std::string& typeName);
88
89 static CLI::Option*
90 addStringOption(const std::string& name, const std::string& description, const std::string& typeName, bool configurable);
91
92 static CLI::Option* addStringOption(const std::string& name,
93 const std::string& description,
94 const std::string& typeName,
95 const std::string& defaultValue);
96
97 static CLI::Option* addStringOption(const std::string& name,
98 const std::string& description,
99 const std::string& typeName,
100 const std::string& defaultValue,
101 bool configurable);
102
103 static CLI::Option*
104 addStringOption(const std::string& name, const std::string& description, const std::string& typeName, const char* defaultValue);
105
106 static CLI::Option* addStringOption(const std::string& name,
107 const std::string& description,
108 const std::string& typeName,
109 const char* defaultValue,
110 bool configurable);
111
112 static std::string getStringOptionValue(const std::string& name);
113
114 static void addFlag(const std::string& name,
115 bool& variable,
116 const std::string& description,
117 bool required,
118 bool configurable = true,
119 const std::string& groupName = "Application Options");
120
121 private:
122 static bool parse1();
123 static bool parse2();
124
125 static std::shared_ptr<CLI::App> app;
126 static std::shared_ptr<CLI::Formatter> sectionFormatter;
127
128 static int argc;
129 static char** argv;
130
132
136
137 static CLI::Option* daemonizeOpt;
138 static CLI::Option* logFileOpt;
139 static CLI::Option* userNameOpt;
140 static CLI::Option* groupNameOpt;
141 static CLI::Option* enforceLogFileOpt;
142 static CLI::Option* logLevelOpt;
143 static CLI::Option* verboseLevelOpt;
144 static CLI::Option* quietOpt;
145
146 static std::map<std::string, std::string> aliases; // from -> to
147 static std::map<std::string, CLI::Option*> applicationOptions; // keep all user options in memory
148 };
149
150} // namespace utils
151
152#endif // UTILS_CONFIG_H
void * operator new(std::size_t count)=delete
static void init(int argc, char *argv[])
Definition SNodeC.cpp:54
~SNodeC()=delete
static TickStatus tick(const utils::Timeval &timeOut=0)
Definition SNodeC.cpp:68
static void free()
Definition SNodeC.cpp:72
static void stop()
Definition SNodeC.cpp:64
SNodeC()=delete
static State state()
Definition SNodeC.cpp:76
static int start(const utils::Timeval &timeOut={LONG_MAX, 0})
Definition SNodeC.cpp:60
Timer(Timer &&timer) noexcept
Definition Timer.cpp:58
virtual ~Timer()
Definition Timer.cpp:78
Timer & operator=(Timer &&timer) noexcept
Definition Timer.cpp:67
Timer(core::TimerEventReceiver *timerEventReceiver)
Definition Timer.cpp:52
void restart()
Definition Timer.cpp:90
TimerEventReceiver * timerEventReceiver
Definition Timer.h:73
void cancel()
Definition Timer.cpp:84
void removeTimerEventReceiver()
Definition Timer.cpp:96
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:57
~Timer() override
Definition Timer.cpp:54
static Timer intervalTimer(const std::function< void(const std::function< void()> &)> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:61
static Timer intervalTimer(const std::function< void()> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:65
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:701
static bool parse1()
Definition Config.cpp:395
Config(const Config &)=delete
static char ** argv
Definition Config.h:129
static CLI::App * addSimpleHelp(CLI::App *app)
Definition Config.cpp:810
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName)
Definition Config.cpp:885
static CLI::Option * logLevelOpt
Definition Config.h:142
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, bool configurable)
Definition Config.cpp:899
static void disabled(CLI::App *instance, bool disabled=true)
Definition Config.cpp:849
static std::map< std::string, CLI::Option * > applicationOptions
Definition Config.h:147
static std::string getStringOptionValue(const std::string &name)
Definition Config.cpp:942
static int getVerboseLevel()
Definition Config.cpp:970
static bool parse2()
Definition Config.cpp:558
static std::string configDirectory
Definition Config.h:133
static std::shared_ptr< CLI::App > app
Definition Config.h:125
~Config()=delete
static CLI::Option * groupNameOpt
Definition Config.h:140
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, const std::string &defaultValue)
Definition Config.cpp:905
static CLI::App * addHelp(CLI::App *app)
Definition Config.cpp:765
static CLI::Option * verboseLevelOpt
Definition Config.h:143
static CLI::Option * quietOpt
Definition Config.h:144
static bool init(int argc, char *argv[])
Definition Config.cpp:128
static int argc
Definition Config.h:128
static std::string pidDirectory
Definition Config.h:135
static bool removeInstance(CLI::App *instance)
Definition Config.cpp:879
static std::shared_ptr< CLI::Formatter > sectionFormatter
Definition Config.h:126
static std::map< std::string, std::string > aliases
Definition Config.h:146
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:950
static std::string getApplicationName()
Definition Config.cpp:962
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:920
Config & operator=(const Config &)=delete
static void required(CLI::App *instance, bool reqired=true)
Definition Config.cpp:827
static CLI::Option * logFileOpt
Definition Config.h:138
Config()=delete
static CLI::Option * enforceLogFileOpt
Definition Config.h:141
static bool bootstrap()
Definition Config.cpp:365
static int getLogLevel()
Definition Config.cpp:966
static std::string applicationName
Definition Config.h:131
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, const char *defaultValue, bool configurable)
Definition Config.cpp:937
static CLI::Option * addStringOption(const std::string &name, const std::string &description, const std::string &typeName, const char *defaultValue)
Definition Config.cpp:930
static CLI::App * addInstance(const std::string &name, const std::string &description, const std::string &group)
Definition Config.cpp:678
static std::string logDirectory
Definition Config.h:134
static void terminate()
Definition Config.cpp:640
static CLI::Option * userNameOpt
Definition Config.h:139
static CLI::Option * daemonizeOpt
Definition Config.h:137
Timeval(const std::initializer_list< time_t > &initList) noexcept
Definition Timeval.cpp:59
Definition Timer.h:59
TickStatus
Definition TickStatus.h:51
State
Definition State.h:51
State eventLoopState()
Definition State.cpp:52
Definition Config.h:59
int main(int argc, char *argv[])