summaryrefslogtreecommitdiffstats
path: root/src/sbin/bcfg2-reports
diff options
context:
space:
mode:
authorJames Yang <jjyang@mcs.anl.gov>2008-07-14 20:36:46 +0000
committerJames Yang <jjyang@mcs.anl.gov>2008-07-14 20:36:46 +0000
commit2999a77f7f15612bda3dfa968910b7463d4ad667 (patch)
treeeb3f6e2fdd58b2a65ec12d19eed9287c4dee71d8 /src/sbin/bcfg2-reports
parenta2e7a9ac382be2fcad943b404d04be870aa7291e (diff)
downloadbcfg2-2999a77f7f15612bda3dfa968910b7463d4ad667.tar.gz
bcfg2-2999a77f7f15612bda3dfa968910b7463d4ad667.tar.bz2
bcfg2-2999a77f7f15612bda3dfa968910b7463d4ad667.zip
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
Diffstat (limited to 'src/sbin/bcfg2-reports')
-rwxr-xr-xsrc/sbin/bcfg2-reports201
1 files changed, 125 insertions, 76 deletions
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)