From 78710b0d2a0de2b0362c940c8c5eaa9ae0b39d69 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Wed, 17 Jun 2009 02:50:27 +0000 Subject: [PATCH] support printing all or specified tags --- cmdline/getNodes.py | 106 ++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 54 deletions(-) diff --git a/cmdline/getNodes.py b/cmdline/getNodes.py index 2675152a..f7970039 100644 --- a/cmdline/getNodes.py +++ b/cmdline/getNodes.py @@ -1,75 +1,73 @@ #!/usr/bin/python + import sys import os -import traceback -import urllib -from datetime import datetime from optparse import OptionParser +from pprint import pprint +from types import StringTypes from geni.util.rspec import Rspec -sfi_dir = os.path.expanduser("~/.sfi/") - def create_parser(): command = sys.argv[0] argv = sys.argv[1:] usage = "%(command)s [options]" % locals() - description = """getNodes will query comon and generate a list of nodes -(plain or rspec) that meet the specified crieteria. If no criteria is -specified, the default action is to return node comon considers 'alive' -(resptime > 0)""" - cmp_options = ['rwfs', 'uptime', 'loads', 'meminfo', 'kernver', 'cpuspeed', 'txrate', 'rxrate', 'numslices', 'liveslices'] - option = ['numslices', 'liveslices', 'gbfree'] - + description = """getNodes will open a rspec file and print all key/values, or filter results based on a given key or set of keys.""" parser = OptionParser(usage=usage,description=description) - for opt in options: - parser.add_option("--%s" % opt, dest="%s" % opt, action="store_true", - help = "available options [%s]" % ",".join(cmp_options)) + parser.add_option("-i", "--infile", dest="infile", default=None, help = "record file path") + parser.add_option("-f", "--filter", dest="filter", default=None, help = "record file path") + parser.add_option("-r", "--recursive", dest="recursive", default=False, action="store_true", help = "record file path") return parser +print -def download_file(url, localFile): - webFile = urllib.urlopen(url) - localFile = open(localFile, 'w') - localFile.write(webFile.read()) - localFile.close() - +def print_dict(rdict, counter=1): + lists = [] + if not isinstance(rdict, dict): + raise "%s not a dict" % rdict + for (key, value) in rdict.items(): + if isinstance(value, StringTypes): + print " " * counter + "%s: %s" % (key, value) + elif isinstance(value, list): + for listitem in value: + if isinstance(listitem, dict): + lists.append((key, listitem)) + elif isinstance(value, dict): + lists.append((key, value)) -def generate_comon_url(options): - url = "select = 'resptime > 0" - query_dict = {} - query_dict['numslices'] = 'numslices %s= %s' - query_dict['liveslices'] = 'liveslices %s= %s' - query_dict['gbfree'] = 'gbfree %s= %s' - - if options.numslices: - full_value = options.numslices - - url += "'" - -def get_comon_data(): - date = datetime.now() - year = str(date.year) - month = str(date.month) - day = str(date.day) - if len(month) == 1: - month = "0" + month - if len(day) == 1: - day = "0" + day - - comon_data_filename = sfi_dir + os.sep + "comon_data.dat" - comon_url = "http://comon.cs.princeton.edu/status/dump_comon_%s%s%s" % (year, month, day) - - print "storing comon data from %s in %s" % (comon_url, comon_data_filename) - download_file(comon_url, comon_data_filename) - - return comon_data_filename + for (key, listitem) in lists: + if isinstance(listitem, dict): + print " " * (counter - 1) + key + print_dict(listitem, counter+1) + def main(): - parser = create_parser() + parser = create_parser(); (options, args) = parser.parse_args() - comon_file = get_comon_data() - + + if not options.infile: + print "Rspec file not specified" + return + + rspec = Rspec() + try: + rspec.parseFile(options.infile) + except: + print "Error reading rspec file" + + if options.filter: + filter_name = options.filter + rspec_dicts = rspec.getDictsByTagName(options.filter) + rspec_dict = {filter_name: rspec_dicts} + else: + rspec_dict = rspec.toDict() + + print_dict(rspec_dict, options.recursive) + + return if __name__ == '__main__': - main() + try: main() + except Exception, e: + raise + print e -- 2.47.0