import credentials
import datetime
from factory import BasicFactory
+from fluentd import FluentLogHandler
import importlib
import json
import log
from traffic_client import TrafficGeneratorFactory
import utils
+fluent_logger = None
class NFVBench(object):
"""Main class of NFV benchmarking tool."""
status = NFVBench.STATUS_OK
result = None
message = ''
+ if fluent_logger:
+ # take a snapshot of the current time for this new run
+ # so that all subsequent logs can relate to this run
+ fluent_logger.start_new_run()
try:
self.update_config(opts)
self.setup()
raise Exception('Please provide existing path for storing results in JSON file. '
'Path used: {path}'.format(path=self.config.std_json_path))
- self.config_plugin.validate_config(self.config)
+ self.config_plugin.validate_config(self.config, self.specs.openstack)
def parse_opts_from_cli():
def check_physnet(name, netattrs):
if not netattrs.physical_network:
raise Exception("SRIOV requires physical_network to be specified for the {n} network"
- .format(n=name))
+ .format(n=name))
if not netattrs.segmentation_id:
raise Exception("SRIOV requires segmentation_id to be specified for the {n} network"
- .format(n=name))
+ .format(n=name))
def main():
+ global fluent_logger
try:
log.setup()
# load default config file
config = config_plugin.get_config()
openstack_spec = config_plugin.get_openstack_spec()
+ # setup the fluent logger as soon as possible right after the config plugin is called
+ if config.fluentd.logging_tag:
+ fluent_logger = FluentLogHandler(config.fluentd.logging_tag,
+ fluentd_ip=config.fluentd.ip,
+ fluentd_port=config.fluentd.port)
+ LOG.addHandler(fluent_logger)
+ else:
+ fluent_logger = None
+
opts, unknown_opts = parse_opts_from_cli()
log.set_level(debug=opts.debug)
else:
with utils.RunLock():
if unknown_opts:
- LOG.warning('Unknown options: ' + ' '.join(unknown_opts))
+ err_msg = 'Unknown options: ' + ' '.join(unknown_opts)
+ LOG.error(err_msg)
+ raise Exception(err_msg)
# remove unfilled values
opts = {k: v for k, v in vars(opts).iteritems() if v is not None}