Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
165 brianf 1
<%
2
'=====================================================
3
'                release_changed.asp
4
'=====================================================
5
%>
6
<%
7
' Release Change Mode
5097 dpurdie 8
Const enumRELEASE_CHANGE_MODE_PKG_ADDED = 1     'Package added to release
9
Const enumRELEASE_CHANGE_MODE_PKG_REMOVED = 2   'Package removed from release
10
Const enumRELEASE_CHANGE_MODE_PKG_RELEASED = 3  'Package released
165 brianf 11
 
12
 
13
Class ReleaseChanged
14
 
15
private m_pkg_name
16
private m_pkg_version
17
private m_pkg_id
18
private m_proj_id
5251 dpurdie 19
Private m_dlocked
5168 dpurdie 20
Private m_data_collected
165 brianf 21
 
5097 dpurdie 22
Public last_resultCode
5168 dpurdie 23
Public last_errorMsg
5097 dpurdie 24
 
165 brianf 25
'-----------------------------------------------------------------------------------------------------------------
5168 dpurdie 26
' Init class variables
27
Private Sub Class_Initialize()
28
    m_data_collected = false
29
    last_resultCode = -1
30
    last_errorMsg = ""
5097 dpurdie 31
End Sub
32
 
33
'-----------------------------------------------------------------------------------------------------------------
165 brianf 34
' Retrieves package infomation for the specified package version
35
' This information is required for the make_release_changed script
36
Public Sub Get_Package_Info (artag_id,apv_id)
167 brianf 37
   Dim ssql, rsTemp
5168 dpurdie 38
   On Error Resume Next
39
   m_data_collected = false
165 brianf 40
 
41
   ' Get package information   
42
   ssql = _
5251 dpurdie 43
   " SELECT pv.pkg_id,pk.pkg_name,pv.pkg_version,rt.proj_id,pv.dlocked"&_
165 brianf 44
   " FROM package_versions pv, packages pk, release_tags rt"&_
45
   " WHERE" &_
46
   "     pv.pv_id = " & apv_id &_
47
   " AND pv.pkg_id = pk.pkg_id" &_
48
   " AND rt.rtag_id = " & artag_id
49
 
50
   Set rsTemp = OraDatabase.CreateDynaset( ssql, cint(0))
5168 dpurdie 51
   If Err.Number <> 0 Then
52
      last_resultCode = Err.Number
5170 dpurdie 53
      last_errorMsg = Err.Description & ":" & ssql
5168 dpurdie 54
      Exit Sub
55
   End If
165 brianf 56
 
57
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
58
      m_pkg_name = rsTemp("pkg_name")
59
      m_pkg_version = rsTemp("pkg_version")
60
      m_pkg_id = rsTemp("pkg_id")
61
      m_proj_id = rsTemp("proj_id")
5251 dpurdie 62
      m_dlocked = rsTemp("dlocked") 
5168 dpurdie 63
      m_data_collected = true
165 brianf 64
   Else
5168 dpurdie 65
      last_resultCode = 8
66
      last_errorMsg = "Error getting package information.  PV_ID:" & APV_ID & " not found in. RTAG_ID:" & artag_id
67
      Err.Raise 8, "release_changed.asp", last_errorMsg
68
      'Call RaiseMsg ( enum_MSG_ERROR, Err.description )
165 brianf 69
   End If
70
   rsTemp.Close
71
   Set rsTemp = Nothing
72
End Sub
73
 
74
'-----------------------------------------------------------------------------------------------------------------
5172 dpurdie 75
' Perform the Run_ReleaseChanged function on a list of packages
76
'
77
'   Args:   artag_id    - Release Identifier
78
'           apv_id_list - Package Identifiers. A comma separated list of pv_id's
79
'           amode_id    - Mode of indication. One of enumRELEASE_CHANGE_MODE_*
80
'
165 brianf 81
Sub Run_ReleaseChanged_List(artag_id,apv_id_list,amode_id)
82
  Dim pv_id, idArr
83
 
84
  idArr = Split(apv_id_list,",")
85
  For Each pv_id in idArr
167 brianf 86
    If IsReleased(artag_id,pv_id) Then
87
      Call Run_ReleaseChanged(artag_id,pv_id,amode_id,true)
88
    End If
165 brianf 89
  Next
90
End Sub
91
 
92
'-----------------------------------------------------------------------------------------------------------------
5168 dpurdie 93
'   Run a job on the package server to indicate that a package has been
94
'   released. The primary purpose of this is to trigger a BLAT package transfer
95
'
96
'   Perhaps it could be done via the RM Database
97
'   ie: Have a table of blat requests. Then we have no need to perform this slow
98
'       operation.
99
'
100
'   Uses ssh to communicate with the archive server and run the unix script, make_release_changed
101
'
102
'   Args:   artag_id    - Release Identifier
103
'           apv_id      - Package Identifier
104
'           amode_id    - Mode of indication. One of enumRELEASE_CHANGE_MODE_*
5170 dpurdie 105
'           aget_info   - Boolean: true if we need to populate the global variables with pkg info
5168 dpurdie 106
'
165 brianf 107
Sub Run_ReleaseChanged(artag_id,apv_id,amode_id,aget_info)
5168 dpurdie 108
    Dim pArchive_Path, sudoCmd, plinkPath, plinkCmd, wCmdLine
165 brianf 109
 
5168 dpurdie 110
    pArchive_Path = "dpkg_archive"
111
    last_resultCode = -1
165 brianf 112
 
5168 dpurdie 113
    if aget_info then
114
        Call Get_Package_Info (artag_id,apv_id)
115
        If Err.Number <> 0 Then
5170 dpurdie 116
            Report_Event enumEVENT_ERROR, "make_release_changed", last_errorMsg, "Get_Package_Info:" & Err.Description
5168 dpurdie 117
            Exit Sub
118
        End If
119
    end if
165 brianf 120
 
5168 dpurdie 121
    ' Ensure that we have some data
122
    If not m_data_collected Then
123
        Report_Event enumEVENT_ERROR, "make_release_changed", "", "Package Info not present"
124
        Exit Sub
125
    End If
5097 dpurdie 126
 
5251 dpurdie 127
    '   Don't run the release chnaged notification if the package has not been released
128
    '   Trying to prevent WIP packages being sent via blat
129
    If m_dlocked <> "Y" Then
130
        Exit Sub
131
    End If
132
 
5168 dpurdie 133
    ' Build up the command line to the target script
134
    ' Note: DoubleQuotes quotes will be escaped \"
135
    '       Double space will be process as <ret> for error reporting
136
    ' Chr(92) == \
137
    ' Chr(34) == "
138
    ' Chr(39) = '
5097 dpurdie 139
    sudoCmd = "~/sbin/make_release_changed" &_
5168 dpurdie 140
         "  archive=" & pArchive_Path &_
141
         "  pkg_name='" & Chr(34) & m_pkg_name & Chr(34) & "'" &_
142
         "  pkg_version='" & Chr(34) & m_pkg_version & Chr(34) & "'" &_
143
         "  rtag_id="& artag_id &_
144
         "  pkg_id=" & m_pkg_id &_
145
         "  pv_id="& apv_id &_
146
         "  proj_id="& m_proj_id &_
147
         "  mode_id="& amode_id
5097 dpurdie 148
 
5168 dpurdie 149
    Dim pkgCredentails, uname, upasswd
150
    pkgCredentails = split(PKGARCHIVE_CREDENTIALS,":")
151
    uname = pkgCredentails(0)
152
    upasswd = pkgCredentails(1)
153
 
5097 dpurdie 154
    plinkPath = Request.ServerVariables("APPL_PHYSICAL_PATH") & "Release_Manager\scripts\bin\plink.exe"
5168 dpurdie 155
    plinkCmd =  "-ssh -batch " & uname & "@" & archive_server & " -pw " & upasswd & " ""sudo " & Replace(sudoCmd,Chr(34),Chr(92)&Chr(34)) & ";"""
5097 dpurdie 156
    wCmdLine =  plinkPath & " " & plinkCmd
5168 dpurdie 157
 
158
    Dim objWSH, rv
5097 dpurdie 159
    Set objWSH = Server.CreateObject("WScript.Shell")
5168 dpurdie 160
    rv = objWSH.Run (wCmdLine, 0, TRUE)
5097 dpurdie 161
    Set objWSH = Nothing
162
 
5168 dpurdie 163
    '
164
    '   Report Errors
5169 dpurdie 165
    '   105 - Package not in archive. Not a real issue
166
    If rv = 0 OR rv = 105 Then
5168 dpurdie 167
        last_resultCode = 0
168
    Else
169
        last_resultCode = 1
170
        Report_Event enumEVENT_ERROR, "make_release_changed", Replace(sudoCmd,"  ", VBNewLine), "Remote command on pkg server reported:"  & rv
171
    End If
172
 
5097 dpurdie 173
End Sub
174
 
167 brianf 175
'-----------------------------------------------------------------------------------------------------------------------------
176
' Get the package are in which the package version resides (ie wip, planned, released)
177
Function Get_Pkg_Area (artagId, apvId)
178
   OraDatabase.Parameters.Add "RTAG_ID",        artagId,                 ORAPARM_INPUT, ORATYPE_NUMBER
179
   OraDatabase.Parameters.Add "PV_ID",          apvId,                   ORAPARM_INPUT, ORATYPE_NUMBER
180
   OraDatabase.Parameters.Add "PKG_AREA",       -1,                      ORAPARM_OUTPUT,ORATYPE_NUMBER
181
 
182
   OraDatabase.ExecuteSQL _
183
   "BEGIN "&_
184
   " :PKG_AREA := PK_ENVIRONMENT.GET_PACKAGE_AREA ( :PV_ID, :RTAG_ID ); "&_
185
   "END; "
186
   Get_Pkg_Area = OraDatabase.Parameters("PKG_AREA").Value
187
 
188
   OraDatabase.Parameters.Remove "RTAG_ID"
189
   OraDatabase.Parameters.Remove "PV_ID"
190
   OraDatabase.Parameters.Remove "PKG_AREA"
191
End Function
192
 
193
'-----------------------------------------------------------------------------------------------------------------------------
194
' Returns TRUE if the specified package is released
195
Function IsReleased (artagId, apvId)
196
  IsReleased = (CInt(Get_Pkg_Area(artagId, apvId)) = CInt(enum_PKG_AREA_RELEASED))
197
End Function
198
 
5172 dpurdie 199
'-----------------------------------------------------------------------------------------------------------------
200
'   Test Access to the package server
201
'   Uses a dedicated script onthe target
202
'
203
Sub TestAccess(sMsg)
204
    Dim sudoCmd, plinkPath, plinkCmd, wCmdLine
205
 
206
    last_resultCode = -1
207
 
208
    ' Build up the command line to the target script
209
    ' Note: DoubleQuotes quotes will be escaped \"
210
    '       Double space will be process as <ret> for error reporting
211
    ' Chr(92) == \
212
    ' Chr(34) == "
213
    ' Chr(39) = '
214
    sudoCmd = "~/sbin/make_test_access " & sMsg
215
 
216
    Dim pkgCredentails, uname, upasswd
217
    pkgCredentails = split(PKGARCHIVE_CREDENTIALS,":")
218
    uname = pkgCredentails(0)
219
    upasswd = pkgCredentails(1)
220
 
221
    plinkPath = Request.ServerVariables("APPL_PHYSICAL_PATH") & "Release_Manager\scripts\bin\plink.exe"
222
    plinkCmd =  "-ssh -batch " & uname & "@" & archive_server & " -pw " & upasswd & " ""sudo " & Replace(sudoCmd,Chr(34),Chr(92)&Chr(34)) & ";"""
223
    wCmdLine =  plinkPath & " " & plinkCmd
224
 
225
    Dim objWSH, rv
226
    Set objWSH = Server.CreateObject("WScript.Shell")
227
    rv = objWSH.Run (wCmdLine, 0, TRUE)
228
    Set objWSH = Nothing
229
 
230
    '
231
    '   Report Errors. Expecting a '55'
232
    '
233
    If  rv = 55 Then
234
        last_resultCode = 0
235
    Else
236
        last_resultCode = 1
237
        last_errorMsg = "Result Code: " & rv
238
    End If
239
 
240
End Sub
241
 
242
 
165 brianf 243
End Class
244
%>