From a88c33b55c7b54c0b846704d0f5284d20176a953 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 17 Sep 2023 20:25:42 +0200 Subject: [PATCH] Add first working draft of the chart extension --- chart/chart.html | 26 +++++++++----- img/example_chart_2x2.png | Bin 0 -> 75049 bytes library.js | 69 ++++++++++++++++++++++++++++++-------- overview.md | 3 ++ vss-extension-dev.json | 2 +- vss-extension.json | 38 ++++++++++++++++++++- 6 files changed, 114 insertions(+), 24 deletions(-) create mode 100644 img/example_chart_2x2.png diff --git a/chart/chart.html b/chart/chart.html index 8ffadc8..196225d 100644 --- a/chart/chart.html +++ b/chart/chart.html @@ -69,14 +69,20 @@ $title.text(`Configure the widget to get Advanced Security alerts trend information`); } + // init empty object first + let alertTrendLines = {secretAlertTrend: [], dependencyAlertTrend: [], codeAlertsTrend: []}; try { // get the trend data for alerts first - const secretAlertTrend = getAlertsTrend(organization, projectName, repoId) - consoleLog('alertTrend: ' + JSON.stringify(secretAlertTrend)); + alertTrendLines = await getAlertsTrendLines(organization, projectName, repoId) + consoleLog('Dependencies AlertTrend: ' + JSON.stringify(alertTrendLines.dependencyAlertsTrend)); + consoleLog('Code scanning AlertTrend: ' + JSON.stringify(alertTrendLines.codeAlertsTrend)); + consoleLog('Secrets AlertTrend: ' + JSON.stringify(alertTrendLines.secretAlertsTrend)); } catch (err) { consoleLog(`Error loading the alerts trend: ${err}`); } + + const datePoints = getDatePoints(); var chartOptions = { "hostOptions": { "height": "290", @@ -86,18 +92,22 @@ "series": [ { - "name": "Design", - "data": [1,3,4,3,6,1,9,0,8,11] + "name": "Dependencies", + "data": alertTrendLines.dependencyAlertsTrend }, { - "name": "On Deck", - "data": [2,4,5,6,7,8,9,10,11,12] + "name": "Code scanning", + "data": alertTrendLines.codeAlertsTrend }, { - "name": "secrets", - "data": secretAlertTrend + "name": "Secrets", + "data": alertTrendLines.secretAlertsTrend } ], + "xAxis": { + "labelValues": datePoints, + "labelFormatMode": "dateTime", // format is 2023-09-17 + }, "specializedOptions": { "includeMarkers": "true" } diff --git a/img/example_chart_2x2.png b/img/example_chart_2x2.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e062d5e9acf72130761851a22e217362998213 GIT binary patch literal 75049 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 x.json()); } -async function getAlerts (organization, projectName, repoId) { +async function getAlerts(organization, projectName, repoId) { consoleLog('getAlerts'); try{ - // todo: add pagination + // no pagination option, so just get the first 5000 alerts url = `https://advsec.dev.azure.com/${organization}/${projectName}/_apis/AdvancedSecurity/repositories/${repoId}/alerts?top=5000&criteria.onlyDefaultBranchAlerts=truen&criteria.states=1&api-version=7.2-preview.1`; consoleLog(`Calling url: [${url}]`); const alertResult = await authenticatedGet(url); @@ -53,31 +53,56 @@ async function getAlerts (organization, projectName, repoId) { } } - -async function getAlertsTrend (organization, projectName, repoId) { +async function getAlertsTrendLines(organization, projectName, repoId) { consoleLog(`getAlertsTrend for organization [${organization}], project [${projectName}], repo [${repoId}]`); - try{ - // todo: add pagination + try { url = `https://advsec.dev.azure.com/${organization}/${projectName}/_apis/AdvancedSecurity/repositories/${repoId}/alerts?top=5000&criteria.onlyDefaultBranchAlerts=truen&api-version=7.2-preview.1`; consoleLog(`Calling url: [${url}]`); const alertResult = await authenticatedGet(url); //consoleLog('alertResult: ' + JSON.stringify(alertResult)); consoleLog('alertResult count: ' + alertResult.count); - // load the secret alerts and create a trend line over the last 3 weeks + // load the Secret alerts and create a trend line over the last 3 weeks const secretAlerts = alertResult.value.filter(alert => alert.alertType === "secret"); - const secretAlertsTrend = getAlertsTrendLine(secretAlerts); + const secretAlertsTrend = getAlertsTrendLine(secretAlerts, 'secret'); + console.log(''); + // load the Dependency alerts and create a trend line over the last 3 weeks + const dependencyAlerts = alertResult.value.filter(alert => alert.alertType === "dependency"); + const dependencyAlertsTrend = getAlertsTrendLine(dependencyAlerts, 'dependency');console.log(''); + console.log(''); + // load the Code alerts and create a trend line over the last 3 weeks + const codeAlerts = alertResult.value.filter(alert => alert.alertType === "code"); + const codeAlertsTrend = getAlertsTrendLine(codeAlerts, 'code'); - return secretAlertsTrend; + return { + secretAlertsTrend: secretAlertsTrend, + dependencyAlertsTrend: dependencyAlertsTrend, + codeAlertsTrend: codeAlertsTrend + }; } catch (err) { consoleLog('error in calling the advec api: ' + err); } } -function getAlertsTrendLine(alerts) { - consoleLog('getAlertsTrendLine'); +function checkAlertActiveOnDate(alert, dateStr) { + // check if the alert.firstSeenDate is within the date range + // and if fixedDate is not set or is after the date range + const seenClosed = (alert.firstSeenDate.split('T')[0] <= dateStr && (!alert.fixedDate || alert.fixedDate.split('T')[0] > dateStr)); + if (seenClosed) { + // check the dismissal.requestedOn date as well + if (alert.dismissal && alert.dismissal.requestedOn) { + const dismissed = (alert.dismissal.requestedOn.split('T')[0] <= dateStr); + return !dismissed; + } + } + + return seenClosed; +} + +function getAlertsTrendLine(alerts, type) { + consoleLog(`getAlertsTrendLine for type ${type}`); const trendLine = []; const trendLineSimple = []; @@ -88,7 +113,9 @@ function getAlertsTrendLine(alerts) { for (let d = threeWeeksAgo; d <= today; d.setDate(d.getDate() + 1)) { const date = new Date(d); const dateStr = date.toISOString().split('T')[0]; - const alertsOnDate = alerts.filter(alert => alert.createdDate.split('T')[0] === dateStr); + + const alertsOnDate = alerts.filter(alert => checkAlertActiveOnDate(alert, dateStr)); + console.log(`On [${dateStr}] there were [${alertsOnDate.length}] active ${type} alerts`); trendLine.push({ date: dateStr, count: alertsOnDate.length @@ -97,7 +124,21 @@ function getAlertsTrendLine(alerts) { trendLineSimple.push(alertsOnDate.length); } - consoleLog('trendLine: ' + JSON.stringify(trendLine)); - return trendLine; + consoleLog('trendLine: ' + JSON.stringify(trendLineSimple)); + return trendLineSimple; +} + +function getDatePoints() { + const trendDates = []; + const today = new Date(); + const threeWeeksAgo = new Date(); + threeWeeksAgo.setDate(today.getDate() - 21); + + for (let d = threeWeeksAgo; d <= today; d.setDate(d.getDate() + 1)) { + const date = new Date(d); + const dateStr = date.toISOString().split('T')[0]; + trendDates.push(dateStr); + } + return trendDates; } \ No newline at end of file diff --git a/overview.md b/overview.md index 5984320..c5db541 100644 --- a/overview.md +++ b/overview.md @@ -10,6 +10,9 @@ Install from the marketplace: https://marketplace.visualstudio.com/items?itemNam ### Split it into three separate widgets (1 by 1) with just the single value you scan for: ![Screenshot of the widget in 1 by 1 showing the repository name and the alert count for dependencies, secrets, and code scanning](/img/example_1x1.png) +### Show a trend line (2 by 2) of all alerts in the last 3 weeks: +![Screenshot of the chart widget in 2 by 2 showing the repository name and the alert count for dependencies, secrets, and code scanning](/img/example_chart_2x2.png) + ## GitHub repo Please report issues, feature request, and feedback here: https://github.com/rajbos/GHAzDo-widget. diff --git a/vss-extension-dev.json b/vss-extension-dev.json index c5b9c88..53a7313 100644 --- a/vss-extension-dev.json +++ b/vss-extension-dev.json @@ -1,7 +1,7 @@ { "manifestVersion": 1, "id": "GHAzDoWidget-DEV", - "version": "0.0.1.49", + "version": "0.0.1.66", "public": false, "name": "Advanced Security dashboard Widgets [DEV]", "description": "[DEV] GitHub Advanced Security for Azure DevOps dashboard widgets", diff --git a/vss-extension.json b/vss-extension.json index de8dd9f..1f1f211 100644 --- a/vss-extension.json +++ b/vss-extension.json @@ -1,7 +1,7 @@ { "manifestVersion": 1, "id": "GHAzDoWidget", - "version": "0.0.1.4", + "version": "0.0.1.5", "public": true, "name": "Advanced Security dashboard Widgets", "description": "GitHub Advanced Security for Azure DevOps dashboard widgets", @@ -104,6 +104,39 @@ "description": "Configures GHAzDoWidget", "uri": "widget_1x1/configuration_1x1.html" } + }, + { + "id": "GHAzDoWidget.Chart", + "type": "ms.vss-dashboards-web.widget", + "targets": [ + "ms.vss-dashboards-web.widget-catalog", + "RobBos.GHAzDoWidget-DEV.GHAzDoWidget.Chart.Configuration" + ], + "properties": { + "name": "GHAzDoWidget - Chart", + "description": "A trend chart widget for Advanced Security alerts.", + "catalogIconUrl": "img/publogo.png", + "uri": "/chart/chart.html", + "supportedSizes": [ + { + "rowSpan": 2, + "columnSpan": 2 + } + ], + "supportedScopes": [ + "project_team" + ] + } + }, + { + "id": "GHAzDoWidget.Chart.Configuration", + "type": "ms.vss-dashboards-web.widget-configuration", + "targets": [ "ms.vss-dashboards-web.widget-configuration" ], + "properties": { + "name": "GHAzDoWidget Chart Configuration", + "description": "Configures GHAzDoWidget.Chart", + "uri": "chart/configuration_2x2.html" + } } ], "files": [ @@ -113,6 +146,9 @@ { "path": "widget_2x1", "addressable": true }, + { + "path": "chart", "addressable": true + }, { "path": "library.js", "addressable": true },