Kea 1.5.0
d_controller.h
Go to the documentation of this file.
1// Copyright (C) 2013-2018 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>
11#include <cc/data.h>
13#include <log/logger_support.h>
14#include <process/daemon.h>
15#include <process/d_log.h>
16#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
76
78class DControllerBase;
79typedef boost::shared_ptr<DControllerBase> DControllerBasePtr;
80
104class DControllerBase : public Daemon {
105public:
111 DControllerBase(const char* app_name, const char* bin_name);
112
114 virtual ~DControllerBase();
115
118 std::string getVersion(bool extended);
119
151 virtual void launch(int argc, char* argv[], const bool test_mode);
152
165 new_config);
166
180 new_config);
181
220
224 std::string getAppName() const {
225 return (app_name_);
226 }
227
231 std::string getBinName() const {
232 return (bin_name_);
233 }
234
244 versionGetHandler(const std::string& command,
246
256 buildReportHandler(const std::string& command,
258
268 configGetHandler(const std::string& command,
270
285 configWriteHandler(const std::string& command,
287
297 configTestHandler(const std::string& command,
299
308 shutdownHandler(const std::string& command,
310
311protected:
323 virtual bool customOption(int option, char *optarg);
324
334
340 virtual const std::string getUsageText() const {
341 return ("");
342 }
343
350 virtual const std::string getCustomOpts() const {
351 return ("");
352 }
353
359 void checkConfigOnly();
360
377 virtual void processSignal(int signum);
378
382 bool isVerbose() const {
383 return (verbose_);
384 }
385
389 void setVerbose(bool value) {
390 verbose_ = value;
391 }
392
396 bool isCheckOnly() const {
397 return (check_only_);
398 }
399
405 void setCheckOnly(bool value) {
406 check_only_ = value;
407 }
408
413 return (io_service_);
414 }
415
421 return (controller_);
422 }
423
430 static void setController(const DControllerBasePtr& controller);
431
446 void parseArgs(int argc, char* argv[]);
447
448
464 virtual isc::data::ConstElementPtr parseFile(const std::string& file_name);
465
481 virtual isc::data::ConstElementPtr parseText(const std::string& input) {
482 static_cast<void>(input); // just tu shut up the unused parameter warning
484 return (elements);
485 }
486
495 void initProcess();
496
505 // @throw throws DControllerBaseError or indirectly DProcessBaseError
506 void runProcess();
507
527
534 void initSignalHandling();
535
548 bool osSignalHandler(int signum);
549
560 void ioSignalHandler(IOSignalId sequence_id);
561
566 return (process_);
567 }
568
573 void usage(const std::string& text);
574
582 virtual std::string getVersionAddendum() { return (""); }
583
584private:
588 std::string app_name_;
589
593 std::string bin_name_;
594
596 bool verbose_;
597
600 bool check_only_;
601
606 DProcessBasePtr process_;
607
609 asiolink::IOServicePtr io_service_;
610
612 IOSignalQueuePtr io_signal_queue_;
613
615 static DControllerBasePtr controller_;
616
617// DControllerTest is named a friend class to facilitate unit testing while
618// leaving the intended member scopes intact.
619friend class DControllerTest;
620};
621
622}; // namespace isc::process
623}; // namespace isc
624
625#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.
Definition: d_controller.h:70
DControllerBaseError(const char *file, size_t line, const char *what)
Definition: d_controller.h:72
Application Controller.
Definition: d_controller.h:104
void setVerbose(bool value)
Method for enabling or disabling verbose logging.
Definition: d_controller.h:389
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.
Definition: d_controller.h:582
asiolink::IOServicePtr & getIOService()
Getter for fetching the controller's IOService.
Definition: d_controller.h:412
static DControllerBasePtr & getController()
Static getter which returns the singleton instance.
Definition: d_controller.h:420
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...
Definition: d_controller.h:350
virtual void processSignal(int signum)
Application-level signal processing method.
std::string getBinName() const
Fetches the name of the application executable.
Definition: d_controller.h:231
virtual ~DControllerBase()
Destructor.
bool osSignalHandler(int signum)
Handler for processing OS-level signals.
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.
Definition: d_controller.cc:39
isc::data::ConstElementPtr versionGetHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for version-get command
void ioSignalHandler(IOSignalId sequence_id)
Handler for processing IOSignals.
void initSignalHandling()
Initializes signal handling.
virtual const std::string getUsageText() const
Virtual method which can be used to contribute derivation specific usage text.
Definition: d_controller.h:340
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.
Definition: d_controller.h:382
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.
Definition: d_controller.h:396
void setCheckOnly(bool value)
Method for enabling or disabling check only mode.
Definition: d_controller.h:405
isc::data::ConstElementPtr configGetHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for config-get command
DProcessBasePtr getProcess()
Fetches the current process.
Definition: d_controller.h:565
void parseArgs(int argc, char *argv[])
Processes the command line arguments.
virtual isc::data::ConstElementPtr parseText(const std::string &input)
Parse text into Elements.
Definition: d_controller.h:481
virtual bool customOption(int option, char *optarg)
Virtual method that provides derivations the opportunity to support additional command line options.
isc::data::ConstElementPtr configTestHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for config-test command
std::string getAppName() const
Fetches the name of the application under control.
Definition: d_controller.h:224
virtual isc::data::ConstElementPtr parseFile(const std::string &file_name)
Parse a given file into Elements.
Definition: d_controller.cc:51
virtual isc::data::ConstElementPtr configFromFile()
Reconfigures the process from a configuration file.
std::string getVersion(bool extended)
returns Kea version on stdout and exit.
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.
virtual void launch(int argc, char *argv[], const bool test_mode)
Acts as the primary entry point into the controller execution and provides the outermost application ...
Definition: d_controller.cc:57
isc::data::ConstElementPtr shutdownHandler(const std::string &command, isc::data::ConstElementPtr args)
handler for 'shutdown' command
Application Process Interface.
Definition: d_process.h:67
Base class for all services.
Definition: daemon.h:49
Exception thrown when the command line is invalid.
Definition: d_controller.h:30
InvalidUsage(const char *file, size_t line, const char *what)
Definition: d_controller.h:32
Exception thrown when the controller launch fails.
Definition: d_controller.h:48
LaunchError(const char *file, size_t line, const char *what)
Definition: d_controller.h:50
Exception thrown when the application process fails.
Definition: d_controller.h:55
ProcessInitError(const char *file, size_t line, const char *what)
Definition: d_controller.h:57
Exception thrown when the application process encounters an operation in its event loop (i....
Definition: d_controller.h:63
ProcessRunError(const char *file, size_t line, const char *what)
Definition: d_controller.h:65
Exception used to convey version info upwards.
Definition: d_controller.h:41
VersionMessage(const char *file, size_t line, const char *what)
Definition: d_controller.h:43
void usage()
Print Usage.
Logging initialization functions.
boost::shared_ptr< const Element > ConstElementPtr
Definition: data.h:23
boost::shared_ptr< IOSignalQueue > IOSignalQueuePtr
Defines a pointer to an IOSignalQueue.
uint64_t IOSignalId
Defines a unique identifier type for IOSignal.
boost::shared_ptr< DProcessBase > DProcessBasePtr
Defines a shared pointer to DProcessBase.
Definition: d_process.h:201
boost::shared_ptr< DControllerBase > DControllerBasePtr
Definition: d_controller.h:79
Defines the logger used by the top-level component of kea-dhcp-ddns.