VersionCmdStr( "version" ),
VersionCmdDesc( "Print the version string and exit." ),
DaemonCmdStr( "daemon" ),
- DaemonCmdDesc( "Run the program as a deamon." ),
+ DaemonCmdDesc( "Run the evil in background." ),
DefaultConfigFileName( "pingcheck.conf" ),
ConfigFileCmdStr( "config-file" ),
ConfigFileCmdDesc( "Name of the configuration file." ),
BOOST_ASSERT( argv != NULL );
variables_map vm;
+
bool command_line_processed = process_command_line( argc, argv, vm );
+ if ( command_line_processed )
+ {
+ parse_generic_options( vm );
+
+ bool terminate_app = halt_on_generic_options( vm );
+ if ( terminate_app )
+ {
+ return false;
+ }
+ }
+
bool configuration_file_processed = process_configuration_file( vm );
bool input_processed = command_line_processed && configuration_file_processed;
- if (input_processed)
+ if ( input_processed )
{
return parse_configuration_options( vm );
}
-
- return false;
+ else
+ {
+ return false;
+ }
}
Configuration ConfigurationReader::get_configuration() const
return Config;
}
+bool ConfigurationReader::halt_on_generic_options( const variables_map &vm ) const
+{
+ bool is_help = ( vm.count( HelpCmdStr ) > 0 );
+ bool is_version = ( vm.count( VersionCmdStr ) > 0 );
+ bool terminate_app = is_help || is_version;
+
+ return terminate_app;
+}
+
options_description ConfigurationReader::get_generic_options() const
{
options_description options( "Generic options" );
return options;
}
-bool ConfigurationReader::is_generic_options( const variables_map &vm ) const
-{
- bool is_help = ( vm.count( HelpCmdStr ) > 0 );
- bool is_version = ( vm.count( VersionCmdStr ) > 0 );
- bool is_daemon = ( vm.count( DaemonCmdStr ) > 0 );
- bool is_a_generic_option = is_help || is_version || is_daemon;
-
- return is_a_generic_option;
-}
-
bool ConfigurationReader::parse_generic_options(
- const variables_map& vm,
- const options_description& visible_options
+ const variables_map& vm
)
{
- // TODO how to make clear that returning false makes the application abort
- // and returning true lets it continue processing the configuration file?
- if ( vm.count( HelpCmdStr ) )
+ // help
+ if ( vm.count( HelpCmdStr ) > 0)
{
+ options_description generic = get_generic_options();
+ options_description config = get_configuration_options();
+
+ options_description visible_options( "Allowed options" );
+ visible_options.add( generic ).add( config );
+
cout << visible_options << endl;
- return false;
+ return true;
}
- if ( vm.count( VersionCmdStr ) )
+ // version
+ if ( vm.count( VersionCmdStr ) > 0 )
{
cout << PROJECT_NAME << " version " << VERSION_STRING << endl;
- return false;
+ return true;
}
- if ( vm.count( DaemonCmdStr ) )
+ // daemon
+ bool have_daemon = ( vm.count( DaemonCmdStr ) > 0 );
+ Config.set_daemon( have_daemon );
+ cout << DaemonCmdStr << "=" << have_daemon << endl;
+
+ // config-file
+ if ( vm.count( ConfigFileCmdStr ) > 0 )
{
- Config.set_daemon( true );
- return true;
+ string config_file_name = vm[ ConfigFileCmdStr ].as<string> ();
+ Config.set_config_file_name( config_file_name );
+
+ cout << ConfigFileCmdStr << "=" << config_file_name << endl;
}
return false;
bool ConfigurationReader::parse_configuration_options( const variables_map &vm )
{
- // config-file
- if ( vm.count( ConfigFileCmdStr ) )
- {
- string config_file_name = vm[ ConfigFileCmdStr ].as<string> ();
- Config.set_config_file_name( config_file_name );
-
- cout << ConfigFileCmdStr << "=" << config_file_name << endl;
- }
-
// source-network-interface
- if ( vm.count( SourceNetworkInterfaceCmdStr ) )
+ if ( vm.count( SourceNetworkInterfaceCmdStr ) > 0 )
{
string source_network_interface =
vm[ SourceNetworkInterfaceCmdStr ].as<string> ();
}
// nameserver
- if ( vm.count( NameServerCmdStr ) )
+ if ( vm.count( NameServerCmdStr ) > 0 )
{
string nameserver = vm[ NameServerCmdStr ].as<string> ();
Config.set_nameserver( nameserver );
// hosts-down-limit
int host_down_limit = 0;
- if ( vm.count( HostsDownLimitCmdStr ) )
+ if ( vm.count( HostsDownLimitCmdStr ) > 0 )
{
host_down_limit = vm[ HostsDownLimitCmdStr ].as<int> ();
Config.set_hosts_down_limit( host_down_limit );
}
// ping-fail-limit
- if ( vm.count( PingFailLimitCmdStr ) )
+ if ( vm.count( PingFailLimitCmdStr ) > 0 )
{
int ping_fail_limit = vm[ PingFailLimitCmdStr ].as<int> ();
Config.set_ping_fail_limit( ping_fail_limit );
}
// status-notifier-cmd
- if ( vm.count( StatusNotifierCmdCmdStr ) )
+ if ( vm.count( StatusNotifierCmdCmdStr ) > 0 )
{
string status_notifier_cmd = vm[ StatusNotifierCmdCmdStr ].as<string>();
Config.set_status_notifier_cmd( status_notifier_cmd );
}
// link-up-interval
- if ( vm.count( LinkUpIntervalCmdStr ) )
+ if ( vm.count( LinkUpIntervalCmdStr ) > 0 )
{
int link_up_interval_in_min = vm[ LinkUpIntervalCmdStr ].as<int>();
Config.set_link_up_interval_in_min( link_up_interval_in_min );
// [host] name
size_t hosts_names_count = 0;
- if ( vm.count( HostNameCmdStr ) )
+ if ( vm.count( HostNameCmdStr ) > 0 )
{
vector<HostItem> hosts_list;
// [host] interval
size_t hosts_interval_count = 0;
- if ( vm.count( HostIntervalCmdStr ) )
+ if ( vm.count( HostIntervalCmdStr ) > 0 )
{
vector<HostItem> hosts_list = Config.get_hosts();
vector<HostItem>::iterator hosts_it = hosts_list.begin();
options_description cmdline_options;
cmdline_options.add( generic ).add( config );
- options_description visible( "Allowed options" );
- visible.add( generic ).add( config );
-
positional_options_description p;
(void) p.add( HostNameCmdStr.c_str(), -1 );
store( parsed_opt, vm );
notify( vm );
- if ( is_generic_options( vm ) )
- {
- return parse_generic_options( vm, visible );
- }
-
+ return true;
}
catch ( const std::exception &ex )
{
cerr << ex.what() << endl;
return false;
}
-
- return true;
}
bool ConfigurationReader::process_configuration_file( variables_map &vm )