Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6624 dpurdie 1
<%@LANGUAGE="VBSCRIPT"%>
2
<%
3
'=====================================================
4
'       Build System Status Enquiry
5
'       _json_buildStatus.asp
6
'       Designed to be called via AJAX and to return
7
'       JSON formatted data to dynamic page
8
'=====================================================
9
%>
10
<%
11
Option explicit
12
' Good idea to set when using redirect
13
Response.Expires = 0   ' always load the page, dont store
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
<!--#include file="common/formating.asp"-->
20
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/base64encode.vbs"></SCRIPT> 
21
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT> 
22
<%
23
'------------ Variable Definition -------------
24
Dim parOpr
25
Dim parPv_id
26
Dim result
27
Dim iJSON,jJSON, el, this, post, newitem
28
Dim allIssues
29
 
30
' Basic Parameters
31
parOpr = QStrPar("Opr")
32
parPv_id = QStrPar("pv_id")
33
result = -1
34
post = "None"
35
 
36
' Init the output JSON class
37
'   Operations can add data
38
'   Default data will be added at the end
39
Dim oJSON
40
Set oJSON = New aspJSON
41
 
42
'
43
'   getIssues - Get issues for the current PV_ID and create a hash
44
'
45
Sub getIssues
46
    Set allIssues = CreateObject ("Scripting.Dictionary")
47
    Dim rsTemp, sqlstr, key
48
    sqlstr = "SELECT iss_key FROM JIRA_ISSUES WHERE pv_id="& parPv_id
49
    Set rsTemp = OraDatabase.DbCreateDynaset( sqlstr, cint(0))
50
    While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
51
        key = rsTemp("iss_key")
52
       If NOT allIssues.Exists(key) Then
53
            allIssues.add key, 1
54
       End If
55
        rsTemp.MoveNext
56
    WEnd
57
    rsTemp.Close()
58
    Set rsTemp = nothing
59
End Sub
60
 
61
'
62
'   Determine the operation to be performed
63
'
64
If (parOpr = "getAllKeys") Then
65
 
66
    ' Examine the Jira subsystem and determine ALL available project keys
67
    ' Return an HTML string that is a <select></select> box
68
    ' This is designed to be inserted into an element
69
    '
70
    result = 0
71
 
72
    '
73
    Dim objXML, qry
74
    qry = "/rest/api/2/project"
75
 
76
    Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
77
    objXML.Open "GET", Application("JIRA_URL") & qry, false
78
    objXML.setRequestHeader "Authorization", "Basic " & Base64Encode(Application("JIRA_CREDENTIALS"))
79
    On Error Resume Next
80
    objXML.Send("")
81
    if Err.Number <> 0 then
82
        result = 1
83
        oJSON.data("emsgSummary") = Err.Description
84
        On Error Goto 0
85
    else
86
        On Error Goto 0
87
        If  objXML.status = 403 then
88
            result = 1
89
            oJSON.data("emsgSummary") = "Jira Server Access Denied"
90
 
91
        ElseIf  objXML.status <> 200 then
92
            result = 1
93
            oJSON.data("emsgSummary") = objXML.responseText
94
        Else
95
            Set jJSON = New aspJSON
96
            jJSON.loadJSON( objXML.responseText )
97
 
98
            oJSON.data("keyListCount") = jJSON.data.Count
99
 
100
            Dim  str
101
            str = "<select id='keyListSelect'>"
102
            For Each el In jJSON.data
103
                Set this = jJSON.data.item(el)
104
                str = str & "<option value='"&this.item("key")&"'>" &_
105
                            this.item("key") & ":" & this.item("name") &_
106
                      "</option>"
107
                Next
108
            str = str & "</select>"
109
        end if
110
    end if
111
    oJSON.data("keyList") = str
112
'
113
'   getIssues
114
ElseIf (parOpr = "getIssues") Then
115
    Dim project, projectList, issues, issueList, query, order, parCount, parStartAt
116
    getIssues()
117
    project = QStrPar("Project")
118
    issues = QStrPar("Issue")
119
    parStartAt = QStrPar("StartAt")
120
    parCount = QStrPar("Count")
121
 
122
    qry = "/rest/api/2/search"
123
    order = " ORDER BY key DESC"
124
 
125
    projectList = ""
126
    If project = "ALL" Then
127
        projectList = ""
128
    Else
129
        projectList = "project=" & project
130
    End If
131
 
132
     ' Convert comma or space seperated list into and 'IN' query
133
    issueList = ""
134
    Dim aList, entry, del
135
    If issues <> "ALL" AND issues <> "" AND project <> "ALL" Then
136
        issueList = issueList & " AND key in ("
137
        del = ""
138
        issues = Replace(issues ," ",",",1,-1)
139
        aList = Split(issues, ",")
140
            For Each entry in aList
141
                If entry <> "" Then
142
                    issueList = issueList & del & project & "-" & entry
143
                    del = ","
144
                End If
145
            Next
146
        issueList = issueList & ")"
147
    End If
148
 
149
    ' Create the JSON input via code
150
    ' Can do it as a string, as thats all we want
151
    set iJSON = New aspJSON
152
    With iJSON.data
153
    .Add "jql", projectList & issueList & order
154
    .Add "validateQuery", "false"
155
    .Add "startAt", CStr(parStartAt)
156
    .Add "maxResults", CStr(parCount)
157
    .Add "fields", iJSON.Collection()
158
        With .item("fields")
159
            .Add 0, "key"
160
            .Add 1, "summary"
161
            .Add 2, "status"
162
            .Add 3, "priority"
163
            .Add 4, "issuetype"
164
        End With
165
    End With
166
    post = iJSON.JSONoutput()
167
 
168
    Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
169
    objXML.Open "POST", Application("JIRA_URL") & qry , false
170
    objXML.setRequestHeader "Authorization", "Basic " & Base64Encode(Application("JIRA_CREDENTIALS"))
171
    objXML.setRequestHeader "Content-Type", "application/json"
172
    On Error Resume Next
173
    objXML.Send(post)
174
    if Err.Number <> 0 then
175
        result = 1
176
        oJSON.data("emsgSummary") = Err.Description
177
        On Error Goto 0
178
    else
179
        On Error Goto 0
180
        If  objXML.status = 400 then
181
            result = 1
182
            Set jJSON = New aspJSON
183
            jJSON.loadJSON( objXML.responseText )
184
            oJSON.data("emsgSummary") = jJSON.data("errorMessages").item(0)
185
 
186
        ElseIf  objXML.status = 403 then
187
            result = 1
188
            oJSON.data("emsgSummary") = "Jira Server Access Denied"
189
 
190
        ElseIf  objXML.status <> 200 then
191
            result = 1
192
            oJSON.data("emsgSummary") = objXML.responseText
193
        Else
194
            Set jJSON = New aspJSON
195
            jJSON.loadJSON( objXML.responseText )
196
 
197
'           Response.Write "<br>Pretty JSON display<pre>"
198
'           Response.Write jJSON.JSONoutput()
199
'           Response.Write "</pre>"
200
'
201
 
202
            oJSON.data("issueCount") = jJSON.data("total")
203
            oJSON.data("startAt") = jJSON.data("startAt")
204
            oJSON.data("maxResults") = jJSON.data("maxResults")
205
 
206
            Set oJSON.data("issues") = oJSON.Collection()
207
 
208
            ' Select the fields to be returned
209
            Dim  fields
210
    'On Error Resume Next
211
            For Each el In jJSON.data("issues")
212
               Set this = jJSON.data("issues").item(el)
213
               Set fields = this.item("fields")
214
 
215
                Set newitem = oJSON.AddToCollection(oJSON.data("issues"))
216
                newitem.add "key",this.item("key")
217
                newitem.add "url",Application("JIRA_URL") & "/browse/" & this.item("key")
218
                newitem.add "statusIcon",fields.item("status").item("iconUrl")
219
                newitem.add "status",fields.item("status").item("name")
220
                newitem.add "issuetypeIcon",fields.item("issuetype").item("iconUrl")
221
                newitem.add "issuetype",fields.item("issuetype").item("name")
222
                newitem.add "priorityIcon",fields.item("priority").item("iconUrl")
223
                newitem.add "priority",fields.item("priority").item("name")
224
                newitem.add "summary",fields.item("summary")
225
 
226
                If allIssues.Exists(this.item("key")) Then
227
                    newitem.add "inuse",1
228
                End If
229
            Next
230
            result = 0
231
        end if
232
    end if
233
'
234
'   insertIssues
235
'   Insert Issues into the Release Manager entry
236
'
237
ElseIf (parOpr = "insertIssues") Then
238
    issues = QStrPar("Issue")
239
    If parPv_id = "" OR issues = "" Then
240
        result = 1
241
        oJSON.data("emsgSummary") = "Action called with invalid arguments." & parPv_id & issues
242
    Else
243
        Dim SqlQry, issArr , iss_id, rsQry
244
        issArr = Split ( issues, ",")
245
 
246
        objEH.ErrorRedirect = FALSE
247
        objEH.TryORA ( OraSession )
248
        On Error Resume Next
249
 
250
        ' Import issues if they do not already exist
251
        For Each iss_id In issArr
252
            If Err.Number = 0 Then
253
                SqlQry = "SELECT * FROM JIRA_ISSUES WHERE pv_id=" & parPv_id & " AND iss_key='"& LTrim(iss_id) & "'"
254
                Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
255
                OraDatabase.ExecuteSQL SqlQry
256
                If ((rsQry.BOF) OR (rsQry.EOF)) Then
257
                    SqlQry = " INSERT INTO JIRA_ISSUES ( pv_id, iss_key, date_time_stamp )" &_
258
                             " VALUES ( " & parPv_id & ", '"& LTrim(iss_id) &"', "& ORA_SYSDATETIME &")"
259
                    OraDatabase.ExecuteSQL SqlQry
260
 
261
                    If Err.Number = 0 Then
262
                        SqlQry = "BEGIN  Log_Action ( "& parPv_id &", 'jira_issue_added', "& objAccessControl.UserId &", 'Issue number: "& LTrim(iss_id) &"' );  END;"
263
                        OraDatabase.ExecuteSQL SqlQry
264
                    End If
265
                Set rsQry = nothing
266
                End If
267
            End If
268
        Next
269
 
270
        ' SQL error detection and reporting
271
        objEH.CatchORA ( OraSession )
272
        If objEH.LastOraFailed Then
273
            result = 2
274
            oJSON.data("error") = 1
275
 
276
            oJSON.data("emsgSummary") = objEH.MessageSummary
277
            oJSON.data("emsgDetails") = objEH.MessageDetails
278
            oJSON.data("SqlQry") = SqlQry
279
        Else
280
            result = 0
281
        End If
282
    End If
283
Else
284
        oJSON.data("emsgSummary") = "Unknown operation requested:" & parOpr
285
End If
286
 
287
'
288
'   Create JSON data for the user
289
'   Important fields
290
'       result
291
'
292
'   Debug fields
293
'       Request (Array)
294
'
295
'Write single value
296
oJSON.data("result") = result
297
 
298
' DEBUG: An array of the user provided requests
299
oJSON.data("JiraPost") = post
300
Set oJSON.data("Request") = oJSON.Collection()
301
Set newitem = oJSON.AddToCollection(oJSON.data("Request"))
302
Dim variableName
303
for each variableName in Request.QueryString
304
    newitem.add variableName, Request.QueryString(variableName)
305
next
306
 
307
'Return the object
308
Response.Write oJSON.JSONoutput()
309
Set oJSON = Nothing
310
Call Destroy_All_Objects
311
%>