%@LANGUAGE="VBSCRIPT"%>
<%
'=====================================================
'| |
'| Build Status Information |
'| |
'=====================================================
%>
<%
Option explicit
' Good idea to set when using redirect
Response.Expires = 0 ' always load the page, dont store
%>
<%
objPMod.PersistInQryString("proj_id")
'------------ ACCESS CONTROL ------------------
'Let users view the build status without being logged in, but as soon as they try and submit the form, check
'their login status.
If Request("action") <> "" AND NOT objAccessControl.UserLogedIn Then%>
<%End If%>
<% '------------ Scripts -------------------------- %>
<%
'------------ Variable Definition -------------
Dim objSortHelper
Dim rsQry
Dim parRtagId
Dim parSourceRtagId
Dim query_string
Dim rcon_id
Dim shref_base
'------------ Constants Declaration -----------
'------------ Variable Init -------------------
parRtagId = Request("rtag_id")
objPMod.PersistInQryString("rtag_id")
'----------------------------------------------
%>
<%
'--------------------------------------------------------------------------------------------------------------------------
Sub GetFormDetails ( parRtagId, ByRef outobjDetails )
Dim rsQry, query
OraDatabase.Parameters.Add "RTAG_ID", parRtagId, ORAPARM_INPUT, ORATYPE_NUMBER
query = _
" SELECT * "&_
" FROM RELEASE_TAGS rt"&_
" WHERE rt.RTAG_ID = :RTAG_ID"
Set rsQry = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT )
OraDatabase.Parameters.Remove "RTAG_ID"
If rsQry.RecordCount > 0 Then
outobjDetails.Item ("rtag_id") = rsQry("rtag_id")
outobjDetails.Item ("rtag_name") = rsQry("rtag_name")
Else
Err.Raise 8, "Sub GetFormDetails in "& ScriptName, "Empty record set returned. parRtagId="& parRtagId
End If
rsQry.Close
Set rsQry = Nothing
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub RipplePackage (flag)
On Error Resume Next
objEH.ErrorRedirect = TRUE
OraDatabase.Parameters.Add "PV_ID_LIST", Request("pv_id_list"), ORAPARM_INPUT, ORATYPE_VARCHAR2
OraDatabase.Parameters.Add "RTAG_ID", parRtag_id, ORAPARM_INPUT, ORATYPE_NUMBER
OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER
objEH.TryORA ( OraSession )
If flag Then
OraDatabase.ExecuteSQL _
"BEGIN Ripple_Package( :PV_ID_LIST, :RTAG_ID, :USER_ID ); END;"
Else
OraDatabase.ExecuteSQL _
"BEGIN UnRipple_Package( :PV_ID_LIST, :RTAG_ID, :USER_ID ); END;"
End If
objEH.CatchORA ( OraSession )
OraDatabase.Parameters.Remove "PV_ID_LIST"
OraDatabase.Parameters.Remove "RTAG_ID"
OraDatabase.Parameters.Remove "USER_ID"
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Function PrettyDelta( delta, daemonState,pkgId )
Dim style
style = ""
If (delta > 600) AND (IsNull(pkgId) OR pkgId = "") Then
style = "style=color:Red"
If (delta > 86400 ) Then
Dim bdate, dd,mm,yy
bdate = DateAdd("s", - delta,Now())
dd = Day(bdate)
mm = MonthName(Month(bdate),1)
yy = Year( bdate)
delta = dd & "-" & mm & "-" & yy
If ( daemonState >= 2 ) Then
style = ""
End If
ElseIf ( delta > 60*60 ) Then
'Dim bdate, hh, mins, ss
bdate = DateAdd("s", - delta,Now())
delta = TimeValue( bdate)
'delta = hh & ":" & mins & ":" & ss
End If
End If
If style <> "" Then
delta = "" & delta & ""
End If
PrettyDelta = delta
End Function
'--------------------------------------------------------------------------------------------------------------------------
Function Get_Daemon_Mode( cMode )
If cMode = "S" Then
Get_Daemon_Mode = "Slave"
ElseIf cMode = "M" Then
Get_Daemon_Mode = "Master"
End If
End Function
'--------------------------------------------------------------------------------------------------------------------------
Function Get_Run_Level( nLevel, indefinitePause, astate)
If indefinitePause Then
Get_Run_Level = "Stopped"
ElseIf astate = 1 Then ' if build daemon paused
Get_Run_Level = "Paused"
ElseIf astate = 2 Then ' if build daemon disabled
Get_Run_Level = "Disabled"
ElseIf IsNull(astate) Then ' if build daemon enabled
If nLevel = 1 Then
Get_Run_Level = "Cannot Continue"
ElseIf nLevel = 2 Then
Get_Run_Level = "Paused"
ElseIf nLevel = 3 Then
Get_Run_Level = "Building"
ElseIf nLevel = 4 Then
Get_Run_Level = "Idle"
ElseIf nLevel = 5 Then
Get_Run_Level = "Waiting"
ElseIf nLevel = 6 Then
Get_Run_Level = "Publishing"
Else
Get_Run_Level = "Unknown!"
End If
End If
End Function
'--------------------------------------------------------------------------------------------------------------------------
Function Get_Package_Name( sPackageName )
If IsNull(sPackageName) Then
Get_Package_Name = "None"
Else
Get_Package_Name = sPackageName
End If
End Function
'--------------------------------------------------------------------------------------------------------------------------
%>
<%
'------------ RUN BEFORE PAGE RENDER ----------
shref_base = "http://" & archive_server & "/devl/abtlog/"
' --- Get Form details from DB ---
Call GetFormDetails ( Request("rtag_id"), objFormCollector )
' --- Load Validation Rules ---
'Call objForm.LoadValidationRules ( Array("rtag_name","rtag_description", "config_spec_branch"), OraDatabase ) ' Load Validation Rules
' --- Enter Form Validation Rule Changes here... ----
'----------------------------------------------------
' --- RUN onPostBack ---
If Request("action") <> "" AND objAccessControl.UserLogedIn Then
If objEH.Finally Then
If Request("action") = "include" Then
Call RipplePackage (True)
Else
Call OpenInWindow ( "dependencies.asp?rtag_id="& parRtagId )
End If
End If
End If
'----------------------------------------------
%>
Packages Excluded From Build (Daemon Build Failure)
Directly
PACKAGE NAME
PACKAGE VERSION
ROOT CAUSE
<%
query_string = " select pkg.pkg_name, pv.pkg_version, pv.pv_id, dnr.rtag_id, dnr.root_cause, dnr.root_file, pv.pv_description"&_
" from do_not_ripple dnr, package_versions pv, packages pkg"&_
" where dnr.rtag_id = "& parRtagId &_
" and pv.pv_id = dnr.pv_id"&_
" and pkg.pkg_id = pv.pkg_id"&_
" and dnr.root_pv_id is null"&_
" order by pkg_name"
Set rsQry = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
'--- Render rows ---
Do While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
Dim rowClass
Dim rowData
' root_file, if supplied, indicates a build failure log file exists
' this should always prevail over the textual root_cause
If IsNull(rsQry("root_file")) Then
rowClass = "rootCause"
rowData = rsQry("root_cause")
Else
rowClass = "rootFile"
rowData = "" &_
"Build Failure Log File"
End If
%>
<%
query_string = " select pv.pv_id, pkg.pkg_name, pv.pkg_version, qkg.pkg_name, dnr.rtag_id, pv.pv_description"&_
" from do_not_ripple dnr, package_versions pv, package_versions qv, packages pkg, packages qkg"&_
" where dnr.rtag_id = "& parRtagId &_
" and pv.pv_id = dnr.pv_id"&_
" and pkg.pkg_id = pv.pkg_id"&_
" and qv.pv_id = dnr.root_pv_id"&_
" and qkg.pkg_id = qv.pkg_id"&_
" and dnr.root_pv_id is not null"&_
" order by pkg.pkg_name"
Dim rsQry2
Set rsQry2 = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
'--- Render rows ---
Do While (NOT rsQry2.BOF) AND (NOT rsQry2.EOF)%>
<%
Response.Write(objFormComponent.SubmitButton ( "Include", "name='submit' id='submit' class='form_btn' disabled style='color:silver' onClick='return confirmAction(""Are you sure you want to include these packages for building?"")'" ))
Response.Write(objPMod.ComposeHiddenTags())
%>
<%End If%>
<%
Call objFormComponent.FormEnd()
rsQry.Close()
Set rsQry = nothing
rsQry2.Close()
Set rsQry2 = nothing
'-- FORM END ----------------------------------------------------------------------------------------------------------------
%>
<%
Dim indefinitelyPaused
indefinitelyPaused = FALSE
' Insert a warning into the page if the build daemons are indefintely paused.
query_string = " select * from run_level_schedule rls where rls.indefinite_pause = 'P'"
Set rsQry = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
If rsQry.RecordCount > 0 Then
indefinitelyPaused = TRUE %>
WARNING: Build Daemons are all stopped - please contact an administrator
<%End If
rsQry.Close()
Set rsQry = nothing
%>
Daemon Host
GBE Machtype
Mode
Run Level
Current Package
Last Change Delta (secs)
Switch State
<%
' Get the number of release configurations for this RTAG_ID, and iterate through them
query_string = " select * from release_config rc, gbe_machtype gm, build_machine_config bm"&_
" where rc.rtag_id = "& parRtagId &_
" and gm.gbe_id = rc.gbe_id"&_
" and rc.daemon_hostname = bm.machine_hostname(+)" &_
" order by rc.daemon_hostname,rc.rcon_id"
Set rsQry = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
Do While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
rcon_id = rsQry("rcon_id")
Dim pkgName
Dim currentRunLevel
Dim daemonState
Dim delta
' For this release configuration, get its entry from the run_level table. This table may not
' have an entry so we must handle that outcome too.
query_string = " select rl.pause, rl.current_run_level, rl.current_pkg_id_being_built, "&_
" TRUNC (86400*(SYSDATE - rl.KEEP_ALIVE)) as delta" &_
" from run_level rl"&_
" where rl.rcon_id = "& rcon_id
Set rsQry2 = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
currentRunLevel = -1
If (rsQry2.RecordCount > 0) Then
' Get the run level from the run_level table
currentRunLevel = rsQry2("current_run_level")
End If
daemonState = NULL
If (rsQry2.RecordCount > 0) Then
daemonState = rsQry2("pause")
End If
delta = NULL
If (rsQry2.RecordCount > 0) Then
delta = rsQry2("delta")
End If
' If we got an entry from the run_level table, try and use the pkg_id it contains, to obtain a
' package name from the packages table
Dim rsQry3
pkgName = NULL
If (rsQry2.RecordCount > 0) AND NOT IsNull(rsQry2("current_pkg_id_being_built")) Then
query_string = " select pkg_name from run_level rl, packages pk"&_
" where rl.rcon_id = "& rcon_id &_
" and rl.current_pkg_id_being_built = pk.pkg_id"
Set rsQry3 = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
If (rsQry3.RecordCount > 0) Then
pkgName = rsQry3("pkg_name")
End If
rsQry3.Close()
Set rsQry3 = nothing
End If
' --- Now render HTML for this release configuration ---
%>
<%
If (rsQry2.RecordCount > 0) AND NOT indefinitelyPaused Then
If objAccessControl.UserLogedIn Then
If IsNull(daemonState) Then
Call Action_Buttons ( "Daemon Pause" )
ElseIf daemonState = 1 Then
Call Action_Buttons ( "Daemon Resume" )
ElseIf daemonState = 2 Then
Call Action_Buttons ( "Daemon Start" )
Else
Call Action_Buttons ( "Daemon Resume" )
End If
Else
If IsNull(daemonState) Then
Call Action_Buttons ( "Daemon Pause Disabled" )
ElseIf daemonState = 1 Then
Call Action_Buttons ( "Daemon Resume Disabled" )
ElseIf daemonState = 2 Then
Call Action_Buttons ( "Daemon Start Disabled" )
Else
Call Action_Buttons ( "Daemon Resume Disabled" )
End If
End If
Else
%>Unavailable<%
End If
%>
<%
rsQry2.Close()
Set rsQry2 = nothing
rsQry.MoveNext
Loop
%>
<%
If (rsQry.RecordCount > 0) AND NOT indefinitelyPaused Then
If objAccessControl.UserLogedIn Then
Call Action_Buttons ( "Daemon Control All" )
Else
Call Action_Buttons ( "Daemon Control All Disabled" )
End If
Else
%> <%
End If
%>
<%
rsQry.Close()
Set rsQry = nothing
%>
<%=objPMod.ComposeHiddenTags()%>
DAEMON INSTRUCTIONS FOR THIS RELEASE
OPERATION
PACKAGE
VERSION
SCHEDULED TIME (Red = overdue) (Green = ready)
REPEAT
IN PROGRESS
<%
Dim PkgId
Dim PkgVersion
Dim UserName
Dim UserEmail
Dim bInProgress
Dim bIsOverdue
Dim bIsReady
Set rsQry = OraDatabase.DbCreateDynaset( "SELECT DAEMON_INSTRUCTIONS_ID,"&_
" OP_CODE,"&_
" RTAG_ID,"&_
" PV_ID,"&_
" SCHEDULED_DATETIME,"&_
" REPEAT_SECS,"&_
" ADDED_DATETIME,"&_
" USER_ID,"&_
" IN_PROGRESS,"&_
" (CASE WHEN SCHEDULED_DATETIME <= SYSDATE THEN 1 ELSE 0 END) AS READY,"&_
" (CASE WHEN (SCHEDULED_DATETIME + (1/144)) < SYSDATE THEN 1 ELSE 0 END) AS OVERDUE"&_
" FROM DAEMON_INSTRUCTIONS "&_
" WHERE RTAG_ID = "& parRtagId &_
" ORDER BY PV_ID, SCHEDULED_DATETIME, DAEMON_INSTRUCTIONS_ID", ORADYN_DEFAULT )
While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
If IsNull(rsQry("IN_PROGRESS")) OR rsQry("IN_PROGRESS") = "0" Then
bInProgress = False
Else
bInProgress = True
End If
' only flag as overdue if time threshold has been met but the daemon has not marked the instruction as being in progress.
If rsQry("OVERDUE") AND NOT bInProgress Then
bIsOverdue = True
Else
bIsOverdue = False
End If
If rsQry("READY") Then
bIsReady = True
Else
bIsReady = False
End If
' Get as much info about the package as we can
PkgId = 0
PkgName = "N/A"
PkgVersion = "N/A"
If (NOT IsNull(rsQry("PV_ID"))) AND (rsQry("PV_ID") <> "") Then
Call Get_Pkg_Short_Info(rsQry("PV_ID"), PkgId, PkgName, PkgVersion, NULL, NULL, NULL)
End If
%>