X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=utilities%2Fbugtool%2Fovs-bugtool.in;h=61c21db5c14cce48b13bbafdabc51980b3cfffa9;hb=77d14d9c7f9ce7245eff56aacd420646577892d0;hp=c5a436656f11dacda0e3f7dadf201ea3b8e4269c;hpb=67680b012be30d9c26eab999b83b08c6eb32dbd2;p=sliver-openvswitch.git diff --git a/utilities/bugtool/ovs-bugtool.in b/utilities/bugtool/ovs-bugtool.in index c5a436656..61c21db5c 100755 --- a/utilities/bugtool/ovs-bugtool.in +++ b/utilities/bugtool/ovs-bugtool.in @@ -113,6 +113,7 @@ OPENVSWITCH_DEFAULT_SWITCH = '/etc/default/openvswitch-switch' # Debian OPENVSWITCH_SYSCONFIG_SWITCH = '/etc/sysconfig/openvswitch' # RHEL OPENVSWITCH_DEFAULT_CONTROLLER = '/etc/default/openvswitch-controller' OPENVSWITCH_CONF_DB = '@DBDIR@/conf.db' +OPENVSWITCH_COMPACT_DB = '@DBDIR@/bugtool-compact-conf.db' OPENVSWITCH_VSWITCHD_PID = '@RUNDIR@/ovs-vswitchd.pid' VAR_LOG_DIR = '/var/log/' VAR_LOG_CORE_DIR = '/var/log/core' @@ -149,7 +150,6 @@ NETSTAT = 'netstat' OVS_DPCTL = 'ovs-dpctl' OVS_OFCTL = 'ovs-ofctl' OVS_VSCTL = 'ovs-vsctl' -OVS_APPCTL = 'ovs-appctl' PS = 'ps' ROUTE = 'route' RPM = 'rpm' @@ -205,6 +205,7 @@ CAP_KERNEL_INFO = 'kernel-info' CAP_LOSETUP_A = 'loopback-devices' CAP_MULTIPATH = 'multipath' CAP_NETWORK_CONFIG = 'network-config' +CAP_NETWORK_INFO = 'network-info' CAP_NETWORK_STATUS = 'network-status' CAP_OPENVSWITCH_LOGS = 'ovs-system-logs' CAP_PROCESS_LIST = 'process-list' @@ -233,7 +234,7 @@ cap(CAP_BOOT_LOADER, PII_NO, max_size=3*KB, max_time=5) cap(CAP_DISK_INFO, PII_MAYBE, max_size=50*KB, max_time=20) -cap(CAP_HARDWARE_INFO, PII_MAYBE, max_size=30*KB, +cap(CAP_HARDWARE_INFO, PII_MAYBE, max_size=2*MB, max_time=20) cap(CAP_KERNEL_INFO, PII_MAYBE, max_size=120*KB, max_time=5) @@ -241,8 +242,10 @@ cap(CAP_LOSETUP_A, PII_MAYBE, max_size=KB, max_time=5) cap(CAP_MULTIPATH, PII_MAYBE, max_size=20*KB, max_time=10) cap(CAP_NETWORK_CONFIG, PII_IF_CUSTOMIZED, - min_size=0, max_size=40*KB) -cap(CAP_NETWORK_STATUS, PII_YES, max_size=50*MB, + min_size=0, max_size=5*MB) +cap(CAP_NETWORK_INFO, PII_YES, max_size=50*MB, + max_time=30) +cap(CAP_NETWORK_STATUS, PII_YES, max_size=-1, max_time=30) cap(CAP_OPENVSWITCH_LOGS, PII_MAYBE, max_size=-1, max_time=5) @@ -541,15 +544,17 @@ exclude those logs from the archive. tree_output(CAP_NETWORK_CONFIG, SYSCONFIG_NETWORK_SCRIPTS, ROUTE_RE) file_output(CAP_NETWORK_CONFIG, [SYSCONFIG_NETWORK, RESOLV_CONF, NSSWITCH_CONF, HOSTS]) file_output(CAP_NETWORK_CONFIG, [NTP_CONF, IPTABLES_CONFIG, HOSTS_ALLOW, HOSTS_DENY]) - file_output(CAP_NETWORK_CONFIG, [OPENVSWITCH_CONF_DB]) + file_output(CAP_NETWORK_CONFIG, [OPENVSWITCH_DEFAULT_SWITCH, + OPENVSWITCH_SYSCONFIG_SWITCH, OPENVSWITCH_DEFAULT_CONTROLLER]) - cmd_output(CAP_NETWORK_STATUS, [IFCONFIG, '-a']) - cmd_output(CAP_NETWORK_STATUS, [ROUTE, '-n']) - cmd_output(CAP_NETWORK_STATUS, [ARP, '-n']) - cmd_output(CAP_NETWORK_STATUS, [NETSTAT, '-an']) + cmd_output(CAP_NETWORK_INFO, [IFCONFIG, '-a']) + cmd_output(CAP_NETWORK_INFO, [ROUTE, '-n']) + cmd_output(CAP_NETWORK_INFO, [ARP, '-n']) + cmd_output(CAP_NETWORK_INFO, [NETSTAT, '-an']) for dir in DHCP_LEASE_DIR: - tree_output(CAP_NETWORK_STATUS, dir) - cmd_output(CAP_NETWORK_STATUS, [IPTABLES, '-nL']) + tree_output(CAP_NETWORK_INFO, dir) + for table in ['filter', 'nat', 'mangle', 'raw', 'security']: + cmd_output(CAP_NETWORK_INFO, [IPTABLES, '-t', table, '-nL']) for p in os.listdir('/sys/class/net/'): try: f = open('/sys/class/net/%s/type' % p, 'r') @@ -557,37 +562,27 @@ exclude those logs from the archive. f.close() if os.path.islink('/sys/class/net/%s/device' % p) and int(t) == 1: # ARPHRD_ETHER - cmd_output(CAP_NETWORK_STATUS, [ETHTOOL, '-S', p]) + cmd_output(CAP_NETWORK_INFO, [ETHTOOL, '-S', p]) if not p.startswith('vif') and not p.startswith('tap'): - cmd_output(CAP_NETWORK_STATUS, [ETHTOOL, p]) - cmd_output(CAP_NETWORK_STATUS, [ETHTOOL, '-k', p]) - cmd_output(CAP_NETWORK_STATUS, [ETHTOOL, '-i', p]) - cmd_output(CAP_NETWORK_STATUS, [ETHTOOL, '-c', p]) + cmd_output(CAP_NETWORK_INFO, [ETHTOOL, p]) + cmd_output(CAP_NETWORK_INFO, [ETHTOOL, '-k', p]) + cmd_output(CAP_NETWORK_INFO, [ETHTOOL, '-i', p]) + cmd_output(CAP_NETWORK_INFO, [ETHTOOL, '-c', p]) if int(t) == 1: - cmd_output(CAP_NETWORK_STATUS, + cmd_output(CAP_NETWORK_INFO, [TC, '-s', '-d', 'class', 'show', 'dev', p]) except: pass - tree_output(CAP_NETWORK_STATUS, PROC_NET_BONDING_DIR) - tree_output(CAP_NETWORK_STATUS, PROC_NET_VLAN_DIR) - cmd_output(CAP_NETWORK_STATUS, [TC, '-s', 'qdisc']) - file_output(CAP_NETWORK_STATUS, [PROC_NET_SOFTNET_STAT]) + tree_output(CAP_NETWORK_INFO, PROC_NET_BONDING_DIR) + tree_output(CAP_NETWORK_INFO, PROC_NET_VLAN_DIR) + cmd_output(CAP_NETWORK_INFO, [TC, '-s', 'qdisc']) + file_output(CAP_NETWORK_INFO, [PROC_NET_SOFTNET_STAT]) + + collect_ovsdb() if os.path.exists(OPENVSWITCH_VSWITCHD_PID): cmd_output(CAP_NETWORK_STATUS, [OVS_DPCTL, 'show', '-s']) for d in dp_list(): - cmd_output(CAP_NETWORK_STATUS, [OVS_OFCTL, 'show', d]) - cmd_output(CAP_NETWORK_STATUS, [OVS_OFCTL, 'dump-flows', d]) cmd_output(CAP_NETWORK_STATUS, [OVS_DPCTL, 'dump-flows', d]) - try: - 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) - except e: - pass cmd_output(CAP_PROCESS_LIST, [PS, 'wwwaxf', '-eo', 'pid,tty,stat,time,nice,psr,pcpu,pmem,nwchan,wchan:25,args'], label='process-tree') func_output(CAP_PROCESS_LIST, 'fd_usage', fd_usage) @@ -597,7 +592,7 @@ exclude those logs from the archive. 'syslog', 'messages', 'secure', 'debug', 'dmesg', 'boot']]) ovs_logs = ([ OPENVSWITCH_LOG_DIR + x for x in ['ovs-vswitchd.log', 'ovsdb-server.log', - 'ovs-xapi-sync.log', 'ovs-monitor-ipsec.log']]) + 'ovs-xapi-sync.log', 'ovs-monitor-ipsec.log', 'ovs-ctl.log']]) log_output(CAP_SYSTEM_LOGS, system_logs) log_output(CAP_OPENVSWITCH_LOGS, ovs_logs) @@ -688,6 +683,8 @@ exclude those logs from the archive. for c in caps.keys(): print >>sys.stderr, " %s (%d, %d)" % (c, caps[c][MAX_SIZE], cap_sizes[c]) + + cleanup_ovsdb() return 0 def dump_scsi_hosts(cap): @@ -748,16 +745,35 @@ def dp_list(): return output.getvalue().splitlines() return [] -def bond_list(pid): - output = StringIO.StringIO() - procs = [ProcOutput([OVS_APPCTL, '-t', '@RUNDIR@/ovs-vswitchd.%s.ctl' % pid, '-e' 'bond/list'], caps[CAP_NETWORK_STATUS][MAX_TIME], output)] +def collect_ovsdb(): + if not os.path.isfile(OPENVSWITCH_CONF_DB): + return - run_procs([procs]) + max_size = 10*MB - if not procs[0].timed_out: - bonds = output.getvalue().splitlines()[1:] - return [x.split('\t')[1] for x in bonds] - return [] + try: + if os.path.getsize(OPENVSWITCH_CONF_DB) > max_size: + if os.path.isfile(OPENVSWITCH_COMPACT_DB): + os.unlink(OPENVSWITCH_COMPACT_DB) + + output = StringIO.StringIO() + max_time = 5 + procs = [ProcOutput(['ovsdb-tool', 'compact', + OPENVSWITCH_CONF_DB, OPENVSWITCH_COMPACT_DB], + max_time, output)] + run_procs([procs]) + file_output(CAP_NETWORK_STATUS, [OPENVSWITCH_COMPACT_DB]) + else: + file_output(CAP_NETWORK_STATUS, [OPENVSWITCH_CONF_DB]) + except OSError, e: + return + +def cleanup_ovsdb(): + try: + if os.path.isfile(OPENVSWITCH_COMPACT_DB): + os.unlink(OPENVSWITCH_COMPACT_DB) + except: + return def fd_usage(cap): output = ''