From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44492) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a706z-0003N9-2q for qemu-devel@nongnu.org; Thu, 10 Dec 2015 07:14:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a706v-0003tZ-21 for qemu-devel@nongnu.org; Thu, 10 Dec 2015 07:14:17 -0500 Received: from e06smtp13.uk.ibm.com ([195.75.94.109]:59948) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a706u-0003tO-Ln for qemu-devel@nongnu.org; Thu, 10 Dec 2015 07:14:13 -0500 Received: from localhost by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 10 Dec 2015 12:14:10 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by d06dlp02.portsmouth.uk.ibm.com (Postfix) with ESMTP id 15121219005E for ; Thu, 10 Dec 2015 12:13:47 +0000 (GMT) Received: from d06av06.portsmouth.uk.ibm.com (d06av06.portsmouth.uk.ibm.com [9.149.37.217]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id tBACDsRb60883176 for ; Thu, 10 Dec 2015 12:13:54 GMT Received: from d06av06.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av06.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id tBACDr95025115 for ; Thu, 10 Dec 2015 05:13:54 -0700 From: Janosch Frank Date: Thu, 10 Dec 2015 13:12:39 +0100 Message-Id: <1449749584-23214-10-git-send-email-frankja@linux.vnet.ibm.com> In-Reply-To: <1449749584-23214-1-git-send-email-frankja@linux.vnet.ibm.com> References: <1449749584-23214-1-git-send-email-frankja@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH 09/34] scripts/kvm/kvm_stat: Introduce main function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: cornelia.huck@de.ibm.com, frankja@linux.vnet.ibm.com 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 --- scripts/kvm/kvm_stat | 145 +++++++++++++++++++++++++++------------------------ 1 file changed, 78 insertions(+), 67 deletions(-) diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat index 746a49b..1eb982a 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): - 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_TRACING): - sys.stderr.write("Please make {0} readable by the current user.\n" - .format(PATH_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) +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 -providers = [] -if options.tracepoints: - providers.append(TracepointProvider()) -if options.debugfs: - providers.append(DebugfsProvider()) +def get_providers(options): + providers = [] -if len(providers) == 0: - try: - providers = [TracepointProvider()] - except: - providers = [DebugfsProvider()] + if options.tracepoints: + providers.append(TracepointProvider()) + if options.debugfs: + providers.append(DebugfsProvider()) + if len(providers) == 0: + providers.append(TracepointProvider()) -stats = Stats(providers, fields = options.fields) + return providers -if options.log: - log(stats) -elif not options.once: - curses.wrapper(tui, stats) -else: - batch(stats) +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): + 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_TRACING): + sys.stderr.write("Please make {0} readable by the current user.\n" + .format(PATH_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() -- 2.3.0