Subversion Repositories DevTools

Rev

Rev 5009 | Rev 6269 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%
'=====================================================
'                daemon_status.asp
'=====================================================
%>
<%

Class DaemonStatus

private m_rsQryDS              '   m_rsQryDS is a record set containing daemon status details.  It is created by sub GetDaemonStatus or GetDaemonStatusForRelease
private m_bIndefinitelyPaused  '   m_bIndefinitelyPaused indicates if all deamons have been indefintely paused

'----------------------------------------------------------------------------------------------------------------------------------------------
' Constructor
Private Sub Class_Initialize()
  Set m_rsQryDS = Nothing
  m_bIndefinitelyPaused = False
End Sub

'----------------------------------------------------------------------------------------------------------------------------------------------
' Queries the daemons status for all releases of a specified project
' Parameters:
'   iProjId is the specified project
Sub GetDaemonStatus(iProjId)
  OraDatabase.Parameters.Add "PROJ_ID",  iProjId,  ORAPARM_INPUT, ORATYPE_NUMBER
  Set m_rsQryDS = OraDatabase.DbCreateDynaset( GetQuery ("ReleaseDaemonStatus.sql"), ORADYN_DEFAULT )
  OraDatabase.Parameters.Remove "PROJ_ID"
  
  'Check if build daemons are all stopped"
  Call GetIndefinitePause
End Sub

'----------------------------------------------------------------------------------------------------------------------------------------------
' Queries the daemons status for a specified release
' Parameters:
'   iRtagId is the specified release
Sub GetDaemonStatusForRelease(iRtagId)
  OraDatabase.Parameters.Add "RTAG_ID",  iRtagId,  ORAPARM_INPUT, ORATYPE_NUMBER
  Set m_rsQryDS = OraDatabase.DbCreateDynaset( GetQuery ("ReleaseDaemonStatusForRelease.sql"), ORADYN_DEFAULT )
  OraDatabase.Parameters.Remove "RTAG_ID"
  
  'Check if build daemons are all stopped"
  Call GetIndefinitePause
End Sub

'----------------------------------------------------------------------------------------------------------------------------------------------
' Queries to check if build daemons are all indefinitly paused
Private Sub GetIndefinitePause
  'Check if build daemons are all indefinitly paused
  Dim rsQryRL
  Set rsQryRL = OraDatabase.DbCreateDynaset(" select * from run_level_schedule rls where rls.indefinite_pause = 'P'", ORADYN_DEFAULT)
  m_bIndefinitelyPaused = rsQryRL.RecordCount > 0
  rsQryRL.Close
  Set rsQryRL = Nothing
End Sub

'----------------------------------------------------------------------------------------------------------------------------------------------
' Renders a bar chart to show the daemon status for a specified release
'   irtag_id: the specified release
'   isize: the status icon size in pixels
Sub RenderDaemonStatusForRelease(irtag_id,isize)
  Call GetDaemonStatusForRelease(irtag_id)
  Call RenderDaemonStatus(irtag_id,isize)
End Sub

'----------------------------------------------------------------------------------------------------------------------------------------------
' Gets the daemon summary for a specified release
' Parameters:
'   irtag_id: the specified release
' Assumes GetDaemonStatus or GetDaemonStatusForRelease has already been called
'
Function GetDaemonSummary(irtag_id)
  Dim iDmStsStatus

  Dim sDmStsToolTip
  Dim sDmStsSearch
  Dim iDmStsTotalUnavailable
  Dim iDmStsTotalTimedout
  Dim iDmStsTotalEnabled
  Dim iDmStsTotalDisabled
  Dim iDmStsTotalPaused
  Dim iDmStsTotalEngaged
  Dim iDmStsTotalRunning
  Dim iDmStsTotal

  ' Get status summary for showing in the bar chart popup tooltip
  ' Get daemons for specified release
  sDmStsSearch="rtag_id=" & irtag_id
  m_rsQryDS.FindFirst(sDmStsSearch)

  iDmStsTotal=0             ' total daemons
  iDmStsTotalRunning=0      ' total running
  iDmStsTotalTimedout=0     ' total timed out
  iDmStsTotalUnavailable=0  ' total unavailable
  iDmStsTotalEnabled=0      ' total enabled
  iDmStsTotalPaused=0       ' total paused
  iDmStsTotalDisabled=0     ' total disabled
  iDmStsTotalEngaged=0      ' total enagaged

  ' Loop through each daemon and get summary totals
  Do While Not m_rsQryDS.NoMatch
    iDmStsStatus=CInt(m_rsQryDS("status"))
    iDmStsTotal = iDmStsTotal + 1
    Select Case iDmStsStatus
      Case -1
        iDmStsTotalUnavailable= iDmStsTotalUnavailable + 1
      Case -2
        iDmStsTotalTimedout= iDmStsTotalTimedout + 1
        iDmStsTotalRunning=iDmStsTotalRunning + 1
      Case 0 ' if enabled
        iDmStsTotalEnabled= iDmStsTotalEnabled + 1
        iDmStsTotalRunning=iDmStsTotalRunning + 1
      Case 1 ' if paused
        iDmStsTotalPaused= iDmStsTotalPaused + 1
      Case 2 ' if disabled
        iDmStsTotalDisabled= iDmStsTotalDisabled + 1
      Case 3 ' if engaged
        iDmStsTotalEngaged= iDmStsTotalEngaged + 1
        iDmStsTotalRunning=iDmStsTotalRunning + 1
    End Select
    m_rsQryDS.FindNext(sDmStsSearch)
  Loop

  If iDmStsTotal = 0 Then
    sDmStsToolTip= "No daemons found." & "&#13;"
  ElseIf m_bIndefinitelyPaused Then
    sDmStsToolTip= "WARNING: Build Daemons are all stopped." & "&#13;" & "Please contact an administrator." & "&#13;"
  Else
    sDmStsToolTip = ""
    If iDmStsTotalRunning > 0 Then
      sDmStsToolTip = sDmStsToolTip & iDmStsTotalRunning & " daemon" & iif(iDmStsTotalRunning > 1,"s","") & " running." & "&#13;"
    End If
    If iDmStsTotalPaused > 0 Then
      sDmStsToolTip = sDmStsToolTip & iDmStsTotalPaused & " daemon" & iif(iDmStsTotalPaused > 1,"s","") & " paused." & "&#13;"
    End If
    If iDmStsTotalDisabled > 0 Then
      sDmStsToolTip = sDmStsToolTip & iDmStsTotalDisabled & " daemon" & iif(iDmStsTotalDisabled > 1,"s","") & " disabled." & "&#13;"
    End If
    If iDmStsTotalUnavailable > 0 Then
      sDmStsToolTip = sDmStsToolTip & iDmStsTotalUnavailable & " daemon" & iif(iDmStsTotalUnavailable > 1,"s","") & " unavailable." & "&#13;"  
    End If
    'If iDmStsTotalEngaged > 0 Then
    '  sDmStsToolTip = sDmStsToolTip & iDmStsTotalEngaged & " daemon" & iif(iDmStsTotalEngaged > 1,"s","") & " engaged in a build." & "&#13;"
    'End If
    'If iDmStsTotalTimedout > 0 Then
    '  sDmStsToolTip = sDmStsToolTip & iDmStsTotalTimedout & " daemon" & iif(iDmStsTotalTimedout > 1,"s","") & " timedout." & "&#13;"
    'End If
  End If

  sDmStsToolTip = sDmStsToolTip & "Click to view details."
  GetDaemonSummary = sDmStsToolTip  
End Function

'----------------------------------------------------------------------------------------------------------------------------------------------
' Renders a bar chart to show the daemon status for a specified release
' Parameters:
'   irtag_id: the specified release
'   isize: the status icon size in pixels
' Assumes GetDaemonStatus or GetDaemonStatusForRelease has already been called
'
Sub RenderDaemonStatus(irtag_id,isize)
  Dim iDmStsStatus
  Dim sDmStsImg
  Dim sDmStsToolTip
  Dim sDmStsSearch
  Dim iheight
  Dim iWidth
  Dim iWidthEnd
  Dim sDmStsAge
  Dim sDmStsAgeTip
  Dim bTestAge

  iHeight=isize
  ' the status icon default dimensions are height:48 and width:30
  ' ie. ratio of height to width is 16:10 
  ' the bar end icon default dimensions are height:48 and width:8
  ' ie. ratio of height to bar end is 16:3 
  iWidth = Round(iSize*10/16)
  iWidthEnd = Round(iSize*3/16)

  ' First, get status summary for showing in the bar chart popup tooltip
  sDmStsToolTip = GetDaemonSummary(irtag_id)

  sDmStsSearch="rtag_id=" & irtag_id
  m_rsQryDS.FindFirst(sDmStsSearch)

  ' Now, create deamon bar chart for the specified release
  Response.Write("<table border=0 cellpadding=0 cellspacing=0 width=""100%""" & " onClick=""location.href='build_status.asp?rtag_id=" & irtag_id & "';""" & " style=""cursor:hand"">")
  ' Add in tooltip generated above
  Response.Write("<tr valign=middle title=""" & sDmStsToolTip & """>")
  Response.Write("<td>")
  Response.Write("<table border=0 cellpadding=0 cellspacing=0>")
  Response.Write("<tr>")
  ' add left side of chart
  Response.Write("<td>")
  Response.Write("<img src=""icons/tdmsts_left.gif"" width=" & iWidthEnd & " height=" & iHeight & " border=0 vspace=0 hspace=0>")
  Response.Write("</td>")
  IF m_rsQryDS.NoMatch  Then
    Response.Write("<td>")
    Response.Write("<img src=""icons/tdmsts_notfound.gif"" width=" & iWidth & " height=" & iHeight & " border=0 vspace=0 hspace=0>")
    Response.Write("</td>")
  Else
    'add an icon for each daemon
    Do While Not m_rsQryDS.NoMatch
      bTestAge = true

      iDmStsStatus=CInt(m_rsQryDS("status"))
      If m_bIndefinitelyPaused Then
        sDmStsImg="icons/tdmsts_stopped.gif"
        sDmStsToolTip="Daemon indefinitley paused." & "&#13;"
        bTestAge = false
      ElseIf iDmStsStatus = -2 Then
        sDmStsImg="icons/tdmsts_timedout.gif"
        sDmStsToolTip="Daemon timed out." & "&#13;"
      ElseIf iDmStsStatus = -1 Then
        sDmStsImg="icons/tdmsts_unavailable.gif"
        sDmStsToolTip="Daemon unavailable." & "&#13;"
        bTestAge = false
      ElseIf iDmStsStatus = 0 Then
        sDmStsImg="icons/tdmsts_started.gif"
        sDmStsToolTip="Daemon running." & "&#13;"
      ElseIf iDmStsStatus = 1 Then
        sDmStsImg="icons/tdmsts_paused.gif"
        sDmStsToolTip="Daemon paused." & "&#13;"
      ElseIf iDmStsStatus = 2 Then
        sDmStsImg="icons/tdmsts_stopped.gif"
        sDmStsToolTip="Daemon stopped." & "&#13;"
        bTestAge = false
      ElseIf iDmStsStatus = 3 Then
        sDmStsImg="icons/tdmsts_engaged.gif"
        sDmStsToolTip="Daemon engaged in a build." & "&#13;"
      End If

      If sDmStsToolTip <> "" Then
        sDmStsToolTip = sDmStsToolTip & "Click to view details." 
      End If

      If bTestAge AND m_rsQryDS("daemon_mode") = "M" Then
        Dim nBuildAge
        Dim nLastBuildDays

        nBuildAge = NiceInt(m_rsQryDS("build_age"), 31)
        nLastBuildDays = NiceInt(m_rsQryDS("last_build_days"), 31)

        If nBuildAge > 0  Then
            If nLastBuildDays > nBuildAge Then
              sDmStsAge = "images/s_warning.gif"
              sDmStsAgeTip = "No Build in this release since " & m_rsQryDS("last_build")  & ". [" & m_rsQryDS("last_build_days") & " Days]"
            End If
        End If
      End If

      Response.Write("<td>")
      Response.Write("<img src=""" & sDmStsImg & """ width=" & iWidth & " height=" & iHeight & " border=0 vspace=0 hspace=0 " & iif(sDmStsToolTip <> "","title='" & sDmStsToolTip & "'","") & ">")
      Response.Write("</td>")
      m_rsQryDS.FindNext(sDmStsSearch)
    Loop

  End If
  ' add right side of chart
  Response.Write("<td>")
  Response.Write("<img src=""icons/tdmsts_right.gif"" width=" & iWidthEnd & " height=" & iHeight & " border=0 vspace=0 hspace=0>")
  Response.Write("</td>")
    If sDmStsAge <> "" Then
      Response.Write("<td>")
        Response.Write("<img src=""" & sDmStsAge & """ width=14 height=13 border=0 vspace=0 hspace=0 " & "title='" & sDmStsAgeTip & "'" & ">")
      Response.Write("</td>")
    End If

  Response.Write("</tr>")
  Response.Write("</table>")
  Response.Write("</td>")
  Response.Write("</tr>")
  Response.Write("</table>")
End Sub

'----------------------------------------------------------------------------------------------------------------------------------------------
' Destructor
Sub Class_Terminate
  m_rsQryDS.Close
  Set m_rsQryDS = Nothing
End Sub

End Class

%>