Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

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