Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
147 ghuddy 1
<%@LANGUAGE="VBSCRIPT"%>
2
<%
3
'=====================================================
4
'|                                                   |
5
'|         ADMIN Build Status Information            |
6
'|                                                   |
7
'=====================================================
8
%>
9
<%
10
Option explicit
11
' Good idea to set when using redirect
12
Response.Expires = 0  ' always load the page, dont store
13
%>
14
<!--#include file="common/conf.asp"-->
15
<!--#include file="common/globals.asp"-->
16
<!--#include file="common/formating.asp"-->
17
<!--#include file="common/qstr.asp"-->
18
<!--#include file="common/common_subs.asp"-->
19
<!--#include file="common/_form_window_common.asp"-->
20
<%
21
'------------ ACCESS CONTROL ------------------
22
%>
23
<!--#include file="_access_control_general.asp"-->
24
<%
25
'------------ Variable Definition -------------
26
Dim rsQry
27
Dim query_string
28
Dim styleAlt1
29
Dim styleAlt2
30
Dim styleNow
31
Dim param_refreshPeriod
4482 dpurdie 32
Dim param_inactivity
147 ghuddy 33
Dim param_refreshEnabled
34
Dim bIndefinitelyPaused
4686 dpurdie 35
Dim buildStatus
36
 
37
Dim bShowProblemDaemonSets    ' Indicates if problem daemons must be shown during filtering
38
Dim bShowDisabledDaemons      ' Indicates if a disabled daemon must be shown during filtering
39
Dim bShowActiveBuilds         ' Indicates if active builds must be shown during filtering
40
Dim bShowIdleBuilds           ' Indicates if idle builds must be shown during filtering
41
Dim bShowPausedBuilds         ' Indicates if paused builds must be shown during filtering
42
 
147 ghuddy 43
'------------ Constants Declaration -----------
4431 dpurdie 44
Const Min_Refresh_Time = 10         ' Seconds
45
Const Max_Delta = 600               ' Seconds
4477 dpurdie 46
Const Max_DeltaBuild = 31           ' Days
147 ghuddy 47
'------------ Variable Init -------------------
48
 
49
styleAlt1="class='body_rowg1'"
50
styleAlt2="class='body_rowg2'"
51
styleNow = styleAlt1
52
'----------------------------------------------
53
%>
54
<%
4686 dpurdie 55
'------------------------------------------------------------------------------
56
'   Populate the buildStatus dictionary
57
'   Get all the required data into a hash of hashes
58
'   It will make the following processing so much easier
59
'
60
Sub getBuildStatus
61
    Dim bms
62
    query_string = "SELECT rc.RCON_ID, " &_
63
                  "       rc.RTAG_ID, " &_
64
                  "       bm.DISPLAY_NAME, " &_
65
                  "       rc.DAEMON_MODE, "&_
66
                  "       rt.RTAG_NAME, " &_
67
                  "       rt.OFFICIAL, " &_
68
                  "       p.PROJ_ID, " &_
69
                  "       p.PROJ_NAME, " &_
70
                  "       rl.CURRENT_PKG_ID_BEING_BUILT, "&_
71
                  "       rl.CURRENT_RUN_LEVEL, "&_
72
                  "       NVL(rl.PAUSE,0) as PAUSE, " &_
73
                  "       TRUNC (86400*(SYSDATE - rl.KEEP_ALIVE)) as delta," &_
74
                  "       TO_CHAR(rl.LAST_BUILD, 'DD-MON-YYYY') as last_build," &_
75
                  "       TRUNC (SYSDATE - rl.LAST_BUILD) as last_build_days," &_
76
                  "       pkg.PKG_NAME" &_
77
                  " FROM RELEASE_CONFIG rc, RELEASE_TAGS rt, PROJECTS p, RUN_LEVEL rl, BUILD_MACHINE_CONFIG bm, PACKAGES pkg " &_
78
                  " WHERE rt.RTAG_ID = rc.RTAG_ID " &_
79
                  "   AND rc.bmcon_id is not null" &_
80
                  "   AND rt.PROJ_ID = p.PROJ_ID " &_
81
                  "   AND rt.OFFICIAL != 'A' " &_
82
                  "   AND rt.OFFICIAL != 'Y' " &_
83
                  "   AND rl.RCON_ID = rc.RCON_ID" &_
84
                  "   AND rc.bmcon_id = bm.bmcon_id(+)" &_
85
                  "   AND pkg.PKG_ID(+) = rl.CURRENT_PKG_ID_BEING_BUILT" &_
86
                  " ORDER BY p.PROJ_NAME, rt.RTAG_NAME, rc.DAEMON_MODE, bm.DISPLAY_NAME, rc.DAEMON_MODE"
87
 
88
    Set buildStatus = CreateObject("Scripting.Dictionary")
89
    Set rsQry = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
90
    Do While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
91
        Set bms = CreateObject("Scripting.Dictionary")
92
 
93
        bms.Item("RCON_ID")                     = rsQry("RCON_ID")
94
        bms.Item("RTAG_ID")                     = rsQry("RTAG_ID")
95
        bms.Item("DISPLAY_NAME")                = rsQry("DISPLAY_NAME")
96
        bms.Item("RTAG_NAME")                   = rsQry("RTAG_NAME")
97
        bms.Item("DAEMON_MODE")                 = rsQry("DAEMON_MODE")
98
        bms.Item("OFFICIAL")                    = rsQry("OFFICIAL")
99
        bms.Item("PROJ_ID")                     = rsQry("PROJ_ID")
100
        bms.Item("PROJ_NAME")                   = rsQry("PROJ_NAME")
101
        bms.Item("CURRENT_PKG_ID_BEING_BUILT")  = rsQry("CURRENT_PKG_ID_BEING_BUILT")
102
        bms.Item("CURRENT_RUN_LEVEL")           = rsQry("CURRENT_RUN_LEVEL")
103
        bms.Item("PAUSE")                       = CInt(rsQry("PAUSE"))
104
        bms.Item("delta")                       = rsQry("delta")
105
        bms.Item("last_build")                  = rsQry("last_build")
106
        bms.Item("last_build_days")             = NiceInt(rsQry("last_build_days"), 100)
107
        bms.Item("PKG_NAME")                    = rsQry("PKG_NAME")
108
 
109
        ' Calculate some values
110
        bms.Item("dState") = Classify_Run_Level(bms.Item("CURRENT_RUN_LEVEL"),_
111
                                                bIndefinitelyPaused,_
112
                                                bms.Item("PAUSE"), _
113
                                                bms.Item("delta") ,_
114
                                                bms.Item("CURRENT_PKG_ID_BEING_BUILT"))
115
 
116
        bms.Item("dStateText") = Get_Run_Level(bms.Item("CURRENT_RUN_LEVEL"),_
117
                                               bIndefinitelyPaused,_
118
                                               bms.Item("PAUSE"))
119
 
120
        ' Kill package name on disabled daemons
121
        If bms.Item("PAUSE") = 2 Then bms.Item("PKG_NAME") = Null
122
 
123
 
124
        ' Add to buildStatus
125
        '   This is a three level hash (Project,Release, Daemon)
126
 
127
        Dim ProjRef, RelRef, DRef
128
        ProjRef = bms.Item("PROJ_NAME")
129
        RelRef  = bms.Item("RTAG_NAME")
130
        DRef    = bms.Item("DISPLAY_NAME")
131
 
132
        If  Not buildStatus.Exists(ProjRef) Then
133
            Set buildStatus(ProjRef) = CreateObject("Scripting.Dictionary")
134
            Set buildStatus(ProjRef).Item("data") = CreateObject("Scripting.Dictionary")
4703 dpurdie 135
            'buildStatus(ProjRef).Item("PROJ_ID") = bms.Item("PROJ_ID")
136
            'buildStatus(ProjRef).Item("PROJ_NAME") = bms.Item("PROJ_NAME")
137
 
4686 dpurdie 138
        End If
139
 
140
        If  Not buildStatus(ProjRef).Item("data").Exists(RelRef) Then
141
            Set buildStatus(ProjRef).Item("data").Item(RelRef) = CreateObject("Scripting.Dictionary")
142
            Set buildStatus(ProjRef).Item("data").Item(RelRef).Item("data") = CreateObject("Scripting.Dictionary")
4703 dpurdie 143
            'buildStatus(ProjRef).Item("data").Item(RelRef).Item("RTAG_NAME") = bms.Item("RTAG_NAME")
144
            'buildStatus(ProjRef).Item("data").Item(RelRef).Item("RTAG_ID") = bms.Item("RTAG_ID")
4686 dpurdie 145
        End If
146
 
147
        Set buildStatus(ProjRef).Item("data").Item(RelRef).Item("data").Item(DRef) = bms
148
 
149
        rsQry.MoveNext
150
    Loop
151
    rsQry.Close()
152
    Set rsQry = nothing
153
 
154
    ' Iterate over each deamon set and flag some of its characteristics
155
    '   This could be done inline, as the data is processed from the SQL source
156
    Dim project,release,machine
157
    Dim eProject,eRelease,eMachine
158
    For Each project in buildStatus
159
        Set eProject = buildStatus.Item(project)
160
        For Each release in eProject.Item("data")
161
            Set eRelease = eProject.Item("data").Item(release)
162
            For Each machine in eRelease.Item("data")
163
                Set eMachine = eRelease.Item("data").Item(machine)
164
 
165
                Dim dState
166
                dState = eMachine.Item("dState")
167
 
168
                If dState = "active" Then
169
                    If bShowActiveBuilds Then eMachine.Item("bRow_displayed") = "ShowActive"
170
                ElseIf dState = "idle" Then
171
                    If bShowIdleBuilds Then eMachine.Item("bRow_displayed") = "ShowIdle"
172
                ElseIf dState = "paused" Then
173
                    If bShowPausedBuilds Then eMachine.Item("bRow_displayed") = "ShowPaused"
174
                ElseIf dState = "disabled" Then
175
                    If bShowDisabledDaemons Then eMachine.Item("bRow_displayed") = "ShowDisabled"
176
                ElseIf dState = "problem" Then
177
                    If bShowProblemDaemonSets Then eMachine.Item("bRow_displayed") = "ShowProblem"
178
                    If bShowProblemDaemonSets Then eRelease.Item("bDisplay_whole_set") = true
179
                Else
180
                    eRelease.Item("bDisplay_whole_set") = true
181
                    eMachine.Item("bRow_displayed") = "ShowUnknownState"
182
                End If
183
 
184
                If bShowProblemDaemonSets AND eMachine.Item("last_build_days") > param_inactivity Then
185
                   If dState = "active" OR dState = "idle" Then
186
                      eRelease.Item("bDisplay_whole_set") = true
187
                      eRelease.Item("bShowAge") = true
188
                      eMachine.Item("bRow_displayed") = "ShowInactiveWarning"
189
                   End If
190
                End If
191
 
192
                If eMachine.Exists("bRow_displayed") Then
193
                    eRelease.Item("bDisplay_some") = true
194
                End If
195
 
196
            Next
197
        Next
198
    Next
199
 
4703 dpurdie 200
    ' Debug the data structure
201
    '   Requires common/DictDump.vbs to be included to work
4686 dpurdie 202
    'Response.Write "<br>Pretty Dictionary Display<pre>"
203
    'Response.Write DICToutput(buildStatus)
204
 
205
End Sub
206
 
147 ghuddy 207
'--------------------------------------------------------------------------------------------------------------------------
4432 dpurdie 208
' Like Cint, but handles NULL by replacing it with a default value
209
Function NiceInt( val, def)
210
   If isNull(val) Then
211
       NiceInt = def
212
   Else
213
      NiceInt = CInt(val)
214
   End If
215
End Function
147 ghuddy 216
 
217
'--------------------------------------------------------------------------------------------------------------------------
218
' Toggle row style between the two alternative styles
219
Sub ToggleStyleNow
220
   If styleNow = styleAlt1 Then
221
      styleNow = styleAlt2
222
   Else
223
      styleNow = styleAlt1
224
   End If
225
End Sub
226
'--------------------------------------------------------------------------------------------------------------------------
227
' Convert run level into a meaningful string
173 brianf 228
Function Get_Run_Level( nLevel, indefinitePause, astate)
147 ghuddy 229
 
230
   If indefinitePause Then
231
      Get_Run_Level = "<span class='err_alert'>Stopped</span>"
173 brianf 232
   ElseIf astate = 1 Then      ' if build daemon paused
233
      Get_Run_Level = "Paused"
234
   ElseIf astate = 2 Then      ' if build daemon disabled
235
      Get_Run_Level = "Disabled"
1326 dpurdie 236
   ElseIf astate = 0 Then     ' if build daemon enabled
147 ghuddy 237
      If nLevel = 1 Then
238
         Get_Run_Level = "Cannot Continue"
239
      ElseIf nLevel = 2 Then
240
         Get_Run_Level = "Paused"
241
      ElseIf nLevel = 3 Then
1326 dpurdie 242
         Get_Run_Level = "Building"
147 ghuddy 243
      ElseIf nLevel = 4 Then
244
         Get_Run_Level = "Idle"
245
      ElseIf nLevel = 5 Then
246
         Get_Run_Level = "Waiting"
247
      ElseIf nLevel = 6 Then
248
         Get_Run_Level = "Publishing"
249
      Else
250
         Get_Run_Level = "<span class='err_alert'>Unknown!</span>"
251
      End If
252
   End If
253
End Function
4200 dpurdie 254
 
147 ghuddy 255
'--------------------------------------------------------------------------------------------------------------------------
4200 dpurdie 256
' Convert run level into a meaningful filter state as a string
257
' Will be one of: active, idle, paused, disabled, problem, unknown
4202 dpurdie 258
Function Classify_Run_Level( nLevel, indefinitePause, astate, nDelta, pkgId)
4200 dpurdie 259
 
260
   If indefinitePause Then
261
      Classify_Run_Level = "problem"
262
   ElseIf astate = 1 Then                   ' if build daemon paused
263
      Classify_Run_Level = "paused"
264
   ElseIf astate = 2 Then                   ' if build daemon disabled
265
      Classify_Run_Level = "disabled"
4202 dpurdie 266
   ElseIf Int(nDelta) > Max_Delta Then
4200 dpurdie 267
      Classify_Run_Level = "problem"
4202 dpurdie 268
   ElseIf (IsNull(pkgId)) OR (pkgId = "") Then
269
      Classify_Run_Level = "idle"
4200 dpurdie 270
   ElseIf astate = 0 Then                   ' if build daemon enabled
271
      If nLevel = 1 Then
272
         Classify_Run_Level = "problem"
273
      ElseIf nLevel = 2 Then
274
         Classify_Run_Level = "paused"
275
      ElseIf nLevel = 3 Then
276
         Classify_Run_Level = "active"
277
      ElseIf nLevel = 4 Then
278
         Classify_Run_Level = "idle"
279
      ElseIf nLevel = 5 Then
280
         Classify_Run_Level = "idle"
281
      ElseIf nLevel = 6 Then
282
         Classify_Run_Level = "active"
283
      Else
284
         Classify_Run_Level = "unknown"
285
      End If
286
   End If
287
End Function
288
 
289
'--------------------------------------------------------------------------------------------------------------------------
147 ghuddy 290
' Convert daemon mode into a meaningful string
291
Function Get_Daemon_Mode( nMode )
292
   If nMode = "M" Then
293
      Get_Daemon_Mode = "Master"
294
   ElseIf nMode = "S" Then
295
      Get_Daemon_Mode = "Slave"
296
   Else
297
      Get_Daemon_Mode = "?"
298
   End If
299
End Function
300
'--------------------------------------------------------------------------------------------------------------------------
301
' Use this function to determine the state of a specified project checkbox
302
Function Is_Project_Checked( nProjId )
303
   Dim hiddenProjects_arr
304
   Dim hiddenProjects
305
   Dim str
306
 
307
   hiddenProjects = Request("HideProj")
308
   Is_Project_Checked = "checked"
309
 
310
   hiddenProjects_arr = Split(hiddenProjects, ",")
311
   For Each str in hiddenProjects_arr
312
      If str = nProjId Then
313
         Is_Project_Checked = ""
314
         Exit For
315
      End If
316
   Next
317
End Function
318
'--------------------------------------------------------------------------------------------------------------------------
319
' Use this function to set/clear the filter on/off radio button checked state
4200 dpurdie 320
' Format of Filter Param : Filter=[problemBuilds}[,ActiveBuilds]
147 ghuddy 321
Function Display_Filtered(id)
322
   Dim filter
323
 
324
   Display_Filtered = ""
325
 
326
   filter  = Request("Filter")
327
   If NOT IsNull(filter) AND filter <> "" Then
328
      If InStr(filter, id) > 0 Then
329
         Display_Filtered = "checked"
330
      End If
331
   Else
332
      If id = "OFF" Then
333
         Display_Filtered = "checked"
334
      End If
335
   End If
336
End Function
337
 
338
'--------------------------------------------------------------------------------------------------------------------------
339
' Use this function to set/clear a filter option check box with the given ID
4200 dpurdie 340
' If no Filter is present, then assume defaults          
147 ghuddy 341
Function Filter_Checked(id)
342
   Dim filter
343
 
344
   Filter_Checked = ""
345
 
346
   filter  = Request("Filter")
4200 dpurdie 347
   If IsNull(filter) OR filter = "" Then
348
     filter="problemBuilds,activeBuilds"        ' Defaults
147 ghuddy 349
   End If
4200 dpurdie 350
  If InStr(filter, id) > 0 Then
351
     Filter_Checked = "checked"
352
  End If
147 ghuddy 353
End Function
354
'--------------------------------------------------------------------------------------------------------------------------
355
' Test to see if a particular filter option is on
356
Function Filter_Is_On(id)
4200 dpurdie 357
    If Filter_Checked(id) = "checked" Then
358
          Filter_Is_On = True
359
    Else
360
          Filter_Is_On = False
361
    End If
147 ghuddy 362
End Function
363
'--------------------------------------------------------------------------------------------------------------------------
364
Function Indefinitely_Paused()
365
   Dim rsQry2
366
   Dim query_string2
367
 
368
   Indefinitely_Paused = False
369
 
370
   query_string2 = " select * from run_level_schedule rls where rls.indefinite_pause = 'P'"
371
 
372
   Set rsQry2 = OraDatabase.DbCreateDynaset( query_string2, ORADYN_DEFAULT )
373
   If rsQry2.RecordCount > 0 Then
374
      Indefinitely_Paused = True
375
   End If
376
End Function
377
'--------------------------------------------------------------------------------------------------------------------------
4028 dpurdie 378
Function PrettyDelta( delta, daemonState,pkgId )
4202 dpurdie 379
    Dim style,nDelta
4028 dpurdie 380
    style = ""
147 ghuddy 381
 
4202 dpurdie 382
    If delta = "" Then delta = 0
383
    delta = Int(delta)
384
    nDelta = delta
385
 
386
    If (delta > Max_Delta) AND (IsNull(pkgId) OR pkgId = "") Then
4028 dpurdie 387
      style = "style=color:Red"
388
      If (delta > 86400 ) Then
389
        Dim bdate, dd,mm,yy
390
        bdate = DateAdd("s", - delta,Now())
391
        dd = Day(bdate)
392
        mm = MonthName(Month(bdate),1)
393
        yy = Year( bdate)
394
        delta = dd & "-" & mm & "-" & yy
395
        If ( daemonState >= 2 ) Then
396
            style = ""
397
        End If
398
      ElseIf ( delta > 60*60 ) Then
399
        'Dim bdate, hh, mins, ss
400
        bdate = DateAdd("s", - delta,Now())
401
        delta = TimeValue( bdate)
402
        'delta = hh & ":" & mins & ":" & ss
403
      End If
404
    End If
405
 
406
    If style <> "" Then
407
        delta = "<span " & style & ">" & delta & "</span>"
408
    End If
4202 dpurdie 409
    PrettyDelta = delta 
4028 dpurdie 410
End Function
411
 
412
'--------------------------------------------------------------------------------------------------------------------------
413
 
147 ghuddy 414
%>
415
<%
416
'------------ RUN BEFORE PAGE RENDER ----------
417
 
418
' Default values for Auto Refresh checkbox and edit input box
419
param_refreshEnabled = False
420
param_refreshPeriod  = "0"
421
 
422
' Read the Refresh parameter which is of the form Refresh=<time-period>,ON|OFF
423
Dim param_refresh
424
param_refresh = Request("Refresh")
425
If param_refresh <> "" Then
426
   Dim pr_arr
427
   pr_arr = Split(param_refresh,",")
428
   param_refreshPeriod = pr_arr(0)
429
 
430
   ' Range check and end-stop the refresh period if necessary
431
   If CInt(param_refreshPeriod)  < Min_Refresh_Time Then
432
      param_refreshPeriod  = CStr(Min_Refresh_Time)
433
   End If
434
 
435
   ' determine checkbox state
436
   If UBound(pr_arr) >= 1 Then
437
      If InStr(UCase(pr_arr(1)), "ON") > 0 Then
438
         param_refreshEnabled = True
439
      Else
440
         param_refreshEnabled = False
441
      End If
442
   End If
443
End If
444
 
4482 dpurdie 445
' Read the Inactivity Period
446
param_inactivity = NiceInt( Request("Inactivity"), Max_DeltaBuild)
447
If param_inactivity  = 0 Then param_inactivity = Max_DeltaBuild
448
 
4756 dpurdie 449
 
147 ghuddy 450
' Get indefinite pause status
451
bIndefinitelyPaused = Indefinitely_Paused()
452
 
4686 dpurdie 453
' Populate display controls
454
bShowProblemDaemonSets = Filter_Is_On("problemBuilds")
455
bShowActiveBuilds      = Filter_Is_On("activeBuilds")
456
bShowDisabledDaemons   = Filter_Is_On("disabledDaemons")
457
bShowIdleBuilds        = Filter_Is_On("idleBuilds")
458
bShowPausedBuilds      = Filter_Is_On("pausedBuilds")
459
 
147 ghuddy 460
'----------------------------------------------
461
%>
462
<script language="JavaScript" type="text/javascript">
463
<!--
464
 
465
//////////////////////////////////////////////////////////////////////////////////////////////////
466
// This function rebuilds the query string so that it either adds or removes the specified project ID from
467
// the HideProj= part of it, whilst leaving the rest of the string intact. The browser location is then
468
// updated and the server made to re-render the page. This function must be used from the project checkboxes
469
// to show/hide daemon status informaton for specific projects.
470
//////////////////////////////////////////////////////////////////////////////////////////////////
471
function toggle_project( proj_id )
472
{
473
   var found = false;
474
   var new_url_query_string = '';
475
   var new_hp_list = '';
476
 
477
   // get the full query string
478
   var url_query_string = '<%=Request.ServerVariables("QUERY_STRING")%>';
479
 
480
   // split it into each parameter
481
   var qs_arr = url_query_string.split('&');
482
   var i_qs_arr;
483
   for (i_qs_arr in qs_arr)
484
   {
485
      var qs_str = qs_arr[i_qs_arr];
486
 
487
      if (qs_str.length > 0)
488
      {
489
         // if we have found the HideProj parameter
490
         if (qs_str.indexOf('HideProj') >= 0)
491
         {
492
            // Split the HideProj parameter at the = symbol in order to process the comma seperated list of project IDs
493
            var qs_hp_arr;
494
            qs_hp_arr = qs_str.split('=');
495
            if (qs_hp_arr.length > 1)
496
            {
497
               // Split the comma seperated list of project IDs, and iterate through each item
498
               var hp_arr = qs_hp_arr[1].split(',');
499
               var i_hp_arr;
500
               for (i_hp_arr in hp_arr)
501
               {
502
                  var hp_str = hp_arr[i_hp_arr];
503
 
504
                  // If the item matches the specified project ID and the checkbox for that project is unchecked
505
                  if (hp_str == proj_id)
506
                  {
507
                     found = true;
508
                  }
509
                  else
510
                  {
511
                     // retain this other project ID in the list
512
                     if (new_hp_list != '')
513
                        new_hp_list += ',';
514
                     new_hp_list += hp_str;
515
                  }
516
               }
517
            }
518
         }
519
         else
520
         {
521
            // feed the existing paramter to the new query string
522
            if (new_url_query_string == '')
523
               new_url_query_string += '?';
524
            else
525
               new_url_query_string += '&';
526
            new_url_query_string += qs_str
527
         }
528
      }
529
   }
530
 
531
   // If the specified project ID was not found, then that project is not currently hidden
532
   // and must now be hidden, so add its number to the list to hide it on the next server side
533
   // page render operation
534
   if (!found)
535
   {
536
      if (new_hp_list != '')
537
         new_hp_list += ',';
538
      new_hp_list += proj_id
539
   }
540
 
541
   // Prepare the new query string
542
   if (new_url_query_string == '')
543
      new_url_query_string += '\?';
544
   else
545
      new_url_query_string += '\&';
546
 
547
   new_url_query_string += 'HideProj=';
548
   new_url_query_string += new_hp_list;
549
 
550
   // reload the page with the new query string
551
   var url = location.pathname + new_url_query_string;
552
   window.location.assign(url);
553
}
554
 
555
//////////////////////////////////////////////////////////////////////////////////////////////////
556
// This function rebuilds the query string to either hide all projects, or unhide all projects
557
// fromt he display
558
//////////////////////////////////////////////////////////////////////////////////////////////////
559
function toggle_all_projects(bAll)
560
{
561
   var new_url_query_string = '';
562
   var list_proj_ids = '';
563
 
564
   // If hiding all, then find all of the project enable/disable checkboxes, get the project ID
565
   // values from each one and accumulate them into a comma seperated list
566
   if (!bAll)
567
   {
568
      var inputs = document.getElementsByTagName('input');
569
      var i;
570
      for (i = 0; i < inputs.length; i++)
571
      {
572
         var str = inputs[i].name;
573
         if (str.indexOf("DIS_PRJ_") >= 0)
574
         {
575
            str = str.replace("DIS_PRJ_","");
576
            if (list_proj_ids != '')
577
               list_proj_ids += ',' + str;
578
            else
579
               list_proj_ids += str;
580
         }
581
      }
582
   }
583
 
584
   // get the full query string
585
   var url_query_string = '<%=Request.ServerVariables("QUERY_STRING")%>';
586
 
587
   // split it into each parameter
588
   var qs_arr = url_query_string.split('&');
589
   var i_qs_arr;
590
   for (i_qs_arr in qs_arr)
591
   {
592
      var qs_str = qs_arr[i_qs_arr];
593
 
594
      if (qs_str.length > 0)
595
      {
596
         // if we have found the HideProj parameter
597
         if (qs_str.indexOf('HideProj') >= 0)
598
         {
599
            // do nothing
600
         }
601
         else
602
         {
603
            // feed the existing paramter to the new query string
604
            if (new_url_query_string == '')
605
               new_url_query_string += '?';
606
            else
607
               new_url_query_string += '&';
608
            new_url_query_string += qs_str
609
         }
610
      }
611
   }
612
 
613
   // Prepare the new query string, only adding the HideProj parameter if the function is being
614
   // used to hide all projects
615
   if (!bAll)
616
   {
617
      if (new_url_query_string == '')
618
         new_url_query_string += '\?';
619
      else
620
         new_url_query_string += '\&';
621
 
622
      new_url_query_string += 'HideProj=' + list_proj_ids;
623
   }
624
   // reload the page with the new query string
625
   var url = location.pathname + new_url_query_string;
626
   window.location.assign(url);
627
}
628
 
629
//////////////////////////////////////////////////////////////////////////////////////////////////
630
// This function rebuilds the query string so that it either adds or removes the Refresh parameter
631
//////////////////////////////////////////////////////////////////////////////////////////////////
632
function toggle_refresh()
633
{
634
   var new_url_query_string = '';
635
 
636
   // get the full query string
637
   var url_query_string = '<%=Request.ServerVariables("QUERY_STRING")%>';
638
 
639
   // split it into each parameter
640
   var qs_arr = url_query_string.split('&');
641
   var i_qs_arr;
642
   for (i_qs_arr in qs_arr)
643
   {
644
      var qs_str = qs_arr[i_qs_arr];
645
 
646
      if (qs_str.length > 0)
647
      {
648
         // if we have found the Refresh parameter
649
         if (qs_str.indexOf('Refresh') >= 0)
650
         {
651
            // do nothing
652
         }
653
         else
654
         {
655
            // feed the existing paramter to the new query string
656
            if (new_url_query_string == '')
657
               new_url_query_string += '?';
658
            else
659
               new_url_query_string += '&';
660
            new_url_query_string += qs_str
661
         }
662
      }
663
   }
664
 
665
   // Prepare the new query string
666
 
667
   if (new_url_query_string == '')
668
      new_url_query_string += '\?';
669
   else
670
      new_url_query_string += '\&';
671
 
672
   new_url_query_string += 'Refresh=';
673
   if (document.getElementById('refreshPeriod').value < <%=Min_Refresh_Time%>)
674
   {
675
      document.getElementById('refreshPeriod').value = <%=Min_Refresh_Time%>;
676
      new_url_query_string += <%=Min_Refresh_Time%>;
677
   }
678
   else
679
      new_url_query_string += document.getElementById('refreshPeriod').value;
680
 
681
   if (document.getElementById('autoRefresh').checked)
682
      new_url_query_string += ',ON';
683
   else
684
      new_url_query_string += ',OFF';
685
 
4482 dpurdie 686
   // reload the page with the new query string
687
   var url = location.pathname + new_url_query_string;
688
   window.location.assign(url);
689
}
147 ghuddy 690
 
4482 dpurdie 691
 
692
//////////////////////////////////////////////////////////////////////////////////////////////////
693
// This function rebuilds the query string to Update the Inactivity parameter
694
//////////////////////////////////////////////////////////////////////////////////////////////////
695
function toggle_inactivity()
696
{
697
   var new_url_query_string = '';
698
 
699
   // get the full query string
700
   var url_query_string = '<%=Request.ServerVariables("QUERY_STRING")%>';
701
 
702
   // split it into each parameter, then remove the Inactivity parameter
703
   var qs_arr = url_query_string.split('&');
704
   var qs_join = '?'
705
   var i_qs_arr;
706
   for (i_qs_arr in qs_arr)
707
   {
708
      var qs_str = qs_arr[i_qs_arr];
709
      if (qs_str.length > 0)
710
      {
711
         if (qs_str.indexOf('Inactivity') < 0)
712
         {
713
            // feed the existing paramter to the new query string
714
            new_url_query_string += qs_join + qs_str
715
            qs_join = '&'
716
         }
717
      }
718
   }
719
 
720
   var value = document.getElementById('inactivity').value;
721
   if  (value && (value != <%=Max_DeltaBuild%>))
722
   {
723
       // Prepare the new query string
724
        new_url_query_string += qs_join + 'Inactivity=' + value;
725
    }
726
 
147 ghuddy 727
   // reload the page with the new query string
728
   var url = location.pathname + new_url_query_string;
729
   window.location.assign(url);
730
}
731
 
4482 dpurdie 732
 
147 ghuddy 733
//////////////////////////////////////////////////////////////////////////////////////////////////
4200 dpurdie 734
// Rebuild the query string and reload the page based on the current setting of the filter
735
// radio buttons
147 ghuddy 736
//////////////////////////////////////////////////////////////////////////////////////////////////
4200 dpurdie 737
function update_Display_Filter()
147 ghuddy 738
{
739
   var new_url_query_string = '';
740
 
741
   // get the full query string
742
   var url_query_string = '<%=Request.ServerVariables("QUERY_STRING")%>';
743
 
744
   // split it into each parameter
745
   var qs_arr = url_query_string.split('&');
746
   var i_qs_arr;
747
   for (i_qs_arr in qs_arr)
748
   {
749
      var qs_str = qs_arr[i_qs_arr];
750
 
751
      if (qs_str.length > 0)
752
      {
753
         // if we have found the Display parameter
754
         if (qs_str.indexOf('Filter') >= 0)
755
         {
756
            // do nothing
757
         }
758
         else
759
         {
760
            // feed the existing paramter to the new query string
761
            if (new_url_query_string == '')
762
               new_url_query_string += '?';
763
            else
764
               new_url_query_string += '&';
765
            new_url_query_string += qs_str
766
         }
767
      }
768
   }
769
 
770
   // Prepare the new query string
4200 dpurdie 771
   var qJoiner;
147 ghuddy 772
   if (new_url_query_string == '')
4200 dpurdie 773
      qJoiner = '\?';
147 ghuddy 774
   else
4200 dpurdie 775
      qJoiner = '\&';
147 ghuddy 776
 
4200 dpurdie 777
   var joiner = '';
778
   var filterSet = '';
779
   var items = new Array ("activeBuilds","disabledDaemons","idleBuilds","pausedBuilds","problemBuilds");
780
   for (var item in items)
147 ghuddy 781
   {
4200 dpurdie 782
       if (document.getElementById(items[item]).checked)
783
       {
784
          filterSet += joiner + items[item];
785
          joiner = ',';
786
       }
147 ghuddy 787
   }
788
 
4200 dpurdie 789
   if (filterSet.length > 0)
147 ghuddy 790
   {
4200 dpurdie 791
       new_url_query_string += qJoiner + 'Filter=' + filterSet;
147 ghuddy 792
   }
1376 dpurdie 793
 
147 ghuddy 794
   // reload the page with the new query string
795
   var url = location.pathname + new_url_query_string;
796
   window.location.assign(url);
797
}
798
 
799
//-->
800
</script>
801
 
802
<html>
803
   <head>
804
      <title>Release Manager</title>
805
      <meta http-equiv="Pragma" content="no-cache">
806
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
807
      <%If param_refreshEnabled AND param_RefreshPeriod <> 0 Then%>
808
         <META HTTP-EQUIV=REFRESH CONTENT=<%=param_RefreshPeriod%>>
809
      <%End If%>
810
      <link rel="stylesheet" href="images/release_manager_style.css" type="text/css">
811
      <link rel="stylesheet" href="images/navigation.css" type="text/css">
812
      <script language="JavaScript" src="images/common.js"></script>
813
      <!-- DROPDOWN MENUS -->
814
      <!--#include file="_menu_def.asp"-->
815
      <script language="JavaScript1.2" src="images/popup_menu.js"></script>
816
   </head>
817
   <body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" >
818
      <!-- MENU LAYERS -------------------------------------->
819
      <div id="popmenu" class="menuskin" onmouseover="clearhidemenu();highlightmenu(event,'on')" onmouseout="highlightmenu(event,'off');dynamichide(event)"></div>
820
      <!-- TIPS LAYERS -------------------------------------->
821
      <div id="formTipsLayer" style="position: absolute; z-index: 1000; visibility: hidden; left:0; top: 0; width: 10">&nbsp;</div>
822
      <!----------------------------------------------------->
823
      <!-- HEADER -->
824
      <!--#include file="_header.asp"-->
4686 dpurdie 825
      <% getBuildStatus() %>
147 ghuddy 826
      <!-- BODY ---->
827
      <table width="100%" border="0" cellspacing="0" cellpadding="0">
828
         <tr>
829
            <td width="1" background="images/bg_home_orange.gif" valign="top"></td>
830
            <td width="100%" rowspan="2" align="center" valign="top" bgcolor="#EEEFEF">
831
 
832
               <table width="10" border="0" cellspacing="0" cellpadding="0">
833
                  <tr>
834
                     <td width="1%"></td>
835
                     <td width="100%">
836
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
837
                           <tr>
838
                              <td nowrap class="form_ttl"><p>&nbsp;</p>
839
                                 <p>BUILD DAEMON STATUS INFORMATION</p>
840
                              </td>
841
                              <td align="right" valign="bottom"></td>
842
                           </tr>
843
 
844
                           <tr>
3959 dpurdie 845
                              <!-- Monitoring Options Selection Box ---->
147 ghuddy 846
                              <td width="100%">
847
                                 <fieldset style="width:700px;">
848
                                    <legend><a href="javascript:;" class="body_scol" >&nbsp;Monitoring&nbsp;Options</a></legend>
849
                                    <table width="100%" border="0" cellspacing="1" cellpadding="3">
850
                                       <tr>
851
                                          <td valign="top" width="200px" nowrap background="images/bg_table_col.gif" class="body_col">Auto Refresh</td>
852
                                          <td valign="top" width="200px" nowrap background="images/bg_table_col.gif" class="body_col">Filter Options</td>
4482 dpurdie 853
                                          <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Inactivity</td>
147 ghuddy 854
                                       </tr>
855
 
856
                                       <tr>
857
                                          <td class="body_rowg">
858
                                             <input name="autoRefresh" id="autoRefresh" type="checkbox" <%If param_refreshEnabled Then%>checked<%End If%> value="1" onclick='toggle_refresh()'>
4482 dpurdie 859
                                             <input style="width:3em" name="refreshPeriod" id="refreshPeriod" type="input" maxlength="3" value="<%=param_refreshPeriod%>" onchange='toggle_refresh()' > Seconds (min. 10)
147 ghuddy 860
                                          </td>
861
                                          <td class="body_rowg">
4200 dpurdie 862
                                             <input name="activeBuilds" id="activeBuilds" type="checkbox" <%=Filter_Checked("activeBuilds")%> value="activeBuilds" onclick='update_Display_Filter()'>Active
863
                                             <input name="idleBuilds" id="idleBuilds" type="checkbox" <%=Filter_Checked("idleBuilds")%> value="idleBuilds" onclick='update_Display_Filter()'>Idle
864
                                             <input name="pausedBuilds" id="pausedBuilds" type="checkbox" <%=Filter_Checked("pausedBuilds")%> value="paused" onclick='update_Display_Filter()'>Paused
865
                                             <input name="disabledDaemons"  id="disabledDaemons"  type="checkbox" <%=Filter_Checked("disabledDaemons")%>  value="disabledDaemons"  onclick='update_Display_Filter()'>Disabled
866
                                             <input name="problemBuilds"  id="problemBuilds"  type="checkbox" <%=Filter_Checked("problemBuilds")%>  value="problemBuilds"  onclick='update_Display_Filter()'>Problem Daemon Sets
4482 dpurdie 867
 
868
                                          <td class="body_rowg">
869
                                             <input style="width:3em" name="inactivity" id="inactivity" type="input" maxlength="3" value="<%=param_inactivity%>" onchange='toggle_inactivity()' > Days
147 ghuddy 870
                                          </td>
871
                                       </tr>
872
                                    </table>
873
                                 </fieldset>
874
                              </td>
875
                           </tr>
876
                           <%If bIndefinitelyPaused Then%>
877
                              <tr>
878
                                 <td>
879
                                    <span class='err_alert'>
880
                                       <font size='2'><b>WARNING: Indefinite Pause, Build Daemons are all stopped - please contact an administrator</b></font>
881
                                    </span>
882
                                 </td>
883
                              </tr>
884
                           <%End If%>
885
                        </table>
886
                     </td>
887
                     <td width="1%"></td>
888
                  </tr>
889
                  <tr>
890
                     <td align="left" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td>
891
                     <td background="images/lbox_bg_blue.gif" class="lbox_ttl_w"><img src="images/h_trsp_dot.gif" width="600" height="15"></td>
892
                     <td align="right" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td>
893
                  </tr>
894
                  <tr>
895
                     <td bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" height="100"></td>
896
                     <td bgcolor="#FFFFFF" valign="top">
897
                        <!-- MESSAGE +++++++++++++++++++++++++++++++++++++++++++++++++++ -->
898
                        <!--#include file="messages/_msg_inline.asp"-->
899
                        <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
900
                        <br>
901
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
902
                           <td width="9%" valign="top"></td>
903
                           <tr>
904
                              <td valign="middle" nowrap background="images/bg_table_col.gif" class="body_col">Project
905
                                 <input name="NOPRJ" id="NOPRJ" type="Button" value="All" onclick="toggle_all_projects(1)">
906
                                 <input name="NOPRJ" id="NOPRJ" type="Button" value="None" onclick="toggle_all_projects(0)">
907
                              </td>
4686 dpurdie 908
                              <!-- Status Table Header -->
147 ghuddy 909
                              <td valign="middle" nowrap background="images/bg_table_col.gif" class="body_col">Release</td>
910
                              <td valign="middle" nowrap background="images/bg_table_col.gif" class="body_col">Release<br>Mode</td>
911
                              <td valign="middle" nowrap background="images/bg_table_col.gif" class="body_col">Daemon<br>Mode</td>
163 brianf 912
                              <td valign="middle" nowrap background="images/bg_table_col.gif" class="body_col">Daemon<br>Host</td>
147 ghuddy 913
                              <td valign="middle" nowrap background="images/bg_table_col.gif" class="body_col">Daemon<br>State</td>
914
                              <td valign="middle" nowrap background="images/bg_table_col.gif" class="body_col">Building<br>Package</td>
915
                              <td valign="middle" nowrap background="images/bg_table_col.gif" class="body_col">Last Change<br>Delta (secs)</td>
916
                           </tr>
4686 dpurdie 917
 
918
                           <!-- Status Table Body -->
147 ghuddy 919
                           <%
4686 dpurdie 920
                            Dim bProject_changed          ' Signals a row change due to a different project
921
                            Dim strProject_checked        ' Can be "" or "checked". Determines appearance of project enable checkbox
922
                            Dim bRelease_changed          ' signals a row change due to a different release
4703 dpurdie 923
                            Dim bReleaseHeaderDone        ' indicates whether the release name has been rendered yet
924
                            Dim bProjectHeaderDone        ' Project Header done
4686 dpurdie 925
                            Dim bShowAge                  ' Display age warning
926
                            Dim bToggleStyle              ' Data shown so toggle style
4703 dpurdie 927
                            Dim bShowReleaseSep           ' Show Release Seperator
147 ghuddy 928
 
4686 dpurdie 929
                            '   Iterate over all projects, releases and machines
930
                            '
931
                            Dim project,release,machine
932
                            Dim eProject,eRelease,eMachine
933
                            For Each project in buildStatus
934
                                ' Start of a new Project
935
                                Set eProject = buildStatus.Item(project)
4703 dpurdie 936
                                bProjectHeaderDone = false
4686 dpurdie 937
                                bProject_changed = true
4703 dpurdie 938
                                bShowReleaseSep = False
147 ghuddy 939
 
4686 dpurdie 940
                                For Each release in eProject.Item("data")
941
                                    '   Start of a new Release
942
                                    Set eRelease = eProject.Item("data").Item(release)
4703 dpurdie 943
                                    bReleaseHeaderDone = False
4686 dpurdie 944
                                    bRelease_changed = true
945
                                    bShowAge = eRelease("bShowAge")
946
                                    If  bToggleStyle Then Call ToggleStyleNow
947
                                    bToggleStyle = false
147 ghuddy 948
 
4686 dpurdie 949
                                    For Each machine in eRelease.Item("data")
950
                                        '   Start of a new Machine
951
                                        Set eMachine = eRelease.Item("data").Item(machine)
952
                                        strProject_checked = Is_Project_Checked(eMachine("PROJ_ID"))
147 ghuddy 953
 
4703 dpurdie 954
                                        ' Display Project Header - ONCE
955
                                        If NOT bProjectHeaderDone Then%>
4686 dpurdie 956
                                            <tr>
4703 dpurdie 957
                                               <td colspan='8'><img src='images/spacer.gif' width='1' height='5'></td>
958
                                            </tr>
959
                                            <tr>
960
                                               <td colspan='8' background='images/bg_rep_line.gif'><img src='images/spacer.gif' width='1' height='5'></td>
961
                                            </tr>
962
                                            <tr>
4686 dpurdie 963
                                                <td nowrap class="body_rowg">
964
                                                    <input name='DIS_PRJ_<%=eMachine("PROJ_ID")%>' id='DIS_PRJ_<%=eMachine("PROJ_ID")%>' type='checkbox' value=1 <%=strProject_checked%> onclick=toggle_project(<%=eMachine("PROJ_ID")%>)>
965
                                                    <a href='rtree.asp?proj_id=<%=eMachine("PROJ_ID")%>'><%=eMachine("PROJ_NAME")%>
966
                                                </td>
967
                                            <%
968
                                        End If
147 ghuddy 969
 
4703 dpurdie 970
                                        ' Consider displaying the body of this machine entry
4686 dpurdie 971
                                        If strProject_checked = "checked" Then
4703 dpurdie 972
                                            If eRelease.Exists("bDisplay_whole_set") OR eMachine.Exists("bRow_displayed") Then
4686 dpurdie 973
                                                bToggleStyle = true
147 ghuddy 974
 
4703 dpurdie 975
                                                '   Empty cell, if the project header has been displayed
976
                                                If bProjectHeaderDone Then
4686 dpurdie 977
                                                    %><td nowrap class="body_rowg"></td><%
978
                                                End If
4200 dpurdie 979
 
4703 dpurdie 980
                                                ' Display Release Header - Once, or a filler
981
                                                If NOT bReleaseHeaderDone Then
982
                                                    bReleaseHeaderDone = True
983
 
984
                                                    ' Display Release seperator, if this is not the first release in the project
985
                                                    If bShowReleaseSep Then
986
                                                        %>
987
                                                            <tr>
988
                                                                <td></td>
989
                                                                <td colspan='7' background='images/bg_rep_line.gif'><img src='images/spacer.gif' width='1' height='1'></td>
990
                                                            </tr>
991
                                                            <tr>
992
                                                                <td></td>
993
                                                        <%
994
                                                    End If
995
                                                    ' Display the Release Header, with a marker to show aged releases
996
                                                    %>
997
                                                    <td nowrap <%=styleNow%>>
998
                                                        <a href='build_status.asp?rtag_id=<%=eMachine("RTAG_ID")%>' title='Last Build:<%=eMachine("last_build")%>'><%=eMachine("RTAG_NAME")%></a>
4686 dpurdie 999
                                                    <%
1000
                                                    If bShowAge Then
1001
                                                    %>
1002
                                                        <img src='images/s_warning.gif' width='14' height='13' border='0' title='No Build in this release since <%=eMachine("last_build")%>. [<%=eMachine("last_build_days")%> Days]' style='vertical-align: bottom;'>
1003
                                                    <%
1004
                                                    End If
1005
                                                    %></td><%
1006
                                                Else
1007
                                                    %><td nowrap <%=styleNow%>></td><%
1008
                                                End If
4703 dpurdie 1009
                                                bShowReleaseSep = true
4686 dpurdie 1010
                                                %>
1011
                                                <td nowrap <%=styleNow%>><%=Get_Official(eMachine("OFFICIAL"))%></td>
1012
                                                <td nowrap <%=styleNow%>><%=Get_Daemon_Mode(eMachine("DAEMON_MODE"))%></td>
1013
                                                <td nowrap <%=styleNow%>><%=eMachine("DISPLAY_NAME")%></td>
1014
                                                <td nowrap <%=styleNow%>><%=eMachine("dStateText")%></td>
1015
                                                <td nowrap <%=styleNow%>><%=eMachine("PKG_NAME")%></td>
1016
                                                <td nowrap <%=styleNow%>><%=PrettyDelta(eMachine("delta"),eMachine("PAUSE"),eMachine("PKG_NAME") )%></td>
1017
                                                <%
1018
                                            End If
1019
                                            %></tr><%
1020
                                        End If
147 ghuddy 1021
 
4686 dpurdie 1022
                                        ' End of Display
1023
                                        bRelease_changed = false
1024
                                        bProject_changed = false
4703 dpurdie 1025
                                        bProjectHeaderDone = true
4686 dpurdie 1026
                                    Next
1027
                                Next
1028
                            Next
147 ghuddy 1029
                           %>
1030
                        </table>
4686 dpurdie 1031
                     <!-- Status Table Footer -->
147 ghuddy 1032
                     </td>
1033
                     <td background="images/lbox_bgside_white.gif">&nbsp;</td>
1034
                  </tr>
1035
                  <tr>
1036
                     <input type="hidden" name="action" value="true">
1037
                     <%=objPMod.ComposeHiddenTags()%>
1038
                     <td background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td>
1039
                     <td background="images/lbox_bg_blue.gif"></td>
1040
                     <td background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td>
1041
                  </tr>
1042
               </table>
1043
            </td>
1044
            <td width="1" valign="top"><img src="images/h_trsp_dot.gif" width="1" height="1"></td>
1045
         </tr>
1046
         <tr>
4756 dpurdie 1047
            <td valign="bottom" align="center" background="images/bg_home_orange.gif"><img src="images/img_gear.gif" width="86" height="99" vspace="20" hspace="30"></td>
147 ghuddy 1048
            <td background="images/bg_lght_gray.gif" valign="top"><img src="images/h_trsp_dot.gif" width="1" height="350"></td>
1049
         </tr>
1050
      </table>
1051
      <!-- FOOTER -->
1052
      <!--#include file="_footer.asp"-->
1053
   </body>
1054
</html>
1055
<%
1056
Call Destroy_All_Objects
1057
%>