Subversion Repositories DevTools

Rev

Rev 6698 | 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
'-----------------------------------------------------------------------------------------------------------------
6924 dpurdie 34
'   Queue up an action to be performed by a task running on the pkg_archive server
35
'   Decouples the Database from the filserver
36
'
37
Private Sub trigger_action(rtag_id, pv_id, sChange)
38
 
39
'    OraDatabase.Parameters.Add "RTAG_ID",  rtag_id,    ORAPARM_INPUT, ORATYPE_NUMBER
40
'    OraDatabase.Parameters.Add "PV_ID",    pv_id,      ORAPARM_INPUT, ORATYPE_NUMBER
41
'    OraDatabase.Parameters.Add "MODE",     sChange,    ORAPARM_INPUT, ORATYPE_VARCHAR2
42
'    OraDatabase.Parameters.Add "USER_ID",  objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER
43
'
44
'
45
'    objEH.ErrorRedirect = FALSE
46
'    objEH.TryORA ( OraSession )
47
'    On Error Resume Next
48
'
49
'    OraDatabase.ExecuteSQL "BEGIN PK_TRIGGERS.log_action( :RTAG_ID, :PV_ID, :MODE, :USER_ID, null);END;"
50
'
51
'    objEH.CatchORA ( OraSession )
52
'
53
'    OraDatabase.Parameters.Remove "RTAG_ID"
54
'    OraDatabase.Parameters.Remove "PV_ID"
55
'    OraDatabase.Parameters.Remove "MODE"
56
'    OraDatabase.Parameters.Remove "USER_ID"
57
'
58
'    If objEH.LastOraFailed Then
59
'       Report_Event enumEVENT_ERROR, "trigger_action", objEH.MessageSummary, objEH.MessageDetails
60
'    End If
61
 
62
End Sub
63
 
64
'-----------------------------------------------------------------------------------------------------------------
165 brianf 65
' Retrieves package infomation for the specified package version
66
' This information is required for the make_release_changed script
67
Public Sub Get_Package_Info (artag_id,apv_id)
167 brianf 68
   Dim ssql, rsTemp
5168 dpurdie 69
   On Error Resume Next
70
   m_data_collected = false
165 brianf 71
 
72
   ' Get package information   
73
   ssql = _
5251 dpurdie 74
   " SELECT pv.pkg_id,pk.pkg_name,pv.pkg_version,rt.proj_id,pv.dlocked"&_
165 brianf 75
   " FROM package_versions pv, packages pk, release_tags rt"&_
76
   " WHERE" &_
77
   "     pv.pv_id = " & apv_id &_
78
   " AND pv.pkg_id = pk.pkg_id" &_
79
   " AND rt.rtag_id = " & artag_id
80
 
81
   Set rsTemp = OraDatabase.CreateDynaset( ssql, cint(0))
5168 dpurdie 82
   If Err.Number <> 0 Then
83
      last_resultCode = Err.Number
5170 dpurdie 84
      last_errorMsg = Err.Description & ":" & ssql
5168 dpurdie 85
      Exit Sub
86
   End If
165 brianf 87
 
88
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
89
      m_pkg_name = rsTemp("pkg_name")
90
      m_pkg_version = rsTemp("pkg_version")
91
      m_pkg_id = rsTemp("pkg_id")
92
      m_proj_id = rsTemp("proj_id")
5251 dpurdie 93
      m_dlocked = rsTemp("dlocked") 
5168 dpurdie 94
      m_data_collected = true
165 brianf 95
   Else
5168 dpurdie 96
      last_resultCode = 8
97
      last_errorMsg = "Error getting package information.  PV_ID:" & APV_ID & " not found in. RTAG_ID:" & artag_id
98
      Err.Raise 8, "release_changed.asp", last_errorMsg
99
      'Call RaiseMsg ( enum_MSG_ERROR, Err.description )
165 brianf 100
   End If
101
   rsTemp.Close
102
   Set rsTemp = Nothing
103
End Sub
104
 
105
'-----------------------------------------------------------------------------------------------------------------
5172 dpurdie 106
' Perform the Run_ReleaseChanged function on a list of packages
107
'
108
'   Args:   artag_id    - Release Identifier
109
'           apv_id_list - Package Identifiers. A comma separated list of pv_id's
110
'           amode_id    - Mode of indication. One of enumRELEASE_CHANGE_MODE_*
111
'
165 brianf 112
Sub Run_ReleaseChanged_List(artag_id,apv_id_list,amode_id)
113
  Dim pv_id, idArr
114
 
115
  idArr = Split(apv_id_list,",")
116
  For Each pv_id in idArr
167 brianf 117
    If IsReleased(artag_id,pv_id) Then
118
      Call Run_ReleaseChanged(artag_id,pv_id,amode_id,true)
119
    End If
165 brianf 120
  Next
121
End Sub
122
 
123
'-----------------------------------------------------------------------------------------------------------------
5168 dpurdie 124
'   Run a job on the package server to indicate that a package has been
125
'   released. The primary purpose of this is to trigger a BLAT package transfer
126
'
127
'   Perhaps it could be done via the RM Database
128
'   ie: Have a table of blat requests. Then we have no need to perform this slow
129
'       operation.
130
'
131
'   Uses ssh to communicate with the archive server and run the unix script, make_release_changed
132
'
133
'   Args:   artag_id    - Release Identifier
134
'           apv_id      - Package Identifier
135
'           amode_id    - Mode of indication. One of enumRELEASE_CHANGE_MODE_*
5170 dpurdie 136
'           aget_info   - Boolean: true if we need to populate the global variables with pkg info
5168 dpurdie 137
'
165 brianf 138
Sub Run_ReleaseChanged(artag_id,apv_id,amode_id,aget_info)
5293 dpurdie 139
    Dim pArchive_Path, sudoCmd, rv
165 brianf 140
 
5168 dpurdie 141
    pArchive_Path = "dpkg_archive"
142
    last_resultCode = -1
165 brianf 143
 
5168 dpurdie 144
    if aget_info then
145
        Call Get_Package_Info (artag_id,apv_id)
146
        If Err.Number <> 0 Then
5170 dpurdie 147
            Report_Event enumEVENT_ERROR, "make_release_changed", last_errorMsg, "Get_Package_Info:" & Err.Description
5168 dpurdie 148
            Exit Sub
149
        End If
150
    end if
165 brianf 151
 
5168 dpurdie 152
    ' Ensure that we have some data
153
    If not m_data_collected Then
154
        Report_Event enumEVENT_ERROR, "make_release_changed", "", "Package Info not present"
155
        Exit Sub
156
    End If
5097 dpurdie 157
 
5168 dpurdie 158
    ' Build up the command line to the target script
159
    ' Note: DoubleQuotes quotes will be escaped \"
160
    '       Double space will be process as <ret> for error reporting
161
    ' Chr(92) == \
162
    ' Chr(34) == "
163
    ' Chr(39) = '
5097 dpurdie 164
    sudoCmd = "~/sbin/make_release_changed" &_
5168 dpurdie 165
         "  archive=" & pArchive_Path &_
166
         "  pkg_name='" & Chr(34) & m_pkg_name & Chr(34) & "'" &_
167
         "  pkg_version='" & Chr(34) & m_pkg_version & Chr(34) & "'" &_
168
         "  rtag_id="& artag_id &_
169
         "  pkg_id=" & m_pkg_id &_
170
         "  pv_id="& apv_id &_
171
         "  proj_id="& m_proj_id &_
172
         "  mode_id="& amode_id
5097 dpurdie 173
 
5293 dpurdie 174
    ' Execute the command
5305 dpurdie 175
    rv = ExecuteRemoteCommand(sudoCmd)
5168 dpurdie 176
 
177
    '
178
    '   Report Errors
5169 dpurdie 179
    '   105 - Package not in archive. Not a real issue
180
    If rv = 0 OR rv = 105 Then
5168 dpurdie 181
        last_resultCode = 0
182
    Else
183
        last_resultCode = 1
184
        Report_Event enumEVENT_ERROR, "make_release_changed", Replace(sudoCmd,"  ", VBNewLine), "Remote command on pkg server reported:"  & rv
185
    End If
186
 
6924 dpurdie 187
    '
188
    '   New mechanism
189
    '   Create an action trigger
190
    '
191
    Dim sMode
192
    If amode_id =  enumRELEASE_CHANGE_MODE_PKG_ADDED Then
193
        sMode = "add"
194
    ElseIf amode_id =  enumRELEASE_CHANGE_MODE_PKG_REMOVED Then
195
        sMode = "delete"
196
    Else
197
        sMode = "new_version"
198
    End If
199
 
200
    Call trigger_action (artag_id, apv_id, sMode)
201
 
5097 dpurdie 202
End Sub
203
 
167 brianf 204
'-----------------------------------------------------------------------------------------------------------------------------
205
' Get the package are in which the package version resides (ie wip, planned, released)
206
Function Get_Pkg_Area (artagId, apvId)
207
   OraDatabase.Parameters.Add "RTAG_ID",        artagId,                 ORAPARM_INPUT, ORATYPE_NUMBER
208
   OraDatabase.Parameters.Add "PV_ID",          apvId,                   ORAPARM_INPUT, ORATYPE_NUMBER
209
   OraDatabase.Parameters.Add "PKG_AREA",       -1,                      ORAPARM_OUTPUT,ORATYPE_NUMBER
210
 
211
   OraDatabase.ExecuteSQL _
212
   "BEGIN "&_
213
   " :PKG_AREA := PK_ENVIRONMENT.GET_PACKAGE_AREA ( :PV_ID, :RTAG_ID ); "&_
214
   "END; "
215
   Get_Pkg_Area = OraDatabase.Parameters("PKG_AREA").Value
216
 
217
   OraDatabase.Parameters.Remove "RTAG_ID"
218
   OraDatabase.Parameters.Remove "PV_ID"
219
   OraDatabase.Parameters.Remove "PKG_AREA"
220
End Function
221
 
222
'-----------------------------------------------------------------------------------------------------------------------------
223
' Returns TRUE if the specified package is released
224
Function IsReleased (artagId, apvId)
225
  IsReleased = (CInt(Get_Pkg_Area(artagId, apvId)) = CInt(enum_PKG_AREA_RELEASED))
226
End Function
227
 
5172 dpurdie 228
'-----------------------------------------------------------------------------------------------------------------
229
'   Test Access to the package server
5293 dpurdie 230
'   Uses a dedicated script on the target
5172 dpurdie 231
'
232
Sub TestAccess(sMsg)
5293 dpurdie 233
    Dim sudoCmd, rv
5172 dpurdie 234
 
235
    last_resultCode = -1
236
 
5293 dpurdie 237
    ' Execute the command
238
    rv = ExecuteRemoteCommand("~/sbin/make_test_access " & sMsg)
239
 
240
    '
241
    '   Report Errors. Expecting a '55'
242
    '
243
    If  rv = 55 Then
244
        last_resultCode = 0
245
    Else
246
        last_resultCode = 1
247
        last_errorMsg = "Result Code: " & rv
248
    End If
249
 
250
End Sub
251
 
252
'-----------------------------------------------------------------------------------------------------------------
253
'   Make the Package Writable
254
'   Primary Purpose is to make a 'Patch' wriable in dpkg_archive
255
 
256
'   Uses a dedicated script on the target
257
'
258
Sub MakeWritable(artag_id, apv_id)
259
    Dim pArchive_Path, sudoCmd, rv
260
 
261
    pArchive_Path = "dpkg_archive"
262
    last_resultCode = -1
263
 
264
    Call Get_Package_Info (artag_id,apv_id)
265
    If Err.Number <> 0 Then
266
        Report_Event enumEVENT_ERROR, "make_writable", last_errorMsg, "Get_Package_Info:" & Err.Description
267
        Exit Sub
268
    End If
269
 
270
    ' Ensure that we have some data
271
    If not m_data_collected Then
272
        Report_Event enumEVENT_ERROR, "make_writable", "", "Package Info not present"
273
        Exit Sub
274
    End If
275
 
276
 
5172 dpurdie 277
    ' Build up the command line to the target script
278
    ' Note: DoubleQuotes quotes will be escaped \"
279
    '       Double space will be process as <ret> for error reporting
280
    ' Chr(92) == \
281
    ' Chr(34) == "
282
    ' Chr(39) = '
5293 dpurdie 283
    sudoCmd = "~/sbin/make_writable" &_
284
     "  " & pArchive_Path &_
285
     "  '" & m_pkg_name & "'" &_
286
     "  '" & m_pkg_version & "'"
5172 dpurdie 287
 
5293 dpurdie 288
    ' Execute the command
289
    rv = ExecuteRemoteCommand(sudoCmd)
290
 
291
    '
292
    '   Report Errors
293
    If rv = 0 Then
294
        last_resultCode = 0
295
    Else
296
        last_resultCode = 1
297
        Report_Event enumEVENT_ERROR, "make_writable", Replace(sudoCmd,"  ", VBNewLine), "Remote command on pkg server reported:"  & rv
298
    End If
299
 
6924 dpurdie 300
    '
301
    '   New mechanism
302
    Call trigger_action (artag_id, apv_id, "make_writable")
303
 
5293 dpurdie 304
End Sub
305
 
306
'-----------------------------------------------------------------------------------------------------------------
307
'   Make the Package UnWritable
308
'   Primary Purpose is to make a 'Patch' wriable in dpkg_archive
309
 
310
'   Uses a dedicated script on the target
311
'
312
Sub MakeReadOnly(artag_id, apv_id)
313
    Dim pArchive_Path, sudoCmd, rv
314
 
315
    pArchive_Path = "dpkg_archive"
316
    last_resultCode = -1
317
 
318
    Call Get_Package_Info (artag_id,apv_id)
319
    If Err.Number <> 0 Then
320
        Report_Event enumEVENT_ERROR, "make_readonly", last_errorMsg, "Get_Package_Info:" & Err.Description
321
        Exit Sub
322
    End If
323
 
324
    ' Ensure that we have some data
325
    If not m_data_collected Then
326
        Report_Event enumEVENT_ERROR, "make_readonly", "", "Package Info not present"
327
        Exit Sub
328
    End If
329
 
330
    ' Build up the command line to the target script
331
    ' Note: DoubleQuotes quotes will be escaped \"
332
    '       Double space will be process as <ret> for error reporting
333
    ' Chr(92) == \
334
    ' Chr(34) == "
335
    ' Chr(39) = '
336
    sudoCmd = "~/sbin/make_readonly" &_
337
     "  " & pArchive_Path &_
338
     "  '" & m_pkg_name & "'" &_
339
     "  '" & m_pkg_version & "'"
340
 
341
 
342
    ' Execute the command
343
    rv = ExecuteRemoteCommand(sudoCmd)
344
 
345
    '
346
    '   Report Errors
347
    If rv = 0 Then
348
        last_resultCode = 0
349
    Else
350
        last_resultCode = 1
351
        Report_Event enumEVENT_ERROR, "make_readonly", Replace(sudoCmd,"  ", VBNewLine), "Remote command on pkg server reported:"  & rv
352
    End If
353
 
6924 dpurdie 354
    '
355
    '   New mechanism
356
    Call trigger_action (artag_id, apv_id, "make_readonly")
357
 
5293 dpurdie 358
End Sub
359
 
360
'-----------------------------------------------------------------------------------------------------------------
361
'   Run a remote command in an ssh session
362
'
363
'   Performs command line processing
364
'   Note: DoubleQuotes quotes will be escaped \"
365
'   Chr(92) == \
366
'   Chr(34) == "
367
'   Chr(39) = '
368
'
369
Private Function ExecuteRemoteCommand(sudoCmd)
370
    Dim plinkPath, plinkCmd, wCmdLine
5172 dpurdie 371
    Dim pkgCredentails, uname, upasswd
5293 dpurdie 372
 
5375 dpurdie 373
    pkgCredentails = split(Application("PKGARCHIVE_CREDENTIALS"),":")
5172 dpurdie 374
    uname = pkgCredentails(0)
375
    upasswd = pkgCredentails(1)
376
 
6645 dpurdie 377
    plinkPath = Server.MapPath("scripts\bin\plink.exe")
5172 dpurdie 378
    plinkCmd =  "-ssh -batch " & uname & "@" & archive_server & " -pw " & upasswd & " ""sudo " & Replace(sudoCmd,Chr(34),Chr(92)&Chr(34)) & ";"""
379
    wCmdLine =  plinkPath & " " & plinkCmd
380
 
381
    Dim objWSH, rv
382
    Set objWSH = Server.CreateObject("WScript.Shell")
5293 dpurdie 383
    ExecuteRemoteCommand = objWSH.Run (wCmdLine, 0, TRUE)
5172 dpurdie 384
    Set objWSH = Nothing
385
 
5293 dpurdie 386
End Function
5172 dpurdie 387
 
165 brianf 388
End Class
389
%>