ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/DATATRANSFER/tapeStorageOverview.py
Revision: 1.1
Committed: Tue Jun 14 21:07:40 2011 UTC (13 years, 10 months ago) by fmoscato
Content type: text/x-python
Branch: MAIN
Log Message:
Oli script for the storage overview

File Contents

# User Rev Content
1 fmoscato 1.1 #!/usr/bin/env python
2    
3     import os,sys,datetime
4    
5     import numpy as np
6     import matplotlib.pyplot as plt
7     from matplotlib.colors import colorConverter
8     from operator import add
9    
10     # Make a list of colors cycling through the rgbcmyk series.
11     colors = [colorConverter.to_rgba(c) for c in ('r','g','m','c','y','b','k')]
12     now = datetime.datetime.utcnow()
13     date = now.strftime("%Y-%m-%d")
14     fulldate = now.strftime("%A, %d. %B %Y %H:%M UTC")
15    
16     types = [
17     'custodial data',
18     'non-custodial data',
19     'custodial MC',
20     'non-custodial MC'
21     ]
22    
23     sites = [
24     'T1_DE_KIT',
25     'T1_ES_PIC',
26     'T1_FR_CCIN2P3',
27     'T1_IT_CNAF',
28     'T1_UK_RAL',
29     'T1_US_FNAL',
30     'T1_TW_ASGC',
31     ]
32    
33     tiers_data = [
34     'RAW',
35     'RECO',
36     'DQM',
37     'ALCARECO',
38     'RAW-RECO',
39     'USER',
40     ]
41    
42     eras_data = [
43     'GlobalMar08',
44     'CRUZET1',
45     'CRUZET2',
46     'CRUZET3',
47     'CRUZET4',
48     'EW35',
49     'CRUZET09',
50     'CRAFT09',
51     'BeamCommissioning08',
52     'Commissioning08',
53     'BeamCommissioning09',
54     'Commissioning09',
55     'Commissioning10',
56     'Run2010A',
57     'Run2010B',
58     'HIRun2010',
59     'Run2011A'
60     ]
61    
62     tiers_mc = [
63     'GEN-SIM',
64     'GEN-SIM-RAW',
65     'GEN-SIM-RECO',
66     'AODSIM',
67     'DQM',
68     'GEN-SIM-RAWDEBUG',
69     'GEN-SIM-RECODEBUG',
70     ]
71    
72     eras_mc = [
73     'Summer08',
74     'Fall08',
75     'Winter09',
76     'Summer09',
77     'Spring10',
78     'Summer10',
79     'Fall10',
80     'Winter10',
81     'Spring11',
82     'Summer11',
83     ]
84    
85     ignore_eras = [
86     'JobRobot',
87     'StoreResults',
88     ]
89    
90     ignore_tiers = [
91     ]
92    
93    
94     def main(argv) :
95     """
96     tape storage statistics
97     parameters: <previous date> <current date>
98     execute from top directory
99     """
100    
101     print 'Execute at',fulldate
102    
103     if len(argv) != 2:
104     print main.__doc__
105     sys.exit(2)
106    
107     previous_date = argv[0]
108     current_date = argv[1]
109    
110     current = {}
111     current['T1_DE_KIT'] = parseFile(current_date + '/T1DataSummary_T1_DE_KIT.txt')
112     current['T1_ES_PIC'] = parseFile(current_date + '/T1DataSummary_T1_ES_PIC.txt')
113     current['T1_FR_CCIN2P3'] = parseFile(current_date + '/T1DataSummary_T1_FR_CCIN2P3.txt')
114     current['T1_IT_CNAF'] = parseFile(current_date + '/T1DataSummary_T1_IT_CNAF.txt')
115     current['T1_TW_ASGC'] = parseFile(current_date + '/T1DataSummary_T1_TW_ASGC.txt')
116     current['T1_UK_RAL'] = parseFile(current_date + '/T1DataSummary_T1_UK_RAL.txt')
117     current['T1_US_FNAL'] = parseFile(current_date + '/T1DataSummary_T1_US_FNAL.txt')
118    
119     previous = {}
120     previous['T1_DE_KIT'] = parseFile(previous_date + '/T1DataSummary_T1_DE_KIT.txt')
121     previous['T1_ES_PIC'] = parseFile(previous_date + '/T1DataSummary_T1_ES_PIC.txt')
122     previous['T1_FR_CCIN2P3'] = parseFile(previous_date + '/T1DataSummary_T1_FR_CCIN2P3.txt')
123     previous['T1_IT_CNAF'] = parseFile(previous_date + '/T1DataSummary_T1_IT_CNAF.txt')
124     previous['T1_TW_ASGC'] = parseFile(previous_date + '/T1DataSummary_T1_TW_ASGC.txt')
125     previous['T1_UK_RAL'] = parseFile(previous_date + '/T1DataSummary_T1_UK_RAL.txt')
126     previous['T1_US_FNAL'] = parseFile(previous_date + '/T1DataSummary_T1_US_FNAL.txt')
127    
128     completeCategories(current)
129     completeCategories(previous)
130    
131     checkCategories(current)
132     checkCategories(previous)
133    
134     delta = subtract(current,previous)
135    
136     detailedDictDataCurrent = createDetailedDictData(current)
137     eraCustDictDataCurrent = createEraCustDictData(current)
138     eraTierDictDataCurrent = createEraTierDictData(current)
139     tierDictDataCurrent = createTierDictData(current)
140     tierDictCustDataCurrent = createTierDictCustData(current)
141     tierDictNonCustDataCurrent = createTierDictNonCustData(current)
142     eraDictDataCurrent = createEraDictData(current)
143     eraDictCustDataCurrent = createEraDictCustData(current)
144     eraDictNonCustDataCurrent = createEraDictNonCustData(current)
145    
146     detailedArrayDataCurrent = createDetailedArrayData(detailedDictDataCurrent)
147     eraCustArrayDataCurrent = createEraCustArrayData(eraCustDictDataCurrent)
148     eraTierArrayDataCurrent = createEraTierArrayData(eraTierDictDataCurrent)
149     tierArrayDataCurrent = createTierArrayData(tierDictDataCurrent)
150     tierArrayCustDataCurrent = createTierArrayCustData(tierDictCustDataCurrent)
151     tierArrayNonCustDataCurrent = createTierArrayNonCustData(tierDictNonCustDataCurrent)
152     eraArrayDataCurrent = createEraArrayData(eraDictDataCurrent)
153     eraArrayCustDataCurrent = createEraArrayCustData(eraDictCustDataCurrent)
154     eraArrayNonCustDataCurrent = createEraArrayNonCustData(eraDictNonCustDataCurrent)
155    
156     detailedDictMCCurrent = createDetailedDictMC(current)
157     eraCustDictMCCurrent = createEraCustDictMC(current)
158     eraTierDictMCCurrent = createEraTierDictMC(current)
159     tierDictMCCurrent = createTierDictMC(current)
160     tierDictCustMCCurrent = createTierDictCustMC(current)
161     tierDictNonCustMCCurrent = createTierDictNonCustMC(current)
162     eraDictMCCurrent = createEraDictMC(current)
163     eraDictCustMCCurrent = createEraDictCustMC(current)
164     eraDictNonCustMCCurrent = createEraDictNonCustMC(current)
165    
166     detailedArrayMCCurrent = createDetailedArrayMC(detailedDictMCCurrent)
167     eraCustArrayMCCurrent = createEraCustArrayMC(eraCustDictMCCurrent)
168     eraTierArrayMCCurrent = createEraTierArrayMC(eraTierDictMCCurrent)
169     tierArrayMCCurrent = createTierArrayMC(tierDictMCCurrent)
170     tierArrayCustMCCurrent = createTierArrayCustMC(tierDictCustMCCurrent)
171     tierArrayNonCustMCCurrent = createTierArrayNonCustMC(tierDictNonCustMCCurrent)
172     eraArrayMCCurrent = createEraArrayMC(eraDictMCCurrent)
173     eraArrayCustMCCurrent = createEraArrayCustMC(eraDictCustMCCurrent)
174     eraArrayNonCustMCCurrent = createEraArrayNonCustMC(eraDictNonCustMCCurrent)
175    
176     createHTMLfromArray(detailedArrayDataCurrent,'tape_storage_overview_current_data_detailed.html','Current Week Tape Storage Overview: Detailed View for Data',3)
177     createHTMLfromArray(eraTierArrayDataCurrent,'tape_storage_overview_current_data_era_tier.html','Current Week Tape Storage Overview: Era/Tier View for Data',2)
178     createHTMLfromArray(eraCustArrayDataCurrent,'tape_storage_overview_current_data_era_cust.html','Current Week Tape Storage Overview: Era/Cust./Non-Cust. View for Data',2)
179     createHTMLfromArray(eraArrayDataCurrent,'tape_storage_overview_current_data_era.html','Current Week Tape Storage Overview: Era View for Data',1)
180     createHTMLfromArray(eraArrayCustDataCurrent,'tape_storage_overview_current_cust_data_era.html','Current Week Tape Storage Overview: Era View for Custodial Data',1)
181     createHTMLfromArray(eraArrayNonCustDataCurrent,'tape_storage_overview_current_non_cust_data_era.html','Current Week Tape Storage Overview: Era View for Non-Custodial Data',1)
182     createHTMLfromArray(tierArrayDataCurrent,'tape_storage_overview_current_data_tier.html','Current Week Tape Storage Overview: Tier View for Data',1)
183     createHTMLfromArray(tierArrayCustDataCurrent,'tape_storage_overview_current_cust_data_tier.html','Current Week Tape Storage Overview: Tier View for Custodial Data',1)
184     createHTMLfromArray(tierArrayNonCustDataCurrent,'tape_storage_overview_current_non_cust_data_tier.html','Current Week Tape Storage Overview: Tier View for Non-Custodial Data',1)
185    
186     createHTMLfromArray(detailedArrayMCCurrent,'tape_storage_overview_current_mc_detailed.html','Current Week Tape Storage Overview: Detailed View for MC',3)
187     createHTMLfromArray(eraTierArrayMCCurrent,'tape_storage_overview_current_mc_era_tier.html','Current Week Tape Storage Overview: Era/Tier View for MC',2)
188     createHTMLfromArray(eraCustArrayMCCurrent,'tape_storage_overview_current_mc_era_cust.html','Current Week Tape Storage Overview: Era/Cust./Non-Cust. View for MC',2)
189     createHTMLfromArray(eraArrayMCCurrent,'tape_storage_overview_current_mc_era.html','Current Week Tape Storage Overview: Era View for MC',1)
190     createHTMLfromArray(eraArrayCustMCCurrent,'tape_storage_overview_current_cust_mc_era.html','Current Week Tape Storage Overview: Era View for Custodial MC',1)
191     createHTMLfromArray(eraArrayNonCustMCCurrent,'tape_storage_overview_current_non_cust_mc_era.html','Current Week Tape Storage Overview: Era View for Non-Custodial MC',1)
192     createHTMLfromArray(tierArrayMCCurrent,'tape_storage_overview_current_mc_tier.html','Current Week Tape Storage Overview: Tier View for MC',1)
193     createHTMLfromArray(tierArrayCustMCCurrent,'tape_storage_overview_current_cust_mc_tier.html','Current Week Tape Storage Overview: Tier View for Custodial MC',1)
194     createHTMLfromArray(tierArrayNonCustMCCurrent,'tape_storage_overview_current_non_cust_mc_tier.html','Current Week Tape Storage Overview: Tier View for Non-Custodial MC',1)
195    
196     detailedDictDataPrevious = createDetailedDictData(previous)
197     eraCustDictDataPrevious = createEraCustDictData(previous)
198     eraTierDictDataPrevious = createEraTierDictData(previous)
199     tierDictDataPrevious = createTierDictData(previous)
200     tierDictCustDataPrevious = createTierDictCustData(previous)
201     tierDictNonCustDataPrevious = createTierDictNonCustData(previous)
202     eraDictDataPrevious = createEraDictData(previous)
203     eraDictCustDataPrevious = createEraDictCustData(previous)
204     eraDictNonCustDataPrevious = createEraDictNonCustData(previous)
205    
206     detailedArrayDataPrevious = createDetailedArrayData(detailedDictDataPrevious)
207     eraCustArrayDataPrevious = createEraCustArrayData(eraCustDictDataPrevious)
208     eraTierArrayDataPrevious = createEraTierArrayData(eraTierDictDataPrevious)
209     tierArrayDataPrevious = createTierArrayData(tierDictDataPrevious)
210     tierArrayCustDataPrevious = createTierArrayCustData(tierDictCustDataPrevious)
211     tierArrayNonCustDataPrevious = createTierArrayNonCustData(tierDictNonCustDataPrevious)
212     eraArrayDataPrevious = createEraArrayData(eraDictDataPrevious)
213     eraArrayCustDataPrevious = createEraArrayCustData(eraDictCustDataPrevious)
214     eraArrayNonCustDataPrevious = createEraArrayNonCustData(eraDictNonCustDataPrevious)
215    
216     detailedDictMCPrevious = createDetailedDictMC(previous)
217     eraCustDictMCPrevious = createEraCustDictMC(previous)
218     eraTierDictMCPrevious = createEraTierDictMC(previous)
219     tierDictMCPrevious = createTierDictMC(previous)
220     tierDictCustMCPrevious = createTierDictCustMC(previous)
221     tierDictNonCustMCPrevious = createTierDictNonCustMC(previous)
222     eraDictMCPrevious = createEraDictMC(previous)
223     eraDictCustMCPrevious = createEraDictCustMC(previous)
224     eraDictNonCustMCPrevious = createEraDictNonCustMC(previous)
225    
226     detailedArrayMCPrevious = createDetailedArrayMC(detailedDictMCPrevious)
227     eraCustArrayMCPrevious = createEraCustArrayMC(eraCustDictMCPrevious)
228     eraTierArrayMCPrevious = createEraTierArrayMC(eraTierDictMCPrevious)
229     tierArrayMCPrevious = createTierArrayMC(tierDictMCPrevious)
230     tierArrayCustMCPrevious = createTierArrayCustMC(tierDictCustMCPrevious)
231     tierArrayNonCustMCPrevious = createTierArrayNonCustMC(tierDictNonCustMCPrevious)
232     eraArrayMCPrevious = createEraArrayMC(eraDictMCPrevious)
233     eraArrayCustMCPrevious = createEraArrayCustMC(eraDictCustMCPrevious)
234     eraArrayNonCustMCPrevious = createEraArrayNonCustMC(eraDictNonCustMCPrevious)
235    
236     createHTMLfromArray(detailedArrayDataPrevious,'tape_storage_overview_previous_data_detailed.html','Previous Week Tape Storage Overview: Detailed View for Data',3)
237     createHTMLfromArray(eraTierArrayDataPrevious,'tape_storage_overview_previous_data_era_tier.html','Previous Week Tape Storage Overview: Era/Tier View for Data',2)
238     createHTMLfromArray(eraCustArrayDataPrevious,'tape_storage_overview_previous_data_era_cust.html','Previous Week Tape Storage Overview: Era/Cust./Non-Cust. View for Data',2)
239     createHTMLfromArray(eraArrayDataPrevious,'tape_storage_overview_previous_data_era.html','Previous Week Tape Storage Overview: Era View for Data',1)
240     createHTMLfromArray(eraArrayCustDataPrevious,'tape_storage_overview_previous_cust_data_era.html','Previous Week Tape Storage Overview: Era View for Custodial Data',1)
241     createHTMLfromArray(eraArrayNonCustDataPrevious,'tape_storage_overview_previous_non_cust_data_era.html','Previous Week Tape Storage Overview: Era View for Non-Custodial Data',1)
242     createHTMLfromArray(tierArrayDataPrevious,'tape_storage_overview_previous_data_tier.html','Previous Week Tape Storage Overview: Tier View for Data',1)
243     createHTMLfromArray(tierArrayCustDataPrevious,'tape_storage_overview_previous_cust_data_tier.html','Previous Week Tape Storage Overview: Tier View for Custodial Data',1)
244     createHTMLfromArray(tierArrayNonCustDataPrevious,'tape_storage_overview_previous_non_cust_data_tier.html','Previous Week Tape Storage Overview: Tier View for Non-Custodial Data',1)
245    
246     createHTMLfromArray(detailedArrayMCPrevious,'tape_storage_overview_previous_mc_detailed.html','Previous Week Tape Storage Overview: Detailed View for MC',3)
247     createHTMLfromArray(eraTierArrayMCPrevious,'tape_storage_overview_previous_mc_era_tier.html','Previous Week Tape Storage Overview: Era/Tier View for MC',2)
248     createHTMLfromArray(eraCustArrayMCPrevious,'tape_storage_overview_previous_mc_era_cust.html','Previous Week Tape Storage Overview: Era/Cust./Non-Cust. View for MC',2)
249     createHTMLfromArray(eraArrayMCPrevious,'tape_storage_overview_previous_mc_era.html','Previous Week Tape Storage Overview: Era View for MC',1)
250     createHTMLfromArray(eraArrayCustMCPrevious,'tape_storage_overview_previous_cust_mc_era.html','Previous Week Tape Storage Overview: Era View for Custodial MC',1)
251     createHTMLfromArray(eraArrayNonCustMCPrevious,'tape_storage_overview_previous_non_cust_mc_era.html','Previous Week Tape Storage Overview: Era View for Non-Custodial MC',1)
252     createHTMLfromArray(tierArrayMCPrevious,'tape_storage_overview_previous_mc_tier.html','Previous Week Tape Storage Overview: Tier View for MC',1)
253     createHTMLfromArray(tierArrayCustMCPrevious,'tape_storage_overview_previous_cust_mc_tier.html','Previous Week Tape Storage Overview: Tier View for Custodial MC',1)
254     createHTMLfromArray(tierArrayNonCustMCPrevious,'tape_storage_overview_previous_non_cust_mc_tier.html','Previous Week Tape Storage Overview: Tier View for Non-Custodial MC',1)
255    
256     detailedDictDataDelta = createDetailedDictData(delta)
257     eraCustDictDataDelta = createEraCustDictData(delta)
258     eraTierDictDataDelta = createEraTierDictData(delta)
259     tierDictDataDelta = createTierDictData(delta)
260     tierDictCustDataDelta = createTierDictCustData(delta)
261     tierDictNonCustDataDelta = createTierDictNonCustData(delta)
262     eraDictDataDelta = createEraDictData(delta)
263     eraDictCustDataDelta = createEraDictCustData(delta)
264     eraDictNonCustDataDelta = createEraDictNonCustData(delta)
265    
266     detailedArrayDataDelta = createDetailedArrayData(detailedDictDataDelta)
267     eraCustArrayDataDelta = createEraCustArrayData(eraCustDictDataDelta)
268     eraTierArrayDataDelta = createEraTierArrayData(eraTierDictDataDelta)
269     tierArrayDataDelta = createTierArrayData(tierDictDataDelta)
270     tierArrayCustDataDelta = createTierArrayCustData(tierDictCustDataDelta)
271     tierArrayNonCustDataDelta = createTierArrayNonCustData(tierDictNonCustDataDelta)
272     eraArrayDataDelta = createEraArrayData(eraDictDataDelta)
273     eraArrayCustDataDelta = createEraArrayCustData(eraDictCustDataDelta)
274     eraArrayNonCustDataDelta = createEraArrayNonCustData(eraDictNonCustDataDelta)
275    
276     detailedDictMCDelta = createDetailedDictMC(delta)
277     eraCustDictMCDelta = createEraCustDictMC(delta)
278     eraTierDictMCDelta = createEraTierDictMC(delta)
279     tierDictMCDelta = createTierDictMC(delta)
280     tierDictCustMCDelta = createTierDictCustMC(delta)
281     tierDictNonCustMCDelta = createTierDictNonCustMC(delta)
282     eraDictMCDelta = createEraDictMC(delta)
283     eraDictCustMCDelta = createEraDictCustMC(delta)
284     eraDictNonCustMCDelta = createEraDictNonCustMC(delta)
285    
286     detailedArrayMCDelta = createDetailedArrayMC(detailedDictMCDelta)
287     eraCustArrayMCDelta = createEraCustArrayMC(eraCustDictMCDelta)
288     eraTierArrayMCDelta = createEraTierArrayMC(eraTierDictMCDelta)
289     tierArrayMCDelta = createTierArrayMC(tierDictMCDelta)
290     tierArrayCustMCDelta = createTierArrayCustMC(tierDictCustMCDelta)
291     tierArrayNonCustMCDelta = createTierArrayNonCustMC(tierDictNonCustMCDelta)
292     eraArrayMCDelta = createEraArrayMC(eraDictMCDelta)
293     eraArrayCustMCDelta = createEraArrayCustMC(eraDictCustMCDelta)
294     eraArrayNonCustMCDelta = createEraArrayNonCustMC(eraDictNonCustMCDelta)
295    
296     createHTMLfromArray(detailedArrayDataDelta,'tape_storage_overview_delta_data_detailed.html','Delta Week Tape Storage Overview: Detailed View for Data',3)
297     createHTMLfromArray(eraTierArrayDataDelta,'tape_storage_overview_delta_data_era_tier.html','Delta Week Tape Storage Overview: Era/Tier View for Data',2)
298     createHTMLfromArray(eraCustArrayDataDelta,'tape_storage_overview_delta_data_era_cust.html','Delta Week Tape Storage Overview: Era/Cust./Non-Cust. View for Data',2)
299     createHTMLfromArray(eraArrayDataDelta,'tape_storage_overview_delta_data_era.html','Delta Week Tape Storage Overview: Era View for Data',1)
300     createHTMLfromArray(eraArrayCustDataDelta,'tape_storage_overview_delta_cust_data_era.html','Delta Week Tape Storage Overview: Era View for Custodial Data',1)
301     createHTMLfromArray(eraArrayNonCustDataDelta,'tape_storage_overview_delta_non_cust_data_era.html','Delta Week Tape Storage Overview: Era View for Non-Custodial Data',1)
302     createHTMLfromArray(tierArrayDataDelta,'tape_storage_overview_delta_data_tier.html','Delta Week Tape Storage Overview: Tier View for Data',1)
303     createHTMLfromArray(tierArrayCustDataDelta,'tape_storage_overview_delta_cust_data_tier.html','Delta Week Tape Storage Overview: Tier View for Custodial Data',1)
304     createHTMLfromArray(tierArrayNonCustDataDelta,'tape_storage_overview_delta_non_cust_data_tier.html','Delta Week Tape Storage Overview: Tier View for Non-Custodial Data',1)
305    
306     createHTMLfromArray(detailedArrayMCDelta,'tape_storage_overview_delta_mc_detailed.html','Delta Week Tape Storage Overview: Detailed View for MC',3)
307     createHTMLfromArray(eraTierArrayMCDelta,'tape_storage_overview_delta_mc_era_tier.html','Delta Week Tape Storage Overview: Era/Tier View for MC',2)
308     createHTMLfromArray(eraCustArrayMCDelta,'tape_storage_overview_delta_mc_era_cust.html','Delta Week Tape Storage Overview: Era/Cust./Non-Cust. View for MC',2)
309     createHTMLfromArray(eraArrayMCDelta,'tape_storage_overview_delta_mc_era.html','Delta Week Tape Storage Overview: Era View for MC',1)
310     createHTMLfromArray(eraArrayCustMCDelta,'tape_storage_overview_delta_cust_mc_era.html','Delta Week Tape Storage Overview: Era View for Custodial MC',1)
311     createHTMLfromArray(eraArrayNonCustMCDelta,'tape_storage_overview_delta_non_cust_mc_era.html','Delta Week Tape Storage Overview: Era View for Non-Custodial MC',1)
312     createHTMLfromArray(tierArrayMCDelta,'tape_storage_overview_delta_mc_tier.html','Delta Week Tape Storage Overview: Tier View for MC',1)
313     createHTMLfromArray(tierArrayCustMCDelta,'tape_storage_overview_delta_cust_mc_tier.html','Delta Week Tape Storage Overview: Tier View for Custodial MC',1)
314     createHTMLfromArray(tierArrayNonCustMCDelta,'tape_storage_overview_delta_non_cust_mc_tier.html','Delta Week Tape Storage Overview: Tier View for Non-Custodial MC',1)
315    
316     overviewDictCurrent = createOverviewDict(current)
317     overviewDictPrevious = createOverviewDict(previous)
318     overviewDictDelta = createOverviewDict(delta)
319    
320     overviewArrayCurrent = createOverviewArray(overviewDictCurrent)
321     overviewArrayPrevious = createOverviewArray(overviewDictPrevious)
322     overviewArrayDelta = createOverviewArray(overviewDictDelta)
323    
324     createHTMLfromArray(overviewArrayCurrent,'tape_storage_overview_current.html','Current Week Tape Storage Overview',1)
325     createHTMLfromArray(overviewArrayPrevious,'tape_storage_overview_previous.html','Previous Week Tape Storage Overview',1)
326     createHTMLfromArray(overviewArrayDelta,'tape_storage_overview_delta.html','Delta between Current and Previous Week Tape Storage Overview',1)
327    
328     overviewArray = {}
329     for site in sites:
330     overviewArray[site]= createSiteOverviewArray(current,delta,site)
331     createHTMLfromArray(overviewArray[site],'tape_storage_overview_'+site+'.html','Tape Storage Overview ' + site,1)
332    
333     createOverviewPlots(overviewDictCurrent,'Total Tape Storage Overview','total_tape_storage_overview.png')
334     createOverviewPlots(overviewDictDelta,'Delta Tape Storage Overview','delta_tape_storage_overview.png')
335     createOverviewPieGraphs(overviewDictCurrent,'','Custodial Tape Storage Overview','custodial_tape_storage_pie.png')
336     createOverviewPieGraphs(overviewDictCurrent,'data','Custodial Data Tape Storage Overview','custodial_data_tape_storage_pie.png')
337     createOverviewPieGraphs(overviewDictCurrent,'mc','Custodial MC Tape Storage Overview','custodial_mc_tape_storage_pie.png')
338    
339     createMainHTML(overviewArrayCurrent,overviewArrayDelta,'Tape Storage Overview')
340    
341    
342     def createDetailedDictData(input):
343    
344     result = {}
345    
346     for era in eras_data:
347     if era not in result.keys():
348     result[era] = {}
349     for tier in tiers_data:
350     if tier not in result[era].keys():
351     result[era][tier] = {}
352     if 'cust' not in result[era][tier].keys():
353     result[era][tier]['cust'] = {}
354     if 'non_cust' not in result[era][tier].keys():
355     result[era][tier]['non_cust'] = {}
356     for site in sites:
357     value = input[site][era][tier]['data']['cust']
358     result[era][tier]['cust'][site] = value
359     for site in sites:
360     value = input[site][era][tier]['data']['non_cust']
361     result[era][tier]['non_cust'][site] = value
362    
363     print 'Created detailed dict for data'
364    
365     return result
366    
367    
368     def createEraCustDictData(input):
369    
370     result = {}
371    
372     for era in eras_data:
373     if era not in result.keys():
374     result[era] = {}
375     if 'cust' not in result[era].keys():
376     result[era]['cust'] = {}
377     if 'non_cust' not in result[era].keys():
378     result[era]['non_cust'] = {}
379     for site in sites:
380     value = 0
381     for tier in tiers_data:
382     value += input[site][era][tier]['data']['cust']
383     result[era]['cust'][site] = value
384     value = 0
385     for tier in tiers_data:
386     value += input[site][era][tier]['data']['non_cust']
387     result[era]['non_cust'][site] = value
388    
389     print 'Created era/cust dict for data'
390    
391     return result
392    
393     def createEraTierDictData(input):
394    
395     result = {}
396    
397     for era in eras_data:
398     if era not in result.keys():
399     result[era] = {}
400     for tier in tiers_data:
401     if tier not in result[era].keys():
402     result[era][tier] = {}
403     for site in sites:
404     value = input[site][era][tier]['data']['cust']
405     value += input[site][era][tier]['data']['non_cust']
406     result[era][tier][site] = value
407    
408     print 'Created era/tier dict for data'
409    
410     return result
411    
412     def createTierDictData(input):
413    
414     result = {}
415    
416     for tier in tiers_data:
417     if tier not in result.keys():
418     result[tier] = {}
419     for site in sites:
420     value = 0
421     for era in eras_data:
422     value += input[site][era][tier]['data']['cust']
423     value += input[site][era][tier]['data']['non_cust']
424     result[tier][site] = value
425    
426     print 'Created tier dict for data'
427    
428     return result
429    
430     def createTierDictCustData(input):
431    
432     result = {}
433    
434     for tier in tiers_data:
435     if tier not in result.keys():
436     result[tier] = {}
437     for site in sites:
438     value = 0
439     for era in eras_data:
440     value += input[site][era][tier]['data']['cust']
441     result[tier][site] = value
442    
443     print 'Created tier dict for cust data'
444    
445     return result
446    
447     def createTierDictNonCustData(input):
448    
449     result = {}
450    
451     for tier in tiers_data:
452     if tier not in result.keys():
453     result[tier] = {}
454     for site in sites:
455     value = 0
456     for era in eras_data:
457     value += input[site][era][tier]['data']['non_cust']
458     result[tier][site] = value
459    
460     print 'Created tier array for non-cust data'
461    
462     return result
463    
464     def createEraDictData(input):
465    
466     result = {}
467    
468     for era in eras_data:
469     if era not in result.keys():
470     result[era] = {}
471     for site in sites:
472     value = 0
473     for tier in tiers_data:
474     value += input[site][era][tier]['data']['cust']
475     value += input[site][era][tier]['data']['non_cust']
476     result[era][site] = value
477    
478     print 'Created era dict for data'
479    
480     return result
481    
482     def createEraDictCustData(input):
483    
484     result = {}
485    
486     for era in eras_data:
487     if era not in result.keys():
488     result[era] = {}
489     for site in sites:
490     value = 0
491     for tier in tiers_data:
492     value += input[site][era][tier]['data']['cust']
493     result[era][site] = value
494    
495     print 'Created era dict for cust data'
496    
497     return result
498    
499     def createEraDictNonCustData(input):
500    
501     result = {}
502    
503     for era in eras_data:
504     if era not in result.keys():
505     result[era] = {}
506     for site in sites:
507     value = 0
508     for tier in tiers_data:
509     value += input[site][era][tier]['data']['cust']
510     result[era][site] = value
511    
512     print 'Created era dict for non-cust data'
513    
514     return result
515    
516     def createDetailedArrayData(input):
517    
518     result = []
519    
520     line = []
521     line.append('Acquisition era')
522     line.append('Data Tier')
523     line.append('Cust./Non-Cust.')
524     for site in sites:
525     line.append(site+' [TB]')
526     line.append('All sites [TB]')
527     result.append(line)
528     total = {}
529     for site in sites:
530     total[site] = 0
531     for era in eras_data:
532     for tier in tiers_data:
533     line = []
534     line.append(era)
535     line.append(tier)
536     line.append('custodial')
537     local_total = 0
538     for site in sites:
539     value = input[era][tier]['cust'][site]
540     line.append("%.3f" % value)
541     local_total += value
542     total[site] += value
543     line.append("%.3f" % local_total)
544     result.append(line)
545     line = []
546     line.append(era)
547     line.append(tier)
548     line.append('non-custodial')
549     local_total = 0
550     for site in sites:
551     value = input[era][tier]['non_cust'][site]
552     line.append("%.3f" % value)
553     local_total += value
554     total[site] += value
555     line.append("%.3f" % local_total)
556     result.append(line)
557     line = []
558     line.append('Total')
559     line.append('')
560     line.append('')
561     local_total = 0
562     for site in sites:
563     line.append("%.3f" % total[site])
564     local_total += total[site]
565     line.append("%.3f" % local_total)
566     result.append(line)
567    
568     print 'Created detailed array for data'
569    
570     return result
571    
572     def createEraCustArrayData(input):
573    
574     result = []
575    
576     line = []
577     line.append('Acquisition era')
578     line.append('Cust./Non-Cust.')
579     for site in sites:
580     line.append(site+' [TB]')
581     line.append('All sites [TB]')
582     result.append(line)
583     total = {}
584     for site in sites:
585     total[site] = 0
586     for era in eras_data:
587     line = []
588     line.append(era)
589     line.append('custodial')
590     local_total = 0
591     for site in sites:
592     value = input[era]['cust'][site]
593     line.append("%.3f" % value)
594     local_total += value
595     total[site] += value
596     line.append("%.3f" % local_total)
597     result.append(line)
598     line = []
599     line.append(era)
600     line.append('non-custodial')
601     local_total = 0
602     for site in sites:
603     value = input[era]['non_cust'][site]
604     line.append("%.3f" % value)
605     local_total += value
606     total[site] += value
607     line.append("%.3f" % local_total)
608     result.append(line)
609     line = []
610     line.append('Total')
611     line.append('')
612     local_total = 0
613     for site in sites:
614     line.append("%.3f" % total[site])
615     local_total += total[site]
616     line.append("%.3f" % local_total)
617     result.append(line)
618    
619     print 'Created era/cust array for data'
620    
621     return result
622    
623     def createEraTierArrayData(input):
624    
625     result = []
626    
627     line = []
628     line.append('Acquisition era')
629     line.append('Data Tier')
630     for site in sites:
631     line.append(site+' [TB]')
632     line.append('All sites [TB]')
633     result.append(line)
634     total = {}
635     for site in sites:
636     total[site] = 0
637     for era in eras_data:
638     for tier in tiers_data:
639     line = []
640     line.append(era)
641     line.append(tier)
642     local_total = 0
643     for site in sites:
644     value = input[era][tier][site]
645     line.append("%.3f" % value)
646     local_total += value
647     total[site] += value
648     line.append("%.3f" % local_total)
649     result.append(line)
650     line = []
651     line.append('Total')
652     line.append('')
653     local_total = 0
654     for site in sites:
655     line.append("%.3f" % total[site])
656     local_total += total[site]
657     line.append("%.3f" % local_total)
658     result.append(line)
659    
660     print 'Created era/tier array for data'
661    
662     return result
663    
664     def createTierArrayData(input):
665    
666     result = []
667    
668     line = []
669     line.append('Data Tier')
670     for site in sites:
671     line.append(site+' [TB]')
672     line.append('All sites [TB]')
673     result.append(line)
674     total = {}
675     for site in sites:
676     total[site] = 0
677     for tier in tiers_data:
678     line = []
679     line.append(tier)
680     local_total = 0
681     for site in sites:
682     value = input[tier][site]
683     line.append("%.3f" % value)
684     local_total += value
685     total[site] += value
686     line.append("%.3f" % local_total)
687     result.append(line)
688     line = []
689     line.append('Total')
690     local_total = 0
691     for site in sites:
692     line.append("%.3f" % total[site])
693     local_total += total[site]
694     line.append("%.3f" % local_total)
695     result.append(line)
696    
697     print 'Created tier array for data'
698    
699     return result
700    
701     def createTierArrayCustData(input):
702    
703     result = []
704    
705     line = []
706     line.append('Data Tier')
707     for site in sites:
708     line.append(site+' [TB]')
709     line.append('All sites [TB]')
710     result.append(line)
711     total = {}
712     for site in sites:
713     total[site] = 0
714     for tier in tiers_data:
715     line = []
716     line.append(tier)
717     local_total = 0
718     for site in sites:
719     value = input[tier][site]
720     line.append("%.3f" % value)
721     local_total += value
722     total[site] += value
723     line.append("%.3f" % local_total)
724     result.append(line)
725     line = []
726     line.append('Total')
727     local_total = 0
728     for site in sites:
729     line.append("%.3f" % total[site])
730     local_total += total[site]
731     line.append("%.3f" % local_total)
732     result.append(line)
733    
734     print 'Created tier array for cust data'
735    
736     return result
737    
738     def createTierArrayNonCustData(input):
739    
740     result = []
741    
742     line = []
743     line.append('Data Tier')
744     for site in sites:
745     line.append(site+' [TB]')
746     line.append('All sites [TB]')
747     result.append(line)
748     total = {}
749     for site in sites:
750     total[site] = 0
751     for tier in tiers_data:
752     line = []
753     line.append(tier)
754     local_total = 0
755     for site in sites:
756     value = input[tier][site]
757     line.append("%.3f" % value)
758     local_total += value
759     total[site] += value
760     line.append("%.3f" % local_total)
761     result.append(line)
762     line = []
763     line.append('Total')
764     local_total = 0
765     for site in sites:
766     line.append("%.3f" % total[site])
767     local_total += total[site]
768     line.append("%.3f" % local_total)
769     result.append(line)
770    
771     print 'Created tier array for non-cust data'
772    
773     return result
774    
775     def createEraArrayData(input):
776    
777     result = []
778    
779     line = []
780     line.append('Acquisition era')
781     for site in sites:
782     line.append(site+' [TB]')
783     line.append('All sites [TB]')
784     result.append(line)
785     total = {}
786     for site in sites:
787     total[site] = 0
788     for era in eras_data:
789     line = []
790     line.append(era)
791     local_total = 0
792     for site in sites:
793     value = input[era][site]
794     line.append("%.3f" % value)
795     local_total += value
796     total[site] += value
797     line.append("%.3f" % local_total)
798     result.append(line)
799     line = []
800     line.append('Total')
801     local_total = 0
802     for site in sites:
803     line.append("%.3f" % total[site])
804     local_total += total[site]
805     line.append("%.3f" % local_total)
806     result.append(line)
807    
808     print 'Created era array for data'
809    
810     return result
811    
812     def createEraArrayCustData(input):
813    
814     result = []
815    
816     line = []
817     line.append('Acquisition era')
818     for site in sites:
819     line.append(site+' [TB]')
820     line.append('All sites [TB]')
821     result.append(line)
822     total = {}
823     for site in sites:
824     total[site] = 0
825     for era in eras_data:
826     line = []
827     line.append(era)
828     local_total = 0
829     for site in sites:
830     value = input[era][site]
831     line.append("%.3f" % value)
832     local_total += value
833     total[site] += value
834     line.append("%.3f" % local_total)
835     result.append(line)
836     line = []
837     line.append('Total')
838     local_total = 0
839     for site in sites:
840     line.append("%.3f" % total[site])
841     local_total += total[site]
842     line.append("%.3f" % local_total)
843     result.append(line)
844    
845     print 'Created era array for cust data'
846    
847     return result
848    
849     def createEraArrayNonCustData(input):
850    
851     result = []
852    
853     line = []
854     line.append('Acquisition era')
855     for site in sites:
856     line.append(site+' [TB]')
857     line.append('All sites [TB]')
858     result.append(line)
859     total = {}
860     for site in sites:
861     total[site] = 0
862     for era in eras_data:
863     line = []
864     line.append(era)
865     local_total = 0
866     for site in sites:
867     value = input[era][site]
868     line.append("%.3f" % value)
869     local_total += value
870     total[site] += value
871     line.append("%.3f" % local_total)
872     result.append(line)
873     line = []
874     line.append('Total')
875     local_total = 0
876     for site in sites:
877     line.append("%.3f" % total[site])
878     local_total += total[site]
879     line.append("%.3f" % local_total)
880     result.append(line)
881    
882     print 'Created era array for non-cust data'
883    
884     return result
885    
886     def createDetailedDictMC(input):
887    
888     result = {}
889    
890     for era in eras_mc:
891     if era not in result.keys():
892     result[era] = {}
893     for tier in tiers_mc:
894     if tier not in result[era].keys():
895     result[era][tier] = {}
896     if 'cust' not in result[era][tier].keys():
897     result[era][tier]['cust'] = {}
898     if 'non_cust' not in result[era][tier].keys():
899     result[era][tier]['non_cust'] = {}
900     for site in sites:
901     value = input[site][era][tier]['mc']['cust']
902     result[era][tier]['cust'][site] = value
903     for site in sites:
904     value = input[site][era][tier]['mc']['non_cust']
905     result[era][tier]['non_cust'][site] = value
906    
907     print 'Created detailed dict for mc'
908    
909     return result
910    
911    
912     def createEraCustDictMC(input):
913    
914     result = {}
915    
916     for era in eras_mc:
917     if era not in result.keys():
918     result[era] = {}
919     if 'cust' not in result[era].keys():
920     result[era]['cust'] = {}
921     if 'non_cust' not in result[era].keys():
922     result[era]['non_cust'] = {}
923     for site in sites:
924     value = 0
925     for tier in tiers_mc:
926     value += input[site][era][tier]['mc']['cust']
927     result[era]['cust'][site] = value
928     value = 0
929     for tier in tiers_mc:
930     value += input[site][era][tier]['mc']['non_cust']
931     result[era]['non_cust'][site] = value
932    
933     print 'Created era/cust dict for mc'
934    
935     return result
936    
937     def createEraTierDictMC(input):
938    
939     result = {}
940    
941     for era in eras_mc:
942     if era not in result.keys():
943     result[era] = {}
944     for tier in tiers_mc:
945     if tier not in result[era].keys():
946     result[era][tier] = {}
947     for site in sites:
948     value = input[site][era][tier]['mc']['cust']
949     value += input[site][era][tier]['mc']['non_cust']
950     result[era][tier][site] = value
951    
952     print 'Created era/tier dict for mc'
953    
954     return result
955    
956     def createTierDictMC(input):
957    
958     result = {}
959    
960     for tier in tiers_mc:
961     if tier not in result.keys():
962     result[tier] = {}
963     for site in sites:
964     value = 0
965     for era in eras_mc:
966     value += input[site][era][tier]['mc']['cust']
967     value += input[site][era][tier]['mc']['non_cust']
968     result[tier][site] = value
969    
970     print 'Created tier dict for mc'
971    
972     return result
973    
974     def createTierDictCustMC(input):
975    
976     result = {}
977    
978     for tier in tiers_mc:
979     if tier not in result.keys():
980     result[tier] = {}
981     for site in sites:
982     value = 0
983     for era in eras_mc:
984     value += input[site][era][tier]['mc']['cust']
985     result[tier][site] = value
986    
987     print 'Created tier dict for cust mc'
988    
989     return result
990    
991     def createTierDictNonCustMC(input):
992    
993     result = {}
994    
995     for tier in tiers_mc:
996     if tier not in result.keys():
997     result[tier] = {}
998     for site in sites:
999     value = 0
1000     for era in eras_mc:
1001     value += input[site][era][tier]['mc']['non_cust']
1002     result[tier][site] = value
1003    
1004     print 'Created tier array for non-cust mc'
1005    
1006     return result
1007    
1008     def createEraDictMC(input):
1009    
1010     result = {}
1011    
1012     for era in eras_mc:
1013     if era not in result.keys():
1014     result[era] = {}
1015     for site in sites:
1016     value = 0
1017     for tier in tiers_mc:
1018     value += input[site][era][tier]['mc']['cust']
1019     value += input[site][era][tier]['mc']['non_cust']
1020     result[era][site] = value
1021    
1022     print 'Created era dict for mc'
1023    
1024     return result
1025    
1026     def createEraDictCustMC(input):
1027    
1028     result = {}
1029    
1030     for era in eras_mc:
1031     if era not in result.keys():
1032     result[era] = {}
1033     for site in sites:
1034     value = 0
1035     for tier in tiers_mc:
1036     value += input[site][era][tier]['mc']['cust']
1037     result[era][site] = value
1038    
1039     print 'Created era dict for cust mc'
1040    
1041     return result
1042    
1043     def createEraDictNonCustMC(input):
1044    
1045     result = {}
1046    
1047     for era in eras_mc:
1048     if era not in result.keys():
1049     result[era] = {}
1050     for site in sites:
1051     value = 0
1052     for tier in tiers_mc:
1053     value += input[site][era][tier]['mc']['cust']
1054     result[era][site] = value
1055    
1056     print 'Created era dict for non-cust mc'
1057    
1058     return result
1059    
1060     def createDetailedArrayMC(input):
1061    
1062     result = []
1063    
1064     line = []
1065     line.append('Acquisition era')
1066     line.append('MC Tier')
1067     line.append('Cust./Non-Cust.')
1068     for site in sites:
1069     line.append(site+' [TB]')
1070     line.append('All sites [TB]')
1071     result.append(line)
1072     total = {}
1073     for site in sites:
1074     total[site] = 0
1075     for era in eras_mc:
1076     for tier in tiers_mc:
1077     line = []
1078     line.append(era)
1079     line.append(tier)
1080     line.append('custodial')
1081     local_total = 0
1082     for site in sites:
1083     value = input[era][tier]['cust'][site]
1084     line.append("%.3f" % value)
1085     local_total += value
1086     total[site] += value
1087     line.append("%.3f" % local_total)
1088     result.append(line)
1089     line = []
1090     line.append(era)
1091     line.append(tier)
1092     line.append('non-custodial')
1093     local_total = 0
1094     for site in sites:
1095     value = input[era][tier]['non_cust'][site]
1096     line.append("%.3f" % value)
1097     local_total += value
1098     total[site] += value
1099     line.append("%.3f" % local_total)
1100     result.append(line)
1101     line = []
1102     line.append('Total')
1103     line.append('')
1104     line.append('')
1105     local_total = 0
1106     for site in sites:
1107     line.append("%.3f" % total[site])
1108     local_total += total[site]
1109     line.append("%.3f" % local_total)
1110     result.append(line)
1111    
1112     print 'Created detailed array for mc'
1113    
1114     return result
1115    
1116     def createEraCustArrayMC(input):
1117    
1118     result = []
1119    
1120     line = []
1121     line.append('Acquisition era')
1122     line.append('Cust./Non-Cust.')
1123     for site in sites:
1124     line.append(site+' [TB]')
1125     line.append('All sites [TB]')
1126     result.append(line)
1127     total = {}
1128     for site in sites:
1129     total[site] = 0
1130     for era in eras_mc:
1131     line = []
1132     line.append(era)
1133     line.append('custodial')
1134     local_total = 0
1135     for site in sites:
1136     value = input[era]['cust'][site]
1137     line.append("%.3f" % value)
1138     local_total += value
1139     total[site] += value
1140     line.append("%.3f" % local_total)
1141     result.append(line)
1142     line = []
1143     line.append(era)
1144     line.append('non-custodial')
1145     local_total = 0
1146     for site in sites:
1147     value = input[era]['non_cust'][site]
1148     line.append("%.3f" % value)
1149     local_total += value
1150     total[site] += value
1151     line.append("%.3f" % local_total)
1152     result.append(line)
1153     line = []
1154     line.append('Total')
1155     line.append('')
1156     local_total = 0
1157     for site in sites:
1158     line.append("%.3f" % total[site])
1159     local_total += total[site]
1160     line.append("%.3f" % local_total)
1161     result.append(line)
1162    
1163     print 'Created era/cust array for mc'
1164    
1165     return result
1166    
1167     def createEraTierArrayMC(input):
1168    
1169     result = []
1170    
1171     line = []
1172     line.append('Acquisition era')
1173     line.append('MC Tier')
1174     for site in sites:
1175     line.append(site+' [TB]')
1176     line.append('All sites [TB]')
1177     result.append(line)
1178     total = {}
1179     for site in sites:
1180     total[site] = 0
1181     for era in eras_mc:
1182     for tier in tiers_mc:
1183     line = []
1184     line.append(era)
1185     line.append(tier)
1186     local_total = 0
1187     for site in sites:
1188     value = input[era][tier][site]
1189     line.append("%.3f" % value)
1190     local_total += value
1191     total[site] += value
1192     line.append("%.3f" % local_total)
1193     result.append(line)
1194     line = []
1195     line.append('Total')
1196     line.append('')
1197     local_total = 0
1198     for site in sites:
1199     line.append("%.3f" % total[site])
1200     local_total += total[site]
1201     line.append("%.3f" % local_total)
1202     result.append(line)
1203    
1204     print 'Created era/tier array for mc'
1205    
1206     return result
1207    
1208     def createTierArrayMC(input):
1209    
1210     result = []
1211    
1212     line = []
1213     line.append('MC Tier')
1214     for site in sites:
1215     line.append(site+' [TB]')
1216     line.append('All sites [TB]')
1217     result.append(line)
1218     total = {}
1219     for site in sites:
1220     total[site] = 0
1221     for tier in tiers_mc:
1222     line = []
1223     line.append(tier)
1224     local_total = 0
1225     for site in sites:
1226     value = input[tier][site]
1227     line.append("%.3f" % value)
1228     local_total += value
1229     total[site] += value
1230     line.append("%.3f" % local_total)
1231     result.append(line)
1232     line = []
1233     line.append('Total')
1234     local_total = 0
1235     for site in sites:
1236     line.append("%.3f" % total[site])
1237     local_total += total[site]
1238     line.append("%.3f" % local_total)
1239     result.append(line)
1240    
1241     print 'Created tier array for mc'
1242    
1243     return result
1244    
1245     def createTierArrayCustMC(input):
1246    
1247     result = []
1248    
1249     line = []
1250     line.append('MC Tier')
1251     for site in sites:
1252     line.append(site+' [TB]')
1253     line.append('All sites [TB]')
1254     result.append(line)
1255     total = {}
1256     for site in sites:
1257     total[site] = 0
1258     for tier in tiers_mc:
1259     line = []
1260     line.append(tier)
1261     local_total = 0
1262     for site in sites:
1263     value = input[tier][site]
1264     line.append("%.3f" % value)
1265     local_total += value
1266     total[site] += value
1267     line.append("%.3f" % local_total)
1268     result.append(line)
1269     line = []
1270     line.append('Total')
1271     local_total = 0
1272     for site in sites:
1273     line.append("%.3f" % total[site])
1274     local_total += total[site]
1275     line.append("%.3f" % local_total)
1276     result.append(line)
1277    
1278     print 'Created tier array for cust mc'
1279    
1280     return result
1281    
1282     def createTierArrayNonCustMC(input):
1283    
1284     result = []
1285    
1286     line = []
1287     line.append('MC Tier')
1288     for site in sites:
1289     line.append(site+' [TB]')
1290     line.append('All sites [TB]')
1291     result.append(line)
1292     total = {}
1293     for site in sites:
1294     total[site] = 0
1295     for tier in tiers_mc:
1296     line = []
1297     line.append(tier)
1298     local_total = 0
1299     for site in sites:
1300     value = input[tier][site]
1301     line.append("%.3f" % value)
1302     local_total += value
1303     total[site] += value
1304     line.append("%.3f" % local_total)
1305     result.append(line)
1306     line = []
1307     line.append('Total')
1308     local_total = 0
1309     for site in sites:
1310     line.append("%.3f" % total[site])
1311     local_total += total[site]
1312     line.append("%.3f" % local_total)
1313     result.append(line)
1314    
1315     print 'Created tier array for non-cust mc'
1316    
1317     return result
1318    
1319     def createEraArrayMC(input):
1320    
1321     result = []
1322    
1323     line = []
1324     line.append('Acquisition era')
1325     for site in sites:
1326     line.append(site+' [TB]')
1327     line.append('All sites [TB]')
1328     result.append(line)
1329     total = {}
1330     for site in sites:
1331     total[site] = 0
1332     for era in eras_mc:
1333     line = []
1334     line.append(era)
1335     local_total = 0
1336     for site in sites:
1337     value = input[era][site]
1338     line.append("%.3f" % value)
1339     local_total += value
1340     total[site] += value
1341     line.append("%.3f" % local_total)
1342     result.append(line)
1343     line = []
1344     line.append('Total')
1345     local_total = 0
1346     for site in sites:
1347     line.append("%.3f" % total[site])
1348     local_total += total[site]
1349     line.append("%.3f" % local_total)
1350     result.append(line)
1351    
1352     print 'Created era array for mc'
1353    
1354     return result
1355    
1356     def createEraArrayCustMC(input):
1357    
1358     result = []
1359    
1360     line = []
1361     line.append('Acquisition era')
1362     for site in sites:
1363     line.append(site+' [TB]')
1364     line.append('All sites [TB]')
1365     result.append(line)
1366     total = {}
1367     for site in sites:
1368     total[site] = 0
1369     for era in eras_mc:
1370     line = []
1371     line.append(era)
1372     local_total = 0
1373     for site in sites:
1374     value = input[era][site]
1375     line.append("%.3f" % value)
1376     local_total += value
1377     total[site] += value
1378     line.append("%.3f" % local_total)
1379     result.append(line)
1380     line = []
1381     line.append('Total')
1382     local_total = 0
1383     for site in sites:
1384     line.append("%.3f" % total[site])
1385     local_total += total[site]
1386     line.append("%.3f" % local_total)
1387     result.append(line)
1388    
1389     print 'Created era array for cust mc'
1390    
1391     return result
1392    
1393     def createEraArrayNonCustMC(input):
1394    
1395     result = []
1396    
1397     line = []
1398     line.append('Acquisition era')
1399     for site in sites:
1400     line.append(site+' [TB]')
1401     line.append('All sites [TB]')
1402     result.append(line)
1403     total = {}
1404     for site in sites:
1405     total[site] = 0
1406     for era in eras_mc:
1407     line = []
1408     line.append(era)
1409     local_total = 0
1410     for site in sites:
1411     value = input[era][site]
1412     line.append("%.3f" % value)
1413     local_total += value
1414     total[site] += value
1415     line.append("%.3f" % local_total)
1416     result.append(line)
1417     line = []
1418     line.append('Total')
1419     local_total = 0
1420     for site in sites:
1421     line.append("%.3f" % total[site])
1422     local_total += total[site]
1423     line.append("%.3f" % local_total)
1424     result.append(line)
1425    
1426     print 'Created era array for non-cust mc'
1427    
1428     return result
1429    
1430     def createOverviewDict(input):
1431    
1432     result = {}
1433     result['data'] = {}
1434     result['data']['cust'] = {}
1435     result['data']['non_cust'] = {}
1436     result['mc'] = {}
1437     result['mc']['cust'] = {}
1438     result['mc']['non_cust'] = {}
1439    
1440     for site in sites:
1441     data_cust_value = 0
1442     data_non_cust_value = 0
1443     for era in eras_data:
1444     for tier in tiers_data:
1445     data_cust_value += input[site][era][tier]['data']['cust']
1446     data_non_cust_value += input[site][era][tier]['data']['non_cust']
1447     result['data']['cust'][site] = data_cust_value
1448     result['data']['non_cust'][site] = data_non_cust_value
1449    
1450     for site in sites:
1451     mc_cust_value = 0
1452     mc_non_cust_value = 0
1453     for era in eras_mc:
1454     for tier in tiers_mc:
1455     mc_cust_value += input[site][era][tier]['mc']['cust']
1456     mc_non_cust_value += input[site][era][tier]['mc']['non_cust']
1457     result['mc']['cust'][site] = mc_cust_value
1458     result['mc']['non_cust'][site] = mc_non_cust_value
1459    
1460     print 'Created overview dict'
1461    
1462     return result
1463    
1464     def createOverviewArray(input):
1465    
1466     result = []
1467    
1468     line = []
1469     line.append('')
1470     for site in sites:
1471     line.append(site+' [TB]')
1472     line.append('All sites [TB]')
1473     result.append(line)
1474     total = {}
1475     for site in sites:
1476     total[site] = 0
1477     line = []
1478     line.append('custodial data')
1479     local_total = 0
1480     for site in sites:
1481     value = input['data']['cust'][site]
1482     line.append("%.3f" % value)
1483     local_total += value
1484     total[site] += value
1485     line.append("%.3f" % local_total)
1486     result.append(line)
1487     line = []
1488     line.append('non-custodial data')
1489     local_total = 0
1490     for site in sites:
1491     value = input['data']['non_cust'][site]
1492     line.append("%.3f" % value)
1493     local_total += value
1494     total[site] += value
1495     line.append("%.3f" % local_total)
1496     result.append(line)
1497     line = []
1498     line.append('custodial mc')
1499     local_total = 0
1500     for site in sites:
1501     value = input['mc']['cust'][site]
1502     line.append("%.3f" % value)
1503     local_total += value
1504     total[site] += value
1505     line.append("%.3f" % local_total)
1506     result.append(line)
1507     line = []
1508     line.append('non-custodial mc')
1509     local_total = 0
1510     for site in sites:
1511     value = input['mc']['non_cust'][site]
1512     line.append("%.3f" % value)
1513     local_total += value
1514     total[site] += value
1515     line.append("%.3f" % local_total)
1516     result.append(line)
1517     line = []
1518     line.append('custodial')
1519     local_total = 0
1520     for site in sites:
1521     value = input['data']['cust'][site]
1522     value += input['mc']['cust'][site]
1523     line.append("%.3f" % value)
1524     local_total += value
1525     line.append("%.3f" % local_total)
1526     result.append(line)
1527     line = []
1528     line.append('non-custodial')
1529     local_total = 0
1530     for site in sites:
1531     value = input['data']['non_cust'][site]
1532     value += input['mc']['non_cust'][site]
1533     line.append("%.3f" % value)
1534     local_total += value
1535     line.append("%.3f" % local_total)
1536     result.append(line)
1537     line = []
1538     line.append('Total')
1539     local_total = 0
1540     for site in sites:
1541     line.append("%.3f" % total[site])
1542     local_total += total[site]
1543     line.append("%.3f" % local_total)
1544     result.append(line)
1545    
1546     print 'Created overview array'
1547    
1548     return result
1549    
1550     def createSiteOverviewArray(currentInput,deltaInput,site):
1551    
1552     result = []
1553    
1554     line = []
1555     line.append('Overview for: ' + site)
1556     line.append('Custodial Delta [TB]')
1557     line.append('Custodial Total [TB]')
1558     line.append('Non-Custodial Delta [TB]')
1559     line.append('Non-Custodial Total [TB]')
1560     line.append('Total Delta [TB]')
1561     line.append('Total Total [TB]')
1562     result.append(line)
1563    
1564     data_delta_total = 0
1565     data_total_total = 0
1566     mc_delta_total = 0
1567     mc_total_total = 0
1568     delta_total = 0
1569     total_total = 0
1570    
1571     line = []
1572     line.append('Data')
1573     value = 0
1574     for era in eras_data:
1575     for tier in tiers_data:
1576     value += deltaInput[site][era][tier]['data']['cust']
1577     line.append("%.3f" % value)
1578     data_delta_total += value
1579     value = 0
1580     for era in eras_data:
1581     for tier in tiers_data:
1582     value += currentInput[site][era][tier]['data']['cust']
1583     line.append("%.3f" % value)
1584     data_total_total += value
1585     value = 0
1586     for era in eras_data:
1587     for tier in tiers_data:
1588     value += deltaInput[site][era][tier]['data']['non_cust']
1589     line.append("%.3f" % value)
1590     data_delta_total += value
1591     value = 0
1592     for era in eras_data:
1593     for tier in tiers_data:
1594     value += currentInput[site][era][tier]['data']['non_cust']
1595     line.append("%.3f" % value)
1596     data_total_total += value
1597     line.append("%.3f" % data_delta_total)
1598     line.append("%.3f" % data_total_total)
1599     result.append(line)
1600    
1601     line = []
1602     line.append('MC')
1603     value = 0
1604     for era in eras_mc:
1605     for tier in tiers_mc:
1606     value += deltaInput[site][era][tier]['mc']['cust']
1607     line.append("%.3f" % value)
1608     mc_delta_total += value
1609     value = 0
1610     for era in eras_mc:
1611     for tier in tiers_mc:
1612     value += currentInput[site][era][tier]['mc']['cust']
1613     line.append("%.3f" % value)
1614     mc_total_total += value
1615     value = 0
1616     for era in eras_mc:
1617     for tier in tiers_mc:
1618     value += deltaInput[site][era][tier]['mc']['non_cust']
1619     line.append("%.3f" % value)
1620     mc_delta_total += value
1621     value = 0
1622     for era in eras_mc:
1623     for tier in tiers_mc:
1624     value += currentInput[site][era][tier]['mc']['non_cust']
1625     line.append("%.3f" % value)
1626     mc_total_total += value
1627     line.append("%.3f" % mc_delta_total)
1628     line.append("%.3f" % mc_total_total)
1629     result.append(line)
1630    
1631     line = []
1632     line.append('Total')
1633     value = 0
1634     for era in eras_data:
1635     for tier in tiers_data:
1636     value += deltaInput[site][era][tier]['data']['cust']
1637     for era in eras_mc:
1638     for tier in tiers_mc:
1639     value += deltaInput[site][era][tier]['mc']['cust']
1640     line.append("%.3f" % value)
1641     delta_total += value
1642     value = 0
1643     for era in eras_data:
1644     for tier in tiers_data:
1645     value += currentInput[site][era][tier]['data']['cust']
1646     for era in eras_mc:
1647     for tier in tiers_mc:
1648     value += currentInput[site][era][tier]['mc']['cust']
1649     line.append("%.3f" % value)
1650     total_total += value
1651     value = 0
1652     for era in eras_data:
1653     for tier in tiers_data:
1654     value += deltaInput[site][era][tier]['data']['non_cust']
1655     for era in eras_mc:
1656     for tier in tiers_mc:
1657     value += deltaInput[site][era][tier]['mc']['non_cust']
1658     line.append("%.3f" % value)
1659     delta_total += value
1660     value = 0
1661     for era in eras_data:
1662     for tier in tiers_data:
1663     value += currentInput[site][era][tier]['data']['non_cust']
1664     for era in eras_mc:
1665     for tier in tiers_mc:
1666     value += currentInput[site][era][tier]['mc']['non_cust']
1667     line.append("%.3f" % value)
1668     total_total += value
1669     line.append("%.3f" % delta_total)
1670     line.append("%.3f" % total_total)
1671     result.append(line)
1672    
1673     print 'Created overview array for site',site
1674    
1675     return result
1676    
1677     def parseFile(filename):
1678     #
1679     # create structure from file from Si's TMDB query script
1680     #
1681     # era
1682     # |-> tier
1683     # |-> data/mc
1684     # |-> cust/non_cust
1685    
1686     localfile = open(filename)
1687    
1688     result = {}
1689     counter = 0
1690     for line in localfile.readlines() :
1691     array = line.split(',')
1692     if len(array) != 8 :
1693     continue
1694     if array[0].count('Acquisition') > 0 :
1695     continue
1696     counter += 1
1697     era = array[0].strip()
1698     tier = array[1].strip()
1699     tier = tier.replace('GEN-SIM_RAWDEBUG','GEN-SIM-RAWDEBUG')
1700     tier = tier.replace('GEN-SIM_RECODEBUG','GEN-SIM-RECODEBUG')
1701     cust_data = float(array[3])
1702     non_cust_data = float(array[4])
1703     cust_mc = float(array[6])
1704     non_cust_mc = float(array[7])
1705     if era not in result.keys():
1706     result[era] = {}
1707     if tier not in result[era].keys():
1708     result[era][tier] = {}
1709     if 'data' not in result[era][tier].keys():
1710     result[era][tier]['data'] = {}
1711     if 'mc' not in result[era][tier].keys():
1712     result[era][tier]['mc'] = {}
1713     result[era][tier]['data']['cust'] = cust_data
1714     result[era][tier]['data']['non_cust'] = non_cust_data
1715     result[era][tier]['mc']['cust'] = cust_mc
1716     result[era][tier]['mc']['non_cust'] = non_cust_mc
1717    
1718     print 'Parsed',counter,'lines from',filename
1719    
1720     return result
1721    
1722     def subtract(current,previous):
1723     delta = {}
1724     for site in current.keys() :
1725     if site not in delta.keys():
1726     delta[site] = {}
1727     for era in current[site].keys() :
1728     if era not in delta[site].keys():
1729     delta[site][era] = {}
1730     for tier in current[site][era].keys():
1731     if tier not in delta[site][era].keys():
1732     delta[site][era][tier] = {}
1733     for item in current[site][era][tier].keys():
1734     if item not in delta[site][era][tier].keys():
1735     delta[site][era][tier][item] = {}
1736     for cust in current[site][era][tier][item]:
1737     # if site not in previous.keys() or era not in previous[site].keys() or tier not in previous[site][era].keys() or item not in previous[site][era][tier].keys() or cust not in previous[site][era][tier][item].keys() :
1738     # delta[site][era][tier][item][cust] = current[site][era][tier][item][cust]
1739     # else :
1740     delta[site][era][tier][item][cust] = current[site][era][tier][item][cust] - previous[site][era][tier][item][cust]
1741    
1742     print 'Calculated delta between current and previous.'
1743    
1744     return delta
1745    
1746     def checkCategories(input):
1747     """
1748     check if list of data tiers and acquisition eras are still valid or if we have additional entries
1749     """
1750    
1751     new_tiers = []
1752     new_eras = []
1753    
1754     for site in input.keys():
1755     for era in input[site].keys():
1756     if era not in eras_data and era not in eras_mc:
1757     if era not in new_eras and era not in ignore_eras:
1758     new_eras.append(era)
1759     for tier in input[site][era].keys():
1760     if tier not in tiers_data and tier not in tiers_mc:
1761     if tier not in new_tiers and tier not in ignore_tiers:
1762     new_tiers.append(tier)
1763    
1764     if len(new_tiers) > 0:
1765     print 'New tiers:',','.join(new_tiers)
1766     if len(new_eras) > 0:
1767     print 'New eras:',','.join(new_eras)
1768     if len(new_tiers) > 0 or len(new_eras) > 0:
1769     sys.exit(1)
1770    
1771     print 'No new eras or data tiers found during parsing.'
1772    
1773     def createHTMLfromArray(array,filename,title,numberOfDescColumn):
1774    
1775     localfile = open(filename,'w')
1776    
1777     localfile.write('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"')
1778     localfile.write('"http://www.w3.org/TR/html4/strict.dtd">')
1779    
1780     localfile.write('<html lang="en">')
1781     localfile.write('<head>')
1782     localfile.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">')
1783     localfile.write('<title>'+title+'</title>')
1784     localfile.write('<meta name="author" content="Oliver Gutsche">')
1785     localfile.write('<!-- Date: '+date+' -->')
1786     localfile.write('</head>')
1787     localfile.write('<body>')
1788     localfile.write('<h1>'+title+'</h1>')
1789    
1790    
1791     localfile.write(createHTMLTablefromArray(array,numberOfDescColumn))
1792    
1793     localfile.write('<hr>')
1794     localfile.write(fulldate)
1795    
1796     localfile.write('</body>')
1797     localfile.write('</html>')
1798    
1799     localfile.close()
1800    
1801     print 'Created html file:',filename,'with title:',title
1802    
1803    
1804    
1805     def createHTMLTablefromArray(array,numberOfDescColumn):
1806    
1807     result = ""
1808    
1809     result += '<table border="1" cellspacing="0" cellpadding="2">\n'
1810     result += '<tr>\n'
1811     for cell in array[0]:
1812     result += '<th>'+cell+'</th>'
1813     result += '</tr>\n'
1814     for line in array[1:]:
1815     result += '<tr>'
1816     for cell in line[:numberOfDescColumn]:
1817     result += '<td>'+cell+'</td>'
1818     for cell in line[numberOfDescColumn:]:
1819     result += '<td align="right">'+cell+'</td>'
1820     result += '</tr>\n'
1821     result += '</table>\n'
1822    
1823     return result
1824    
1825     def calculateStackOffsets(previous,current,positive,negative):
1826     result = []
1827     for item in range(len(current)):
1828     result.append(0)
1829    
1830     for item in range(len(previous)):
1831     if previous[item] < 0:
1832     negative[item] = negative[item] + previous[item]
1833     else :
1834     positive[item] = positive[item] + previous[item]
1835     if current[item] < 0:
1836     result[item] = negative[item]
1837     else :
1838     result[item] = positive[item]
1839    
1840     return (result,positive,negative)
1841    
1842     def createHorizontalStackedBarPlot(filename,title,labels,legends,data) :
1843    
1844     plt.figure(figsize=(16,6),dpi=300)
1845    
1846     N = len(labels)
1847     ind = np.arange(N)+.5
1848     width = 0.5
1849    
1850     plots = []
1851     left_edge = []
1852     left_edge_negative = []
1853     left_edge_positive = []
1854     for index in range(N):
1855     left_edge.append(0.)
1856     left_edge_negative.append(0.)
1857     left_edge_positive.append(0.)
1858     plots.append(plt.barh(ind, data[0], width, color=colors[0], align='center', left=left_edge))
1859     for index in range(len(legends)-1):
1860     (left_edge,left_edge_positive,left_edge_negative) = calculateStackOffsets(data[index],data[index+1],left_edge_positive,left_edge_negative)
1861     plots.append(plt.barh(ind, data[index+1], width, color=colors[index+1], align='center', left=left_edge))
1862    
1863     fontsize = 20
1864     plt.title(title,fontsize=fontsize)
1865     plt.yticks(ind, labels)
1866     plt.xlabel('TB',fontsize=fontsize)
1867     plt.legend( [ plot[0] for plot in plots], legends, loc='center left', bbox_to_anchor=(1.05, .5) )
1868     plt.grid(True)
1869     ax = plt.gca()
1870     for tick in ax.xaxis.get_major_ticks():
1871     tick.label1.set_fontsize(fontsize)
1872     for tick in ax.yaxis.get_major_ticks():
1873     tick.label1.set_fontsize(fontsize)
1874     leg = ax.get_legend()
1875     ltext = leg.get_texts()
1876     plt.setp(ltext, fontsize=fontsize)
1877    
1878     plt.subplots_adjust(left=.2,right=0.75)
1879    
1880     plt.savefig(filename,format='png')
1881     plt.close()
1882    
1883     def createOverviewPlots(input,title,filename):
1884     """
1885     types = [
1886     'custodial data',
1887     'non-custodial data',
1888     'custodial MC',
1889     'non-custodial MC'
1890     ]
1891     """
1892    
1893    
1894    
1895     # data1[sites][types]
1896     data1 = []
1897     for site in sites:
1898     data1.append([
1899     input['data']['cust'][site],
1900     input['data']['non_cust'][site],
1901     input['mc']['cust'][site],
1902     input['mc']['non_cust'][site],
1903     ])
1904    
1905     createHorizontalStackedBarPlot(filename.replace('.png','_by_type.png'),title,types,sites,data1)
1906    
1907     # data1[sites][types]
1908     data2 = []
1909     tmp = []
1910     for site in sites:
1911     tmp.append(input['data']['cust'][site])
1912     data2.append(tmp)
1913     tmp = []
1914     for site in sites:
1915     tmp.append(input['data']['non_cust'][site])
1916     data2.append(tmp)
1917     tmp = []
1918     for site in sites:
1919     tmp.append(input['mc']['cust'][site])
1920     data2.append(tmp)
1921     tmp = []
1922     for site in sites:
1923     tmp.append(input['mc']['non_cust'][site])
1924     data2.append(tmp)
1925    
1926     createHorizontalStackedBarPlot(filename.replace('.png','_by_site.png'),title,sites,types,data2)
1927    
1928     print 'Created overview plots'
1929    
1930     def createOverviewPieGraphs(input,mode,title,filename):
1931     plt.figure(figsize=(10,7.5), dpi=300)
1932     plt.axes([0.15, 0., 0.7, 0.933])
1933    
1934     data = []
1935     for site in sites:
1936     if mode == 'data' :
1937     data.append(input['data']['cust'][site])
1938     elif mode == 'mc' :
1939     data.append(input['mc']['cust'][site])
1940     else :
1941     data.append(input['data']['cust'][site]+input['mc']['cust'][site])
1942    
1943     fontsize = 25
1944     myPie = plt.pie(data, labels=sites, autopct='%1.f%%', shadow=False, colors=colors)
1945     for x in myPie[2]:
1946     x.set_color('w')
1947     x.set_fontsize(fontsize)
1948     for x in myPie[1]:
1949     x.set_fontsize(fontsize-5)
1950     plt.title(title, fontsize=fontsize+5)
1951     plt.savefig(filename,format='png')
1952     plt.close()
1953    
1954     print 'Created overview pie plot'
1955    
1956     def createMainHTML(totalArray,deltaArray,title):
1957    
1958     localfile = open('main.html','w')
1959    
1960     localfile.write('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"')
1961     localfile.write('"http://www.w3.org/TR/html4/strict.dtd">')
1962    
1963     localfile.write('<html lang="en">')
1964     localfile.write('<head>')
1965     localfile.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">')
1966     localfile.write('<title>'+title+'</title>')
1967     localfile.write('<meta name="author" content="Oliver Gutsche">')
1968     localfile.write('<!-- Date: '+date+' -->')
1969     localfile.write('</head>')
1970     localfile.write('<body>')
1971     localfile.write('<h1>'+title+'</h1>')
1972    
1973     localfile.write('<h2>Current week Overview</h2>')
1974     localfile.write('<a href=\"total_tape_storage_overview_by_site.png\" target=\"_blank\"><img src=\"total_tape_storage_overview_by_site.png\" height=\"200\"><a><a href=\"total_tape_storage_overview_by_type.png\" target=\"_blank\"><img src=\"total_tape_storage_overview_by_type.png\" height=\"200\"><a><br>')
1975     localfile.write(createHTMLTablefromArray(totalArray,1))
1976     localfile.write('<h2>Delta between Current and Previous week Overview</h2>')
1977     localfile.write('<a href=\"delta_tape_storage_overview_by_site.png\" target=\"_blank\"><img src=\"delta_tape_storage_overview_by_site.png\" height=\"200\"><a><a href=\"delta_tape_storage_overview_by_type.png\" target=\"_blank\"><img src=\"delta_tape_storage_overview_by_type.png\" height=\"200\"><a><br>')
1978     localfile.write(createHTMLTablefromArray(deltaArray,1))
1979     pie_size = 250
1980     localfile.write('<br><a href=\"custodial_tape_storage_pie.png\" target=\"_blank\"><img src=\"custodial_tape_storage_pie.png\" height=\"'+str(pie_size)+'\"><a><a href=\"custodial_data_tape_storage_pie.png\" target=\"_blank\"><img src=\"custodial_data_tape_storage_pie.png\" height=\"'+str(pie_size)+'\"><a><a href=\"custodial_mc_tape_storage_pie.png\" target=\"_blank\"><img src=\"custodial_mc_tape_storage_pie.png\" height=\"'+str(pie_size)+'\"><a><br>')
1981    
1982    
1983     localfile.write('<h2>Tables</h2>')
1984     localfile.write('<table border="1" cellspacing="0" cellpadding="2">')
1985     localfile.write('<tr>')
1986     localfile.write('<th>Description</th>')
1987     localfile.write('<th>Tables</th>')
1988     localfile.write('</tr>')
1989    
1990     localfile.write('<tr>')
1991     localfile.write('<td>Tape Storage Overview</td>')
1992     localfile.write('<td><a href="tape_storage_overview_current.html">Current week</a>, <a href="tape_storage_overview_previous.html">Previous week</a>, <a href="tape_storage_overview_delta.html">Delta between Current and Previous week</a></td>')
1993     localfile.write('</tr>')
1994    
1995     localfile.write('<tr>')
1996     localfile.write('<td>Tape Storage Overview per site</td>')
1997     column = ""
1998     for site in sites:
1999     column = column + '<a href="tape_storage_overview_'+site+'.html">' + site + '</a> '
2000     localfile.write('<td>' + column + '</td>')
2001     localfile.write('</tr>')
2002    
2003     localfile.write('<tr>')
2004     localfile.write('<td>Tape Storage Overview: Detailed View for Data</td>')
2005     localfile.write('<td><a href="tape_storage_overview_current_data_detailed.html">Current week</a>, <a href="tape_storage_overview_previous_data_detailed.html">Previous week</a>, <a href="tape_storage_overview_delta_data_detailed.html">Delta between Current and Previous week</a></td>')
2006     localfile.write('</tr>')
2007     localfile.write('<tr>')
2008     localfile.write('<td>Tape Storage Overview: Era/Tier View for Data</td>')
2009     localfile.write('<td><a href="tape_storage_overview_current_data_era_tier.html">Current week</a>, <a href="tape_storage_overview_previous_data_era_tier.html">Previous week</a>, <a href="tape_storage_overview_delta_data_era_tier.html">Delta between Current and Previous week</a></td>')
2010     localfile.write('</tr>')
2011     localfile.write('<tr>')
2012     localfile.write('<td>Tape Storage Overview: Era/Cust./Non-Cust. View for Data</td>')
2013     localfile.write('<td><a href="tape_storage_overview_current_data_era_cust.html">Current week</a>, <a href="tape_storage_overview_previous_data_era_cust.html">Previous week</a>, <a href="tape_storage_overview_delta_data_era_cust.html">Delta between Current and Previous week</a></td>')
2014     localfile.write('</tr>')
2015     localfile.write('<tr>')
2016     localfile.write('<td>Tape Storage Overview: Era View for Data</td>')
2017     localfile.write('<td><a href="tape_storage_overview_current_data_era.html">Current week</a>, <a href="tape_storage_overview_previous_data_era.html">Previous week</a>, <a href="tape_storage_overview_delta_data_era.html">Delta between Current and Previous week</a></td>')
2018     localfile.write('</tr>')
2019     localfile.write('<tr>')
2020     localfile.write('<td>Tape Storage Overview: Era View for Custodial Data</td>')
2021     localfile.write('<td><a href="tape_storage_overview_current_cust_data_era.html">Current week</a>, <a href="tape_storage_overview_previous_cust_data_era.html">Previous week</a>, <a href="tape_storage_overview_delta_cust_data_era.html">Delta between Current and Previous week</a></td>')
2022     localfile.write('</tr>')
2023     localfile.write('<tr>')
2024     localfile.write('<td>Tape Storage Overview: Era View for Non-Custodial Data</td>')
2025     localfile.write('<td><a href="tape_storage_overview_current_non_cust_data_era.html">Current week</a>, <a href="tape_storage_overview_previous_non_cust_data_era.html">Previous week</a>, <a href="tape_storage_overview_delta_non_cust_data_era.html">Delta between Current and Previous week</a></td>')
2026     localfile.write('</tr>')
2027     localfile.write('<tr>')
2028     localfile.write('<td>Tape Storage Overview: Tier View for Data</td>')
2029     localfile.write('<td><a href="tape_storage_overview_current_data_tier.html">Current week</a>, <a href="tape_storage_overview_previous_data_tier.html">Previous week</a>, <a href="tape_storage_overview_delta_data_tier.html">Delta between Current and Previous week</a></td>')
2030     localfile.write('</tr>')
2031     localfile.write('<tr>')
2032     localfile.write('<td>Tape Storage Overview: Tier View for Custodial Data</td>')
2033     localfile.write('<td><a href="tape_storage_overview_current_cust_data_tier.html">Current week</a>, <a href="tape_storage_overview_previous_cust_data_tier.html">Previous week</a>, <a href="tape_storage_overview_delta_cust_data_tier.html">Delta between Current and Previous week</a></td>')
2034     localfile.write('</tr>')
2035     localfile.write('<tr>')
2036     localfile.write('<td>Tape Storage Overview: Tier View for Non-Custodial Data</td>')
2037     localfile.write('<td><a href="tape_storage_overview_current_non_cust_data_tier.html">Current week</a>, <a href="tape_storage_overview_previous_non_cust_data_tier.html">Previous week</a>, <a href="tape_storage_overview_delta_non_cust_data_tier.html">Delta between Current and Previous week</a></td>')
2038     localfile.write('</tr>')
2039     localfile.write('<tr>')
2040     localfile.write('<td>Tape Storage Overview: Detailed View for MC</td>')
2041     localfile.write('<td><a href="tape_storage_overview_current_mc_detailed.html">Current week</a>, <a href="tape_storage_overview_previous_mc_detailed.html">Previous week</a>, <a href="tape_storage_overview_delta_mc_detailed.html">Delta between Current and Previous week</a></td>')
2042     localfile.write('</tr>')
2043     localfile.write('<tr>')
2044     localfile.write('<td>Tape Storage Overview: Era/Tier View for MC</td>')
2045     localfile.write('<td><a href="tape_storage_overview_current_mc_era_tier.html">Current week</a>, <a href="tape_storage_overview_previous_mc_era_tier.html">Previous week</a>, <a href="tape_storage_overview_delta_mc_era_tier.html">Delta between Current and Previous week</a></td>')
2046     localfile.write('</tr>')
2047     localfile.write('<tr>')
2048     localfile.write('<td>Tape Storage Overview: Era/Cust./Non-Cust. View for MC</td>')
2049     localfile.write('<td><a href="tape_storage_overview_current_mc_era_cust.html">Current week</a>, <a href="tape_storage_overview_previous_mc_era_cust.html">Previous week</a>, <a href="tape_storage_overview_delta_mc_era_cust.html">Delta between Current and Previous week</a></td>')
2050     localfile.write('</tr>')
2051     localfile.write('<tr>')
2052     localfile.write('<td>Tape Storage Overview: Era View for MC</td>')
2053     localfile.write('<td><a href="tape_storage_overview_current_mc_era.html">Current week</a>, <a href="tape_storage_overview_previous_mc_era.html">Previous week</a>, <a href="tape_storage_overview_delta_mc_era.html">Delta between Current and Previous week</a></td>')
2054     localfile.write('</tr>')
2055     localfile.write('<tr>')
2056     localfile.write('<td>Tape Storage Overview: Era View for Custodial MC</td>')
2057     localfile.write('<td><a href="tape_storage_overview_current_cust_mc_era.html">Current week</a>, <a href="tape_storage_overview_previous_cust_mc_era.html">Previous week</a>, <a href="tape_storage_overview_delta_cust_mc_era.html">Delta between Current and Previous week</a></td>')
2058     localfile.write('</tr>')
2059     localfile.write('<tr>')
2060     localfile.write('<td>Tape Storage Overview: Era View for Non-Custodial MC</td>')
2061     localfile.write('<td><a href="tape_storage_overview_current_non_cust_mc_era.html">Current week</a>, <a href="tape_storage_overview_previous_non_cust_mc_era.html">Previous week</a>, <a href="tape_storage_overview_delta_non_cust_mc_era.html">Delta between Current and Previous week</a></td>')
2062     localfile.write('</tr>')
2063     localfile.write('<tr>')
2064     localfile.write('<td>Tape Storage Overview: Tier View for MC</td>')
2065     localfile.write('<td><a href="tape_storage_overview_current_mc_tier.html">Current week</a>, <a href="tape_storage_overview_previous_mc_tier.html">Previous week</a>, <a href="tape_storage_overview_delta_mc_tier.html">Delta between Current and Previous week</a></td>')
2066     localfile.write('</tr>')
2067     localfile.write('<tr>')
2068     localfile.write('<td>Tape Storage Overview: Tier View for Custodial MC</td>')
2069     localfile.write('<td><a href="tape_storage_overview_current_cust_mc_tier.html">Current week</a>, <a href="tape_storage_overview_previous_cust_mc_tier.html">Previous week</a>, <a href="tape_storage_overview_delta_cust_mc_tier.html">Delta between Current and Previous week</a></td>')
2070     localfile.write('</tr>')
2071     localfile.write('<tr>')
2072     localfile.write('<td>Tape Storage Overview: Tier View for Non-Custodial MC</td>')
2073     localfile.write('<td><a href="tape_storage_overview_current_non_cust_mc_tier.html">Current week</a>, <a href="tape_storage_overview_previous_non_cust_mc_tier.html">Previous week</a>, <a href="tape_storage_overview_delta_non_cust_mc_tier.html">Delta between Current and Previous week</a></td>')
2074     localfile.write('</tr>')
2075    
2076     localfile.write('<tr>')
2077     localfile.write('<td></td>')
2078     localfile.write('<td><a href</td>')
2079     localfile.write('</tr>')
2080    
2081     localfile.write('</table>')
2082    
2083     localfile.write('<hr>')
2084     localfile.write(fulldate)
2085    
2086     localfile.write('</body>')
2087     localfile.write('</html>')
2088    
2089     localfile.close()
2090    
2091     print 'Created html file: main.html with title:',title
2092    
2093     def completeCategories(input):
2094     local_eras = []
2095     local_eras.extend(eras_data)
2096     local_eras.extend(eras_mc)
2097     local_eras.extend(ignore_eras)
2098     local_tiers = []
2099     local_tiers.extend(tiers_data)
2100     local_tiers.extend(tiers_mc)
2101     local_tiers.extend(ignore_tiers)
2102    
2103     for site in input.keys():
2104     for era in local_eras:
2105     if era not in input[site].keys():
2106     input[site][era] = {}
2107     for tier in local_tiers:
2108     if tier not in input[site][era].keys():
2109     input[site][era][tier] = {}
2110     if 'data' not in input[site][era][tier].keys():
2111     input[site][era][tier]['data'] = {}
2112     if 'mc' not in input[site][era][tier].keys():
2113     input[site][era][tier]['mc'] = {}
2114     if 'cust' not in input[site][era][tier]['data'].keys():
2115     input[site][era][tier]['data']['cust'] = 0
2116     if 'non_cust' not in input[site][era][tier]['data'].keys():
2117     input[site][era][tier]['data']['non_cust'] = 0
2118     if 'cust' not in input[site][era][tier]['mc'].keys():
2119     input[site][era][tier]['mc']['cust'] = 0
2120     if 'non_cust' not in input[site][era][tier]['mc'].keys():
2121     input[site][era][tier]['mc']['non_cust'] = 0
2122    
2123     if __name__ == '__main__' :
2124     main(sys.argv[1:])