Skip to content

Commit 414de65

Browse files
SC-47805 Add new metrics
1 parent 98b2cff commit 414de65

3 files changed

Lines changed: 178 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## 13.6
44
* Deprecate `org.sonar.api.config.PropertyDefinitions`. Use `PropertyDefinition.builder(String)` to declare properties instead.
5+
* Add severity metric keys to `org.sonar.api.measures.CoreMetrics`:
6+
* MQR mode: `NEW_RELIABILITY_ISSUE_SEVERITY_KEY`, `NEW_SECURITY_ISSUE_SEVERITY_KEY`, `NEW_MAINTAINABILITY_ISSUE_SEVERITY_KEY`
7+
* Standard mode: `NEW_BUGS_SEVERITY_KEY`, `NEW_VULNERABILITIES_SEVERITY_KEY`, `NEW_CODE_SMELLS_SEVERITY_KEY`
58

69
## 13.5
710
* Introduce support for issue resolution from sensors:

plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,66 @@ public final class CoreMetrics {
10471047
.setDeleteHistoricalData(true)
10481048
.create();
10491049

1050+
/**
1051+
* @since 13.6
1052+
*/
1053+
public static final String NEW_RELIABILITY_ISSUE_SEVERITY_KEY = "new_reliability_issue_severity";
1054+
1055+
/**
1056+
* @since 13.6
1057+
*/
1058+
public static final Metric<Integer> NEW_RELIABILITY_ISSUE_SEVERITY = new Metric.Builder(NEW_RELIABILITY_ISSUE_SEVERITY_KEY,
1059+
"Reliability Issue Severity on New Code", Metric.ValueType.INT)
1060+
.setDescription("Worst severity of new reliability issues")
1061+
.setDomain(DOMAIN_RELIABILITY)
1062+
.setDirection(Metric.DIRECTION_WORST)
1063+
.setDeleteHistoricalData(true)
1064+
.setOptimizedBestValue(true)
1065+
.setQualitative(true)
1066+
.setBestValue((double) SeverityValues.NO_ISSUES)
1067+
.setWorstValue((double) SeverityValues.BLOCKER)
1068+
.create();
1069+
1070+
/**
1071+
* @since 13.6
1072+
*/
1073+
public static final String NEW_SECURITY_ISSUE_SEVERITY_KEY = "new_security_issue_severity";
1074+
1075+
/**
1076+
* @since 13.6
1077+
*/
1078+
public static final Metric<Integer> NEW_SECURITY_ISSUE_SEVERITY = new Metric.Builder(NEW_SECURITY_ISSUE_SEVERITY_KEY,
1079+
"Security Issue Severity on New Code", Metric.ValueType.INT)
1080+
.setDescription("Worst severity of new security issues")
1081+
.setDomain(DOMAIN_SECURITY)
1082+
.setDirection(Metric.DIRECTION_WORST)
1083+
.setDeleteHistoricalData(true)
1084+
.setOptimizedBestValue(true)
1085+
.setQualitative(true)
1086+
.setBestValue((double) SeverityValues.NO_ISSUES)
1087+
.setWorstValue((double) SeverityValues.BLOCKER)
1088+
.create();
1089+
1090+
/**
1091+
* @since 13.6
1092+
*/
1093+
public static final String NEW_MAINTAINABILITY_ISSUE_SEVERITY_KEY = "new_maintainability_issue_severity";
1094+
1095+
/**
1096+
* @since 13.6
1097+
*/
1098+
public static final Metric<Integer> NEW_MAINTAINABILITY_ISSUE_SEVERITY = new Metric.Builder(NEW_MAINTAINABILITY_ISSUE_SEVERITY_KEY,
1099+
"Maintainability Issue Severity on New Code", Metric.ValueType.INT)
1100+
.setDescription("Worst severity of new maintainability issues")
1101+
.setDomain(DOMAIN_MAINTAINABILITY)
1102+
.setDirection(Metric.DIRECTION_WORST)
1103+
.setDeleteHistoricalData(true)
1104+
.setOptimizedBestValue(true)
1105+
.setQualitative(true)
1106+
.setBestValue((double) SeverityValues.NO_ISSUES)
1107+
.setWorstValue((double) SeverityValues.BLOCKER)
1108+
.create();
1109+
10501110
/**
10511111
* @since 3.6
10521112
* @deprecated since 10.4. Use {@link #VIOLATIONS_KEY} instead.
@@ -1152,6 +1212,29 @@ public final class CoreMetrics {
11521212
.setDeleteHistoricalData(true)
11531213
.create();
11541214

1215+
/**
1216+
* SonarQube Quality Model
1217+
*
1218+
* @since 13.6
1219+
*/
1220+
public static final String NEW_CODE_SMELLS_SEVERITY_KEY = "new_code_smells_severity";
1221+
1222+
/**
1223+
* SonarQube Quality Model
1224+
*
1225+
* @since 13.6
1226+
*/
1227+
public static final Metric<Integer> NEW_CODE_SMELLS_SEVERITY = new Metric.Builder(NEW_CODE_SMELLS_SEVERITY_KEY, "New Code Smells Severity", Metric.ValueType.INT)
1228+
.setDescription("Worst severity of new code smell issues")
1229+
.setDomain(DOMAIN_MAINTAINABILITY)
1230+
.setDirection(Metric.DIRECTION_WORST)
1231+
.setDeleteHistoricalData(true)
1232+
.setOptimizedBestValue(true)
1233+
.setQualitative(true)
1234+
.setBestValue((double) SeverityValues.NO_ISSUES)
1235+
.setWorstValue((double) SeverityValues.BLOCKER)
1236+
.create();
1237+
11551238
/**
11561239
* SonarQube Quality Model
11571240
*
@@ -1195,6 +1278,29 @@ public final class CoreMetrics {
11951278
.setDeleteHistoricalData(true)
11961279
.create();
11971280

1281+
/**
1282+
* SonarQube Quality Model
1283+
*
1284+
* @since 13.6
1285+
*/
1286+
public static final String NEW_BUGS_SEVERITY_KEY = "new_bugs_severity";
1287+
1288+
/**
1289+
* SonarQube Quality Model
1290+
*
1291+
* @since 13.6
1292+
*/
1293+
public static final Metric<Integer> NEW_BUGS_SEVERITY = new Metric.Builder(NEW_BUGS_SEVERITY_KEY, "New Bugs Severity", Metric.ValueType.INT)
1294+
.setDescription("Worst severity of new bug issues")
1295+
.setDomain(DOMAIN_RELIABILITY)
1296+
.setDirection(Metric.DIRECTION_WORST)
1297+
.setDeleteHistoricalData(true)
1298+
.setOptimizedBestValue(true)
1299+
.setQualitative(true)
1300+
.setBestValue((double) SeverityValues.NO_ISSUES)
1301+
.setWorstValue((double) SeverityValues.BLOCKER)
1302+
.create();
1303+
11981304
/**
11991305
* SonarQube Quality Model
12001306
*
@@ -1237,6 +1343,29 @@ public final class CoreMetrics {
12371343
.setDeleteHistoricalData(true)
12381344
.create();
12391345

1346+
/**
1347+
* SonarQube Quality Model
1348+
*
1349+
* @since 13.6
1350+
*/
1351+
public static final String NEW_VULNERABILITIES_SEVERITY_KEY = "new_vulnerabilities_severity";
1352+
1353+
/**
1354+
* SonarQube Quality Model
1355+
*
1356+
* @since 13.6
1357+
*/
1358+
public static final Metric<Integer> NEW_VULNERABILITIES_SEVERITY = new Metric.Builder(NEW_VULNERABILITIES_SEVERITY_KEY, "New Vulnerabilities Severity", Metric.ValueType.INT)
1359+
.setDescription("Worst severity of new vulnerability issues")
1360+
.setDomain(DOMAIN_SECURITY)
1361+
.setDirection(Metric.DIRECTION_WORST)
1362+
.setDeleteHistoricalData(true)
1363+
.setOptimizedBestValue(true)
1364+
.setQualitative(true)
1365+
.setBestValue((double) SeverityValues.NO_ISSUES)
1366+
.setWorstValue((double) SeverityValues.BLOCKER)
1367+
.create();
1368+
12401369
/**
12411370
* @since 7.8
12421371
*/
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Sonar Plugin API
3+
* Copyright (C) SonarSource Sàrl
4+
* mailto:info AT sonarsource DOT com
5+
*
6+
* This program is free software; you can redistribute it and/or
7+
* modify it under the terms of the GNU Lesser General Public
8+
* License as published by the Free Software Foundation; either
9+
* version 3 of the License, or (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
* Lesser General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Lesser General Public License
17+
* along with this program; if not, write to the Free Software Foundation,
18+
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19+
*/
20+
package org.sonar.api.measures;
21+
22+
/**
23+
* Integer values that map to severity levels used by severity-based metrics.
24+
* Severities increase in numeric value; a higher value means a worse severity.
25+
*
26+
* <p>
27+
* When configuring a quality gate condition threshold in the UI, store the value
28+
* one less than the target level (e.g. {@code LOW - 1 = 9}) so that the
29+
* {@code GREATER_THAN} operator catches issues at or above that level.
30+
* </p>
31+
*
32+
* @since 13.6
33+
*/
34+
public final class SeverityValues {
35+
/** No issues present. */
36+
public static final int NO_ISSUES = 0;
37+
public static final int INFO = 5;
38+
public static final int LOW = 10;
39+
public static final int MEDIUM = 15;
40+
public static final int HIGH = 20;
41+
public static final int BLOCKER = 25;
42+
43+
private SeverityValues() {
44+
// constants only
45+
}
46+
}

0 commit comments

Comments
 (0)