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