better logger for master_daemon
authorYaroslav Brustinov <[email protected]>
Wed, 24 Aug 2016 07:07:48 +0000 (10:07 +0300)
committerYaroslav Brustinov <[email protected]>
Wed, 24 Aug 2016 07:07:48 +0000 (10:07 +0300)
verify root priveleges in dpdk_* scripts
call to functions of show status instead of calling process

scripts/dpdk_nic_bind.py
scripts/dpdk_setup_ports.py
scripts/master_daemon.py

index d9df92e..36f18ad 100755 (executable)
@@ -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()
index 1bbf5b3..84c44e4 100755 (executable)
@@ -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()
 
index 21b9485..e4a2fd1 100755 (executable)
@@ -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