New option --ovs is added for ovs-bugtool command to collect only openvswitch relevant information. To perform filtering on plugins, a new xml attribute "filters=ovs" (optional) in element of openvswitch.xml will be required. Value of 'filters' attribute will be compared with filtering option like --ovs to get all relevant operation to collect information. If no "--option" is passed then it will behave as earlier.
Plus, trailing whitespaces are fixed. Signed-off-by: Arun Sharma <arun.sha...@calsoftinc.com> --- utilities/bugtool/ovs-bugtool.in | 83 ++++++++++++++------ .../bugtool/plugins/network-status/openvswitch.xml | 16 ++-- .../plugins/system-configuration/openvswitch.xml | 2 +- .../bugtool/plugins/system-logs/openvswitch.xml | 2 +- 4 files changed, 68 insertions(+), 35 deletions(-) diff --git a/utilities/bugtool/ovs-bugtool.in b/utilities/bugtool/ovs-bugtool.in index 3bafa13..af2bb6e 100755 --- a/utilities/bugtool/ovs-bugtool.in +++ b/utilities/bugtool/ovs-bugtool.in @@ -404,6 +404,10 @@ def main(argv = None): global ANSWER_YES_TO_ALL, SILENT_MODE global entries, data, dbg, unlimited_data + # Filter flags + only_ovs_info = False + filter_data = False + # we need access to privileged files, exit if we are not running as root if os.getuid() != 0: print >>sys.stderr, "Error: ovs-bugtool must be run as root" @@ -420,7 +424,7 @@ def main(argv = None): (options, params) = getopt.gnu_getopt( argv, 'sy', ['capabilities', 'silent', 'yestoall', 'entries=', 'output=', 'outfd=', 'outfile=', 'all', 'unlimited', - 'debug']) + 'debug', 'ovs']) except getopt.GetoptError, opterr: print >>sys.stderr, opterr return 2 @@ -478,6 +482,9 @@ def main(argv = None): dbg = True ProcOutput.debug = True + if k == '--ovs': + only_ovs_info = True + if len(params) != 1: print >>sys.stderr, "Invalid additional arguments", str(params) return 2 @@ -493,6 +500,9 @@ def main(argv = None): if ANSWER_YES_TO_ALL: output("Warning: '--yestoall' argument provided, will not prompt for individual files.") + if only_ovs_info: + filter_data = True + output(''' This application will collate dmesg output, details of the hardware configuration of your machine, information about the build of @@ -547,7 +557,7 @@ exclude those logs from the archive. for d in disk_list(): cmd_output(CAP_HDPARM_T, [HDPARM, '-tT', '/dev/%s' % d]) - file_output(CAP_KERNEL_INFO, [PROC_VERSION, PROC_MODULES, PROC_DEVICES, + file_output(CAP_KERNEL_INFO, [PROC_VERSION, PROC_MODULES, PROC_DEVICES, PROC_FILESYSTEMS, PROC_CMDLINE]) cmd_output(CAP_KERNEL_INFO, [ZCAT, PROC_CONFIG], label='config') cmd_output(CAP_KERNEL_INFO, [SYSCTL, '-A']) @@ -561,7 +571,7 @@ exclude those logs from the archive. cmd_output(CAP_MULTIPATH, [DMSETUP, 'table']) func_output(CAP_MULTIPATH, 'multipathd_topology', multipathd_topology) cmd_output(CAP_MULTIPATH, [MPPUTIL, '-a']) - if CAP_MULTIPATH in entries: + if CAP_MULTIPATH in entries and not filter_data: dump_rdac_groups(CAP_MULTIPATH) tree_output(CAP_NETWORK_CONFIG, SYSCONFIG_NETWORK_SCRIPTS, IFCFG_RE) @@ -609,10 +619,12 @@ exclude those logs from the archive. vspidfile = open(OPENVSWITCH_VSWITCHD_PID) vspid = int(vspidfile.readline().strip()) vspidfile.close() - for b in bond_list(vspid): - cmd_output(CAP_NETWORK_STATUS, - [OVS_APPCTL, '-t', '@RUNDIR@/ovs-vswitchd.%s.ctl' % vspid, '-e' 'bond/show %s' % b], - 'ovs-appctl-bond-show-%s.out' % b) + if not filter_data or only_ovs_info: + for b in bond_list(vspid): + cmd_output(CAP_NETWORK_STATUS, + [OVS_APPCTL, '-t', + '@RUNDIR@/ovs-vswitchd.%s.ctl' % vspid, '-e' 'bond/show %s' % b], + 'ovs-appctl-bond-show-%s.out' % b) except e: pass @@ -650,15 +662,30 @@ exclude those logs from the archive. tree_output(CAP_YUM, APT_SOURCES_LIST_D) cmd_output(CAP_YUM, [DPKG_QUERY, '-W', '-f=${Package} ${Version} ${Status}\n'], 'dpkg-packages') - try: - load_plugins() - except: - pass - + # Filter out ovs related information if --ovs option passed + if only_ovs_info: + ovs_info_caps = [CAP_NETWORK_STATUS, CAP_SYSTEM_LOGS, + CAP_NETWORK_CONFIG] + ovs_info_list = ['process-tree'] + for (k, v) in data.items(): + cap = v['cap'] + ovs_info = k[0] if v.has_key('filename') else k + if ovs_info not in ovs_info_list and cap not in ovs_info_caps: + del data[k] + + load_plugins(False, 'ovs') + else: + try: + load_plugins() + except: + pass + # permit the user to filter out data - for k in sorted(data.keys()): - if not ANSWER_YES_TO_ALL and not yes("Include '%s'? [Y/n]: " % k): - del data[k] + for (k, v) in sorted(data.items()): + cap = v['cap'] + key = k[0] if v.has_key('filename') else k + if not ANSWER_YES_TO_ALL and not yes("Include '%s'? [Y/n]: " % key): + del data[k] # collect selected data now output_ts('Running commands to collect data') @@ -773,7 +800,7 @@ def module_info(cap): def multipathd_topology(cap): - pipe = Popen([MULTIPATHD, '-k'], bufsize=1, stdin=PIPE, + pipe = Popen([MULTIPATHD, '-k'], bufsize=1, stdin=PIPE, stdout=PIPE, stderr=dev_null) stdout, stderr = pipe.communicate('show topology') @@ -837,7 +864,7 @@ def dump_rdac_groups(cap): group, _ = line.split(None, 1) cmd_output(cap, [MPPUTIL, '-g', group]) -def load_plugins(just_capabilities = False): +def load_plugins(just_capabilities = False, filter = None): def getText(nodelist): rc = "" for node in nodelist: @@ -851,7 +878,7 @@ def load_plugins(just_capabilities = False): if val in ['true', 'false', 'yes', 'no']: ret = val in ['true', 'yes'] return ret - + for dir in [d for d in os.listdir(PLUGIN_DIR) if os.path.isdir(os.path.join(PLUGIN_DIR, d))]: if not caps.has_key(dir): if not os.path.exists("%s/%s.xml" % (PLUGIN_DIR, dir)): @@ -881,28 +908,34 @@ def load_plugins(just_capabilities = False): if just_capabilities: continue - + plugdir = os.path.join(PLUGIN_DIR, dir) for file in [f for f in os.listdir(plugdir) if f.endswith('.xml')]: xmldoc = parse(os.path.join(plugdir, file)) assert xmldoc.documentElement.tagName == "collect" for el in xmldoc.documentElement.getElementsByTagName("*"): + filters_tmp = el.getAttribute("filters") + filters = [] if filters_tmp == '' else filters_tmp.split(',') if el.tagName == "files": newest_first = getBoolAttr(el, 'newest_first') - file_output(dir, getText(el.childNodes).split(), - newest_first=newest_first) + if filter == None or filter in filters: + file_output(dir, getText(el.childNodes).split(), + newest_first=newest_first) elif el.tagName == "directory": pattern = el.getAttribute("pattern") if pattern == '': pattern = None negate = getBoolAttr(el, 'negate') newest_first = getBoolAttr(el, 'newest_first') - tree_output(dir, getText(el.childNodes), pattern and re.compile(pattern) or None, - negate=negate, newest_first=newest_first) + if filter == None or filter in filters: + tree_output(dir, getText(el.childNodes), + pattern and re.compile(pattern) or None, + negate=negate, newest_first=newest_first) elif el.tagName == "command": label = el.getAttribute("label") if label == '': label = None - cmd_output(dir, getText(el.childNodes), label) + if filter == None or filter in filters: + cmd_output(dir, getText(el.childNodes), label) def make_tar(subdir, suffix, output_fd, output_file): global SILENT_MODE, data @@ -982,7 +1015,7 @@ def make_zip(subdir, output_file): pass finally: zf.close() - + output ('Writing archive %s successful.' % filename) if SILENT_MODE: print filename diff --git a/utilities/bugtool/plugins/network-status/openvswitch.xml b/utilities/bugtool/plugins/network-status/openvswitch.xml index 1316071..9539f7c 100644 --- a/utilities/bugtool/plugins/network-status/openvswitch.xml +++ b/utilities/bugtool/plugins/network-status/openvswitch.xml @@ -17,12 +17,12 @@ --> <collect> - <command label="tc-class-show">/usr/share/openvswitch/scripts/ovs-bugtool-tc-class-show</command> - <command label="ovs-vsctl-show">/usr/share/openvswitch/scripts/ovs-bugtool-vsctl-show</command> - <command label="dump-ovsdb">/usr/share/openvswitch/scripts/ovs-bugtool-ovsdb-dump</command> - <command label="ovs-appctl-lacp-show">/usr/share/openvswitch/scripts/ovs-bugtool-lacp-show</command> - <command label="ovs-appctl-cfm-show">/usr/share/openvswitch/scripts/ovs-bugtool-cfm-show</command> - <command label="ovs-appctl-coverage-show">/usr/share/openvswitch/scripts/ovs-bugtool-coverage-show</command> - <command label="ovs-appctl-bond-show">/usr/share/openvswitch/scripts/ovs-bugtool-bond-show</command> - <command label="ovs-appctl-memory-show">/usr/share/openvswitch/scripts/ovs-bugtool-memory-show</command> + <command label="tc-class-show" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-tc-class-show</command> + <command label="ovs-vsctl-show" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-vsctl-show</command> + <command label="dump-ovsdb" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-ovsdb-dump</command> + <command label="ovs-appctl-lacp-show" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-lacp-show</command> + <command label="ovs-appctl-cfm-show" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-cfm-show</command> + <command label="ovs-appctl-coverage-show" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-coverage-show</command> + <command label="ovs-appctl-bond-show" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-bond-show</command> + <command label="ovs-appctl-memory-show" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-memory-show</command> </collect> diff --git a/utilities/bugtool/plugins/system-configuration/openvswitch.xml b/utilities/bugtool/plugins/system-configuration/openvswitch.xml index ea6f32e..d1d5a1a 100644 --- a/utilities/bugtool/plugins/system-configuration/openvswitch.xml +++ b/utilities/bugtool/plugins/system-configuration/openvswitch.xml @@ -18,5 +18,5 @@ <collect> <command label="timezone">date --rfc-3339=seconds</command> - <command label="ovs-daemons-ver">/usr/share/openvswitch/scripts/ovs-bugtool-daemons-ver</command> + <command label="ovs-daemons-ver" filters="ovs">/usr/share/openvswitch/scripts/ovs-bugtool-daemons-ver</command> </collect> diff --git a/utilities/bugtool/plugins/system-logs/openvswitch.xml b/utilities/bugtool/plugins/system-logs/openvswitch.xml index f735113..8493361 100644 --- a/utilities/bugtool/plugins/system-logs/openvswitch.xml +++ b/utilities/bugtool/plugins/system-logs/openvswitch.xml @@ -17,5 +17,5 @@ --> <collect> - <directory label="ovsdb-backups" pattern=".*/conf.db.backup[0-9][^/]*$">/etc/openvswitch</directory> + <directory label="ovsdb-backups" filters="ovs" pattern=".*/conf.db.backup[0-9][^/]*$">/etc/openvswitch</directory> </collect> -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev