# please have a look at the site support team metric script # development documentation: # https://twiki.cern.ch/twiki/bin/view/CMSPublic/SiteSupportMonitoringScripts import sys, time from lib import sites, dashboard, url, fileOps try: import json except ImportError: import simplejson as json if len(sys.argv) < 7: print 'not enough parameter!' sys.exit(1) # manually controlled usable sites list usableSitesMC = dashboard.parseMetric(url.read(sys.argv[1])) # morgue list morgue = dashboard.parseMetric(url.read(sys.argv[2])) # prepare hammercloud metric url for last 3 days! hcURL = sys.argv[3] % (time.strftime("%Y-%m-%d", time.localtime(time.time()-3*24*60*60)), time.strftime("%Y-%m-%d", time.localtime(time.time()))) hammerCloud = dashboard.parseJSONMetric(url.read(hcURL)) # get the url stamp for the dashboard input file urlStamp = sys.argv[4] # text output file location txtOutput = sys.argv[5] # json output file location jsonOutput = sys.argv[6] # create new metric object metricHeader = {'twiki' : 'https://twiki.cern.ch/twiki/bin/view/CMSPublic/UsableSitesForAnalysis'} metric = dashboard.metric(header = metricHeader)
from lib import dashboard, sites, url from datetime import datetime, timedelta import os, sys import dateutil.parser import json from optparse import OptionParser metricFileName = sys.argv[1] overrideFileName = sys.argv[2] outputFileName = sys.argv[3] metricFile = open(metricFileName, 'r') overrideFile = open(overrideFileName, 'r') try: metricMetric = dashboard.parseMetric(metricFile.read()) overrideMetric = dashboard.parseMetric(overrideFile.read()) except: print "Cannot read either metric or override" exit(1) sites = set(metricMetric.getSites()).union(set(overrideMetric.getSites())) outputEntries = [] #dateNow = datetime.now().strftime("%Y-%m-%d %H:%M:%S") for site in sites: entryFromMetric = metricMetric.getSiteEntry(site) entryFromOverride = overrideMetric.getSiteEntry(site) if entryFromMetric is not None and entryFromOverride is not None: newEntry = entryFromMetric
if len(sys.argv) < 4: sys.stderr.write('not enough parameter!\n') sys.exit(1) siteList = sites.getSites() config = json.loads(fileOps.read(sys.argv[1])) fieldList = config.keys() fieldList.sort() data = {} # add field names data['fields'] = fieldList # load all fields from dashboard fields = {} for field in fieldList: fields[field] = dashboard.parseMetric(url.read(config[field])) print field, 'done...' for site in siteList: data[site] = [] for field in fieldList: if not fields[field].hasSite(site): data[site].append('black') continue data[site].append(fields[field].getSiteEntry(site).color) template = fileOps.read(sys.argv[2]) template = template.replace('@DATE@', time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))) template = template.replace('@DATA@', json.dumps(data)); fileOps.write(sys.argv[3], template)