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