def createReports(sgObj, site, datacenter): www = HTML() mailObj = EMail() dates = DateString() tiers = ['EFD', 'FC', 'SATA'] alertLimits = {} alertLimits['EFD'] = 99 alertLimits['FC'] = 80 alertLimits['SATA'] = 85 page = [] csvpage = [] temppage = [] today = dates.today yesterday = dates.yesterday tomorrow = dates.tomorrow pagedirs = ['download', 'history'] subdirs = [today, tomorrow, yesterday] f = Files() for dir in pagedirs: f.dir = '/var/www/html/' + dir f.mkdir() for sub in subdirs: f.dir = '/var/www/html/' + dir + '/' + sub f.mkdir() csvfile = '/www/download/' + today + '/' + site + '_pools.csv' csvfileperm = '/www/download/' + site + '_pools.csv' csvlink = '<a href=/download/' + today + '/' + site + '_pools.csv>CSV</a>' yesterdaylink = '<a href=/history/' + yesterday + '/' + datacenter + site + '_EMC_Summary.html>' + yesterday + '</a>' tomorrowlink = '<a href=/history/' + tomorrow + '/' + datacenter + site + '_EMC_Summary.html>' + tomorrow + '</a>' htmlfile1 = '/www/history/' + today + '/' + datacenter + site + '_EMC_Summary.html' tempfile = '/www/history/' + tomorrow + '/' + datacenter + site + '_EMC_Summary.html' htmlfile2 = '/www/' + datacenter + site + '_EMC_Summary.html' reportDate = str(time.strftime("%c")) page.append(www.start_html('Thin Pool Report for ' + site)) page.append(www.EMC_Header(site, datacenter, '', csvlink)) page.append('<p><br><table align=center border=3>\n') row = ['EMC Storage Summary Report', tomorrowlink, yesterdaylink] page.append(www.th_list(row)) page.append(www.end_table) page.append(www.start_table(3, site)) heading = [ 'Pool', 'Capacity', 'Used', 'Percent Used', 'Free', 'Provisioned', 'Subscription', 'Subscription Limit', 'PRC', 'Technology', 'Protection' ] page.append(www.th_list(heading)) total_usable = 0 total_provisioned = 0 total_used = 0 total_free = 0 #csvpage.append('Thin Pool Report for ' + site + '\n\n') csvpage.append(', '.join(heading) + '\n') alertMessage = 'The following pools exceed set thresholds...\n\n' alerts = 0 for tier in tiers: for pool in sgObj.pools.keys(): comparepool = str(pool) comparepool = pool.upper() if tier in comparepool: ########## compression = sgObj.pooldetails[pool]['COMPRESSION'] subscription_limit = sgObj.pooldetails[pool][ 'SUBSCRIPTION_LIMIT'] PRC = sgObj.pooldetails[pool]['PRC'] tech = sgObj.pooldetails[pool]['TECH'] protection = sgObj.pooldetails[pool]['LAYOUT'] ########## usable = float(sgObj.pools[pool]['total_usable_tracks_gb']) used = float(sgObj.pools[pool]['total_used_tracks_gb']) percent_used = sgObj.pools[pool]['percent_full'] free = float(sgObj.pools[pool]['total_free_tracks_gb']) subscription = sgObj.pools[pool]['subs_percent'] usable = int(round(usable, 0)) used = int(round(used, 0)) free = int(round(free, 0)) if int(subscription) == 0: provisioned = 0 else: provisioned = usable * (float(subscription) / 100) total_provisioned += provisioned total_usable += usable total_used += used total_free += free html = www.tr if int(percent_used) >= alertLimits[tier]: html = www.alerttr alertMessage += "Thin pool " + comparepool + " is " + str( percent_used) + "% used.\n" alertMessage += str(free) + " GB free remain in the pool\n" alertMessage += " The threshold for " + comparepool + ' is set to ' + str( alertLimits[tier]) + '%\n\n' alerts += 1 row = [ pool, str(usable), str(used), str(percent_used), str(free), str(provisioned), subscription, subscription_limit, PRC, tech, protection ] csvpage.append(', '.join(row) + '\n') page.append(www.tr_list(row)) total_pct_used = int((int(total_used) / float(total_usable)) * 100) total_subscription = int( (int(total_provisioned) / float(total_usable)) * 100) row = [ 'Totals', str(total_usable), str(total_used), str(total_pct_used), str(total_free), str(total_provisioned), str(total_subscription), '___', '___', '___', '___' ] page.append(www.tr_list(row)) page.append(www.end_table) page.append(www.end_html) f.write_file(htmlfile2, page) f.write_file(htmlfile1, page) f.write_file(csvfile, csvpage) f.write_file(csvfileperm, csvpage) temppage.append(www.start_html()) temppage.append( www.Not_Found_Header('Report not created yet for ' + tomorrow)) temppage.append(www.end_html) f.write_file(tempfile, temppage) if alerts > 0: mailObj.subject = "Storage Capacity Alert, " + site + ', ' + datacenter mailObj.message = alertMessage mailObj.send_mail()
def createReports(sgObj, site, datacenter): www = HTML() mailObj = EMail() dates = DateString() page = [] csvpage = [] temppage = [] today = dates.today yesterday = dates.yesterday tomorrow = dates.tomorrow pagedirs = ['download', 'history'] subdirs = [today, tomorrow, yesterday] f = Files() for dir in pagedirs: f.dir = '/var/www/html/' + dir f.mkdir() for sub in subdirs: f.dir = '/var/www/html/' + dir + '/' + sub f.mkdir() csvfile = '/www/download/' + today + '/' + datacenter + site + '_failed_disks.csv' csvfileperm = '/www/download/' + datacenter + site + '_failed_disks.csv' csvlink = '<a href=/download/' + today + '/' + datacenter + site + '_failed_disks.csv>CSV</a>' yesterdaylink = '<a href=/history/' + yesterday + '/' + datacenter + site + '_Failed_disks.html>' + yesterday + '</a>' tomorrowlink = '<a href=/history/' + tomorrow + '/' + datacenter + site + '_Failed_disks.html>' + tomorrow + '</a>' htmlfile1 = '/www/history/' + today + '/' + datacenter + site + '_Failed_disks.html' tempfile = '/www/history/' + tomorrow + '/' + datacenter + site + '_Failed_disks.html' htmlfile2 = '/www/' + datacenter + site + '_Failed_disks.html' logfile = '/www/' + site + '_Failed_disks.log' log = [] reportDate = str(time.strftime("%c")) page.append(www.start_html('Failed Disk Report for ' + site)) page.append(www.EMC_Header(site, datacenter, '', csvlink)) page.append('<p><br><table align=center border=3>\n') row = ['Failed Disk Report', tomorrowlink, yesterdaylink] page.append(www.th_list(row)) page.append(www.end_table) page.append(www.start_table(3, site)) heading = [ 'Disk_ID', 'DA_Port', 'Spindle_ID', 'Tech', 'Speed', 'Vendor', 'Size', 'Failed' ] page.append(www.th_list(heading)) csvpage.append(', '.join(heading) + '\n') alertMessage = 'Disk Error...\n\n' alertMessage += ', '.join(heading) + '\n\n' alerts = 0 for disk in sgObj.FailedDisks: alerts += 1 info = sgObj.FailedDisks[disk].split() row = [ info[0], info[1], info[2], info[3], info[4], info[5], info[6], info[7] ] alertMessage += ', '.join(row) + '\n\n' csvpage.append(', '.join(row) + '\n') page.append(www.tr_list(row)) page.append(www.end_table) page.append(www.end_html) f.write_file(htmlfile2, page) f.write_file(htmlfile1, page) f.write_file(csvfile, csvpage) f.write_file(csvfileperm, csvpage) temppage.append(www.start_html()) temppage.append( www.Not_Found_Header('Report not created yet for ' + tomorrow)) temppage.append(www.end_html) f.write_file(tempfile, temppage) if alerts > 0: mailObj.subject = "WARNING: DISK ERROR - VMAX Failed Disk Alert " + site + ', ' + datacenter mailObj.message = alertMessage mailObj.send_mail() if len(sgObj.New_Failures.keys()) > 0: reportDate = str(time.strftime("%x - %X")) for failed_disk in sgObj.New_Failures.keys(): log.append(reportDate + " :" + mailObj.subject + " " + failed_disk + "\n") f.write_file(logfile, log)
def createDemandReport(fpObj, sgObj, site, datacenter): dates = DateString() htmlpage = [] csvpage = [] temppage = [] www = HTML() f = Files() today = dates.today yesterday = dates.yesterday tomorrow = dates.tomorrow pagedirs = ['download', 'history'] subdirs = [today, tomorrow, yesterday] f = Files() for dir in pagedirs: f.dir = '/var/www/html/' + dir f.mkdir() for sub in subdirs: f.dir = '/var/www/html/' + dir + '/' + sub f.mkdir() csvfile = '/www/download/' + today + '/' + site + '_fast_demand.csv' csvfileperm = '/www/download/' + site + '_fast_demand.csv' csvlink = '<a href=/download/' + today + '/' + site + '_fast_demand.csv>CSV</a>' yesterdaylink = '<a href=/history/' + yesterday + '/' + datacenter + '_fast_demand.html>' + yesterday + '</a>' tomorrowlink = '<a href=/history/' + tomorrow + '/' + datacenter + '_fast_demand.html>' + tomorrow + '</a>' htmlfile1 = '/www/history/' + today + '/' + datacenter + '_fast_demand.html' tempfile = '/www/history/' + tomorrow + '/' + datacenter + '_fast_demand.html' htmlfile2 = '/www/' + datacenter + '_fast_demand.html' html_index = '/www/' + site + '/fast_demand.html' fastCSV = '/www/' + site + '/CSV/' + site + '_fast_demand.csv' htmlpage.append(www.start_html('FAST Demand')) htmlpage.append(www.EMC_Header(site, datacenter, '', csvlink)) demandReportPath = '/' + site + '/fast_demand.html' DemandReportLink = '<a href=' + demandReportPath + '>FAST-VP Demand Report</a>\n' fastReportPath = '/' + site + '/fast.html' fastReportLink = '<a href=' + fastReportPath + '>FAST-VP Policy Report</a>\n' htmlpage.append('<p><br><table align=center border=3>\n') row = [fastReportLink, DemandReportLink] htmlpage.append(www.th_list(row)) htmlpage.append(www.end_table) htmlpage.append('<p><br><table align=center border=3>\n') row = ['FAST Demand Report', tomorrowlink, yesterdaylink] htmlpage.append(www.th_list(row)) htmlpage.append(www.end_table) csvpage.append('FAST-VP Report for ' + site + '\n\n') htmlpage.append(www.start_table(3, 'FAST-VP Demand report')) heading = ['SG_Name', 'Policy'] for tier in fpObj.tiernames: heading.append(tier) heading.append('SG_USED') heading.append('SG_PROVISIONED') htmlpage.append(www.th_list(heading)) csvpage.append(', '.join(heading) + '\n') for sg in fpObj.tiers: policy = fpObj.Associations[sg] GB = float(sgObj.SG2Capacity[sg]) / 1024 ProvisionedGB = "%.2f" % GB sg_provisioned = str(ProvisionedGB) + ' GB' # sglinkpath = "/" + site + "/SG/" + sg + ".html" sglink = '<a href=' + sglinkpath + '>' + str(sg) + '</a>' line = [sglink, policy] line2 = [sg, policy] for tiername in fpObj.tiernames: if tiername in fpObj.tiers[sg]: line.append(fpObj.tiers[sg][tiername]) line2.append(fpObj.tiers[sg][tiername]) else: line.append('0') line2.append('0') # The next 5 lines add total used and provisioned columns... sg_total = str(fpObj.tiers[sg]['SG_USED']) + ' GB' line.append(sg_total) line2.append(sg_total) line.append(sg_provisioned) line2.append(sg_provisioned) # csvpage.append(', '.join(line2) + '\n') htmlpage.append(www.tr_list(line)) htmlpage.append(www.end_table) htmlpage.append(www.end_html) f.write_file(html_index, htmlpage) f.write_file(fastCSV, csvpage) f.write_file(htmlfile2, htmlpage) f.write_file(htmlfile1, htmlpage) f.write_file(csvfile, csvpage) f.write_file(csvfileperm, csvpage) temppage.append(www.start_html()) temppage.append( www.Not_Found_Header('Report not created yet for ' + tomorrow)) temppage.append(www.end_html) f.write_file(tempfile, temppage)