summaryrefslogtreecommitdiffstats
path: root/scripts/kvm
diff options
context:
space:
mode:
authorJanosch Frank <frankja@linux.vnet.ibm.com>2016-01-11 16:17:39 +0100
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:29:55 -0600
commit5f2f6de203eea94ae179041e67adc90c8a3d7fe3 (patch)
treead53e39ee84504220efbe17fee83fdfe76ff4163 /scripts/kvm
parent428bf8f35a50c1a873e9d0f6abb7a683362fe4c4 (diff)
downloadhqemu-5f2f6de203eea94ae179041e67adc90c8a3d7fe3.zip
hqemu-5f2f6de203eea94ae179041e67adc90c8a3d7fe3.tar.gz
scripts/kvm/kvm_stat: Introduce main function
The main function should be the main location for initialization and helps encapsulating variables into a scope. This way they don't have to be global and might be mistaken for local ones. As the providers variable is scoped now it can't be accessed from within the Stats class. Hence, the global access to the variable was changed to a local one. Reviewed-by: Jason J. Herne <jjherne@linux.vnet.ibm.com> Signed-off-by: Janosch Frank <frankja@linux.vnet.ibm.com> Message-Id: <1452525484-32309-10-git-send-email-frankja@linux.vnet.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'scripts/kvm')
-rwxr-xr-xscripts/kvm/kvm_stat153
1 files changed, 82 insertions, 71 deletions
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 6f0692d..9f943ef 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -285,8 +285,6 @@ def detect_platform():
s390_init()
return
-detect_platform()
-
def walkdir(path):
"""Returns os.walk() data for specified directory.
@@ -453,7 +451,7 @@ class Stats:
return True
return re.match(self.fields_filter, key) is not None
self.values = dict()
- for d in providers:
+ for d in self.providers:
provider_fields = [key for key in d.fields() if wanted(key)]
for key in provider_fields:
self.values[key] = None
@@ -462,7 +460,7 @@ class Stats:
self.fields_filter = fields_filter
self._update()
def get(self):
- for d in providers:
+ for d in self.providers:
new = d.read()
for key in d.fields():
oldval = self.values.get(key, (0, 0))
@@ -473,20 +471,6 @@ class Stats:
self.values[key] = (newval, newdelta)
return self.values
-if not os.path.exists('/sys/kernel/debug'):
- sys.stderr.write('Please enable CONFIG_DEBUG_FS in your kernel.')
- sys.exit(1)
-if not os.path.exists(PATH_DEBUGFS_KVM):
- sys.stderr.write("Please make sure, that debugfs is mounted and "
- "readable by the current user:\n"
- "('mount -t debugfs debugfs /sys/kernel/debug')\n"
- "Also ensure, that the kvm modules are loaded.\n")
- sys.exit(1)
-if not os.path.exists(PATH_DEBUGFS_TRACING):
- sys.stderr.write("Please make {0} readable by the current user.\n"
- .format(PATH_DEBUGFS_TRACING))
- sys.exit(1)
-
LABEL_WIDTH = 40
NUMBER_WIDTH = 10
@@ -576,56 +560,83 @@ def log(stats):
statline()
line += 1
-options = optparse.OptionParser()
-options.add_option('-1', '--once', '--batch',
- action = 'store_true',
- default = False,
- dest = 'once',
- help = 'run in batch mode for one second',
- )
-options.add_option('-l', '--log',
- action = 'store_true',
- default = False,
- dest = 'log',
- help = 'run in logging mode (like vmstat)',
- )
-options.add_option('-t', '--tracepoints',
- action = 'store_true',
- default = False,
- dest = 'tracepoints',
- help = 'retrieve statistics from tracepoints',
- )
-options.add_option('-d', '--debugfs',
- action = 'store_true',
- default = False,
- dest = 'debugfs',
- help = 'retrieve statistics from debugfs',
- )
-options.add_option('-f', '--fields',
- action = 'store',
- default = None,
- dest = 'fields',
- help = 'fields to display (regex)',
- )
-(options, args) = options.parse_args(sys.argv)
-
-providers = []
-if options.tracepoints:
- providers.append(TracepointProvider())
-if options.debugfs:
- providers.append(DebugfsProvider())
-
-if len(providers) == 0:
- try:
- providers = [TracepointProvider()]
- except:
- providers = [DebugfsProvider()]
-
-stats = Stats(providers, fields = options.fields)
-
-if options.log:
- log(stats)
-elif not options.once:
- curses.wrapper(tui, stats)
-else:
- batch(stats)
+def get_options():
+ optparser = optparse.OptionParser()
+ optparser.add_option('-1', '--once', '--batch',
+ action = 'store_true',
+ default = False,
+ dest = 'once',
+ help = 'run in batch mode for one second',
+ )
+ 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 = None,
+ dest = 'fields',
+ help = 'fields to display (regex)',
+ )
+ (options, _) = optparser.parse_args(sys.argv)
+ return options
+
+def get_providers(options):
+ providers = []
+
+ if options.tracepoints:
+ providers.append(TracepointProvider())
+ if options.debugfs:
+ providers.append(DebugfsProvider())
+ if len(providers) == 0:
+ providers.append(TracepointProvider())
+
+ return providers
+
+def check_access():
+ if not os.path.exists('/sys/kernel/debug'):
+ sys.stderr.write('Please enable CONFIG_DEBUG_FS in your kernel.')
+ sys.exit(1)
+
+ if not os.path.exists(PATH_DEBUGFS_KVM):
+ sys.stderr.write("Please make sure, that debugfs is mounted and "
+ "readable by the current user:\n"
+ "('mount -t debugfs debugfs /sys/kernel/debug')\n"
+ "Also ensure, that the kvm modules are loaded.\n")
+ sys.exit(1)
+
+ if not os.path.exists(PATH_DEBUGFS_TRACING):
+ sys.stderr.write("Please make {0} readable by the current user.\n"
+ .format(PATH_DEBUGFS_TRACING))
+ sys.exit(1)
+
+def main():
+ check_access()
+ detect_platform()
+ options = get_options()
+ providers = get_providers(options)
+ stats = Stats(providers, fields = options.fields)
+
+ if options.log:
+ log(stats)
+ elif not options.once:
+ curses.wrapper(tui, stats)
+ else:
+ batch(stats)
+
+if __name__ == "__main__":
+ main()
OpenPOWER on IntegriCloud