SNode.C
Loading...
Searching...
No Matches
utils::ConfigRoot Class Reference

#include <Config.h>

Inheritance diagram for utils::ConfigRoot:
Collaboration diagram for utils::ConfigRoot:

Public Member Functions

 ~ConfigRoot () override
ConfigRootaddRootOptions (const std::string &applicationName, const std::string &userName, const std::string &groupName, const std::string &configDirectory, const std::string &logDirectory, const std::string &pidDirectory)
bool parse1 (int argc, char *argv[])
bool bootstrap (int argc, char *argv[])
void terminate ()
Public Member Functions inherited from utils::SubCommand
 SubCommand (const SubCommand &)=delete
 SubCommand (SubCommand &&)=delete
SubCommandoperator= (const SubCommand &)=delete
SubCommandoperator= (SubCommand &&)=delete
virtual ~SubCommand ()
std::string getName () const
std::string version () const
void parse (int argc, char *argv[])
CLI::Option * setConfig (const std::string &defaultConfigFile) const
CLI::Option * setLogFile (const std::string &defaultLogFile) const
CLI::Option * setVersionFlag (const std::string &version) const
bool hasParent () const
SubCommandgetParent ()
SubCommandallowExtras (bool allow=true)
SubCommandrequired (bool required=true, bool force=true)
SubCommandrequired (SubCommand *subCommand, bool required=true)
SubCommandrequired (CLI::Option *option, bool required=true)
SubCommandneeds (SubCommand *subCommand, bool needs=true)
SubCommanddisabled (SubCommand *subCommand, bool disabled=true)
SubCommandsetRequireCallback (const std::function< void(void)> &callback)
SubCommandfinalCallback (const std::function< void()> &finalCallback)
std::string configToStr () const
std::string help (const CLI::App *helpApp, const CLI::AppFormatMode &mode) const
template<typename NewSubCommand, typename... Args>
NewSubCommand * newSubCommand (Args &&... args)
template<typename RequestedSubCommand>
RequestedSubCommand * getSubCommand ()
template<typename RequestedSubCommand>
RequestedSubCommand * getSubCommand () const
CLI::Option * getOption (const std::string &name) const
CLI::Option * addOption (const std::string &name, const std::string &description, const std::string &typeName, const CLI::Validator &validator) const
template<typename ValueTypeT>
CLI::Option * addOption (const std::string &name, const std::string &description, const std::string &typeName, ValueTypeT defaultValue, const CLI::Validator &validator) const
template<typename ValueTypeT>
CLI::Option * addOptionVariable (const std::string &name, ValueTypeT &variable, const std::string &description, const std::string &typeName, const CLI::Validator &additionalValidator) const
template<typename ValueTypeT>
CLI::Option * addOptionVariable (const std::string &name, ValueTypeT &variable, const std::string &description, const std::string &typeName, ValueTypeT defaultValue, const CLI::Validator &additionalValidator) const
CLI::Option * addOptionFunction (const std::string &name, std::function< void(const std::string &)> &callback, const std::string &description, const std::string &typeName, const CLI::Validator &validator) const
template<typename ValueTypeT>
CLI::Option * addOptionFunction (const std::string &name, std::function< void(const std::string &)> &callback, const std::string &description, const std::string &typeName, ValueTypeT defaultValue, const CLI::Validator &validator) const
CLI::Option * addFlag (const std::string &name, const std::string &description, const std::string &typeName, const CLI::Validator &validator) const
template<typename ValueTypeT>
CLI::Option * addFlag (const std::string &name, const std::string &description, const std::string &typeName, ValueTypeT defaultValue, const CLI::Validator &validator) const
CLI::Option * addFlagFunction (const std::string &name, const std::function< void()> &callback, const std::string &description, const std::string &typeName, const CLI::Validator &validator)
CLI::Option * addFlagFunction (const std::string &name, const std::function< void()> &callback, const std::string &description, const std::string &typeName, const std::string &defaultValue, const CLI::Validator &validator)

Protected Member Functions

bool parse2 (int argc, char *argv[], bool parse1=false)
Protected Member Functions inherited from utils::SubCommand
 SubCommand (SubCommand *parent, std::shared_ptr< utils::AppWithPtr > appWithPtr, const std::string &group, bool final)
template<typename ConcretSubCommand>
 SubCommand (SubCommand *parent, ConcretSubCommand *concretSubCommand, const std::string &group, bool final=true)
SubCommanddescription (const std::string &description)
SubCommandfooter (const std::string &footer)
template<typename ValueTypeT>
CLI::Option * setDefaultValue (CLI::Option *option, const ValueTypeT &value, bool clear=true) const
CLI::Option * setConfigurable (CLI::Option *option, bool configurable) const

Private Member Functions

 ConfigRoot ()

Private Attributes

std::string applicationName
std::string pidDirectory
CLI::Option * daemonizeOpt = nullptr
CLI::Option * logFileOpt = nullptr
CLI::Option * monochromLogOpt = nullptr
CLI::Option * userNameOpt = nullptr
CLI::Option * groupNameOpt = nullptr
CLI::Option * enforceLogFileOpt = nullptr
CLI::Option * logLevelOpt = nullptr
CLI::Option * verboseLevelOpt = nullptr
CLI::Option * quietOpt = nullptr
CLI::Option * versionOpt = nullptr
CLI::Option * writeConfigOpt = nullptr
CLI::Option * killOpt = nullptr
CLI::Option * aliasOpt = nullptr

Friends

class Config

Additional Inherited Members

Static Public Member Functions inherited from utils::SubCommand
static CLI::App * getHelpTriggerApp ()
static CLI::App * getShowConfigTriggerApp ()
static CLI::App * getCommandlineTriggerApp ()
Static Public Attributes inherited from utils::SubCommand
static std::shared_ptr< CLI::Formatter > sectionFormatter = makeSectionFormatter()
Static Protected Attributes inherited from utils::SubCommand
static std::map< std::string, std::string > aliases
static CLI::App * helpTriggerApp = nullptr
static CLI::App * showConfigTriggerApp = nullptr
static CLI::App * commandlineTriggerApp = nullptr

Detailed Description

Definition at line 58 of file Config.h.

Constructor & Destructor Documentation

◆ ConfigRoot()

utils::ConfigRoot::ConfigRoot ( )
private

Definition at line 357 of file Config.cpp.

358 : utils::SubCommand(
359 nullptr, utils::Config::configRootApp = std::make_shared<utils::AppWithPtr>("Root of config", "", this, false), "", false) {
361 }
static void init()
Definition Logger.cpp:54
static std::shared_ptr< AppWithPtr > configRootApp
Definition Config.h:125

References utils::Config::configRootApp, logger::Logger::init(), and utils::SubCommand::SubCommand().

Here is the call graph for this function:

◆ ~ConfigRoot()

utils::ConfigRoot::~ConfigRoot ( )
override

Definition at line 363 of file Config.cpp.

363 {
364 }

Member Function Documentation

◆ addRootOptions()

ConfigRoot * utils::ConfigRoot::addRootOptions ( const std::string & applicationName,
const std::string & userName,
const std::string & groupName,
const std::string & configDirectory,
const std::string & logDirectory,
const std::string & pidDirectory )

Definition at line 366 of file Config.cpp.

371 {
374
375 description("Configuration for Application '" + applicationName + "'");
376
377 footer("Application '" + applicationName +
378 "' powered by SNode.C\n"
379 "(C) 2020-2026 Volker Christian <me@vchrist.at>\n"
380 "https://github.com/SNodeC/snode.c");
381
382 setConfig(configDirectory + "/" + applicationName + ".conf");
383
385 "-w,--write-config",
386 "Write config file and exit",
387 "configfile",
388 configDirectory + "/" + applicationName + ".conf",
389 !CLI::ExistingDirectory),
390 false)
391 ->expected(0, 1);
392
393 killOpt = setConfigurable(addFlag("-k,--kill", "Kill running daemon", "", CLI::Validator()), false);
394
395 logLevelOpt = setConfigurable(addOption("--log-level", "Log level", "level", 4, CLI::Range(0, 6)), true);
396
397 verboseLevelOpt = setConfigurable(addOption("--verbose-level", "Verbose level", "level", 2, CLI::Range(0, 10)), true);
398
399 logFileOpt = setConfigurable(setLogFile(logDirectory + "/" + applicationName + ".log"), true);
400
402 "-m{true},--monochrom-logmonochromLogOption{true}",
403 [&monochromLogOpt = this->monochromLogOpt]() {
404 if (monochromLogOpt->as<bool>()) {
406 } else {
408 }
409 },
410 "Monochrom log output",
411 "bool",
412 logger::Logger::getDisableColor() ? "true" : "false",
413 CLI::IsMember({"true", "false"})),
414 true)
415 ->trigger_on_parse();
416
418 "-q{true},--quiet{true}",
419 "Quiet mode",
420 "bool",
421 "false",
422 CLI::IsMember({"true", "false"})),
423 true);
424
426 "-e{true},--enforce-log-file{true}",
427 "Enforce writing of logs to file for foreground applications",
428 "bool",
429 "false",
430 CLI::IsMember({"true", "false"})),
431 true);
432
434 "-d{true},--daemonize{true}",
435 "Start application as daemon",
436 "bool",
437 "false",
438 CLI::IsMember({"true", "false"})),
439 true);
440
442 "-u,--user-name",
443 "Run daemon under specific user permissions",
444 "username",
445 userName,
446 CLI::TypeValidator<std::string>()),
447 true);
448
450 "-g,--group-name",
451 "Run daemon under specific group permissions",
452 "groupname",
453 groupName,
454 CLI::TypeValidator<std::string>()),
455 true);
456
457 aliasOpt = setConfigurable(addOption("-a,--aliases",
458 "Make an instance also known as an alias in configuration files",
459 "instance=instance_alias [instance=instance_alias [...]]",
460 CLI::TypeValidator<std::string>()),
461 false);
462
463 versionOpt = setVersionFlag("1.0-rc1");
464
465 return this;
466 }
static void setDisableColor(bool disableColorLog=true)
Definition Logger.cpp:84
static bool getDisableColor()
Definition Logger.cpp:94
CLI::Option * enforceLogFileOpt
Definition Config.h:88
std::string pidDirectory
Definition Config.h:81
CLI::Option * logFileOpt
Definition Config.h:84
CLI::Option * versionOpt
Definition Config.h:92
CLI::Option * verboseLevelOpt
Definition Config.h:90
CLI::Option * killOpt
Definition Config.h:94
CLI::Option * aliasOpt
Definition Config.h:95
std::string applicationName
Definition Config.h:80
CLI::Option * userNameOpt
Definition Config.h:86
CLI::Option * daemonizeOpt
Definition Config.h:83
CLI::Option * monochromLogOpt
Definition Config.h:85
CLI::Option * writeConfigOpt
Definition Config.h:93
CLI::Option * groupNameOpt
Definition Config.h:87
CLI::Option * quietOpt
Definition Config.h:91
CLI::Option * logLevelOpt
Definition Config.h:89
SubCommand * description(const std::string &description)
SubCommand * footer(const std::string &footer)
CLI::Option * addFlagFunction(const std::string &name, const std::function< void()> &callback, const std::string &description, const std::string &typeName, const CLI::Validator &validator)
CLI::Option * setVersionFlag(const std::string &version) const
CLI::Option * addOption(const std::string &name, const std::string &description, const std::string &typeName, const CLI::Validator &validator) const
CLI::Option * setConfig(const std::string &defaultConfigFile) const
CLI::Option * setLogFile(const std::string &defaultLogFile) const
CLI::Option * setConfigurable(CLI::Option *option, bool configurable) const
CLI::Option * addFlag(const std::string &name, const std::string &description, const std::string &typeName, const CLI::Validator &validator) const

References utils::SubCommand::addFlag(), utils::SubCommand::addFlag(), utils::SubCommand::addFlagFunction(), utils::SubCommand::addOption(), utils::SubCommand::addOption(), aliasOpt, applicationName, daemonizeOpt, utils::SubCommand::description(), enforceLogFileOpt, utils::SubCommand::footer(), logger::Logger::getDisableColor(), groupNameOpt, killOpt, logFileOpt, logLevelOpt, monochromLogOpt, pidDirectory, quietOpt, utils::SubCommand::setConfig(), utils::SubCommand::setConfigurable(), logger::Logger::setDisableColor(), utils::SubCommand::setLogFile(), utils::SubCommand::setVersionFlag(), userNameOpt, verboseLevelOpt, versionOpt, and writeConfigOpt.

Referenced by utils::Config::init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bootstrap()

bool utils::ConfigRoot::bootstrap ( int argc,
char * argv[] )

Definition at line 500 of file Config.cpp.

500 {
501 finalCallback([this]() {
502 if (daemonizeOpt->as<bool>() && helpTriggerApp == nullptr && showConfigTriggerApp == nullptr && writeConfigOpt->count() == 0 &&
503 commandlineTriggerApp == nullptr) {
504 std::cout << "Running as daemon (double fork)" << std::endl;
505
507 pidDirectory + "/" + applicationName + ".pid", userNameOpt->as<std::string>(), groupNameOpt->as<std::string>());
508
510
511 const std::string logFile = logFileOpt->as<std::string>();
512 if (!logFile.empty()) {
514 }
515 } else if (enforceLogFileOpt->as<bool>()) {
516 const std::string logFile = logFileOpt->as<std::string>();
517 if (!logFile.empty()) {
518 std::cout << "Writing logs to file " << logFile << std::endl;
519
521 }
522 }
523 });
524
525 return parse2(argc, argv);
526 }
static void logToFile(const std::string &logFile)
Definition Logger.cpp:143
static void setQuiet(bool quiet=true)
Definition Logger.cpp:152
bool parse2(int argc, char *argv[], bool parse1=false)
Definition Config.cpp:547
static void startDaemon(const std::string &pidFileName, const std::string &userName, const std::string &groupName)
Definition Daemon.cpp:75
static CLI::App * showConfigTriggerApp
Definition SubCommand.h:238
SubCommand * finalCallback(const std::function< void()> &finalCallback)
static CLI::App * helpTriggerApp
Definition SubCommand.h:237
static CLI::App * commandlineTriggerApp
Definition SubCommand.h:239

References applicationName, utils::SubCommand::commandlineTriggerApp, daemonizeOpt, enforceLogFileOpt, utils::SubCommand::finalCallback(), groupNameOpt, utils::SubCommand::helpTriggerApp, logFileOpt, logger::Logger::logToFile(), parse2(), pidDirectory, logger::Logger::setQuiet(), utils::SubCommand::showConfigTriggerApp, utils::Daemon::startDaemon(), userNameOpt, and writeConfigOpt.

Referenced by utils::Config::bootstrap().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse1()

bool utils::ConfigRoot::parse1 ( int argc,
char * argv[] )

Definition at line 468 of file Config.cpp.

468 {
469 bool proceed = parse2(argc, argv, true);
470
471 if (proceed) {
472 if (killOpt->count() > 0) {
473 try {
474 const pid_t daemonPid =
475 utils::Daemon::stopDaemon(pidDirectory + "/" + std::string(std::filesystem::path(argv[0]).filename()) + ".pid");
476 std::cout << "Daemon terminated: Pid = " << daemonPid << std::endl;
477 } catch (const DaemonError& e) {
478 std::cout << "DaemonError: " << e.what() << std::endl;
479 } catch (const DaemonFailure& e) {
480 std::cout << "DaemonFailure: " << e.what() << std::endl;
481 }
482
483 proceed = false;
484 } else {
485 if (helpTriggerApp == nullptr && showConfigTriggerApp == nullptr && commandlineTriggerApp == nullptr &&
486 versionOpt->count() == 0) {
489 }
490
492
493 allowExtras(false);
494 }
495 }
496
497 return proceed;
498 }
static void setVerboseLevel(int level)
Definition Logger.cpp:137
static void setLogLevel(int level)
Definition Logger.cpp:100
static pid_t stopDaemon(const std::string &pidFileName)
Definition Daemon.cpp:158
SubCommand * allowExtras(bool allow=true)

References utils::SubCommand::allowExtras(), utils::SubCommand::commandlineTriggerApp, utils::SubCommand::helpTriggerApp, killOpt, logLevelOpt, parse2(), pidDirectory, quietOpt, logger::Logger::setLogLevel(), logger::Logger::setQuiet(), logger::Logger::setVerboseLevel(), utils::SubCommand::showConfigTriggerApp, utils::Daemon::stopDaemon(), verboseLevelOpt, and versionOpt.

Referenced by utils::Config::init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse2()

bool utils::ConfigRoot::parse2 ( int argc,
char * argv[],
bool parse1 = false )
protected

Definition at line 547 of file Config.cpp.

547 {
548 bool proceed = false;
549
550 try {
551 try {
552 try {
553 aliases.clear();
554
555 helpTriggerApp = nullptr;
556 showConfigTriggerApp = nullptr;
557 commandlineTriggerApp = nullptr;
558
559 parse(argc, argv);
560
561 if (!parse1) {
562 if (showConfigTriggerApp != nullptr) {
563 std::cout << getConfig(showConfigTriggerApp);
564 } else if (commandlineTriggerApp != nullptr) {
566 } else if (getOption("--write-config")->count() > 0) {
567 std::cout << doWriteConfig(this);
568 } else {
569 proceed = true;
570 }
571 } else {
572 proceed = true;
573 }
574 } catch (const CLI::Success&) {
575 if (!parse1) {
576 throw;
577 }
578
579 proceed = true;
580 } catch (const CLI::ParseError& e) {
581 if (helpTriggerApp != nullptr || showConfigTriggerApp != nullptr || commandlineTriggerApp != nullptr ||
582 versionOpt->count() > 0) {
583 std::cout << std::string{"["} << Color::Code::FG_RED << e.get_name() << Color::Code::FG_DEFAULT << "] " << e.what()
584 << std::endl
585 << std::endl;
586
587 if (versionOpt->count() > 0) {
588 throw CLI::CallForVersion();
589 }
590 if (helpTriggerApp != nullptr) {
591 throw CLI::CallForHelp();
592 }
593 if (showConfigTriggerApp != nullptr) {
594 std::cout << getConfig(showConfigTriggerApp);
595 } else if (commandlineTriggerApp != nullptr) {
597 }
598 } else {
600 throw;
601 }
602 }
603 } catch (const DaemonError& e) {
604 std::cout << std::string{"["} << Color::Code::FG_RED << "Error" << Color::Code::FG_DEFAULT << "] Daemonize: " << e.what()
605 << " ... exiting" << std::endl;
606 } catch (const DaemonFailure& e) {
607 std::cout << std::string{"["} << Color::Code::FG_RED << "Failure" << Color::Code::FG_DEFAULT << "] Daemonize: " << e.what()
608 << " ... exiting" << std::endl;
609 } catch (const DaemonSignaled& e) {
610 std::cout << "Pid: " << getpid() << ", child pid: " << e.getPid() << ": " << e.what() << std::endl;
611 } catch (const CLI::CallForHelp&) {
612 std::cout << getHelp(this, helpTriggerApp);
613 } catch (const CLI::CallForVersion&) {
614 std::cout << version() << std::endl << std::endl;
615 } catch (const CLI::ConversionError& e) {
616 std::cout << std::string{"["} << Color::Code::FG_RED << e.get_name() << Color::Code::FG_DEFAULT << "] " << e.what()
617 << std::endl;
618 throw;
619 } catch (const CLI::ArgumentMismatch& e) {
620 std::cout << std::string{"["} << Color::Code::FG_RED << e.get_name() << Color::Code::FG_DEFAULT << "] " << e.what()
621 << std::endl;
622 throw;
623 } catch (const CLI::ConfigError& e) {
624 std::cout << std::string{"["} << Color::Code::FG_RED << e.get_name() << Color::Code::FG_DEFAULT << "] " << e.what()
625 << std::endl;
626 std::cout << " Adding '-w' on the command line may solve this problem" << std::endl;
627 throw;
628 } catch (const CLI::ParseError& e) {
629 const std::string what = e.what();
630 if (what.find("[Option Group: ") != std::string::npos) { // If CLI11 throws that error it means for us there are
631 // unconfigured anonymous instances
632 std::cout << Color::Code::FG_RED << e.get_name() << Color::Code::FG_DEFAULT
633 << " Anonymous instance(s) not configured in source code " << std::endl;
634 } else {
635 std::cout << std::string{"["} << Color::Code::FG_RED << e.get_name() << Color::Code::FG_DEFAULT << "] " << what
636 << std::endl;
637 }
638 throw;
639 }
640 } catch ([[maybe_unused]] const CLI::ParseError& e) {
641 std::cout << std::endl << "Append -h or --help to your command line for more information." << std::endl;
642 } catch (const CLI::Error& e) {
643 std::cout << std::string{"["} << Color::Code::FG_RED << e.get_name() << Color::Code::FG_DEFAULT << "] " << e.what()
644 << std::endl;
645
646 std::cout << std::endl << "Append -h or --help to your command line for more information." << std::endl;
647 }
648
649 return proceed;
650 }
bool parse1(int argc, char *argv[])
Definition Config.cpp:468
std::string version() const
CLI::Option * getOption(const std::string &name) const
static std::map< std::string, std::string > aliases
Definition SubCommand.h:235
void parse(int argc, char *argv[])
@ FG_DEFAULT
Definition Logger.h:69
static std::string doWriteConfig(utils::SubCommand *subCommand)
Definition Config.cpp:304
static std::string getHelp(utils::SubCommand *subCommand, CLI::App *helpTriggerApp)
Definition Config.cpp:333
static std::string getConfig(CLI::App *configTriggeredApp)
Definition Config.cpp:291
static std::string getCommandLine(CLI::App *commandlineTriggerApp)
Definition Config.cpp:246

References utils::SubCommand::aliases, utils::SubCommand::commandlineTriggerApp, utils::doWriteConfig(), Color::FG_DEFAULT, Color::FG_RED, utils::getCommandLine(), utils::getConfig(), utils::getHelp(), utils::SubCommand::getOption(), utils::DaemonSignaled::getPid(), utils::SubCommand::helpTriggerApp, utils::SubCommand::parse(), logger::Logger::setQuiet(), utils::SubCommand::showConfigTriggerApp, utils::SubCommand::version(), and versionOpt.

Referenced by bootstrap(), and parse1().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ terminate()

void utils::ConfigRoot::terminate ( )

Definition at line 528 of file Config.cpp.

528 {
529 if (daemonizeOpt->as<bool>()) {
530 std::ifstream pidFile(pidDirectory + "/" + applicationName + ".pid", std::ifstream::in);
531
532 if (pidFile.good()) {
533 pid_t pid = 0;
534 pidFile >> pid;
535
536 if (getpid() == pid) {
538 }
539 }
540 } else if (fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK) >= 0) {
541 char buf[1024];
542 while (read(STDIN_FILENO, buf, 1024) > 0) {
543 }
544 }
545 }
static void erasePidFile(const std::string &pidFileName)
Definition Daemon.cpp:200
ssize_t read(int fd, void *buf, std::size_t count)
Definition unistd.cpp:57

References applicationName, daemonizeOpt, utils::Daemon::erasePidFile(), and pidDirectory.

Referenced by utils::Config::terminate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Config

friend class Config
friend

Definition at line 97 of file Config.h.

Member Data Documentation

◆ aliasOpt

CLI::Option* utils::ConfigRoot::aliasOpt = nullptr
private

Definition at line 95 of file Config.h.

Referenced by addRootOptions().

◆ applicationName

std::string utils::ConfigRoot::applicationName
private

Definition at line 80 of file Config.h.

Referenced by addRootOptions(), bootstrap(), and terminate().

◆ daemonizeOpt

CLI::Option* utils::ConfigRoot::daemonizeOpt = nullptr
private

Definition at line 83 of file Config.h.

Referenced by addRootOptions(), bootstrap(), and terminate().

◆ enforceLogFileOpt

CLI::Option* utils::ConfigRoot::enforceLogFileOpt = nullptr
private

Definition at line 88 of file Config.h.

Referenced by addRootOptions(), and bootstrap().

◆ groupNameOpt

CLI::Option* utils::ConfigRoot::groupNameOpt = nullptr
private

Definition at line 87 of file Config.h.

Referenced by addRootOptions(), and bootstrap().

◆ killOpt

CLI::Option* utils::ConfigRoot::killOpt = nullptr
private

Definition at line 94 of file Config.h.

Referenced by addRootOptions(), and parse1().

◆ logFileOpt

CLI::Option* utils::ConfigRoot::logFileOpt = nullptr
private

Definition at line 84 of file Config.h.

Referenced by addRootOptions(), and bootstrap().

◆ logLevelOpt

CLI::Option* utils::ConfigRoot::logLevelOpt = nullptr
private

Definition at line 89 of file Config.h.

Referenced by addRootOptions(), utils::Config::getLogLevel(), and parse1().

◆ monochromLogOpt

CLI::Option* utils::ConfigRoot::monochromLogOpt = nullptr
private

Definition at line 85 of file Config.h.

Referenced by addRootOptions().

◆ pidDirectory

std::string utils::ConfigRoot::pidDirectory
private

Definition at line 81 of file Config.h.

Referenced by addRootOptions(), bootstrap(), parse1(), and terminate().

◆ quietOpt

CLI::Option* utils::ConfigRoot::quietOpt = nullptr
private

Definition at line 91 of file Config.h.

Referenced by addRootOptions(), and parse1().

◆ userNameOpt

CLI::Option* utils::ConfigRoot::userNameOpt = nullptr
private

Definition at line 86 of file Config.h.

Referenced by addRootOptions(), and bootstrap().

◆ verboseLevelOpt

CLI::Option* utils::ConfigRoot::verboseLevelOpt = nullptr
private

Definition at line 90 of file Config.h.

Referenced by addRootOptions(), utils::Config::getVerboseLevel(), and parse1().

◆ versionOpt

CLI::Option* utils::ConfigRoot::versionOpt = nullptr
private

Definition at line 92 of file Config.h.

Referenced by addRootOptions(), parse1(), and parse2().

◆ writeConfigOpt

CLI::Option* utils::ConfigRoot::writeConfigOpt = nullptr
private

Definition at line 93 of file Config.h.

Referenced by addRootOptions(), and bootstrap().


The documentation for this class was generated from the following files: