Subversion Repositories DevTools

Rev

Rev 6884 | Rev 7162 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5018 dpurdie 1
<%@LANGUAGE="VBSCRIPT"%>
2
<%
3
'=====================================================
5394 dpurdie 4
'       build_release_log_json.asp
5018 dpurdie 5
'=====================================================
6
%>
7
<%
8
Option explicit
9
' Essential to get UTF through all the hoops. ie: VÄSTTRAFIK (VTK)
10
Response.ContentType = "text/html"
11
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
12
Response.CodePage = 65001
13
Response.CharSet = "UTF-8"
14
%>
15
<!--#include file="common/conf.asp"-->
16
<!--#include file="common/globals.asp"-->
17
<!--#include file="common/qstr.asp"-->
18
<!--#include file="common/common_subs.asp"-->
19
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT> 
20
<%
21
'------------ Variable Definition -------------
22
Dim result : result = -1
6883 dpurdie 23
Dim joiner
5018 dpurdie 24
Dim SqlQry
25
Dim rsQry
6879 dpurdie 26
Dim parRtagId : parRtagId = Request.Form("rtag_id")
6883 dpurdie 27
Dim parReason : parReason = Request.Form("fReason")
28
Dim parResult : parResult = Request.Form("fResult")
5018 dpurdie 29
 
30
' Init the output JSON class
31
'   Operations can add data
32
'   Default data will be added at the end
33
Dim oJSON :Set oJSON = New aspJSON
34
Dim newitem
35
 
6884 dpurdie 36
' Filter Results and Reason
37
Dim sResult : sResult = ""
6886 dpurdie 38
If parResult <> "" Then
39
    joiner = ""
6884 dpurdie 40
    If InStr(parResult, "C") <> 0 Then sResult = sResult & "'C'" : joiner = ","
41
    If InStr(parResult, "E") <> 0 Then sResult = sResult & joiner & "'E'" : joiner = ","
42
    If InStr(parResult, "O") <> 0 Then sResult = sResult & joiner & "'B'," & "'S'"
43
    If sResult <> "" Then
44
        sResult = " AND bi.state in (" & sResult & ")"
45
    End If
46
End If
47
 
48
Dim sReason : sReason = ""
6886 dpurdie 49
If parReason <> "" Then
50
    joiner = ""
6884 dpurdie 51
    If InStr(parReason, "N") <> 0 Then sReason = sReason & joiner & "'N'" : joiner = ","
52
    If InStr(parReason, "R") <> 0 Then sReason = sReason & joiner & "'R'" : joiner = ","
53
    If InStr(parReason, "T") <> 0 Then sReason = sReason & joiner & "'T'" : joiner = ","
54
    If InStr(parReason, "P") <> 0 Then sReason = sReason & joiner & "'P'" : joiner = ","
55
    If sReason <> "" Then
56
        sReason = " AND bi.reason in (" & sReason & ")"
57
    End If
58
End If
59
 
60
 
5018 dpurdie 61
'
62
' Determine the size of the record set
63
'   Gives bad results when searching
64
Dim MaxCount : MaxCount = 0
65
 
6884 dpurdie 66
SqlQry = "select count(*) as count from BUILD_INSTANCES bi WHERE bi.state is not null " & sResult & sReason
5018 dpurdie 67
If parRtagId <> "" Then
6883 dpurdie 68
    SqlQry = SqlQry + " AND rtag_id = " &  parRtagId
5018 dpurdie 69
End If
70
 
71
On Error Resume Next
72
objEH.ErrorRedirect = FALSE
73
objEH.TryORA ( OraSession )
74
Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
75
objEH.CatchORA ( OraSession )
76
    If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then
77
        MaxCount = rsQry("COUNT")
78
    End If
79
rsQry.Close
80
Set rsQry = Nothing
81
 
82
' Basic Header
6579 dpurdie 83
'   recordsTotal = total records without any filtering/limits
84
'   recordsFiltered = filtered result count
5019 dpurdie 85
 
6879 dpurdie 86
oJSON.data("draw") = CLng(Request.Form("draw"))
6579 dpurdie 87
oJSON.data("recordsTotal") = CLng(MaxCount)
88
oJSON.data("recordsFiltered") = CLng(MaxCount)
5018 dpurdie 89
 
90
' Assist in debug
6879 dpurdie 91
oJSON.data("start") = CLng(Request.Form("start"))
92
oJSON.data("length") = CLng(Request.Form("length"))
6883 dpurdie 93
oJSON.data("iSql") = SqlQry
5018 dpurdie 94
 
6883 dpurdie 95
'Dim vName
96
'for each vName in Request.QueryString
97
'    oJSON.data("sReq_" & vName) = Request(vName)
98
'next
99
'For Each vName In Request.Form
100
'    oJSON.data("sFrm_" & vName) = Request(vName)
101
'Next
5018 dpurdie 102
 
103
' Extract selected range
104
result = 0
6538 dpurdie 105
dim firstRow,lastRow,noBuildTime
6879 dpurdie 106
firstRow = CLng(Request.Form("start"))
107
lastRow = firstRow + CLng(Request.Form("length"))
5018 dpurdie 108
 
109
'   Define array of colums to sort by
110
'       Must match user sort column request
111
Dim sortCols: sortCols = Array ( _
112
        "UPPER(pj.PROJ_NAME)",_
6538 dpurdie 113
        "UPPER(rt.RTAG_NAME),build_id",_
114
        "UPPER(p.PKG_NAME),build_id",_
115
        "UPPER(p.PKG_NAME),UPPER(pv.PKG_VERSION)",_
5018 dpurdie 116
        "bi.BUILD_ID",_
6538 dpurdie 117
        "UPPER(bi.reason),build_id",_
118
        "build_time,build_id,NOBUILDTIME",_
119
        "UPPER(bi.state),build_id",_
5102 dpurdie 120
        "build_id" )
5018 dpurdie 121
 
122
' Dim determine sorting options
123
'On Error goto 0
124
'Response.Write "<pre>"
125
Dim sortString
6879 dpurdie 126
If Request.Form("order[0][column]") <> "" Then
6579 dpurdie 127
 
6879 dpurdie 128
    Dim sortCol : sortCol = CInt(Request.Form("order[0][column]"))
129
    Dim sortDir : sortDir = " " & Request.Form("order[0][dir]")
6579 dpurdie 130
 
131
    Dim splitArg: splitArg = Split( sortCols(sortCol), "," )
6883 dpurdie 132
    Dim splitItem
6538 dpurdie 133
    joiner = ""
134
    for each splitItem in splitArg
135
        If splitItem = "NOBUILDTIME" Then
136
            noBuildTime = " AND PV.BUILD_TIME is not null"
137
        Else
6579 dpurdie 138
            sortString = sortString & joiner & splitItem & " " & sortDir
6538 dpurdie 139
            joiner = ","
140
        End If
141
    next
142
    sortString = " ORDER BY " & sortString
5018 dpurdie 143
End If
144
 
145
' Filter (search )
146
Dim searchString
6879 dpurdie 147
If Request.Form("search[value]") <> "" Then
148
    searchString = " AND upper(p.PKG_NAME) LIKE upper('%" & Request.Form("search[value]") & "%')" 
5018 dpurdie 149
End If
150
 
151
Dim whereString
152
If parRtagId <> "" Then
153
    whereString = " AND bi.rtag_id = " &  parRtagId
154
End If
155
 
156
Dim BasicSql
6538 dpurdie 157
BasicSql =  "SELECT bi.PV_ID, " &_
158
            "  bi.RTAG_ID, " &_
159
            "  pv.pkg_id, " &_
160
            "  pj.PROJ_NAME, " &_
161
            "  pj.PROJ_ID, " &_
162
            "  RTAG_NAME, " &_
163
            "  p.PKG_NAME, " &_
164
            "  NVL(pv.V_EXT, '') AS V_EXT, " &_
165
            "  TO_CHAR(bi.TIMESTAMP, 'Dy DD-Mon-YYYY HH24:MI:SS') AS TIMESTAMPTXT, " &_
166
            "  DECODE(bi.reason, 'N', 'New Version', 'R', 'Ripple', 'T', 'Test', 'P', 'Restored', 'Unknown') AS REASON, " &_
167
            "  DECODE(bi.state, 'B', 'Buiding', 'C', 'Complete', 'E', 'Error', 'S', 'SysErr', 'Unknown') AS STATE, " &_
168
            "  bi.build_id " &_
169
            "FROM BUILD_INSTANCES bi, " &_
170
            "  projects pj, " &_
171
            "  RELEASE_TAGS rt, " &_
172
            "  packages p, " &_
173
            "  PACKAGE_VERSIONS pv " &_
174
            "WHERE bi.PV_ID = pv.pv_id " &_
175
            "AND pv.PKG_ID  = p.PKG_ID " &_
176
            "AND bi.RTAG_ID = rt.RTAG_ID " &_
177
            "AND rt.proj_id = pj.proj_id " &_
6883 dpurdie 178
            sResult & sReason &_
6538 dpurdie 179
            noBuildTime &_
5018 dpurdie 180
            whereString &_
181
            searchString &_
182
            sortString
183
 
6538 dpurdie 184
SqlQry = "Select z.*," &_
185
            "(SELECT COUNT(*) FROM TEST_RUN tr WHERE tr.build_id = z.build_id ) AS test_count, " &_
186
            "(SELECT PKG_VERSION FROM PACKAGE_VERSIONS pv1 WHERE pv1.pv_id = z.pv_id ) AS PKG_VERSION, " &_
187
            "(SELECT PV_DESCRIPTION FROM PACKAGE_VERSIONS pv1 WHERE pv1.pv_id = z.pv_id ) AS PV_DESCRIPTION, " &_
188
            "(SELECT COMMENTS FROM PACKAGE_VERSIONS pv1 WHERE pv1.pv_id = z.pv_id ) AS COMMENTS, " &_
189
            "(SELECT BUILD_TIME FROM PACKAGE_VERSIONS pv1 WHERE pv1.pv_id = z.pv_id  ) AS BUILD_TIME" &_
190
            " from (select * from ( "&_
191
            "select /*+ FIRST_ROWS("& lastRow &") */ a.*, ROWNUM rnum from (" & BasicSql &_
5018 dpurdie 192
                ") a where ROWNUM <= " & lastRow &_
5102 dpurdie 193
            ") where rnum >= " & firstRow & ") z"
5018 dpurdie 194
 
195
' Assist in debug
196
oJSON.data("BasicSql") = BasicSql
5102 dpurdie 197
oJSON.data("SqlQry") = SqlQry
6883 dpurdie 198
oJSON.data("sqlFilter") = sResult & sReason
5018 dpurdie 199
 
200
' Perform the database query
6579 dpurdie 201
Set oJSON.data("data") = oJSON.Collection()
5018 dpurdie 202
On Error Resume Next
203
objEH.ErrorRedirect = FALSE
204
objEH.TryORA ( OraSession )
205
Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
206
objEH.CatchORA ( OraSession )
207
' Process each row and return required fields to the user
208
If objEH.Finally Then
209
   While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
6579 dpurdie 210
       Set newitem = oJSON.AddToCollection(oJSON.data("data"))
5018 dpurdie 211
 
212
       ' Attempt to speed up access tot he data
213
       '    Extract all fields for the row
214
       '    Access fields by index
215
       Dim fields
216
       Set fields = rsQry.Fields
6538 dpurdie 217
       Dim pv_id        : pv_id = fields(0)
218
       Dim rtag_id      : rtag_id = fields(1)
219
       Dim pkg_id       : pkg_id = fields(2)
5018 dpurdie 220
       Dim proj_name    : proj_name = fields(3)
221
       Dim proj_id      : proj_id = fields(4)
222
       Dim rtag_name    : rtag_name = fields(5)
223
       Dim pkg_name     : pkg_name = fields(6)
6538 dpurdie 224
       Dim v_ext        : v_ext = fields(7)
225
       Dim timestamp    : timestamp = fields(8)
226
       Dim reason       : reason = fields(9)
227
       Dim state        : state = fields(10)
228
       Dim buildId      : buildId = fields(11)
229
       Dim tcount       : tcount = fields(13)
230
       Dim pkg_version  : pkg_version = fields(14)
6883 dpurdie 231
       Dim description  : description = CleanUp(Server.HTMLEncode(fields(15)))
232
       Dim comments     : comments = CleanUp(Server.HTMLEncode(fields(16)))
6538 dpurdie 233
       Dim buildTime    : buildTime = Server.HTMLEncode(fields(17))
5018 dpurdie 234
 
235
       Set fields = nothing
236
 
6538 dpurdie 237
        If buildTime <= 0 Then buildTime = ""
238
        If tcount <= 0 Then tcount = ""
239
 
240
        newitem(0) = "<a href='rtree.asp?proj_id=" & proj_id & "'>" & proj_name &"</a>"
5394 dpurdie 241
        newitem(1) = "<a href='dependencies.asp?rtag_id=" & rtag_id & "'>" & rtag_name & "</a>"
6883 dpurdie 242
        newitem(2) = "<a href=view_by_version.asp?pkg_id=" & pkg_id & "&fpkgversion=*" & v_ext & " title='" & description & "'>" & pkg_name & "</a>"
243
        newitem(3) =  "<a href='dependencies.asp?pv_id=" & pv_id & "&rtag_id=" & rtag_id &"' title='" & comments & "'>" & pkg_version & "</a>"
5018 dpurdie 244
        newitem(4) = timestamp
245
        newitem(5) = reason
6538 dpurdie 246
        newitem(6) = buildTime
247
        newitem(7) = "<a href='unit_test_log.asp?rtag_id=" & rtag_id & "&pv_id=" & pv_id & "'>" & state & "</a>"
248
        newitem(8) = tcount
5018 dpurdie 249
 
250
       rsQry.MoveNext
251
   Wend
252
End IF
253
 
254
rsQry.Close
255
Set rsQry = Nothing
256
 
257
'
258
' SQL error detection and reporting
259
If objEH.LastOraFailed Then
260
    oJSON.data("error") = 1
261
 
262
    oJSON.data("emsgSummary") = objEH.MessageSummary
263
    oJSON.data("emsgDetails") = objEH.MessageDetails
264
    oJSON.data("SqlQry") = SqlQry
265
End If
266
 
267
'Return the object
268
Response.Write oJSON.JSONoutput()
5957 dpurdie 269
Set oJSON = Nothing
270
Call Destroy_All_Objects
6883 dpurdie 271
 
272
' Quick and ugly code to attempt to remove nasty characters from strings
273
' In particular some unicode characters that mess with the json decoder
274
Function CleanUp (input)
275
      Dim objRegExp, outputStr
276
      Set objRegExp = New Regexp
277
 
278
      objRegExp.IgnoreCase = True
279
      objRegExp.Global = True
280
      objRegExp.Pattern = "((?![\[\]\(\)\{\}\$-_?/""';:.,a-zA-Z0-9]).)+"
281
      outputStr = objRegExp.Replace(input, " ")
282
 
283
      CleanUp = outputStr
284
    End Function
5018 dpurdie 285
%>