Kea 2.7.5
d_controller.h
Go to the documentation of this file.
1// Copyright (C) 2013-2024 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#ifndef D_CONTROLLER_H
8#define D_CONTROLLER_H
9
10#include <asiolink/io_service.h>
12#include <cc/data.h>
14#include <log/logger_support.h>
15#include <process/daemon.h>
16#include <process/d_log.h>
17#include <process/d_process.h>
18
19#include <boost/shared_ptr.hpp>
20#include <boost/noncopyable.hpp>
21
22#include <string>
23#include <set>
24
25namespace isc {
26namespace process {
27
31public:
32 InvalidUsage(const char* file, size_t line, const char* what) :
33 isc::Exception(file, line, what) { }
34};
35
42public:
43 VersionMessage(const char* file, size_t line, const char* what) :
44 isc::Exception(file, line, what) { }
45};
46
49public:
50 LaunchError (const char* file, size_t line, const char* what) :
51 isc::Exception(file, line, what) { }
52};
53
56public:
57 ProcessInitError (const char* file, size_t line, const char* what) :
58 isc::Exception(file, line, what) { }
59};
60
64public:
65 ProcessRunError (const char* file, size_t line, const char* what) :
66 isc::Exception(file, line, what) { }
67};
68
71public:
72 DControllerBaseError (const char* file, size_t line, const char* what) :
73 isc::Exception(file, line, what) { }
74};
75
77class DControllerBase;
78typedef boost::shared_ptr<DControllerBase> DControllerBasePtr;
79
103class DControllerBase : public Daemon {
104public:
110 DControllerBase(const char* app_name, const char* bin_name);
111
113 virtual ~DControllerBase();
114
117 std::string getVersion(bool extended);
118
152 virtual int launch(int argc, char* argv[], const bool test_mode);
153
166 new_config);
167
181 new_config);
182
217
221 std::string getAppName() const {
222 return (app_name_);
223 }
224
228 std::string getBinName() const {
229 return (bin_name_);
230 }
231
241 versionGetHandler(const std::string& command,
243
253 buildReportHandler(const std::string& command,
255
265 configGetHandler(const std::string& command,
267
277 configHashGetHandler(const std::string& command,
279
294 configWriteHandler(const std::string& command,
296
306 configTestHandler(const std::string& command,
308
318 configReloadHandler(const std::string& command,
320
330 configSetHandler(const std::string& command,
332
341 shutdownHandler(const std::string& command,
343
353 serverTagGetHandler(const std::string& command,
355
366 statusGetHandler(const std::string& command,
368
369protected:
381 virtual bool customOption(int option, char *optarg);
382
392
398 virtual const std::string getUsageText() const {
399 return ("");
400 }
401
408 virtual const std::string getCustomOpts() const {
409 return ("");
410 }
411
417 void checkConfigOnly();
418
434 virtual void processSignal(int signum);
435
439 bool isVerbose() const {
440 return (verbose_);
441 }
442
446 void setVerbose(bool value) {
447 verbose_ = value;
448 }
449
453 bool isCheckOnly() const {
454 return (check_only_);
455 }
456
462 void setCheckOnly(bool value) {
463 check_only_ = value;
464 }
465
470 return (io_service_);
471 }
472
478 return (controller_);
479 }
480
487 static void setController(const DControllerBasePtr& controller);
488
503 void parseArgs(int argc, char* argv[]);
504
520 virtual isc::data::ConstElementPtr parseFile(const std::string& file_name);
521
537 virtual isc::data::ConstElementPtr parseText(const std::string& input) {
538 static_cast<void>(input); // just tu shut up the unused parameter warning
540 return (elements);
541 }
542
551 void initProcess();
552
561 // @throw throws DControllerBaseError or indirectly DProcessBaseError
562 void runProcess();
563
583
589 void initSignalHandling();
590
595 return (process_);
596 }
597
602 void usage(const std::string& text);
603
611 virtual std::string getVersionAddendum() { return (std::string()); }
612
621
622private:
626 std::string app_name_;
627
631 std::string bin_name_;
632
634 bool verbose_;
635
638 bool check_only_;
639
644 DProcessBasePtr process_;
645
647 isc::asiolink::IOServicePtr io_service_;
648
650 isc::asiolink::IOSignalSetPtr io_signal_set_;
651
653 static DControllerBasePtr controller_;
654
655 // DControllerTest is named a friend class to facilitate unit testing while
656 // leaving the intended member scopes intact.
657 friend class DControllerTest;
658
660 struct ExhaustOptions {
661 ExhaustOptions(int argc, char* argv[], std::string opts)
662 : argc_(argc), argv_(argv), opts_(opts) {
663 }
664 ~ExhaustOptions() {
665 while (getopt(argc_, argv_, opts_.c_str()) != -1) {
666 }
667 }
668
669 private:
670 int argc_;
671 char** argv_;
672 std::string opts_;
673 };
674};
675
676} // namespace process
677} // namespace isc
678
679#endif
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Exception thrown when the controller encounters an operational error.
DControllerBaseError(const char *file, size_t line, const char *what)
Application Controller.
void setVerbose(bool value)
Method for enabling or disabling verbose logging.
isc::data::ConstElementPtr configReloadHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for config-reload command
isc::data::ConstElementPtr buildReportHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for 'build-report' command
void runProcess()
Invokes the application process's event loop,(DBaseProcess::run).
void initProcess()
Instantiates the application process and then initializes it.
virtual std::string getVersionAddendum()
Fetches text containing additional version specifics.
isc::data::ConstElementPtr statusGetHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for status-get command
asiolink::IOServicePtr & getIOService()
Getter for fetching the controller's IOService.
static DControllerBasePtr & getController()
Static getter which returns the singleton instance.
isc::data::ConstElementPtr shutdownProcess(isc::data::ConstElementPtr args)
Initiates shutdown procedure.
virtual const std::string getCustomOpts() const
Virtual method which returns a string containing the option letters for any custom command line optio...
virtual void processSignal(int signum)
Application-level signal processing method.
std::string getBinName() const
Fetches the name of the application executable.
virtual ~DControllerBase()
Destructor.
isc::data::ConstElementPtr configWriteHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for config-write command
static void setController(const DControllerBasePtr &controller)
Static setter which sets the singleton instance.
std::string handleOtherObjects(isc::data::ConstElementPtr args)
Deals with other (i.e.
isc::data::ConstElementPtr versionGetHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for version-get command
isc::data::ConstElementPtr configSetHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for config-set command
void initSignalHandling()
Initializes signal handling.
virtual const std::string getUsageText() const
Virtual method which can be used to contribute derivation specific usage text.
virtual isc::data::ConstElementPtr checkConfig(isc::data::ConstElementPtr new_config)
Instance method invoked by the configuration event handler and which processes the actual configurati...
bool isVerbose() const
Supplies whether or not verbose logging is enabled.
virtual DProcessBase * createProcess()=0
Abstract method that is responsible for instantiating the application process object.
bool isCheckOnly() const
Supplies whether or not check only mode is enabled.
void setCheckOnly(bool value)
Method for enabling or disabling check only mode.
isc::data::ConstElementPtr configGetHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for config-get command
virtual int launch(int argc, char *argv[], const bool test_mode)
Acts as the primary entry point into the controller execution and provides the outermost application ...
DProcessBasePtr getProcess()
Fetches the current process.
void parseArgs(int argc, char *argv[])
Processes the command line arguments.
virtual isc::data::ConstElementPtr parseText(const std::string &input)
Parse text into Elements.
virtual bool customOption(int option, char *optarg)
Virtual method that provides derivations the opportunity to support additional command line options.
isc::data::ConstElementPtr configHashGetHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for config-hash-get command
isc::data::ConstElementPtr configTestHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for config-test command
isc::data::ConstElementPtr serverTagGetHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for server-tag-get command
std::string getAppName() const
Fetches the name of the application under control.
virtual isc::data::ConstElementPtr parseFile(const std::string &file_name)
Parse a given file into Elements.
virtual isc::data::ConstElementPtr configFromFile()
Reconfigures the process from a configuration file.
std::string getVersion(bool extended)
returns Kea version on stdout and exit.
DControllerBase(const char *app_name, const char *bin_name)
Constructor.
virtual isc::data::ConstElementPtr updateConfig(isc::data::ConstElementPtr new_config)
Instance method invoked by the configuration event handler and which processes the actual configurati...
void checkConfigOnly()
Check the configuration.
isc::data::ConstElementPtr shutdownHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for 'shutdown' command
Application Process Interface.
Definition d_process.h:75
Base class for all services.
Definition daemon.h:48
Exception thrown when the command line is invalid.
InvalidUsage(const char *file, size_t line, const char *what)
Exception thrown when the controller launch fails.
LaunchError(const char *file, size_t line, const char *what)
Exception thrown when the application process fails.
ProcessInitError(const char *file, size_t line, const char *what)
Exception thrown when the application process encounters an operation in its event loop (i....
ProcessRunError(const char *file, size_t line, const char *what)
Exception used to convey version info upwards.
VersionMessage(const char *file, size_t line, const char *what)
void usage()
Print Usage.
Logging initialization functions.
boost::shared_ptr< const Element > ConstElementPtr
Definition data.h:29
boost::shared_ptr< DProcessBase > DProcessBasePtr
Defines a shared pointer to DProcessBase.
Definition d_process.h:211
boost::shared_ptr< DControllerBase > DControllerBasePtr
Defines the logger used by the top-level component of kea-lfc.