LCOV - code coverage report
Current view: top level - root/contrail/src/contrail-analytics/contrail-collector - options.cc (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 436 476 91.6 %
Date: 2026-11-09 02:10:49 Functions: 8 9 88.9 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
       3             :  * Copyright Contributors to the OpenSDN project
       4             :  */
       5             : #include "options.h"
       6             : 
       7             : #include <fstream>
       8             : #include <iostream>
       9             : #include <boost/foreach.hpp>
      10             : #include <boost/assign/list_of.hpp>
      11             : #include <boost/assign/list_of.hpp>
      12             : #include <boost/functional/hash.hpp>
      13             : 
      14             : #include <analytics/buildinfo.h>
      15             : #include "base/contrail_ports.h"
      16             : #include "base/logging.h"
      17             : #include "base/misc_utils.h"
      18             : #include "base/address_util.h"
      19             : #include "base/util.h"
      20             : #include <base/options_util.h>
      21             : #include <analytics/viz_constants.h>
      22             : #include <database/gendb_constants.h>
      23             : 
      24             : #include "config-client-mgr/config_client_manager.h"
      25             : 
      26             : using namespace std;
      27             : using namespace boost::asio::ip;
      28             : using namespace boost::assign;
      29             : namespace opt = boost::program_options;
      30             : using namespace options::util;
      31             : 
      32             : // Process command line options for collector   .
      33           8 : Options::Options() {
      34           8 : }
      35             : 
      36           8 : bool Options::Parse(EventManager &evm, int argc, char *argv[]) {
      37          16 :     opt::options_description cmdline_options("Allowed options");
      38           8 :     Initialize(evm, cmdline_options);
      39             : 
      40           8 :     Process(argc, argv, cmdline_options);
      41           8 :     return true;
      42           8 : }
      43             : 
      44             : // Initialize collector's command line option tags with appropriate default
      45             : // values. Options can from a config file as well. By default, we read
      46             : // options from /etc/contrail/contrail-collector.conf
      47           8 : void Options::Initialize(EventManager &evm,
      48             :                          opt::options_description &cmdline_options) {
      49           8 :     boost::system::error_code error;
      50           8 :     string hostname = ResolveCanonicalName();
      51           8 :     string host_ip = GetHostIp(evm.io_service(), hostname);
      52             : 
      53           8 :     if (host_ip.empty()) {
      54             :         cout << "Error! Cannot resolve host " << hostname <<
      55           0 :                 "to a valid IP address";
      56           0 :         exit(-1);
      57             :     }
      58             : 
      59             :     map<string, vector<string> >::const_iterator it =
      60           8 :         g_vns_constants.ServicesDefaultConfigurationFiles.find(
      61             :             g_vns_constants.SERVICE_COLLECTOR);
      62           8 :     assert(it != g_vns_constants.ServicesDefaultConfigurationFiles.end());
      63           8 :     const vector<string> &conf_files(it->second);
      64             : 
      65          16 :     opt::options_description generic("Generic options");
      66             : 
      67             :     // Command line only options.
      68           8 :     ostringstream conf_files_oss;
      69           8 :     bool first = true;
      70          56 :     BOOST_FOREACH(const string &cfile, conf_files) {
      71          24 :         if (first) {
      72           8 :             conf_files_oss << cfile;
      73           8 :             first = false;
      74             :         } else {
      75          16 :             conf_files_oss << ", " << cfile;
      76             :         }
      77             :     }
      78           8 :     generic.add_options()
      79          16 :         ("conf_file", opt::value<vector<string> >()->default_value(
      80          16 :              conf_files, conf_files_oss.str()),
      81             :              "Configuration file")
      82           8 :          ("help", "help message")
      83           8 :         ("version", "Display version information")
      84             :     ;
      85             : 
      86           8 :     uint16_t default_redis_port = ContrailPorts::RedisUvePort();
      87           8 :     uint16_t default_ks_port = ContrailPorts::KeystonePort();
      88           8 :     uint16_t default_collector_port = ContrailPorts::CollectorPort();
      89             :     uint16_t default_collector_structured_syslog_port =
      90           8 :         ContrailPorts::CollectorStructuredSyslogPort();
      91           8 :     uint16_t default_partitions = 15;
      92           8 :     uint16_t default_http_server_port = ContrailPorts::HttpPortCollector();
      93           8 :     uint32_t default_disk_usage_percentage_high_watermark0 = 90;
      94           8 :     uint32_t default_disk_usage_percentage_low_watermark0 = 85;
      95           8 :     uint32_t default_disk_usage_percentage_high_watermark1 = 80;
      96           8 :     uint32_t default_disk_usage_percentage_low_watermark1 = 75;
      97           8 :     uint32_t default_disk_usage_percentage_high_watermark2 = 70;
      98           8 :     uint32_t default_disk_usage_percentage_low_watermark2 = 60;
      99           8 :     uint32_t default_pending_compaction_tasks_high_watermark0 = 400;
     100           8 :     uint32_t default_pending_compaction_tasks_low_watermark0 = 300;
     101           8 :     uint32_t default_pending_compaction_tasks_high_watermark1 = 200;
     102           8 :     uint32_t default_pending_compaction_tasks_low_watermark1 = 150;
     103           8 :     uint32_t default_pending_compaction_tasks_high_watermark2 = 100;
     104           8 :     uint32_t default_pending_compaction_tasks_low_watermark2 = 80;
     105           8 :     std::string default_high_watermark0_message_severity_level = "SYS_EMERG";
     106           8 :     std::string default_low_watermark0_message_severity_level = "SYS_ALERT";
     107           8 :     std::string default_high_watermark1_message_severity_level = "SYS_ERR";
     108           8 :     std::string default_low_watermark1_message_severity_level = "SYS_WARN";
     109           8 :     std::string default_high_watermark2_message_severity_level = "SYS_DEBUG";
     110           8 :     std::string default_low_watermark2_message_severity_level = "INVALID";
     111             : 
     112           8 :     vector<string> default_cassandra_server_list;
     113           8 :     string default_cassandra_server;
     114           8 :     default_cassandra_server_list.push_back(default_cassandra_server);
     115             : 
     116             :     // e.g. "ModuleClientState-max_sm_queue_count:AggProxySumAnomalyEWM01:AggProxySum"
     117             : 
     118           8 :     vector<string> default_kafka_broker_list;
     119           8 :     default_kafka_broker_list.push_back("");
     120             : 
     121           8 :     string default_api_server("127.0.0.1:8082");
     122           8 :     vector<string> default_api_server_list = list_of(default_api_server);
     123             : 
     124           8 :     vector<string> default_structured_syslog_tcp_forward_destination;
     125           8 :     default_structured_syslog_tcp_forward_destination.push_back("");
     126             : 
     127           8 :     vector<string> default_structured_syslog_kafka_broker_list;
     128           8 :     default_structured_syslog_kafka_broker_list.push_back("");
     129             : 
     130           8 :     string default_structured_syslog_kafka_topic("structured_syslog");
     131           8 :     uint16_t default_structured_syslog_kafka_partitions = 30;
     132           8 :     uint64_t default_structured_syslog_active_session_map_limit = 1000000;
     133             : 
     134             :     // Command line and config file options.
     135          16 :     opt::options_description cassandra_config("Cassandra Configuration options");
     136           8 :     cassandra_config.add_options()
     137          16 :         ("CASSANDRA.cassandra_user", opt::value<string>()->default_value(""),
     138             :               "Cassandra user name")
     139          16 :         ("CASSANDRA.cassandra_password", opt::value<string>()->default_value(""),
     140             :               "Cassandra password")
     141           8 :         ("CASSANDRA.cassandra_use_ssl", opt::bool_switch(&cassandra_options_.use_ssl_),
     142             :               "SSL communication enable/disable with Cassandra")
     143          16 :         ("CASSANDRA.cassandra_ca_certs", opt::value<string>()->default_value(""),
     144             :               "Path to file with CA certificates")
     145          16 :         ("CASSANDRA.compaction_strategy",
     146           8 :             opt::value<string>()->default_value(
     147             :                 GenDb::g_gendb_constants.SIZE_TIERED_COMPACTION_STRATEGY),
     148             :             "Cassandra compaction strategy")
     149           8 :         ("CASSANDRA.flow_tables.compaction_strategy",
     150           8 :             opt::value<string>()->default_value(
     151             :                 GenDb::g_gendb_constants.DATE_TIERED_COMPACTION_STRATEGY),
     152             :             "Cassandra compaction strategy for flow tables");
     153             : 
     154             :     // Command line and config file options.
     155          16 :     opt::options_description database_config("Database Configuration options");
     156           8 :     database_config.add_options()
     157          16 :         ("DATABASE.disk_usage_percentage.high_watermark0",
     158           8 :             opt::value<uint32_t>()->default_value(
     159             :                 default_disk_usage_percentage_high_watermark0),
     160             :             "Disk usage percentage high watermark 0")
     161          16 :         ("DATABASE.disk_usage_percentage.low_watermark0",
     162           8 :             opt::value<uint32_t>()->default_value(
     163             :                 default_disk_usage_percentage_low_watermark0),
     164             :             "Disk usage percentage low watermark 0")
     165          16 :         ("DATABASE.disk_usage_percentage.high_watermark1",
     166           8 :             opt::value<uint32_t>()->default_value(
     167             :                 default_disk_usage_percentage_high_watermark1),
     168             :             "Disk usage percentage high watermark 1")
     169          16 :         ("DATABASE.disk_usage_percentage.low_watermark1",
     170           8 :             opt::value<uint32_t>()->default_value(
     171             :                 default_disk_usage_percentage_low_watermark1),
     172             :             "Disk usage percentage low watermark 1")
     173          16 :         ("DATABASE.disk_usage_percentage.high_watermark2",
     174           8 :             opt::value<uint32_t>()->default_value(
     175             :                 default_disk_usage_percentage_high_watermark2),
     176             :             "Disk usage percentage high watermark 2")
     177          16 :         ("DATABASE.disk_usage_percentage.low_watermark2",
     178           8 :             opt::value<uint32_t>()->default_value(
     179             :                 default_disk_usage_percentage_low_watermark2),
     180             :             "Disk usage percentage low watermark 2")
     181          16 :         ("DATABASE.pending_compaction_tasks.high_watermark0",
     182           8 :             opt::value<uint32_t>()->default_value(
     183             :                 default_pending_compaction_tasks_high_watermark0),
     184             :             "Cassandra pending compaction tasks high watermark 0")
     185          16 :         ("DATABASE.pending_compaction_tasks.low_watermark0",
     186           8 :             opt::value<uint32_t>()->default_value(
     187             :                 default_pending_compaction_tasks_low_watermark0),
     188             :             "Cassandra pending compaction tasks low watermark 0")
     189          16 :         ("DATABASE.pending_compaction_tasks.high_watermark1",
     190           8 :             opt::value<uint32_t>()->default_value(
     191             :                 default_pending_compaction_tasks_high_watermark1),
     192             :             "Cassandra pending compaction tasks high watermark 1")
     193          16 :         ("DATABASE.pending_compaction_tasks.low_watermark1",
     194           8 :             opt::value<uint32_t>()->default_value(
     195             :                 default_pending_compaction_tasks_low_watermark1),
     196             :             "Cassandra pending compaction tasks low watermark 1")
     197          16 :         ("DATABASE.pending_compaction_tasks.high_watermark2",
     198           8 :             opt::value<uint32_t>()->default_value(
     199             :                 default_pending_compaction_tasks_high_watermark2),
     200             :             "Cassandra pending compaction tasks high watermark 2")
     201          16 :         ("DATABASE.pending_compaction_tasks.low_watermark2",
     202           8 :             opt::value<uint32_t>()->default_value(
     203             :                 default_pending_compaction_tasks_low_watermark2),
     204             :             "Cassandra pending compaction tasks low watermark 2")
     205          16 :         ("DATABASE.high_watermark0.message_severity_level",
     206           8 :             opt::value<string>()->default_value(
     207             :                 default_high_watermark0_message_severity_level),
     208             :             "High Watermark 0 Message severity level")
     209          16 :         ("DATABASE.low_watermark0.message_severity_level",
     210           8 :             opt::value<string>()->default_value(
     211             :                 default_low_watermark0_message_severity_level),
     212             :             "Low Watermark 0 Message severity level")
     213          16 :         ("DATABASE.high_watermark1.message_severity_level",
     214           8 :             opt::value<string>()->default_value(
     215             :                 default_high_watermark1_message_severity_level),
     216             :             "High Watermark 1 Message severity level")
     217          16 :         ("DATABASE.low_watermark1.message_severity_level",
     218           8 :             opt::value<string>()->default_value(
     219             :                 default_low_watermark1_message_severity_level),
     220             :             "Low Watermark 1 Message severity level")
     221          16 :         ("DATABASE.high_watermark2.message_severity_level",
     222           8 :             opt::value<string>()->default_value(
     223             :                 default_high_watermark2_message_severity_level),
     224             :             "High Watermark 2 Message severity level")
     225          16 :         ("DATABASE.low_watermark2.message_severity_level",
     226           8 :             opt::value<string>()->default_value(
     227             :                 default_low_watermark2_message_severity_level),
     228             :             "Low Watermark 2 Message severity level")
     229             : 
     230          16 :         ("DATABASE.cluster_id", opt::value<string>()->default_value(""),
     231             :              "Analytics Cluster Id")
     232          16 :         ("DATABASE.disable_all_writes",
     233           8 :             opt::bool_switch(&cassandra_options_.disable_all_db_writes_),
     234             :             "Disable all writes to the database")
     235          16 :         ("DATABASE.disable_statistics_writes",
     236           8 :             opt::bool_switch(&cassandra_options_.disable_db_stats_writes_),
     237             :             "Disable statistics writes to the database")
     238           8 :         ("DATABASE.disable_message_writes",
     239           8 :             opt::bool_switch(&cassandra_options_.disable_db_messages_writes_),
     240             :             "Disable message writes to the database")
     241             :         ;
     242             : 
     243             :     // Command line and config file options.
     244          16 :     opt::options_description collector_config("Collector Configuration options");
     245           8 :     collector_config.add_options()
     246           8 :         ("COLLECTOR.port", opt::value<uint16_t>()->default_value(
     247             :                                                 default_collector_port),
     248             :              "Listener port of sandesh collector server")
     249          16 :         ("COLLECTOR.server",
     250          16 :              opt::value<string>()->default_value("0.0.0.0"),
     251             :              "IP address of sandesh collector server")
     252          16 :         ("STRUCTURED_SYSLOG_COLLECTOR.port",
     253           8 :             opt::value<uint16_t>()->default_value(
     254             :                 default_collector_structured_syslog_port),
     255             :          "Listener port of Structured Syslog collector server")
     256          16 :         ("STRUCTURED_SYSLOG_COLLECTOR.tcp_forward_destination",
     257          16 :            opt::value<vector<string> >()->default_value(
     258             :                default_structured_syslog_tcp_forward_destination, ""),
     259             :              "Structured Syslog Forward Destination List")
     260          16 :         ("STRUCTURED_SYSLOG_COLLECTOR.kafka_broker_list",
     261          16 :            opt::value<vector<string> >()->default_value(
     262             :                default_structured_syslog_kafka_broker_list, ""),
     263             :              "Structured Syslog Kafka Broker List")
     264          16 :         ("STRUCTURED_SYSLOG_COLLECTOR.kafka_topic",
     265          16 :            opt::value<string>()->default_value(
     266             :                default_structured_syslog_kafka_topic, "structured_syslog"),
     267             :              "Structured Syslog Kafka Topic")
     268          16 :         ("STRUCTURED_SYSLOG_COLLECTOR.kafka_partitions",
     269           8 :            opt::value<uint16_t>()->default_value(
     270             :                default_structured_syslog_kafka_partitions),
     271             :              "Structured Syslog Number of Kafka Partitions")
     272           8 :         ("STRUCTURED_SYSLOG_COLLECTOR.active_session_map_limit",
     273           8 :            opt::value<uint64_t>()->default_value(
     274             :                default_structured_syslog_active_session_map_limit),
     275             :              "Structured Syslog Max Num of Active Sessions in Session Config Map")
     276             :         ;
     277             : 
     278             :     // Command line and config file options.
     279          16 :     opt::options_description config("Configuration options");
     280           8 :     config.add_options()
     281          16 :         ("DEFAULT.analytics_data_ttl",
     282          16 :              opt::value<uint64_t>()->default_value(
     283           0 :                  g_viz_constants.TtlValuesDefault.find(
     284           8 :                  TtlType::GLOBAL_TTL)->second),
     285             :              "TTL in hours for analytics data")
     286          16 :         ("DEFAULT.analytics_config_audit_ttl",
     287          16 :              opt::value<uint64_t>()->default_value(
     288           0 :                  g_viz_constants.TtlValuesDefault.find(
     289           8 :                  TtlType::CONFIGAUDIT_TTL)->second),
     290             :              "TTL in hours for analytics configuration audit data")
     291          16 :         ("DEFAULT.analytics_statistics_ttl",
     292          16 :              opt::value<uint64_t>()->default_value(
     293           0 :                  g_viz_constants.TtlValuesDefault.find(
     294           8 :                  TtlType::STATSDATA_TTL)->second),
     295             :              "TTL in hours for analytics statistics data")
     296          16 :         ("DEFAULT.analytics_flow_ttl",
     297          16 :              opt::value<uint64_t>()->default_value(
     298           0 :                  g_viz_constants.TtlValuesDefault.find(
     299           8 :                  TtlType::FLOWDATA_TTL)->second),
     300             :              "TTL in hours for analytics flow data")
     301          16 :         ("DEFAULT.cassandra_server_list",
     302           8 :            opt::value<vector<string> >()->default_value(
     303             :                default_cassandra_server_list, default_cassandra_server),
     304             :              "Cassandra server list")
     305          16 :         ("DEFAULT.zookeeper_server_list",
     306          16 :             opt::value<string>()->default_value(""),
     307             :             "Zookeeper server list")
     308          16 :         ("DEFAULT.partitions",
     309           8 :             opt::value<uint16_t>()->default_value(
     310             :                 default_partitions),
     311             :          "Number of partitions to use for publishing to kafka")
     312           8 :         ("DEFAULT.dup", opt::bool_switch(&dup_), "Internal use flag")
     313           8 :         ("DEFAULT.hostip", opt::value<string>()->default_value(host_ip),
     314             :              "IP address of collector")
     315           8 :         ("DEFAULT.hostname", opt::value<string>()->default_value(hostname),
     316             :              "Hostname of collector")
     317          16 :         ("DEFAULT.http_server_port",
     318           8 :              opt::value<uint16_t>()->default_value(default_http_server_port),
     319             :              "Sandesh HTTP listener port")
     320             : 
     321           8 :         ("DEFAULT.log_category", opt::value<string>(),
     322             :              "Category filter for local logging of sandesh messages")
     323           8 :         ("DEFAULT.log_disable", opt::bool_switch(&log_disable_),
     324             :              "Disable sandesh logging")
     325          16 :         ("DEFAULT.log_file", opt::value<string>()->default_value("<stdout>"),
     326             :              "Filename for the logs to be written to")
     327          16 :         ("DEFAULT.log_property_file", opt::value<string>()->default_value(""),
     328             :              "log4cplus property file name")
     329          16 :         ("DEFAULT.log_files_count",
     330           8 :              opt::value<int>()->default_value(10),
     331             :              "Maximum log file roll over index")
     332          16 :         ("DEFAULT.log_file_size",
     333           8 :              opt::value<long>()->default_value(1024*1024),
     334             :              "Maximum size of the log file")
     335          16 :         ("DEFAULT.log_level", opt::value<string>()->default_value("SYS_NOTICE"),
     336             :              "Severity level for local logging of sandesh messages")
     337           8 :         ("DEFAULT.log_local", opt::bool_switch(&log_local_),
     338             :              "Enable local logging of sandesh messages")
     339           8 :         ("DEFAULT.use_syslog", opt::bool_switch(&use_syslog_),
     340             :              "Enable logging to syslog")
     341          16 :         ("DEFAULT.syslog_facility", opt::value<string>()->default_value("LOG_LOCAL0"),
     342             :              "Syslog facility to receive log lines")
     343           8 :         ("DEFAULT.test_mode", opt::bool_switch(&test_mode_),
     344             :              "Enable collector to run in test-mode")
     345           8 :         ("DEFAULT.disable_flow_collection",
     346           8 :             opt::bool_switch(&disable_flow_collection_),
     347             :             "Disable flow message collection")
     348             :         ;
     349             : 
     350             :     // Command line and config file options.
     351          16 :     opt::options_description kafka_config("Kafka Configuration options");
     352           8 :     kafka_config.add_options()
     353          16 :         ("KAFKA.kafka_broker_list",
     354          16 :            opt::value<vector<string> >()->default_value(
     355             :                default_kafka_broker_list, ""),
     356             :              "kafka broker list")
     357          16 :         ("KAFKA.kafka_ssl_enable",
     358           8 :              opt::value<bool>()->default_value(false),
     359             :              "Enable SSL Encryptions for Kafka connection")
     360          16 :         ("KAFKA.kafka_keyfile", opt::value<std::string>()->default_value(
     361             :          "/etc/contrail/ssl/private/server-privkey.pem"),
     362             :          "kafka SSL private key")
     363          16 :         ("KAFKA.kafka_certfile", opt::value<std::string>()->default_value(
     364             :          "/etc/contrail/ssl/certs/server.pem"),
     365             :          "kafka SSL certificate")
     366           8 :         ("KAFKA.kafka_ca_cert", opt::value<std::string>()->default_value(
     367             :          "/etc/contrail/ssl/certs/ca-cert.pem"),
     368             :          "Kafka CA SSL certificate")
     369             :         ;
     370             : 
     371             :     // Command line and config file options.
     372          16 :     opt::options_description redis_config("Redis Configuration options");
     373           8 :     redis_config.add_options()
     374          16 :         ("REDIS.port",
     375           8 :              opt::value<uint16_t>()->default_value(default_redis_port),
     376             :              "Port of Redis-uve server")
     377          16 :         ("REDIS.server", opt::value<string>()->default_value("127.0.0.1"),
     378             :              "IP address of Redis Server")
     379           8 :         ("REDIS.password", opt::value<string>()->default_value(""),
     380             :              "password for Redis Server")
     381             :         ;
     382             : 
     383             :     // Command line and config file options.
     384          16 :     opt::options_description keystone_config("Keystone Configuration options");
     385           8 :     keystone_config.add_options()
     386          16 :         ("KEYSTONE.auth_host", opt::value<string>()->default_value("127.0.0.1"),
     387             :              "IP address of keystone Server")
     388          16 :         ("KEYSTONE.auth_port",
     389           8 :              opt::value<uint16_t>()->default_value(default_ks_port),
     390             :              "Keystone auth server port")
     391          16 :         ("KEYSTONE.auth_protocol", opt::value<string>()->default_value("http"),
     392             :              "protocol used to authenticate with Keystone Server")
     393          16 :         ("KEYSTONE.admin_user", opt::value<string>()->default_value("admin"),
     394             :              "Keystone username")
     395          16 :         ("KEYSTONE.admin_password", opt::value<string>()->default_value(
     396             :                     "admin123"), "Keystone password")
     397          16 :         ("KEYSTONE.admin_tenant_name", opt::value<string>()->default_value(
     398             :                     "tenant"), "Keystone tenant")
     399           8 :         ("KEYSTONE.insecure", opt::bool_switch(&ks_insecure_),
     400             :                     "keystone using tls")
     401          16 :         ("KEYSTONE.auth_url", opt::value<string>()->default_value("a.com"),
     402             :                     "keystone auth url")
     403          16 :         ("KEYSTONE.memcache_servers", opt::value<string>()->default_value(
     404             :                     "127.0.0.1:11211"), "memcache servers")
     405          16 :         ("KEYSTONE.certfile", opt::value<string>()->default_value(
     406             :                     "/etc/contrail/ks-cert"), "Keystone certificate")
     407          16 :         ("KEYSTONE.keyfile", opt::value<string>()->default_value(
     408             :                     "/etc/contrail/ks-key"), "Keystone private key")
     409           8 :         ("KEYSTONE.cafile", opt::value<string>()->default_value(
     410             :                     "/etc/contrail/ks-ca"), "Keystone CA chain")
     411             :         ;
     412             : 
     413           8 :     vector<string> default_config_db_server_list;
     414           8 :     string default_config_db_server(host_ip + ":9042");
     415           8 :     default_config_db_server_list.push_back(default_config_db_server);
     416             : 
     417           8 :     vector<string> default_rabbitmq_server_list;
     418           8 :     string default_rabbitmq_server(host_ip + ":5672");
     419           8 :     default_rabbitmq_server_list.push_back(default_rabbitmq_server);
     420             :     // configdb_config options.
     421          16 :     opt::options_description configdb_config("Config database Configuration options");
     422           8 :     configdb_config.add_options()
     423          16 :         ("CONFIGDB.config_db_server_list",
     424           8 :              opt::value<vector<string> >()->default_value(
     425             :              default_config_db_server_list, default_config_db_server),
     426             :              "Config database server list")
     427          16 :         ("CONFIGDB.config_db_username",
     428          16 :              opt::value<string>()->default_value(""),
     429             :              "ConfigDB user")
     430          16 :         ("CONFIGDB.config_db_password",
     431          16 :              opt::value<string>()->default_value(""),
     432             :              "ConfigDB password")
     433          16 :         ("CONFIGDB.config_db_use_ssl",
     434           8 :              opt::value<bool>()->default_value(false),
     435             :              "Use SSL for Cassandra connection")
     436          16 :         ("CONFIGDB.config_db_ca_certs",
     437          16 :              opt::value<string>()->default_value(""),
     438             :              "CA Certificate file for SSL Cassandra connection")
     439          16 :         ("CONFIGDB.rabbitmq_server_list",
     440           8 :              opt::value<vector<string> >()->default_value(
     441             :              default_rabbitmq_server_list, default_rabbitmq_server),
     442             :              "RabbitMQ server list")
     443          16 :         ("CONFIGDB.rabbitmq_user",
     444          16 :              opt::value<string>()->default_value("guest"),
     445             :              "RabbitMQ user")
     446          16 :         ("CONFIGDB.rabbitmq_password",
     447          16 :              opt::value<string>()->default_value("guest"),
     448             :              "RabbitMQ password")
     449          16 :         ("CONFIGDB.rabbitmq_vhost",
     450          16 :              opt::value<string>()->default_value(""),
     451             :              "RabbitMQ vhost")
     452          16 :         ("CONFIGDB.rabbitmq_use_ssl",
     453           8 :              opt::value<bool>()->default_value(false),
     454             :              "Use SSL for RabbitMQ connection")
     455          16 :         ("CONFIGDB.rabbitmq_ssl_version",
     456          16 :              opt::value<string>()->default_value(""),
     457             :              "SSL version for RabbitMQ connection")
     458          16 :         ("CONFIGDB.rabbitmq_ssl_keyfile",
     459          16 :              opt::value<string>()->default_value(""),
     460             :              "Keyfile for SSL RabbitMQ connection")
     461          16 :         ("CONFIGDB.rabbitmq_ssl_certfile",
     462          16 :              opt::value<string>()->default_value(""),
     463             :              "Certificate file for SSL RabbitMQ connection")
     464           8 :         ("CONFIGDB.rabbitmq_ssl_ca_certs",
     465           8 :              opt::value<string>()->default_value(""),
     466             :              "CA Certificate file for SSL RabbitMQ connection")
     467             :         ;
     468             : 
     469             :     // Command line and config file options.
     470          16 :     opt::options_description sandesh_config("Sandesh Configuration options");
     471           8 :     sandesh::options::AddOptions(&sandesh_config, &sandesh_config_);
     472             : 
     473             :     // Command line and config file options for api-server
     474          16 :     opt::options_description api_server_config("Api-Server Configuration options");
     475           8 :     api_server_config.add_options()
     476          16 :         ("API_SERVER.api_server_list",
     477           8 :          opt::value<vector<string> >()->default_value(
     478             :             default_api_server_list, default_api_server),
     479             :             "Api-Server list")
     480           8 :         ("API_SERVER.api_server_use_ssl",
     481           8 :          opt::bool_switch(&api_server_use_ssl_),
     482             :          "Use ssl for connecting to Api-Server")
     483             :         ;
     484             : 
     485           8 :     config_file_options_.add(config).add(cassandra_config)
     486           8 :         .add(database_config).add(sandesh_config).add(keystone_config).add(kafka_config)
     487           8 :         .add(collector_config).add(redis_config).add(api_server_config).add(configdb_config);
     488           8 :     cmdline_options.add(generic).add(config).add(cassandra_config)
     489           8 :         .add(database_config).add(sandesh_config).add(keystone_config).add(kafka_config)
     490           8 :         .add(collector_config).add(redis_config).add(api_server_config).add(configdb_config);
     491           8 : }
     492             : 
     493          16 : static bool ValidateCompactionStrategyOption(
     494             :     const std::string &compaction_strategy,
     495             :     const std::string &option) {
     496          25 :     if (!((compaction_strategy ==
     497           9 :         GenDb::g_gendb_constants.DATE_TIERED_COMPACTION_STRATEGY) ||
     498           9 :         (compaction_strategy ==
     499           8 :         GenDb::g_gendb_constants.LEVELED_COMPACTION_STRATEGY) ||
     500           8 :         (compaction_strategy ==
     501             :         GenDb::g_gendb_constants.SIZE_TIERED_COMPACTION_STRATEGY) ||
     502           0 :         (compaction_strategy ==
     503             :         GenDb::g_gendb_constants.TIME_WINDOW_COMPACTION_STRATEGY))) {
     504             :         cout << "Invalid " << option <<  ", please select one of [" <<
     505             :             GenDb::g_gendb_constants.DATE_TIERED_COMPACTION_STRATEGY << ", " <<
     506             :             GenDb::g_gendb_constants.LEVELED_COMPACTION_STRATEGY << ", " <<
     507             :             GenDb::g_gendb_constants.SIZE_TIERED_COMPACTION_STRATEGY << ", " <<
     508           0 :             GenDb::g_gendb_constants.TIME_WINDOW_COMPACTION_STRATEGY << "]" <<
     509           0 :             endl;
     510           0 :         return false;
     511             :     }
     512          16 :     return true;
     513             : }
     514             : 
     515          24 : uint32_t Options::GenerateHash(const std::vector<std::string> &list) {
     516          24 :     std::string concat_servers;
     517          24 :     std::vector<std::string>::const_iterator iter;
     518          48 :     for (iter = list.begin(); iter != list.end(); iter++) {
     519          24 :         concat_servers += *iter;
     520             :     }
     521             :     boost::hash<std::string> string_hash;
     522          48 :     return(string_hash(concat_servers));
     523          24 : }
     524             : 
     525           8 : uint32_t Options::GenerateHash(const ConfigClientOptions &config) {
     526           8 :     uint32_t chk_sum = GenerateHash(config.config_db_server_list);
     527           8 :     chk_sum += GenerateHash(config.rabbitmq_server_list);
     528             :     boost::hash<std::string> string_hash;
     529           8 :     chk_sum += string_hash(config.rabbitmq_user);
     530           8 :     chk_sum += string_hash(config.rabbitmq_password);
     531           8 :     chk_sum += string_hash(config.config_db_username);
     532           8 :     chk_sum += string_hash(config.config_db_password);
     533           8 :     return chk_sum;
     534             : }
     535             : 
     536             : // Process command line options. They can come from a conf file as well. Options
     537             : // from command line always overrides those that come from the config file.
     538           8 : void Options::Process(int argc, char *argv[],
     539             :         opt::options_description &cmdline_options) {
     540             :     // Process options off command line first.
     541           8 :     opt::variables_map var_map;
     542           8 :     opt::store(opt::parse_command_line(argc, argv, cmdline_options), var_map);
     543             :     // Process options off configuration file.
     544           8 :     GetOptValue< vector<string> >(var_map, config_file_,
     545             :                                   "conf_file");
     546           8 :     ifstream config_file_in;
     547          24 :     for(std::vector<int>::size_type i = 0; i != config_file_.size(); i++) {
     548          16 :         config_file_in.open(config_file_[i].c_str());
     549          16 :         if (config_file_in.good()) {
     550           8 :            opt::store(opt::parse_config_file(config_file_in, config_file_options_, true),
     551             :                    var_map);
     552             :         }
     553          16 :         config_file_in.close();
     554             :     }
     555             : 
     556           8 :     opt::notify(var_map);
     557             : 
     558           8 :     if (var_map.count("help")) {
     559           0 :         cout << cmdline_options << endl;
     560           0 :         exit(0);
     561             :     }
     562             : 
     563           8 :     if (var_map.count("version")) {
     564           0 :         cout << BuildInfo << endl;
     565           0 :         exit(0);
     566             :     }
     567             : 
     568             :     // Retrieve the options.
     569           8 :     GetOptValue<uint16_t>(var_map, collector_port_, "COLLECTOR.port");
     570           8 :     GetOptValue<string>(var_map, collector_server_, "COLLECTOR.server");
     571          16 :     GetOptValue<uint32_t>(
     572           8 :         var_map, db_write_options_.disk_usage_percentage_high_watermark0_,
     573             :         "DATABASE.disk_usage_percentage.high_watermark0");
     574          16 :     GetOptValue<uint32_t>(
     575           8 :         var_map, db_write_options_.disk_usage_percentage_low_watermark0_,
     576             :         "DATABASE.disk_usage_percentage.low_watermark0");
     577          16 :     GetOptValue<uint32_t>(
     578           8 :         var_map, db_write_options_.disk_usage_percentage_high_watermark1_,
     579             :         "DATABASE.disk_usage_percentage.high_watermark1");
     580          16 :     GetOptValue<uint32_t>(
     581           8 :         var_map, db_write_options_.disk_usage_percentage_low_watermark1_,
     582             :         "DATABASE.disk_usage_percentage.low_watermark1");
     583          16 :     GetOptValue<uint32_t>(
     584           8 :         var_map, db_write_options_.disk_usage_percentage_high_watermark2_,
     585             :         "DATABASE.disk_usage_percentage.high_watermark2");
     586          16 :     GetOptValue<uint32_t>(
     587           8 :         var_map, db_write_options_.disk_usage_percentage_low_watermark2_,
     588             :         "DATABASE.disk_usage_percentage.low_watermark2");
     589          16 :     GetOptValue<uint32_t>(
     590           8 :         var_map, db_write_options_.pending_compaction_tasks_high_watermark0_,
     591             :         "DATABASE.pending_compaction_tasks.high_watermark0");
     592          16 :     GetOptValue<uint32_t>(
     593           8 :         var_map, db_write_options_.pending_compaction_tasks_low_watermark0_,
     594             :         "DATABASE.pending_compaction_tasks.low_watermark0");
     595          16 :     GetOptValue<uint32_t>(
     596           8 :         var_map, db_write_options_.pending_compaction_tasks_high_watermark1_,
     597             :         "DATABASE.pending_compaction_tasks.high_watermark1");
     598          16 :     GetOptValue<uint32_t>(
     599           8 :         var_map, db_write_options_.pending_compaction_tasks_low_watermark1_,
     600             :         "DATABASE.pending_compaction_tasks.low_watermark1");
     601          16 :     GetOptValue<uint32_t>(
     602           8 :         var_map, db_write_options_.pending_compaction_tasks_high_watermark2_,
     603             :         "DATABASE.pending_compaction_tasks.high_watermark2");
     604          16 :     GetOptValue<uint32_t>(
     605           8 :         var_map, db_write_options_.pending_compaction_tasks_low_watermark2_,
     606             :         "DATABASE.pending_compaction_tasks.low_watermark2");
     607             : 
     608          16 :     GetOptValue<string>(
     609           8 :         var_map, db_write_options_.high_watermark0_message_severity_level_,
     610             :         "DATABASE.high_watermark0.message_severity_level");
     611          16 :     GetOptValue<string>(
     612           8 :         var_map, db_write_options_.low_watermark0_message_severity_level_,
     613             :         "DATABASE.low_watermark0.message_severity_level");
     614          16 :     GetOptValue<string>(
     615           8 :         var_map, db_write_options_.high_watermark1_message_severity_level_,
     616             :         "DATABASE.high_watermark1.message_severity_level");
     617          16 :     GetOptValue<string>(
     618           8 :         var_map, db_write_options_.low_watermark1_message_severity_level_,
     619             :         "DATABASE.low_watermark1.message_severity_level");
     620          16 :     GetOptValue<string>(
     621           8 :         var_map, db_write_options_.high_watermark2_message_severity_level_,
     622             :         "DATABASE.high_watermark2.message_severity_level");
     623          16 :     GetOptValue<string>(
     624           8 :         var_map, db_write_options_.low_watermark2_message_severity_level_,
     625             :         "DATABASE.low_watermark2.message_severity_level");
     626             : 
     627           8 :     if (GetOptValueIfNotDefaulted<uint16_t>(var_map, collector_structured_syslog_port_,
     628             :             "STRUCTURED_SYSLOG_COLLECTOR.port")) {
     629           2 :         collector_structured_syslog_port_configured_ = true;
     630             :     } else {
     631           6 :         collector_structured_syslog_port_configured_ = false;
     632             :     }
     633           8 :     GetOptValue< vector<string> >(var_map, collector_structured_syslog_tcp_forward_destination_,
     634             :                                   "STRUCTURED_SYSLOG_COLLECTOR.tcp_forward_destination");
     635             : 
     636           8 :     GetOptValue< vector<string> >(var_map, collector_structured_syslog_kafka_broker_list_,
     637             :                                   "STRUCTURED_SYSLOG_COLLECTOR.kafka_broker_list");
     638             : 
     639           8 :     GetOptValue<string>(var_map, collector_structured_syslog_kafka_topic_,
     640             :                                   "STRUCTURED_SYSLOG_COLLECTOR.kafka_topic");
     641             : 
     642           8 :     GetOptValue<uint16_t>(var_map, collector_structured_syslog_kafka_partitions_,
     643             :                                   "STRUCTURED_SYSLOG_COLLECTOR.kafka_partitions");
     644             :     
     645           8 :     GetOptValue<uint64_t>(var_map, collector_structured_syslog_active_session_map_limit_,
     646             :                                   "STRUCTURED_SYSLOG_COLLECTOR.active_session_map_limit");
     647             : 
     648           8 :     GetOptValue<uint64_t>(var_map, analytics_data_ttl_,
     649             :                      "DEFAULT.analytics_data_ttl");
     650           8 :     if (analytics_data_ttl_ == (uint64_t)-1) {
     651           0 :         analytics_data_ttl_ = g_viz_constants.TtlValuesDefault.find(TtlType::GLOBAL_TTL)->second;
     652             :     }
     653           8 :     GetOptValue<uint64_t>(var_map, analytics_config_audit_ttl_,
     654             :                      "DEFAULT.analytics_config_audit_ttl");
     655           8 :     if (analytics_config_audit_ttl_ == (uint64_t)-1) {
     656           0 :         analytics_config_audit_ttl_ = g_viz_constants.TtlValuesDefault.find(TtlType::CONFIGAUDIT_TTL)->second;
     657             :     }
     658           8 :     GetOptValue<uint64_t>(var_map, analytics_statistics_ttl_,
     659             :                      "DEFAULT.analytics_statistics_ttl");
     660           8 :     if (analytics_statistics_ttl_ == (uint64_t)-1) {
     661           0 :         analytics_statistics_ttl_ = g_viz_constants.TtlValuesDefault.find(TtlType::STATSDATA_TTL)->second;
     662             :     }
     663           8 :     GetOptValue<uint64_t>(var_map, analytics_flow_ttl_,
     664             :                      "DEFAULT.analytics_flow_ttl");
     665           8 :     if (analytics_flow_ttl_ == (uint64_t)-1) {
     666           0 :         analytics_flow_ttl_ = g_viz_constants.TtlValuesDefault.find(TtlType::FLOWDATA_TTL)->second;
     667             :     }
     668             : 
     669           8 :     GetOptValue< vector<string> >(var_map, cassandra_server_list_,
     670             :                                   "DEFAULT.cassandra_server_list");
     671           8 :     GetOptValue<string>(var_map, zookeeper_server_list_,
     672             :                         "DEFAULT.zookeeper_server_list");
     673           8 :     GetOptValue< vector<string> >(var_map, kafka_broker_list_,
     674             :                                   "KAFKA.kafka_broker_list");
     675           8 :     GetOptValue<uint16_t>(var_map, partitions_, "DEFAULT.partitions");
     676           8 :     GetOptValue<string>(var_map, host_ip_, "DEFAULT.hostip");
     677           8 :     GetOptValue<string>(var_map, hostname_, "DEFAULT.hostname");
     678           8 :     GetOptValue<uint16_t>(var_map, http_server_port_,
     679             :                           "DEFAULT.http_server_port");
     680             : 
     681           8 :     GetOptValue<string>(var_map, log_category_, "DEFAULT.log_category");
     682           8 :     GetOptValue<string>(var_map, log_file_, "DEFAULT.log_file");
     683           8 :     GetOptValue<string>(var_map, log_property_file_, "DEFAULT.log_property_file");
     684           8 :     GetOptValue<int>(var_map, log_files_count_, "DEFAULT.log_files_count");
     685           8 :     GetOptValue<long>(var_map, log_file_size_, "DEFAULT.log_file_size");
     686           8 :     GetOptValue<string>(var_map, log_level_, "DEFAULT.log_level");
     687           8 :     GetOptValue<bool>(var_map, use_syslog_, "DEFAULT.use_syslog");
     688           8 :     GetOptValue<string>(var_map, syslog_facility_, "DEFAULT.syslog_facility");
     689           8 :     GetOptValue<string>(var_map, kafka_prefix_, "DATABASE.cluster_id");
     690           8 :     GetOptValue<bool>(var_map, kafka_options_.ssl_enable, "KAFKA.kafka_ssl_enable");
     691           8 :     GetOptValue<string>(var_map, kafka_options_.keyfile, "KAFKA.kafka_keyfile");
     692           8 :     GetOptValue<string>(var_map, kafka_options_.certfile, "KAFKA.kafka_certfile");
     693           8 :     GetOptValue<string>(var_map, kafka_options_.ca_cert, "KAFKA.kafka_ca_cert");
     694           8 :     GetOptValue<uint16_t>(var_map, redis_port_, "REDIS.port");
     695           8 :     GetOptValue<string>(var_map, redis_server_, "REDIS.server");
     696           8 :     GetOptValue<string>(var_map, redis_password_, "REDIS.password");
     697             : 
     698           8 :     GetOptValue<string>(var_map, cassandra_options_.cluster_id_, "DATABASE.cluster_id");
     699             : 
     700           8 :     GetOptValue<string>(var_map, cassandra_options_.user_,
     701             :         "CASSANDRA.cassandra_user");
     702           8 :     GetOptValue<string>(var_map, cassandra_options_.password_,
     703             :         "CASSANDRA.cassandra_password");
     704           8 :     GetOptValue<bool>(var_map, cassandra_options_.use_ssl_,
     705             :         "CASSANDRA.cassandra_use_ssl");
     706           8 :     GetOptValue<string>(var_map, cassandra_options_.ca_certs_,
     707             :         "CASSANDRA.cassandra_ca_certs");
     708           8 :     GetOptValue<string>(var_map, cassandra_options_.compaction_strategy_,
     709             :         "CASSANDRA.compaction_strategy");
     710           8 :     GetOptValue<string>(var_map, cassandra_options_.replication_factor_,
     711             :         "CASSANDRA.replication_factor");
     712          16 :     if (!ValidateCompactionStrategyOption(
     713           8 :         cassandra_options_.compaction_strategy_,
     714             :         "CASSANDRA.compaction_strategy")) {
     715           0 :         exit(-1);
     716             :     }
     717          16 :     GetOptValue<string>(var_map,
     718           8 :         cassandra_options_.flow_tables_compaction_strategy_,
     719             :         "CASSANDRA.flow_tables.compaction_strategy");
     720          16 :     if (!ValidateCompactionStrategyOption(
     721           8 :         cassandra_options_.flow_tables_compaction_strategy_,
     722             :         "CASSANDRA.flow_tables.compaction_strategy")) {
     723           0 :         exit(-1);
     724             :     }
     725           8 :     GetOptValue<uint16_t>(var_map, ks_port_, "KEYSTONE.auth_port");
     726           8 :     GetOptValue<string>(var_map, ks_server_, "KEYSTONE.auth_host");
     727           8 :     GetOptValue<string>(var_map, ks_protocol_, "KEYSTONE.auth_protocol");
     728           8 :     GetOptValue<string>(var_map, ks_user_, "KEYSTONE.admin_user");
     729           8 :     GetOptValue<string>(var_map, ks_password_, "KEYSTONE.admin_password");
     730           8 :     GetOptValue<string>(var_map, ks_tenant_, "KEYSTONE.admin_tenant_name");
     731           8 :     GetOptValue<string>(var_map, ks_authurl_, "KEYSTONE.auth_url");
     732           8 :     GetOptValue<string>(var_map, memcache_servers_, "KEYSTONE.memcache_servers");
     733           8 :     GetOptValue<string>(var_map, ks_cert_, "KEYSTONE.certfile");
     734           8 :     GetOptValue<string>(var_map, ks_key_, "KEYSTONE.keyfile");
     735           8 :     GetOptValue<string>(var_map, ks_ca_, "KEYSTONE.cafile");
     736             : 
     737           8 :     sandesh::options::ProcessOptions(var_map, &sandesh_config_);
     738             : 
     739           8 :     GetOptValue< vector<string> >(var_map, api_server_list_,
     740             :                                   "API_SERVER.api_server_list");
     741           8 :     api_server_checksum_ = GenerateHash(api_server_list_);
     742           8 :     std::random_shuffle(api_server_list_.begin(), api_server_list_.end());
     743             : 
     744           8 :     GetOptValue<bool>(var_map, api_server_use_ssl_,
     745             :                       "API_SERVER.api_server_use_ssl");
     746           8 :     ParseConfigOptions(var_map);
     747           8 : }
     748             : 
     749           0 : void Options::ParseReConfig() {
     750             :     // ReParse the filtered config params
     751           0 :     opt::variables_map var_map;
     752           0 :     ifstream config_file_in;
     753           0 :     for(std::vector<int>::size_type i = 0; i != config_file_.size(); i++) {
     754           0 :         config_file_in.open(config_file_[i].c_str());
     755           0 :         if (config_file_in.good()) {
     756           0 :            opt::store(opt::parse_config_file(config_file_in,
     757           0 :                                     config_file_options_, true), var_map);
     758             :         }
     759           0 :         config_file_in.close();
     760             :     }
     761           0 :     api_server_list_.clear();
     762           0 :     GetOptValue< vector<string> >(var_map, api_server_list_,
     763             :                                   "API_SERVER.api_server_list");
     764           0 :     uint32_t new_checksum = GenerateHash(api_server_list_);
     765           0 :     if (api_server_checksum_ != new_checksum) {
     766           0 :         api_server_checksum_ = new_checksum;
     767           0 :         std::random_shuffle(api_server_list_.begin(),
     768             :                             api_server_list_.end());
     769             :     }
     770             : 
     771           0 :     uint32_t old_config_chksum = configdb_chksum_;
     772           0 :     ParseConfigOptions(var_map);
     773           0 :     if ((old_config_chksum != configdb_chksum_) && config_client_manager_) {
     774           0 :         config_client_manager_->ReinitConfigClient(configdb_options());
     775             :     }
     776           0 : }
     777             : 
     778           8 : void Options::ParseConfigOptions(const boost::program_options::variables_map
     779             :                                  &var_map) {
     780           8 :     configdb_options_.config_db_server_list.clear();
     781          16 :     GetOptValue< vector<string> >(var_map,
     782           8 :                                   configdb_options_.config_db_server_list,
     783             :                                   "CONFIGDB.config_db_server_list");
     784          16 :     GetOptValue<string>(var_map,
     785           8 :                      configdb_options_.config_db_username,
     786             :                      "CONFIGDB.config_db_username");
     787          16 :     GetOptValue<string>(var_map,
     788           8 :                      configdb_options_.config_db_password,
     789             :                      "CONFIGDB.config_db_password");
     790          16 :     GetOptValue<bool>(var_map,
     791           8 :                      configdb_options_.config_db_use_ssl,
     792             :                      "CONFIGDB.config_db_use_ssl");
     793          16 :     GetOptValue<string>(var_map,
     794           8 :                      configdb_options_.config_db_ca_certs,
     795             :                      "CONFIGDB.config_db_ca_certs");
     796           8 :     configdb_options_.rabbitmq_server_list.clear();
     797          16 :     GetOptValue< vector<string> >(var_map,
     798           8 :                      configdb_options_.rabbitmq_server_list,
     799             :                      "CONFIGDB.rabbitmq_server_list");
     800          16 :     GetOptValue<string>(var_map,
     801           8 :                      configdb_options_.rabbitmq_user,
     802             :                      "CONFIGDB.rabbitmq_user");
     803          16 :     GetOptValue<string>(var_map,
     804           8 :                      configdb_options_.rabbitmq_password,
     805             :                      "CONFIGDB.rabbitmq_password");
     806          16 :     GetOptValue<string>(var_map,
     807           8 :                      configdb_options_.rabbitmq_vhost,
     808             :                      "CONFIGDB.rabbitmq_vhost");
     809          16 :     GetOptValue<bool>(var_map,
     810           8 :                      configdb_options_.rabbitmq_use_ssl,
     811             :                      "CONFIGDB.rabbitmq_use_ssl");
     812          16 :     GetOptValue<string>(var_map,
     813           8 :                      configdb_options_.rabbitmq_ssl_version,
     814             :                      "CONFIGDB.rabbitmq_ssl_version");
     815          16 :     GetOptValue<string>(var_map,
     816           8 :                      configdb_options_.rabbitmq_ssl_keyfile,
     817             :                      "CONFIGDB.rabbitmq_ssl_keyfile");
     818          16 :     GetOptValue<string>(var_map,
     819           8 :                      configdb_options_.rabbitmq_ssl_certfile,
     820             :                      "CONFIGDB.rabbitmq_ssl_certfile");
     821          16 :     GetOptValue<string>(var_map,
     822           8 :                      configdb_options_.rabbitmq_ssl_ca_certs,
     823             :                      "CONFIGDB.rabbitmq_ssl_ca_certs");
     824           8 :     configdb_chksum_ = GenerateHash(configdb_options_);
     825           8 : }

Generated by: LCOV version 1.14