- Implement jsc#SLE-13784
* Add patches: switch-to-argparse.patch, add-command-line-switch-s-to-update.patch,
add-command-line-switch-c-to-csv.patch, add-command-line-switch-z-skip-zero-records.patch,
add-command-line-switch-L-to-log-file.patch, add-sample-systemd-unit.patch
* patching is conditional, depending on kernel version
OBS-URL: https://build.opensuse.org/request/show/848387
OBS-URL: https://build.opensuse.org/package/show/Virtualization/kvm_stat?expand=0&rev=25
186 lines
8.0 KiB
Diff
186 lines
8.0 KiB
Diff
commit 0e6618fba8c98223e17d57d68b7b834e1eb89612
|
|
Author: Stefan Raspl <raspl@de.ibm.com>
|
|
Date: Fri Mar 6 12:42:45 2020 +0100
|
|
|
|
tools/kvm_stat: switch to argparse
|
|
|
|
optparse is deprecated for a while, hence switching over to argparse
|
|
(which also works with python2).
|
|
As a consequence, help output has some subtle changes, the most
|
|
significant one being that the options are all listed explicitly
|
|
instead of a universal '[options]' indicator. Also, some of the error
|
|
messages are phrased slightly different.
|
|
While at it, squashed a number of minor PEP8 issues.
|
|
|
|
Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
|
|
Message-Id: <20200306114250.57585-3-raspl@linux.ibm.com>
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
|
diff --git a/tools/kvm/kvm_stat/kvm_stat b/tools/kvm/kvm_stat/kvm_stat
|
|
index 05638ab59b9d..8f1874c7fd8e 100755
|
|
--- a/tools/kvm/kvm_stat/kvm_stat
|
|
+++ b/tools/kvm/kvm_stat/kvm_stat
|
|
@@ -25,7 +25,7 @@ import sys
|
|
import locale
|
|
import os
|
|
import time
|
|
-import optparse
|
|
+import argparse
|
|
import ctypes
|
|
import fcntl
|
|
import resource
|
|
@@ -873,7 +873,7 @@ class Stats(object):
|
|
|
|
if options.debugfs:
|
|
providers.append(DebugfsProvider(options.pid, options.fields,
|
|
- options.dbgfs_include_past))
|
|
+ options.debugfs_include_past))
|
|
if options.tracepoints or not providers:
|
|
providers.append(TracepointProvider(options.pid, options.fields))
|
|
|
|
@@ -1550,84 +1550,66 @@ Interactive Commands:
|
|
Press any other key to refresh statistics immediately.
|
|
""" % (PATH_DEBUGFS_KVM, PATH_DEBUGFS_TRACING)
|
|
|
|
- class PlainHelpFormatter(optparse.IndentedHelpFormatter):
|
|
- def format_description(self, description):
|
|
- if description:
|
|
- return description + "\n"
|
|
- else:
|
|
- return ""
|
|
-
|
|
- def cb_guest_to_pid(option, opt, val, parser):
|
|
- try:
|
|
- pids = Tui.get_pid_from_gname(val)
|
|
- except:
|
|
- sys.exit('Error while searching for guest "{}". Use "-p" to '
|
|
- 'specify a pid instead?'.format(val))
|
|
- if len(pids) == 0:
|
|
- sys.exit('Error: No guest by the name "{}" found'.format(val))
|
|
- if len(pids) > 1:
|
|
- sys.exit('Error: Multiple processes found (pids: {}). Use "-p" '
|
|
- 'to specify the desired pid'.format(" ".join(pids)))
|
|
- parser.values.pid = pids[0]
|
|
-
|
|
- optparser = optparse.OptionParser(description=description_text,
|
|
- formatter=PlainHelpFormatter())
|
|
- optparser.add_option('-1', '--once', '--batch',
|
|
- action='store_true',
|
|
- default=False,
|
|
- dest='once',
|
|
- help='run in batch mode for one second',
|
|
- )
|
|
- optparser.add_option('-i', '--debugfs-include-past',
|
|
- action='store_true',
|
|
- default=False,
|
|
- dest='dbgfs_include_past',
|
|
- help='include all available data on past events for '
|
|
- 'debugfs',
|
|
- )
|
|
- optparser.add_option('-l', '--log',
|
|
- action='store_true',
|
|
- default=False,
|
|
- dest='log',
|
|
- help='run in logging mode (like vmstat)',
|
|
- )
|
|
- optparser.add_option('-t', '--tracepoints',
|
|
- action='store_true',
|
|
- default=False,
|
|
- dest='tracepoints',
|
|
- help='retrieve statistics from tracepoints',
|
|
- )
|
|
- optparser.add_option('-d', '--debugfs',
|
|
- action='store_true',
|
|
- default=False,
|
|
- dest='debugfs',
|
|
- help='retrieve statistics from debugfs',
|
|
- )
|
|
- optparser.add_option('-f', '--fields',
|
|
- action='store',
|
|
- default='',
|
|
- dest='fields',
|
|
- help='''fields to display (regex)
|
|
- "-f help" for a list of available events''',
|
|
- )
|
|
- optparser.add_option('-p', '--pid',
|
|
- action='store',
|
|
- default=0,
|
|
- type='int',
|
|
- dest='pid',
|
|
- help='restrict statistics to pid',
|
|
- )
|
|
- optparser.add_option('-g', '--guest',
|
|
- action='callback',
|
|
- type='string',
|
|
- dest='pid',
|
|
- metavar='GUEST',
|
|
- help='restrict statistics to guest by name',
|
|
- callback=cb_guest_to_pid,
|
|
- )
|
|
- options, unkn = optparser.parse_args(sys.argv)
|
|
- if len(unkn) != 1:
|
|
- sys.exit('Error: Extra argument(s): ' + ' '.join(unkn[1:]))
|
|
+ class Guest_to_pid(argparse.Action):
|
|
+ def __call__(self, parser, namespace, values, option_string=None):
|
|
+ try:
|
|
+ pids = Tui.get_pid_from_gname(values)
|
|
+ except:
|
|
+ sys.exit('Error while searching for guest "{}". Use "-p" to '
|
|
+ 'specify a pid instead?'.format(values))
|
|
+ if len(pids) == 0:
|
|
+ sys.exit('Error: No guest by the name "{}" found'
|
|
+ .format(values))
|
|
+ if len(pids) > 1:
|
|
+ sys.exit('Error: Multiple processes found (pids: {}). Use "-p"'
|
|
+ ' to specify the desired pid'.format(" ".join(pids)))
|
|
+ namespace.pid = pids[0]
|
|
+
|
|
+ argparser = argparse.ArgumentParser(description=description_text,
|
|
+ formatter_class=argparse
|
|
+ .RawTextHelpFormatter)
|
|
+ argparser.add_argument('-1', '--once', '--batch',
|
|
+ action='store_true',
|
|
+ default=False,
|
|
+ help='run in batch mode for one second',
|
|
+ )
|
|
+ argparser.add_argument('-d', '--debugfs',
|
|
+ action='store_true',
|
|
+ default=False,
|
|
+ help='retrieve statistics from debugfs',
|
|
+ )
|
|
+ argparser.add_argument('-f', '--fields',
|
|
+ default='',
|
|
+ help='''fields to display (regex)
|
|
+"-f help" for a list of available events''',
|
|
+ )
|
|
+ argparser.add_argument('-g', '--guest',
|
|
+ type=str,
|
|
+ help='restrict statistics to guest by name',
|
|
+ action=Guest_to_pid,
|
|
+ )
|
|
+ argparser.add_argument('-i', '--debugfs-include-past',
|
|
+ action='store_true',
|
|
+ default=False,
|
|
+ help='include all available data on past events for'
|
|
+ ' debugfs',
|
|
+ )
|
|
+ argparser.add_argument('-l', '--log',
|
|
+ action='store_true',
|
|
+ default=False,
|
|
+ help='run in logging mode (like vmstat)',
|
|
+ )
|
|
+ argparser.add_argument('-p', '--pid',
|
|
+ type=int,
|
|
+ default=0,
|
|
+ help='restrict statistics to pid',
|
|
+ )
|
|
+ argparser.add_argument('-t', '--tracepoints',
|
|
+ action='store_true',
|
|
+ default=False,
|
|
+ help='retrieve statistics from tracepoints',
|
|
+ )
|
|
+ options = argparser.parse_args()
|
|
try:
|
|
# verify that we were passed a valid regex up front
|
|
re.compile(options.fields)
|