ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/DATATRANSFER/tapeStorageOverview.py
Revision: 1.4
Committed: Wed Dec 28 18:52:03 2011 UTC (13 years, 4 months ago) by fmoscato
Content type: text/x-python
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +11 -1 lines
Error occurred while calculating annotation data.
Log Message:
updated with new tiers and eras

File Contents

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