<%@LANGUAGE="VBSCRIPT"%> <% '===================================================== '| | '| REPORT | '| SBOM Issues | '===================================================== %> <% Option explicit ' Good idea to set when using redirect Response.Expires = 0 ' always load the page, dont store 'To enable the script timeout to 5 mins Server.ScriptTimeout=300 %> <% '------------ ACCESS CONTROL ------------------ %> <% '------------ Variable Definition ------------- Dim rsQry Dim parPv_id Dim objSbomDetailsA, objSbomDetailsB Dim objRelCollectorA, objRelCollectorB Dim parSbomA, parSbomB Dim retValCQIssues Dim retValJIRAIssues Dim topLevelId Dim DEVIiss Dim pvIdList Dim objIssueDetails Dim cqIssues Dim jiraIssues Dim rsBomPackages Dim rsPkgDeps Dim multiPackagesEnabled '------------ Constants Declaration ----------- '------------ Variable Init ------------------- parSbomA = Request("sbomA") parSbomB = Request("sbomB") Set objRelCollectorA = CreateObject("Scripting.Dictionary") Set objRelCollectorB = CreateObject("Scripting.Dictionary") Set objSbomDetailsA = CreateObject("Scripting.Dictionary") Set objSbomDetailsB = CreateObject("Scripting.Dictionary") Set objIssueDetails = CreateObject("Scripting.Dictionary") Set jiraIssues = CreateObject( "Scripting.Dictionary" ) Set rsBomPackages = Server.CreateObject("ADODB.Recordset") Set rsPkgDeps = Server.CreateObject("ADODB.Recordset") '---------------------------------------------- %> <% '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetFormDetails ( nSourceSBOM, ByRef tempObjRelCollector ) Dim rsQry, query ' Exit if nSourceRtagId is empty If nSourceSBOM = "" Then Exit Sub OraDatabase.Parameters.Add "SBOM", nSourceSBOM, ORAPARM_INPUT, ORATYPE_NUMBER query = _ " SELECT pr.PROJ_NAME ||' > '|| br.BRANCH_NAME ||' > '|| b.BOM_VERSION ||'.'||b.BOM_LIFECYCLE AS LOCATION, "&_ " pr.PROJ_ID, b.BOM_ID, br.BRANCH_ID, b.IS_READONLY, b.RTAG_ID_FK"&_ " FROM BRANCHES br,"&_ " BOMS b,"&_ " DM_PROJECTS pr"&_ " WHERE br.PROJ_ID = pr.PROJ_ID"&_ " AND b.BRANCH_ID = br.BRANCH_ID"&_ " AND b.BOM_ID = :SBOM" Set rsQry = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "SBOM" If rsQry.RecordCount > 0 Then tempObjRelCollector ("location") = rsQry("location") tempObjRelCollector ("official") = rsQry("IS_READONLY") tempObjRelCollector ("proj_id") = rsQry("proj_id") tempObjRelCollector ("branch_id") = rsQry("branch_id") tempObjRelCollector ("bom_id") = rsQry("bom_id") tempObjRelCollector ("rtag_id_fk") = rsQry("rtag_id_fk") Else Err.Raise 8, "Sub GetFormDetails in "& SCRIPT_NAME, "Empty record set returned. nSourceSBOM="& nSourceSBOM End If If tempObjRelCollector ("location") = "" Then tempObjRelCollector.Item ("location") = "N" End If rsQry.Close Set rsQry = Nothing End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetPackageDetailsForIssue ( nIss_id, sPvIdList, tempIssDetails ) Dim query query = " SELECT DISTINCT pkg.pkg_name, pv.pkg_version, pv.v_ext, pkg.pkg_id, pv.pv_id "&_ " FROM package_versions pv, packages pkg, cq_issues iss "&_ " WHERE pv.pkg_id = pkg.pkg_id AND pv.pv_id = iss.pv_id AND iss.iss_id = :ISS_ID AND pv.pv_id IN ("& sPvIdList &")" OraDatabase.Parameters.Add "ISS_ID", nIss_id, ORAPARM_INPUT, ORATYPE_NUMBER Set tempIssDetails = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "ISS_ID" If tempIssDetails.RecordCount = 0 Then Err.Raise 8, "Sub GetPackageDetailsForIssue in "& SCRIPT_NAME, "Empty record set returned. nIss_id="& nIss_id End If End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetPackageDetailsForJIRAIssue ( nIss_Key, sPvIdList, tempIssDetails ) Dim query query = " SELECT DISTINCT pkg.pkg_name, pv.pkg_version, pv.v_ext, pkg.pkg_id, pv.pv_id "&_ " FROM package_versions pv, packages pkg, jira_issues iss "&_ " WHERE pv.pkg_id = pkg.pkg_id AND pv.pv_id = iss.pv_id AND iss.iss_key = :ISS_ID AND pv.pv_id IN ("& sPvIdList &")" OraDatabase.Parameters.Add "ISS_ID", nIss_Key, ORAPARM_INPUT, ORATYPE_NUMBER Set tempIssDetails = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "ISS_ID" If tempIssDetails.RecordCount = 0 Then Err.Raise 8, "Sub GetPackageDetailsForJIRAIssue in "& SCRIPT_NAME, "Empty record set returned. nIss_Key="& nIss_Key End If End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Function GetIssues( sPvIdList, oRsCqIssTemp ) Dim sqlStrTemp, oRsTemp Set oRsTemp = OraDatabase.DbCreateDynaset("SELECT iss_db, iss_id FROM CQ_ISSUES WHERE pv_id IN ("& sPvIdList &")", cint(0)) If oRsTemp.RecordCount <> 0 Then DEVIiss = "-1" While ((NOT oRsTemp.BOF) AND (NOT oRsTemp.EOF)) If CInt(oRsTemp("iss_db")) = CInt(enumCLEARQUEST_DEVI_ID) Then DEVIiss = DEVIiss &","& oRsTemp("iss_id") End If oRsTemp.MoveNext WEnd sqlStrTemp = GetQuery ("cq_issues.sql") sqlStrTemp = Replace( sqlStrTemp, "/*enumCLEARQUEST_DEVI_ID*/", enumCLEARQUEST_DEVI_ID) sqlStrTemp = Replace( sqlStrTemp, "/*DEVIiss*/", DEVIiss) On Error Resume Next Set oRsCqIssTemp = OraDatabase.DbCreateDynaset( sqlStrTemp, cint(0)) GetIssues = Err.Number Else GetIssues = -1 End If End Function '---------------------------------------------------------------------------------------------------------------------------------------- Function Get_JIRA_Issues ( sPvIdList, oRsJiraIssTemp ) On Error Resume Next Call getJiraIssueDetails(sPvIdList, oRsJiraIssTemp, 1) If Err.Number <> 0 Then Get_JIRA_Issues = Err.Number ElseIf oRsJiraIssTemp.Count = 0 Then Get_JIRA_Issues = -1 Else Get_JIRA_Issues = 0 End If End Function '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetPackageDependencies ( nPv_id_a, nPv_id_b, oRsTemp ) OraDatabase.Parameters.Add "PV_ID_A", nPv_id_a, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "PV_ID_B", nPv_id_b, ORAPARM_INPUT, ORATYPE_NUMBER Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("UniquePackageDependencies.sql"), ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "PV_ID_A" OraDatabase.Parameters.Remove "PV_ID_B" End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetAllBomContents ( nSbom_id, oRsTemp ) OraDatabase.Parameters.Add "SBOM_ID", nSbom_id, ORAPARM_INPUT, ORATYPE_NUMBER Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("BomPackagesAndDeps.sql"), ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "SBOM_ID" End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetBomPackages ( nSbomA, nSbomB, oRsTemp ) OraDatabase.Parameters.Add "SBOM_A", nSbomA, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "SBOM_B", nSbomB, ORAPARM_INPUT, ORATYPE_NUMBER Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("BomPackageDiff.sql"), ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "SBOM_A" OraDatabase.Parameters.Remove "SBOM_B" End Sub '---------------------------------------------------------------------------------------------------------------------------------------- %> <% '---------------------- Run Before Page --------------------------- ' Get release details Call GetFormDetails ( parSbomA, objRelCollectorA ) Call GetFormDetails ( parSbomB, objRelCollectorB ) multiPackagesEnabled = FALSE If parSbomA <> "" AND parSbomB <> "" Then If Request("form_btn_comp") = "Get Issues" Then Call OpenInWindow ( SCRIPT_NAME &"?sbomA="& parSbomA &"&sbomB="& parSbomB ) End If Call GetBomDetails (parSbomA, objSbomDetailsA) Call GetBomDetails (parSbomB, objSbomDetailsB) objSbomDetailsA("bom_full_version") = objSbomDetailsA("bom_name")&" "& objSbomDetailsA("bom_version") &"."& objSbomDetailsA("bom_lifecycle") objSbomDetailsB("bom_full_version") = objSbomDetailsB("bom_name")&" "& objSbomDetailsB("bom_version") &"."& objSbomDetailsB("bom_lifecycle") ' Check for the submission of the "multiplepackageS" checkbox that enables multiple packages to be identified and rendered on the page ' for each issue, if applicable. If Request("multipackages") = "TRUE" Then multiPackagesEnabled = TRUE Else multiPackagesEnabled = FALSE End If Else objSbomDetailsA("bom_full_version") = "Software Bill of Materials (SBOM)" End If '------------------------------------------------------------------ %> Deployment Manager - SBOM Issues Report
<%=objSbomDetailsA("bom_full_version")%> Issues Report
<%If parSbomA <> "" OR parSbomB <> "" Then%> <%End If%>
Select SBOM To View
Select SBOM To Compare To
<%If parSbomA <> "" Then%> Go To SBOM A » <%End If%> <%If parSbomB <> "" Then%> Go To SBOM B » <%End If%>
<%If parSbomA <> "" OR parSbomB <> "" Then%> <%If multiPackagesEnabled Then%> <%Else%> <%End If%>
Show multiple package/issue associations.
<%End If%>
<% If parSbomA = "" OR parSbomB = "" Then%>
Select both SBOMs to compare.
<%ElseIf parSbomA = parSbomB Then%>
Select two different SBOMs to compare.
<%Else%>
Issues found in BOM <%=objSbomDetailsA("bom_version") &"."& objSbomDetailsA("bom_lifecycle")%> but not in SBOM <%=objSbomDetailsB("bom_version") &"."& objSbomDetailsB("bom_lifecycle")%>

<% Dim issueCounter issueCounter = 0 Call GetBomPackages( parSbomA, parSbomB, rsBomPackages ) If rsBomPackages.RecordCount > 0 Then While (NOT rsBomPackages.BOF) AND (NOT rsBomPackages.EOF) pvIdList = rsBomPackages("pv_id") Call GetPackageDependencies( rsBomPackages("pv_id"), rsBomPackages("prev_pv_id"), rsPkgDeps ) While (NOT rsPkgDeps.BOF) AND (NOT rsPkgDeps.EOF) pvIdList = pvIdList & "," & rsPkgDeps("dpv_id") rsPkgDeps.MoveNext WEnd ' Acquire all of the issues for the package now so we can make a decision on whether to display the field set + legend + issue content ' for this BOM package. The "get issues" functions will return -1 if no records are found, and 0 if no error and records present. retValCQIssues = GetIssues( pvIdList, cqIssues ) retValJIRAIssues = Get_JIRA_Issues( pvIdList, jiraIssues ) If retValCQIssues = 0 OR retValJIRAIssues = 0 Then%>
&pkg_id=<%=rsBomPackages("pkg_id")%>&FLpkg_version=*<%=rsBomPackages("v_ext")%>&FLuser_name=*&rfile=<%=SCRIPT_NAME%>&pv_id=<%=rsBomPackages("pv_id")%>&#ANC_<%=rsBomPackages("pv_id")%>','History','resizable=yes,width=850,height='+ ( screen.height - 100 ) );" class="report_sub_header"><%=rsBomPackages("pkg_name")%> <%=rsBomPackages("pkg_version")%> <%If retValCQIssues = 0 Then Dim firstPackageRow issueCounter = issueCounter + 1 %> <% While (NOT cqIssues.BOF) AND (NOT cqIssues.EOF) Call GetPackageDetailsForIssue( cqIssues("iss_id"), pvIdList, objIssueDetails ) firstPackageRow = TRUE Do While (NOT objIssueDetails.BOF) AND (NOT objIssueDetails.EOF)%> <%If firstPackageRow Then%> <%firstPackageRow = FALSE%> <%Else%> <%End If%> <% objIssueDetails.MoveNext If multiPackagesEnabled = FALSE Then Exit Do Loop cqIssues.MoveNext WEnd %>
Issue Id CLEARQUEST Issue Title Status Package(s)
<%=cqIssues("iss_num")%> <%=cqIssues("summary")%> <%=cqIssues("status")%> &pkg_id=<%=objIssueDetails("pkg_id")%>&FLpkg_version=*<%=objIssueDetails("v_ext")%>&FLuser_name=*&rfile=<%=SCRIPT_NAME%>&pv_id=<%=objIssueDetails("pv_id")%>&#ANC_<%=objIssueDetails("pv_id")%>','History','resizable=yes,width=850,height='+ ( screen.height - 100 ) );" class="report_link"> <%Response.Write(objIssueDetails("pkg_name") &" "& objIssueDetails("pkg_version"))%>
<%End If If retValJIRAIssues = 0 Then issueCounter = issueCounter + 1 %> <% Dim key, el For Each key In jiraIssues Set el = jiraIssues.item(key) Call GetPackageDetailsForJIRAIssue( key, pvIdList, objIssueDetails ) firstPackageRow = TRUE Do While (NOT objIssueDetails.BOF) AND (NOT objIssueDetails.EOF)%> <%If firstPackageRow Then%> <%firstPackageRow = FALSE%> <%Else%> <%End If%> <% objIssueDetails.MoveNext If multiPackagesEnabled = FALSE Then Exit Do Loop Next %>
Issue Id JIRA Issue Summary Issue Type  Status Package(s)
<%=key%> <%=el.item("summary")%> <%=el.item("issuetype")%> <%=el.item("status")%> &pkg_id=<%=objIssueDetails("pkg_id")%>&FLpkg_version=*<%=objIssueDetails("v_ext")%>&FLuser_name=*&rfile=<%=SCRIPT_NAME%>&pv_id=<%=objIssueDetails("pv_id")%>&#ANC_<%=objIssueDetails("pv_id")%>','History','resizable=yes,width=850,height='+ ( screen.height - 100 ) );" class="report_link"> <%Response.Write(objIssueDetails("pkg_name") &" "& objIssueDetails("pkg_version"))%>
<%End If%>

<%End If rsBomPackages.MoveNext WEnd End If If issueCounter = 0 Then %>
No issues found
<% End If %> <% ' Clean up objects before quitting On Error Resume Next rsBomPackages.Close rsPkgDeps.Close cqIssues.Close jiraIssues.Close Set objRelCollectorA = Nothing Set objRelCollectorB = Nothing Set objSbomDetailsA = Nothing Set objSbomDetailsB = Nothing Set rsBomPackages = Nothing Set rsPkgDeps = Nothing Set cqIssues = Nothing Set jiraIssues = Nothing End If%>