Rev 153 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'====================================================='| |'| ADMIN Page |'| Daemon Instructions |'| |'=====================================================%><%Option explicit' Good idea to set when using redirectResponse.Expires = 0 ' always load the page, dont store%><!--#include file="common/conf.asp"--><!--#include file="common/globals.asp"--><!--#include file="common/formating.asp"--><!--#include file="common/qstr.asp"--><!--#include file="common/common_subs.asp"--><!--#include file="sec/Crypt.asp"--><!--#include file="common/_form_window_common.asp"--><!--#include file="_action_buttons.asp"--><!--#include file="class/classActionButtonControl.asp"--><!--#include file="common/daemon_instructions.asp"--><%'------------ ACCESS CONTROL ------------------%><!--#include file="_access_control_general.asp"--><!--#include file="_access_control_login.asp"--><%'------------ Variable Definition -------------Dim objBtnControlDim parSortOrder'------------ Constants Declaration -----------'------------ Variable Init -------------------Set objBtnControl = New ActionButtonControlparSortOrder = Request("sort")If IsNull(parSortOrder) OR parSortOrder = "" ThenparSortOrder = "0"End If'----------------------------------------------%><%'--------------------------------------------------------------------------------------------' Cleans up the daemon instructions table to remove old data that might have become stranded' due to crashed daemons or failing build machines.'--------------------------------------------------------------------------------------------Sub CleanupOldData()On Error Resume NextobjEH.TryORA ( OraSession )OraDatabase.ExecuteSQL _"BEGIN PK_BUILDAPI.cleanup_stranded_daemon_insts; END;"objEH.CatchORA ( OraSession )End Sub%><%' Clean up old dataCleanupOldData' Page Access Condition%><script language="JavaScript" type="text/javascript"><!--// This function is designed to be called when a user resets the in-progress value from YES back to NOfunction reset_in_progress(instId){var proceed = false;var s;s = '_ResetDaemonInstruction.asp';s += '?inst_id=' + instId;proceed = confirm('Are you sure you want to reset this instructions in-progress flag?\n\n' +'You should ensure that the daemons are not operating upon this instruction first.\n\n' +'Check the scheduled date/time. Does it appear so far in the past that it is unlikely\n' +'a daemon is still undertaking the work for the instruction?\n\n' +'Press OK to reset, otherwise press CANCEL\n\n' );if (proceed == true) {document.location = s;}}//--></script><html><head><title>Daemon Instructions Administration</title><meta HTTP-EQUIV="Pragma" CONTENT="no-cache"><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link rel="stylesheet" href="images/release_manager_style.css" type="text/css"><link rel="stylesheet" href="images/navigation.css" type="text/css"><script language="JavaScript" src="images/common.js"></script><!-- DROPDOWN MENUS --><!--#include file="_menu_def.asp"--><script language="JavaScript1.2" src="images/popup_menu.js"></script></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" ><!-- MENU LAYERS --------------------------------------><div id="popmenu" class="menuskin" onMouseover="clearhidemenu();highlightmenu(event,'on')" onMouseout="highlightmenu(event,'off');dynamichide(event)"></div><!-- TIPS LAYERS --------------------------------------><div id="formTipsLayer" style="position: absolute; z-index: 1000; visibility: hidden; left:0; top: 0; width: 10"> </div><!-- HEADER --><!--#include file="_header.asp"--><%'-- FROM START ---------------------------------------------------------------------------------------------------------objFormComponent.FormName = "DAEMON_INSTRUCTIONS"objFormComponent.Action = ScriptNameobjFormComponent.OnSubmit = "ShowProgress();"Call objFormComponent.FormStart()%><table width="100%" border="0" cellspacing="3" cellpadding="0" ><div align="left" class=" body_col"><br>Current List of DAEMON INSTRUCTIONS</div><tr></tr><tr><td></td><!-- DAEMON INSTRUCTION DETAILS +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --><td align="left" nowrap background="images/bg_table_col.gif" class="body_col"><%If parSortOrder = "1" Then%><a href='admin_daemon_instructions.asp?sort=1a'><%ElseIf parSortOrder = "1a" Then%><a href='admin_daemon_instructions.asp?sort=1b'><%ElseIf parSortOrder = "1b" Then%><a href='admin_daemon_instructions.asp?sort=1c'><%Else%><a href='admin_daemon_instructions.asp?sort=1'><%End If%>OPERATION</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col"><%If parSortOrder = "2" Then%><a href='admin_daemon_instructions.asp?sort=2a'><%ElseIf parSortOrder = "2a" Then%><a href='admin_daemon_instructions.asp?sort=2b'><%Else%><a href='admin_daemon_instructions.asp?sort=2'><%End If%>PROJECT</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col"><%If parSortOrder = "3" Then%><a href='admin_daemon_instructions.asp?sort=3a'><%Else%><a href='admin_daemon_instructions.asp?sort=3'><%End If%>RELEASE</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col">MODE</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col"><a href='admin_daemon_instructions.asp?sort=4'>PACKAGE</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col">VERSION</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col"><a href='admin_daemon_instructions.asp?sort=0'>SCHEDULED TIME<br>(<SPAN style=color:Red>Red</SPAN> = overdue)<br>(<SPAN style=color:Green>Green</SPAN> = ready)</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col">REPEAT</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col"><a href='admin_daemon_instructions.asp?sort=5'>ADDED BY</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col">LAST<br>UPDATED</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col"><a href='admin_daemon_instructions.asp?sort=6'>IN<br>PROGRESS</td><td align="left" nowrap background="images/bg_table_col.gif" class="body_col">EDIT/DELETE</td></tr><tr><td colspan="13" background="images/bg_table_border.gif"><img src="images/spacer.gif" width="1" height="1"></td></tr><%' Load some action buttonsCall objBtnControl.LoadActionButtons ( Array("btnEditDaemonInst", "btnDeleteDaemonInst"), OraDatabase )objBtnControl.ButtonSpacer = 1Dim rsQryDim bInProgressDim bIsReadyDim bIsOverdueDim daemonInstId ' This variable is needed to support the action buttons to Edit/DeleteDim bResetInProgressEnabledDim sortClauseDim sortText' determine if user can reset the in-progress state of a daemon instructionbResetInProgressEnabled = UserAllowedToResetInProgress()' query the daemon_instructions table and also create an indication of an overdue instruction,' which is defined as being one that was scheduled for actionSelect Case (parSortOrder)Case "1"sortClause = " ORDER BY op_code, scheduled_datetime"sortText = "Data sorted by Operation, Scheduled time"Case "1a"sortClause = " ORDER BY op_code, proj_name, scheduled_datetime"sortText = "Data sorted by Operation, Project, Scheduled time"Case "1b"sortClause = " ORDER BY op_code, proj_name, rtag_name, scheduled_datetime"sortText = "Data sorted by Operation, Project, Release, Scheduled time"Case "1c"sortClause = " ORDER BY op_code, proj_name, rtag_name, pkg_name, scheduled_datetime"sortText = "Data sorted by Operation, Project, Release, Package, Scheduled time"Case "2"sortClause = " ORDER BY proj_name, scheduled_datetime"sortText = "Data sorted by Project, Scheduled time"Case "2a"sortClause = " ORDER BY proj_name, rtag_name, scheduled_datetime"sortText = "Data sorted by Project, Release, Scheduled time"Case "2b"sortClause = " ORDER BY proj_name, rtag_name, pkg_name, scheduled_datetime"sortText = "Data sorted by Project, Release, Package, Scheduled time"Case "3"sortClause = " ORDER BY rtag_name, scheduled_datetime"sortText = "Data sorted by Release, Scheduled time"Case "3a"sortClause = " ORDER BY rtag_name, pkg_name, scheduled_datetime"sortText = "Data sorted by Release, Package, Scheduled time"Case "4"sortClause = " ORDER BY pkg_name, scheduled_datetime"sortText = "Data sorted by Package, Scheduled time"Case "5"sortClause = " ORDER BY full_name, scheduled_datetime"sortText = "Data sorted by Added By, Scheduled time"Case "6"sortClause = " ORDER BY in_progress, scheduled_datetime"sortText = "Data sorted by Progress State, Scheduled time"Case ElsesortClause = " ORDER BY scheduled_datetime, proj_name, rtag_name, pkg_name"sortText = "Data sorted by Scheduled time"End SelectSet rsQry = OraDatabase.DbCreateDynaset("SELECT DAEMON_INSTRUCTIONS_ID,"&_" proj_id,"&_" proj_name,"&_" official,"&_" rtag_id,"&_" rtag_name,"&_" OP_CODE,"&_" pkg_id,"&_" (CASE WHEN NVL2(pv_id,pv_id,0) = 0 THEN 'N/A' ELSE pkg_name END) AS pkg_name,"&_" (CASE WHEN NVL2(pv_id,pv_id,0) = 0 THEN 'N/A' ELSE pkg_version END) AS pkg_version,"&_" 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,"&_" full_name,"&_" user_email"&_" FROM"&_" daemon_instructions"&_" LEFT JOIN package_versions USING (pv_id)"&_" LEFT JOIN release_tags USING (rtag_id)"&_" LEFT JOIN projects USING (proj_id)"&_" LEFT JOIN packages USING (pkg_id)"&_" LEFT JOIN users USING (user_id)"&_sortClause, ORADYN_DEFAULT )While (NOT rsQry.BOF) AND (NOT rsQry.EOF)daemonInstId = rsQry("DAEMON_INSTRUCTIONS_ID")If IsNull(rsQry("IN_PROGRESS")) OR rsQry("IN_PROGRESS") = "0" ThenbInProgress = FalseElsebInProgress = TrueEnd 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 ThenbIsOverdue = TrueElsebIsOverdue = FalseEnd IfIf rsQry("READY") ThenbIsReady = TrueElsebIsReady = FalseEnd If%><tr><input type="hidden" name="DAEMON_INSTRUCTIONS_ID_" & daemonInstId value=daemonInstId><td></td><td align="left" valign="top" class="body_txt"><%=DaemonInstructionOperationName(rsQry("OP_CODE"))%></td><td align="left" valign="top" class="body_txt"><%If rsQry("proj_id") <> "" Then%><a href='rtree.asp?proj_id=<%=rsQry("proj_id")%>'><%=rsQry("proj_name")%><%End If%></td><td align="left" valign="top" class="body_txt"><%If rsQry("rtag_name") <> "" Then%><a href='dependencies.asp?rtag_id=<%=rsQry("RTAG_ID")%>'><%=rsQry("rtag_name")%><%End If%></td><td align="left" valign="top" class="body_txt"><%=Get_Official(rsQry("official"))%></td><td align="left" valign="top" class="body_txt"><%If (NOT IsNull(rsQry("PV_ID"))) AND (rsQry("PV_ID") <> "") Then%><a href='fixed_issues.asp?rtag_id=<%=rsQry("RTAG_ID")%>&pv_id=<%=rsQry("PV_ID")%>'><%=rsQry("pkg_name")%><%Else%><%=rsQry("pkg_name")%><%End If%></td><td align="left" valign="top" class="body_txt"><%=rsQry("pkg_version")%></td><td align="left" valign="top" class="body_txt" <%If bIsOverdue Then%>style=color:Red<%Elseif bIsReady Then%>style=color:Green<%End If%>><%=EuroDateTime(rsQry("SCHEDULED_DATETIME"))%></td><td align="left" valign="top" class="body_txt"><%=DaemonInstructionRepeatString(rsQry("OP_CODE"), rsQry("REPEAT_SECS"))%></td><td align="left" valign="top" class="body_txt"><%If rsQry("full_name") <> "" AND rsQry("user_email") <> "" Then%><a href='mailto:<%=rsQry("user_email")%>' title='<%=rsQry("user_email")%>' class="txt_linked"><%=rsQry("full_name")%></a><%End If%></td><td align="left" valign="top" class="body_txt"><%=EuroDateTime(rsQry("ADDED_DATETIME"))%></td><td align="left" valign="top" class="body_txt"><%If bInProgress Then%><%If bResetInProgressEnabled Then%><img src="images/i_reset.gif" onclick="reset_in_progress(<%=daemonInstId%>);"></img><%End If%>YES<%Else%>NO<%End If%></td><td align="left" valign="top" class="body_txt"><%If UserCanAddOrEditThisDaemonInst(rsQry("proj_id"), rsQry("official"), rsQry("OP_CODE")) Then%><%Call objBtnControl.Render ( Array("btnEditDaemonInst", "btnDeleteDaemonInst"), objAccessControl )%><%Else%>No Edit Permission<%End If%></td></tr><%rsQry.MoveNext()%><tr><td colspan="13" background="images/bg_table_border.gif"><img src="images/spacer.gif" width="1" height="1"></td></tr><%WendrsQry.Close()Set rsQry = nothing%></table><table width="50%" border="0" cellspacing="3" cellpadding="0" ><tr><td class="form_iname"><%=sortText%></td></tr></table><table width="50%" border="0" cellspacing="3" cellpadding="0" ><tr><td class="form_iname"> </td><td class="val_err"><a href=""><%Call Action_Buttons ( "Add Daemon Instruction" )%> </a><td> </td></tr></table><table width="100%" border="0" cellspacing="3" cellpadding="0" ><tr><td>NOTE:</td></tr><tr><td valign="top" class="help_txt">1)</td><td valign="top" class="help_txt">Instructions become overdue when they are more than 10 minutes old and are not in-progress</td></tr><tr><td valign="top" class="help_txt">2)</td><td valign="top" class="help_txt">Instructions that take a long time to act upon, may cause other instructions for the same release to become overdue. This is not a real problem.</td></tr><tr><td valign="top" class="help_txt">3)</td><td valign="top" class="help_txt">Instructions may become stranded in the "in-progress" state if build daemons crash, or a problem occurs on a build machine.Automatic deletion of the instruction will eventually occur (see next note). Contact a release manager administrator to correct this problem before automatic deletion.</td></tr><tr><td valign="top" class="help_txt">4)</td><td valign="top" class="help_txt">Instructions with scheduled times 5 days or older will be deleted automatically.</td></tr><tr><td valign="top" class="help_txt">5)</td><td valign="top" class="help_txt">Add/Edit/Delete Permissions will vary depending upon Operation, Release Mode, and User Permissions.</td></tr></table><%=objPMod.ComposeHiddenTags()%><input type="hidden" name="action" value="true"><%Call objFormComponent.FormEnd()'-- FROM END ----------------------------------------------------------------------------------------------------------------%></body></html><!-- FOOTER --><!--#include file="_footer.asp"--><%Call Destroy_All_Objects%>