From 275c5437ae54859da1285b63161fa62bada8d8f3 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 30 Jan 2024 07:10:11 -0500 Subject: [PATCH 1/4] feat(dashboard): add policy violations by state and classification cards Signed-off-by: Adam Setch --- src/views/Dashboard.vue | 63 +++++++++-- .../ChartPolicyViolationsClassification.vue | 106 ++++++++++++++++++ ...ons.vue => ChartPolicyViolationsState.vue} | 0 .../portfolio/projects/ComponentDashboard.vue | 8 +- .../portfolio/projects/ProjectDashboard.vue | 8 +- .../portfolio/projects/ServiceDashboard.vue | 8 +- 6 files changed, 174 insertions(+), 19 deletions(-) create mode 100644 src/views/dashboard/ChartPolicyViolationsClassification.vue rename src/views/dashboard/{ChartPolicyViolations.vue => ChartPolicyViolationsState.vue} (100%) diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue index 06383f12e..7d6539559 100644 --- a/src/views/Dashboard.vue +++ b/src/views/Dashboard.vue @@ -44,15 +44,15 @@ -

{{ $t('message.policy_violations') }}

+

{{ $t('message.policy_violations') }}

+
{{$t('message.policy_violations_by_state')}}
- -
+
- +
{{ $t("policy_violation.fails") }}
{{ failViolations }} ({{ failViolationsPercent }}%) @@ -71,6 +71,40 @@
+ + + + +

{{ $t('message.policy_violations') }}

+
{{$t('message.policy_violations_by_classification')}}
+ + +
+ +
+ + +
{{ $t("policy_violation.security") }}
+ {{ securityViolations }} ({{ securityViolationsPercent }}%) + +
+ +
{{ $t("policy_violation.operational") }}
+ {{ operationalViolations }} ({{ operationalViolationsPercent }}%) + +
+ +
{{ $t("policy_violation.license") }}
+ {{ licenseViolations }} ({{ licenseViolationsPercent }}%) + +
+
+
+
+
+ + + @@ -162,7 +196,8 @@ import ChartPortfolioVulnerabilities from './dashboard/ChartPortfolioVulnerabilities' import ChartProjectVulnerabilities from "./dashboard/ChartProjectVulnerabilities"; import ChartAuditedProgress from "./dashboard/ChartAuditingProgress"; - import ChartPolicyViolations from "./dashboard/ChartPolicyViolations"; + import ChartPolicyViolationsState from "./dashboard/ChartPolicyViolationsState"; + import ChartPolicyViolationsClassification from "./dashboard/ChartPolicyViolationsClassification"; import ChartComponentVulnerabilities from "./dashboard/ChartComponentVulnerabilities"; import { Callout } from '@coreui/vue' import permissionsMixin from "../mixins/permissionsMixin"; @@ -176,7 +211,8 @@ ChartPortfolioVulnerabilities, ChartProjectVulnerabilities, ChartAuditedProgress, - ChartPolicyViolations, + ChartPolicyViolationsState, + ChartPolicyViolationsClassification, ChartComponentVulnerabilities }, data() { @@ -202,6 +238,12 @@ warnViolationsPercent: 0, infoViolations: 0, infoViolationsPercent: 0, + securityViolations: 0, + securityViolationsPercent: 0, + operationalViolations: 0, + operationalViolationsPercent: 0, + licenseViolations: 0, + licenseViolationsPercent: 0, vulnerabilities: 0, suppressed: 0, @@ -235,6 +277,12 @@ this.warnViolationsPercent = common.calcProgressPercent(this.totalViolations, this.warnViolations); this.infoViolations = common.valueWithDefault(metric.policyViolationsInfo, "0"); this.infoViolationsPercent = common.calcProgressPercent(this.totalViolations, this.infoViolations); + this.securityViolations = common.valueWithDefault(metric.policyViolationsSecurityTotal, "0"); + this.securityViolationsPercent = common.calcProgressPercent(this.totalViolations, this.securityViolations); + this.operationalViolations = common.valueWithDefault(metric.policyViolationsOperationalTotal, "0"); + this.operationalViolationsPercent = common.calcProgressPercent(this.totalViolations, this.operationalViolations); + this.licenseViolations = common.valueWithDefault(metric.policyViolationsLicenseTotal, "0"); + this.licenseViolationsPercent = common.calcProgressPercent(this.totalViolations, this.licenseViolations); this.vulnerabilities = common.valueWithDefault(metric.vulnerabilities, "0"); this.suppressed = common.valueWithDefault(metric.suppressed, "0"); @@ -256,7 +304,8 @@ this.$refs.chartPortfolioVulnerabilities.render(response.data); this.$refs.chartProjectVulnerabilities.render(response.data); this.$refs.chartAuditedProgress.render(response.data); - this.$refs.chartPolicyViolations.render(response.data); + this.$refs.chartPolicyViolationsState.render(response.data); + this.$refs.chartPolicyViolationsClassification.render(response.data); this.$refs.chartComponentVulnerabilities.render(response.data); this.extractStats(response.data); }); diff --git a/src/views/dashboard/ChartPolicyViolationsClassification.vue b/src/views/dashboard/ChartPolicyViolationsClassification.vue new file mode 100644 index 000000000..340521287 --- /dev/null +++ b/src/views/dashboard/ChartPolicyViolationsClassification.vue @@ -0,0 +1,106 @@ + diff --git a/src/views/dashboard/ChartPolicyViolations.vue b/src/views/dashboard/ChartPolicyViolationsState.vue similarity index 100% rename from src/views/dashboard/ChartPolicyViolations.vue rename to src/views/dashboard/ChartPolicyViolationsState.vue diff --git a/src/views/portfolio/projects/ComponentDashboard.vue b/src/views/portfolio/projects/ComponentDashboard.vue index 2641a9b63..5d5f2f531 100644 --- a/src/views/portfolio/projects/ComponentDashboard.vue +++ b/src/views/portfolio/projects/ComponentDashboard.vue @@ -78,7 +78,7 @@ - + @@ -106,7 +106,7 @@ import ChartAuditingProgress from "../../dashboard/ChartAuditingProgress"; import ChartComponentVulnerabilities from "../../dashboard/ChartComponentVulnerabilities"; import ChartPortfolioVulnerabilities from '../../dashboard/ChartPortfolioVulnerabilities'; - import ChartPolicyViolations from "@/views/dashboard/ChartPolicyViolations"; + import ChartPolicyViolationsState from "@/views/dashboard/ChartPolicyViolationsState"; import ChartPolicyViolationBreakdown from '@/views/dashboard/ChartPolicyViolationBreakdown'; export default { @@ -115,7 +115,7 @@ ChartAuditingProgress, ChartComponentVulnerabilities, ChartPortfolioVulnerabilities, - ChartPolicyViolations, + ChartPolicyViolationsState, ChartPolicyViolationBreakdown, Callout, @@ -181,7 +181,7 @@ let url = `${this.$api.BASE_URL}/${this.$api.URL_METRICS}/component/${uuid}/days/${daysBack}`; this.axios.get(url).then((response) => { this.$refs.chartComponentVulnerabilities.render(response.data); - this.$refs.chartPolicyViolations.render(response.data); + this.$refs.chartPolicyViolationsState.render(response.data); this.$refs.chartPolicyViolationBreakdown.render(response.data); this.extractStats(response.data); }); diff --git a/src/views/portfolio/projects/ProjectDashboard.vue b/src/views/portfolio/projects/ProjectDashboard.vue index f0e611f84..09d622b58 100644 --- a/src/views/portfolio/projects/ProjectDashboard.vue +++ b/src/views/portfolio/projects/ProjectDashboard.vue @@ -90,7 +90,7 @@ - + @@ -144,13 +144,13 @@ import ChartAuditingProgress from "../../dashboard/ChartAuditingProgress"; import ChartComponentVulnerabilities from "../../dashboard/ChartComponentVulnerabilities"; import ChartPortfolioVulnerabilities from '../../dashboard/ChartPortfolioVulnerabilities' - import ChartPolicyViolations from "@/views/dashboard/ChartPolicyViolations"; + import ChartPolicyViolationsState from "@/views/dashboard/ChartPolicyViolationsState"; import ChartPolicyViolationBreakdown from '@/views/dashboard/ChartPolicyViolationBreakdown'; export default { name: 'project-dashboard', components: { - ChartPolicyViolations, + ChartPolicyViolationsState, ChartPolicyViolationBreakdown, ChartAuditingProgress, ChartComponentVulnerabilities, @@ -221,7 +221,7 @@ let url = `${this.$api.BASE_URL}/${this.$api.URL_METRICS}/project/${this.uuid}/days/${daysBack}`; this.axios.get(url).then((response) => { this.$refs.chartProjectVulnerabilities.render(response.data); - this.$refs.chartPolicyViolations.render(response.data); + this.$refs.chartPolicyViolationsState.render(response.data); this.$refs.chartPolicyViolationBreakdown.render(response.data); this.$refs.chartAuditedProgress.render(response.data); this.$refs.chartComponentVulnerabilities.render(response.data); diff --git a/src/views/portfolio/projects/ServiceDashboard.vue b/src/views/portfolio/projects/ServiceDashboard.vue index 69257a63f..c1f5c57f1 100644 --- a/src/views/portfolio/projects/ServiceDashboard.vue +++ b/src/views/portfolio/projects/ServiceDashboard.vue @@ -78,7 +78,7 @@ - + @@ -106,7 +106,7 @@ import { Callout } from '@coreui/vue' import ChartAuditingProgress from "../../dashboard/ChartAuditingProgress"; import ChartComponentVulnerabilities from "../../dashboard/ChartComponentVulnerabilities"; import ChartPortfolioVulnerabilities from '../../dashboard/ChartPortfolioVulnerabilities'; -import ChartPolicyViolations from "@/views/dashboard/ChartPolicyViolations"; +import ChartPolicyViolationsState from "@/views/dashboard/ChartPolicyViolationsState"; import ChartPolicyViolationBreakdown from '@/views/dashboard/ChartPolicyViolationBreakdown'; export default { @@ -115,7 +115,7 @@ export default { ChartAuditingProgress, ChartComponentVulnerabilities, ChartPortfolioVulnerabilities, - ChartPolicyViolations, + ChartPolicyViolationsState, ChartPolicyViolationBreakdown, Callout, @@ -184,7 +184,7 @@ export default { let url = `${this.$api.BASE_URL}/${this.$api.URL_METRICS}/service/${uuid}/days/${daysBack}`; this.axios.get(url).then((response) => { this.$refs.chartServiceVulnerabilities.render(response.data); - this.$refs.chartPolicyViolations.render(response.data); + this.$refs.chartPolicyViolationsState.render(response.data); this.$refs.chartPolicyViolationBreakdown.render(response.data); this.extractStats(response.data); }); From 362896c52f661307bbe428ea70afff0333db935e Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 30 Jan 2024 07:12:56 -0500 Subject: [PATCH 2/4] feat(dashboard): add policy violations by state and classification cards Signed-off-by: Adam Setch --- src/views/dashboard/ChartPolicyViolationsClassification.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/views/dashboard/ChartPolicyViolationsClassification.vue b/src/views/dashboard/ChartPolicyViolationsClassification.vue index 340521287..3ccc0f4a2 100644 --- a/src/views/dashboard/ChartPolicyViolationsClassification.vue +++ b/src/views/dashboard/ChartPolicyViolationsClassification.vue @@ -19,9 +19,9 @@ export default { let licenseData = []; for (let i = 0; i < metrics.length; i++) { labels.push(common.formatTimestamp(metrics[i].firstOccurrence)); - securityData.push(metrics[i].policyViolationsFail); - operationalData.push(metrics[i].policyViolationsWarn); - licenseData.push(metrics[i].policyViolationsInfo); + securityData.push(metrics[i].policyViolationsSecurityTotal); + operationalData.push(metrics[i].policyViolationsOperationalTotal); + licenseData.push(metrics[i].policyViolationsLicenseTotal); if (i === metrics.length - 1) { labels.push(common.formatTimestamp(metrics[i].lastOccurrence)); securityData.push(metrics[i].policyViolationsSecurityTotal); From 35d644f3a383197ed3c0a21728995e6a094ef3d0 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 30 Jan 2024 12:54:51 -0500 Subject: [PATCH 3/4] feat(dashboard): add policy violations by state and classification cards Signed-off-by: Adam Setch --- src/views/Dashboard.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue index 493d08b60..0d1a59f60 100644 --- a/src/views/Dashboard.vue +++ b/src/views/Dashboard.vue @@ -418,6 +418,12 @@ this.warnViolationsPercent = common.calcProgressPercent(this.totalViolations, this.warnViolations); this.infoViolations = common.valueWithDefault(metric.policyViolationsInfo, "0"); this.infoViolationsPercent = common.calcProgressPercent(this.totalViolations, this.infoViolations); + this.securityViolations = common.valueWithDefault(metric.policyViolationsSecurityTotal, "0"); + this.securityViolationsPercent = common.calcProgressPercent(this.totalViolations, this.securityViolations); + this.operationalViolations = common.valueWithDefault(metric.policyViolationsOperationalTotal, "0"); + this.operationalViolationsPercent = common.calcProgressPercent(this.totalViolations, this.operationalViolations); + this.licenseViolations = common.valueWithDefault(metric.policyViolationsLicenseTotal, "0"); + this.licenseViolationsPercent = common.calcProgressPercent(this.totalViolations, this.licenseViolations); this.vulnerabilities = common.valueWithDefault(metric.vulnerabilities, "0"); this.suppressed = common.valueWithDefault(metric.suppressed, "0"); From b6c9846ad6f90179e0ceccd2da19d78891cceebf Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 30 Jan 2024 12:56:53 -0500 Subject: [PATCH 4/4] feat(dashboard): add policy violations by state and classification cards Signed-off-by: Adam Setch --- src/views/Dashboard.vue | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue index 0d1a59f60..d7247c91e 100644 --- a/src/views/Dashboard.vue +++ b/src/views/Dashboard.vue @@ -104,9 +104,6 @@ - - -