Subversion Repositories DevTools

Rev

Rev 5375 | Rev 6645 | Go to most recent revision | Details | Compare with Previous | 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)
5293 dpurdie 108
    Dim pArchive_Path, sudoCmd, rv
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
 
5293 dpurdie 149
    ' Execute the command
5305 dpurdie 150
    rv = ExecuteRemoteCommand(sudoCmd)
5168 dpurdie 151
 
152
    '
153
    '   Report Errors
5169 dpurdie 154
    '   105 - Package not in archive. Not a real issue
155
    If rv = 0 OR rv = 105 Then
5168 dpurdie 156
        last_resultCode = 0
157
    Else
158
        last_resultCode = 1
159
        Report_Event enumEVENT_ERROR, "make_release_changed", Replace(sudoCmd,"  ", VBNewLine), "Remote command on pkg server reported:"  & rv
160
    End If
161
 
5097 dpurdie 162
End Sub
163
 
167 brianf 164
'-----------------------------------------------------------------------------------------------------------------------------
165
' Get the package are in which the package version resides (ie wip, planned, released)
166
Function Get_Pkg_Area (artagId, apvId)
167
   OraDatabase.Parameters.Add "RTAG_ID",        artagId,                 ORAPARM_INPUT, ORATYPE_NUMBER
168
   OraDatabase.Parameters.Add "PV_ID",          apvId,                   ORAPARM_INPUT, ORATYPE_NUMBER
169
   OraDatabase.Parameters.Add "PKG_AREA",       -1,                      ORAPARM_OUTPUT,ORATYPE_NUMBER
170
 
171
   OraDatabase.ExecuteSQL _
172
   "BEGIN "&_
173
   " :PKG_AREA := PK_ENVIRONMENT.GET_PACKAGE_AREA ( :PV_ID, :RTAG_ID ); "&_
174
   "END; "
175
   Get_Pkg_Area = OraDatabase.Parameters("PKG_AREA").Value
176
 
177
   OraDatabase.Parameters.Remove "RTAG_ID"
178
   OraDatabase.Parameters.Remove "PV_ID"
179
   OraDatabase.Parameters.Remove "PKG_AREA"
180
End Function
181
 
182
'-----------------------------------------------------------------------------------------------------------------------------
183
' Returns TRUE if the specified package is released
184
Function IsReleased (artagId, apvId)
185
  IsReleased = (CInt(Get_Pkg_Area(artagId, apvId)) = CInt(enum_PKG_AREA_RELEASED))
186
End Function
187
 
5172 dpurdie 188
'-----------------------------------------------------------------------------------------------------------------
189
'   Test Access to the package server
5293 dpurdie 190
'   Uses a dedicated script on the target
5172 dpurdie 191
'
192
Sub TestAccess(sMsg)
5293 dpurdie 193
    Dim sudoCmd, rv
5172 dpurdie 194
 
195
    last_resultCode = -1
196
 
5293 dpurdie 197
    ' Execute the command
198
    rv = ExecuteRemoteCommand("~/sbin/make_test_access " & sMsg)
199
 
200
    '
201
    '   Report Errors. Expecting a '55'
202
    '
203
    If  rv = 55 Then
204
        last_resultCode = 0
205
    Else
206
        last_resultCode = 1
207
        last_errorMsg = "Result Code: " & rv
208
    End If
209
 
210
End Sub
211
 
212
'-----------------------------------------------------------------------------------------------------------------
213
'   Make the Package Writable
214
'   Primary Purpose is to make a 'Patch' wriable in dpkg_archive
215
 
216
'   Uses a dedicated script on the target
217
'
218
Sub MakeWritable(artag_id, apv_id)
219
    Dim pArchive_Path, sudoCmd, rv
220
 
221
    pArchive_Path = "dpkg_archive"
222
    last_resultCode = -1
223
 
224
    Call Get_Package_Info (artag_id,apv_id)
225
    If Err.Number <> 0 Then
226
        Report_Event enumEVENT_ERROR, "make_writable", last_errorMsg, "Get_Package_Info:" & Err.Description
227
        Exit Sub
228
    End If
229
 
230
    ' Ensure that we have some data
231
    If not m_data_collected Then
232
        Report_Event enumEVENT_ERROR, "make_writable", "", "Package Info not present"
233
        Exit Sub
234
    End If
235
 
236
 
5172 dpurdie 237
    ' Build up the command line to the target script
238
    ' Note: DoubleQuotes quotes will be escaped \"
239
    '       Double space will be process as <ret> for error reporting
240
    ' Chr(92) == \
241
    ' Chr(34) == "
242
    ' Chr(39) = '
5293 dpurdie 243
    sudoCmd = "~/sbin/make_writable" &_
244
     "  " & pArchive_Path &_
245
     "  '" & m_pkg_name & "'" &_
246
     "  '" & m_pkg_version & "'"
5172 dpurdie 247
 
5293 dpurdie 248
    ' Execute the command
249
    rv = ExecuteRemoteCommand(sudoCmd)
250
 
251
    '
252
    '   Report Errors
253
    If rv = 0 Then
254
        last_resultCode = 0
255
    Else
256
        last_resultCode = 1
257
        Report_Event enumEVENT_ERROR, "make_writable", Replace(sudoCmd,"  ", VBNewLine), "Remote command on pkg server reported:"  & rv
258
    End If
259
 
260
End Sub
261
 
262
'-----------------------------------------------------------------------------------------------------------------
263
'   Make the Package UnWritable
264
'   Primary Purpose is to make a 'Patch' wriable in dpkg_archive
265
 
266
'   Uses a dedicated script on the target
267
'
268
Sub MakeReadOnly(artag_id, apv_id)
269
    Dim pArchive_Path, sudoCmd, rv
270
 
271
    pArchive_Path = "dpkg_archive"
272
    last_resultCode = -1
273
 
274
    Call Get_Package_Info (artag_id,apv_id)
275
    If Err.Number <> 0 Then
276
        Report_Event enumEVENT_ERROR, "make_readonly", last_errorMsg, "Get_Package_Info:" & Err.Description
277
        Exit Sub
278
    End If
279
 
280
    ' Ensure that we have some data
281
    If not m_data_collected Then
282
        Report_Event enumEVENT_ERROR, "make_readonly", "", "Package Info not present"
283
        Exit Sub
284
    End If
285
 
286
    ' Build up the command line to the target script
287
    ' Note: DoubleQuotes quotes will be escaped \"
288
    '       Double space will be process as <ret> for error reporting
289
    ' Chr(92) == \
290
    ' Chr(34) == "
291
    ' Chr(39) = '
292
    sudoCmd = "~/sbin/make_readonly" &_
293
     "  " & pArchive_Path &_
294
     "  '" & m_pkg_name & "'" &_
295
     "  '" & m_pkg_version & "'"
296
 
297
 
298
    ' Execute the command
299
    rv = ExecuteRemoteCommand(sudoCmd)
300
 
301
    '
302
    '   Report Errors
303
    If rv = 0 Then
304
        last_resultCode = 0
305
    Else
306
        last_resultCode = 1
307
        Report_Event enumEVENT_ERROR, "make_readonly", Replace(sudoCmd,"  ", VBNewLine), "Remote command on pkg server reported:"  & rv
308
    End If
309
 
310
End Sub
311
 
312
'-----------------------------------------------------------------------------------------------------------------
313
'   Run a remote command in an ssh session
314
'
315
'   Performs command line processing
316
'   Note: DoubleQuotes quotes will be escaped \"
317
'   Chr(92) == \
318
'   Chr(34) == "
319
'   Chr(39) = '
320
'
321
Private Function ExecuteRemoteCommand(sudoCmd)
322
    Dim plinkPath, plinkCmd, wCmdLine
5172 dpurdie 323
    Dim pkgCredentails, uname, upasswd
5293 dpurdie 324
 
5375 dpurdie 325
    pkgCredentails = split(Application("PKGARCHIVE_CREDENTIALS"),":")
5172 dpurdie 326
    uname = pkgCredentails(0)
327
    upasswd = pkgCredentails(1)
328
 
329
    plinkPath = Request.ServerVariables("APPL_PHYSICAL_PATH") & "Release_Manager\scripts\bin\plink.exe"
330
    plinkCmd =  "-ssh -batch " & uname & "@" & archive_server & " -pw " & upasswd & " ""sudo " & Replace(sudoCmd,Chr(34),Chr(92)&Chr(34)) & ";"""
331
    wCmdLine =  plinkPath & " " & plinkCmd
332
 
333
    Dim objWSH, rv
334
    Set objWSH = Server.CreateObject("WScript.Shell")
5293 dpurdie 335
    ExecuteRemoteCommand = objWSH.Run (wCmdLine, 0, TRUE)
5172 dpurdie 336
    Set objWSH = Nothing
337
 
5293 dpurdie 338
End Function
5172 dpurdie 339
 
165 brianf 340
End Class
341
%>