From 2999a77f7f15612bda3dfa968910b7463d4ad667 Mon Sep 17 00:00:00 2001 From: James Yang Date: Mon, 14 Jul 2008 20:36:46 +0000 Subject: Added -h to the standalone Reports script, bcfg-reports git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4784 ce84e21b-d406-0410-9b95-82705330c041 --- src/sbin/bcfg2-reports | 201 ++++++++++++++++++++++++++++++------------------- 1 file changed, 125 insertions(+), 76 deletions(-) (limited to 'src/sbin/bcfg2-reports') diff --git a/src/sbin/bcfg2-reports b/src/sbin/bcfg2-reports index a141dcb1d..e8ad20832 100755 --- a/src/sbin/bcfg2-reports +++ b/src/sbin/bcfg2-reports @@ -1,6 +1,6 @@ -#!/usr/bin/env python -'''query reports system''' -__revision__ = '$Revision: $' +#! /usr/bin/env python +'''Imports statistics.xml and clients.xml files in to database backend for new statistics engine''' +__revision__ = '$Revision: 4639 $' import os, sys try: @@ -15,7 +15,7 @@ sys.path.append(os.path.join(project_directory, '..')) project_module = __import__(project_name, '', '', ['']) sys.path.pop() # Set DJANGO_SETTINGS_MODULE appropriately. -os.environ['DJANGO_SETTINGS_MODULE'] = 'Bcfg2.Server.Reports.settings' +os.environ['DJANGO_SETTINGS_MODULE'] = '%s.settings' % project_name from Bcfg2.Server.Reports.reports.models import Client from getopt import getopt @@ -23,13 +23,12 @@ import datetime def timecompare(client1, client2): '''compares two clients by their timestamps''' - return cmp(client1.current_interaction.timestamp, \ - client2.current_interaction.timestamp) + return cmp(client1.current_interaction.timestamp, client2.current_interaction.timestamp) def namecompare(client1, client2): '''compares two clients by their names''' return cmp(client1.name, client2.name) - + def statecompare(client1, client2): '''compares two clients by their states''' clean1 = client1.current_interaction.isclean() @@ -75,84 +74,134 @@ def print_fields(fields, cli, max_name): else: display += "dirty" print display - - -if __name__ == '__main__': - fields = "" - sort = "" - badentry = "" - expire = "" - - c_list = Client.objects.all() - - result = list() - - args = sys.argv[1:] - opts, pargs = getopt(args, 'cdx:', ['sort=', 'fields=', 'badentry=']) - - for option in opts: - if len(option) > 0: - if option[0] == '--fields': - fields = option[1] - if option[0] == '--sort': - sort = option[1] - if option[0] == '--badentry': - badentry = option[1] - if option[0] == '-x': - expire = option[1] - - if expire != "": - for c_inst in c_list: - if expire == c_inst.name: - if c_inst.expiration == None: - c_inst.expiration = datetime.datetime.now() - else: - c_inst.expiration = None - c_inst.save() +def print_entry(item, max_name): + display = "" + display += item.name + for i in range(len(item.name), max_name): + display += " " + display += " " + display += item.kind + print display + +fields = "" +sort = "" +badentry = "" +expire = "" +singlehost = "" + +c_list = Client.objects.all() + +result = list() + +args = sys.argv[1:] +opts, pargs = getopt(args, 'acdhs:x:', ['sort=', 'fields=', 'badentry=']) + +for option in opts: + if len(option) > 0: + if option[0] == '--fields': + fields = option[1] + if option[0] == '--sort': + sort = option[1] + if option[0] == '--badentry': + badentry = option[1] + if option[0] == '-x': + expire = option[1] + if option[0] == '-s': + singlehost = option[1] + +if expire != "": + for c_inst in c_list: + if expire == c_inst.name: + if c_inst.expiration == None: + c_inst.expiration = datetime.datetime.now() + print "Host expired." + else: + c_inst.expiration = None + print "Host un-expired." + c_inst.save() + +elif '-h' in args: + print '''usage: python [option] ... +Options and arguments (and corresponding environment variables): +-a : shows all hosts, including expired hosts +-c : shows only clean hosts +-d : shows only dirty hosts +-s NAME : single-host mode - shows bad and extra entries from + the current interaction of NAME +-x NAME : toggles expired/unexpired state of NAME +--badentry=KIND,NAME : shows only hosts whose current interaction has bad + entries in of KIND kind and NAME name +--fields=ARG1,ARG2,... : only displays the fields ARG1,ARG2,... + (name,time,state)' +--sort=ARG1,ARG2,... : sorts output on ARG1,ARG2,... (name,time,state)''' +elif singlehost != "": + for c_inst in c_list: + if singlehost == c_inst.name: + baditems = c_inst.current_interaction.bad_items.all() + if len(baditems) > 0: + print "Bad Entries:" + max_name = -1 + for item in baditems: + if len(item.name) > max_name: + max_name = len(item.name) + for item in baditems: + print_entry(item, max_name) + extraitems = c_inst.current_interaction.extra_items.all() + if len(extraitems) > 0: + print "Extra Entries:" + max_name = -1 + for item in extraitems: + if len(item.name) > max_name: + max_name = len(item.name) + for item in extraitems: + print_entry(item, max_name) + + +else: + if fields == "": + fields = ['name', 'time', 'state'] else: - if fields == "": - fields = ['name', 'time', 'state'] - else: - fields = fields.split(',') + fields = fields.split(',') - if sort != "": - sort = sort.split(',') + if sort != "": + sort = sort.split(',') - if badentry != "": - badentry = badentry.split(',') + if badentry != "": + badentry = badentry.split(',') - if '-c' in args: - for c_inst in c_list: - if c_inst.current_interaction.isclean(): - result.append(c_inst) + if '-c' in args: + for c_inst in c_list: + if c_inst.current_interaction.isclean(): + result.append(c_inst) - elif '-d' in args: - for c_inst in c_list: - if not c_inst.current_interaction.isclean(): - result.append(c_inst) + elif '-d' in args: + for c_inst in c_list: + if not c_inst.current_interaction.isclean(): + result.append(c_inst) - elif badentry != "": - for c_inst in c_list: - baditems = c_inst.current_interaction.bad_items.all() - for item in baditems: - if item.name == badentry[1] and item.kind == badentry[0]: - result.append(c_inst) - break + elif badentry != "": + for c_inst in c_list: + baditems = c_inst.current_interaction.bad_items.all() + for item in baditems: + if item.name == badentry[1] and item.kind == badentry[0]: + result.append(c_inst) + break - else: - for c_inst in c_list: - result.append(c_inst) + else: + for c_inst in c_list: + result.append(c_inst) - max_name = -1 - if 'name' in fields: - for c_inst in result: - if len(c_inst.name) > max_name: - max_name = len(c_inst.name) + max_name = -1 + if 'name' in fields: + for c_inst in result: + if len(c_inst.name) > max_name: + max_name = len(c_inst.name) - if sort != "": - result.sort(lambda x, y: crit_compare(sort, x, y)) + if sort != "": + result.sort(lambda x, y: crit_compare(sort, x, y)) - if fields != "": - for c_inst in result: + if fields != "": + for c_inst in result: + if '-a' in args or c_inst.expiration == None: print_fields(fields, c_inst, max_name) -- cgit v1.2.3-1-g7c22