Subversion Repositories DevTools

Rev

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 redirect
Response.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 objBtnControl
Dim parSortOrder
'------------ Constants Declaration -----------
'------------ Variable Init -------------------
Set objBtnControl = New ActionButtonControl
parSortOrder = Request("sort")
If IsNull(parSortOrder) OR parSortOrder = "" Then
   parSortOrder = "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 Next
   objEH.TryORA ( OraSession )
   OraDatabase.ExecuteSQL _
   "BEGIN PK_BUILDAPI.cleanup_stranded_daemon_insts; END;"
   objEH.CatchORA ( OraSession )
End Sub


%>

<%
' Clean up old data
CleanupOldData

' 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 NO
function 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">&nbsp;</div>
      <!-- HEADER -->
      <!--#include file="_header.asp"-->

      <%
      '-- FROM START ---------------------------------------------------------------------------------------------------------
      objFormComponent.FormName = "DAEMON_INSTRUCTIONS"
      objFormComponent.Action = ScriptName
      objFormComponent.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 buttons
         Call objBtnControl.LoadActionButtons ( Array("btnEditDaemonInst", "btnDeleteDaemonInst"), OraDatabase )
         objBtnControl.ButtonSpacer = 1

         Dim rsQry
         Dim bInProgress
         Dim bIsReady
         Dim bIsOverdue
         Dim daemonInstId  ' This variable is needed to support the action buttons to Edit/Delete
         Dim bResetInProgressEnabled
         Dim sortClause
         Dim sortText

         ' determine if user can reset the in-progress state of a daemon instruction
         bResetInProgressEnabled = 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 action
         Select 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 Else
            sortClause = " ORDER BY scheduled_datetime, proj_name, rtag_name, pkg_name"
            sortText   = "Data sorted by Scheduled time"
         End Select

         Set 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" 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


            %>
            <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>
            <%
         Wend
         rsQry.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">&nbsp;</td>
            <td class="val_err"><a href=""><%Call Action_Buttons ( "Add Daemon Instruction" )%> </a>
            <td>&nbsp;</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
%>