From a70d3f379e7551851cffffcdd77410210235c47c Mon Sep 17 00:00:00 2001 From: Yaroslav Brustinov Date: Wed, 24 Aug 2016 10:07:48 +0300 Subject: better logger for master_daemon verify root priveleges in dpdk_* scripts call to functions of show status instead of calling process --- scripts/dpdk_nic_bind.py | 8 ++++++++ scripts/dpdk_setup_ports.py | 12 ++++++++---- scripts/master_daemon.py | 42 ++++++++++++++++++++++++++++-------------- 3 files changed, 44 insertions(+), 18 deletions(-) (limited to 'scripts') diff --git a/scripts/dpdk_nic_bind.py b/scripts/dpdk_nic_bind.py index d9df92e0..36f18adb 100755 --- a/scripts/dpdk_nic_bind.py +++ b/scripts/dpdk_nic_bind.py @@ -41,6 +41,7 @@ import texttable sys.path.remove(text_tables_path) import re import termios +import getpass # The PCI device class for ETHERNET devices ETHERNET_CLASS = "0200" @@ -544,6 +545,8 @@ def show_status(): to the user what devices are bound to the igb_uio driver, the kernel driver or to no driver''' global dpdk_drivers + if not devices: + get_nic_details() kernel_drv = [] dpdk_drv = [] no_drv = [] @@ -598,6 +601,8 @@ def show_table(): '''Function called when the script is passed the "--table" option. Similar to show_status() function, but shows more info: NUMA etc.''' global dpdk_drivers + if not devices: + get_nic_details() dpdk_drv = [] for d in devices.keys(): if devices[d].get("Driver_str") in dpdk_drivers: @@ -695,4 +700,7 @@ def main(): do_arg_actions() if __name__ == "__main__": + if getpass.getuser() != 'root': + print('Please run this program as root/with sudo') + exit(1) main() diff --git a/scripts/dpdk_setup_ports.py b/scripts/dpdk_setup_ports.py index 1bbf5b3a..84c44e4a 100755 --- a/scripts/dpdk_setup_ports.py +++ b/scripts/dpdk_setup_ports.py @@ -13,6 +13,7 @@ import shlex import traceback from collections import defaultdict, OrderedDict from distutils.util import strtobool +import getpass class ConfigCreator(object): mandatory_interface_fields = ['Slot_str', 'src_mac', 'dest_mac', 'Device_str', 'NUMA'] @@ -678,12 +679,12 @@ def main (): process_options () if map_driver.args.show: - res=os.system('%s dpdk_nic_bind.py --status' % sys.executable); - return(res); + dpdk_nic_bind.show_status() + return if map_driver.args.table: - res=os.system('%s dpdk_nic_bind.py -t' % sys.executable); - return(res); + dpdk_nic_bind.show_table() + return obj =CIfMap(map_driver.cfg_file); @@ -701,5 +702,8 @@ def main (): exit(-1) if __name__ == '__main__': + if getpass.getuser() != 'root': + print('Please run this program as root/with sudo') + exit(1) main() diff --git a/scripts/master_daemon.py b/scripts/master_daemon.py index 21b94856..e4a2fd1c 100755 --- a/scripts/master_daemon.py +++ b/scripts/master_daemon.py @@ -10,6 +10,7 @@ from argparse import * from time import time, sleep from glob import glob import signal +from functools import partial sys.path.append(os.path.join('automation', 'trex_control_plane', 'server')) import CCustomLogger @@ -102,26 +103,39 @@ def set_logger(): os.rename(logging_file, logging_file_bu) CCustomLogger.setup_daemon_logger('Master daemon', logging_file) +def log_usage(name, func, *args, **kwargs): + log_string = name + if args: + log_string += ', args: ' + repr(args) + if kwargs: + log_string += ', kwargs: ' + repr(kwargs) + logging.info(log_string) + return func(*args, **kwargs) + def start_master_daemon_func(): + funcs_by_name = {} + # master_daemon functions + funcs_by_name['add'] = add + funcs_by_name['check_connectivity'] = check_connectivity + funcs_by_name['get_trex_path'] = get_trex_path + funcs_by_name['update_trex'] = update_trex + # trex_daemon_server + funcs_by_name['is_trex_daemon_running'] = trex_daemon_server.is_running + funcs_by_name['restart_trex_daemon'] = trex_daemon_server.restart + funcs_by_name['start_trex_daemon'] = trex_daemon_server.start + funcs_by_name['stop_trex_daemon'] = trex_daemon_server.stop + # stl rpc proxy + funcs_by_name['is_stl_rpc_proxy_running'] = stl_rpc_proxy.is_running + funcs_by_name['restart_stl_rpc_proxy'] = stl_rpc_proxy.restart + funcs_by_name['start_stl_rpc_proxy'] = stl_rpc_proxy.start + funcs_by_name['stop_stl_rpc_proxy'] = stl_rpc_proxy.stop try: set_logger() register_socket(master_daemon.tag) server = SimpleJSONRPCServer(('0.0.0.0', master_daemon.port)) logging.info('Started master daemon (port %s)' % master_daemon.port) - server.register_function(add) - server.register_function(check_connectivity) - server.register_function(get_trex_path) - server.register_function(update_trex) - # trex_daemon_server - server.register_function(trex_daemon_server.is_running, 'is_trex_daemon_running') - server.register_function(trex_daemon_server.restart, 'restart_trex_daemon') - server.register_function(trex_daemon_server.start, 'start_trex_daemon') - server.register_function(trex_daemon_server.stop, 'stop_trex_daemon') - # stl rpc proxy - server.register_function(stl_rpc_proxy.is_running, 'is_stl_rpc_proxy_running') - server.register_function(stl_rpc_proxy.restart, 'restart_stl_rpc_proxy') - server.register_function(stl_rpc_proxy.start, 'start_stl_rpc_proxy') - server.register_function(stl_rpc_proxy.stop, 'stop_stl_rpc_proxy') + for name, func in funcs_by_name.items(): + server.register_function(partial(log_usage, name, func), name) server.register_function(server.funcs.keys, 'get_methods') # should be last signal.signal(signal.SIGTSTP, stop_handler) # ctrl+z signal.signal(signal.SIGTERM, stop_handler) # kill -- cgit 1.2.3-korg