Java 创建一个指标,显示SonarQube 5.6中特定规则的问题数量
我正在使用Java插件API为SonarQube 5.6.6开发一个插件。我已经创建了一些自定义规则(检查),现在,我想创建一个自定义度量,显示一个项目有多少特定规则的问题,例如,规则Java 创建一个指标,显示SonarQube 5.6中特定规则的问题数量,java,plugins,sonarqube,Java,Plugins,Sonarqube,我正在使用Java插件API为SonarQube 5.6.6开发一个插件。我已经创建了一些自定义规则(检查),现在,我想创建一个自定义度量,显示一个项目有多少特定规则的问题,例如,规则MyCustomRule的问题数 我知道SonarQube用户可以访问页面问题并使用这些特定规则的名称进行过滤,这样他们就可以看到存在多少问题,但我希望页面上的数字可以衡量 我有一个类实现了MeasureComputer: public class MyMeasureComputer implements Meas
MyCustomRule
的问题数
我知道SonarQube用户可以访问页面问题并使用这些特定规则的名称进行过滤,这样他们就可以看到存在多少问题,但我希望页面上的数字可以衡量
我有一个类实现了MeasureComputer
:
public class MyMeasureComputer implements MeasureComputer {
@Override
public MeasureComputerDefinition define(MeasureComputerDefinitionContext defContext) {
return defContext.newDefinitionBuilder()
.setOutputMetrics(MY_CUSTOM_METRIC.key())
.build();
}
@Override
public void compute(MeasureComputerContext context) {
int totalSum = 0;
for (Measure measure : context.getChildrenMeasures(MY_CUSTOM_METRIC.key())) {
totalSum += measure.getIntValue();
}
context.addMeasure(MY_CUSTOM_METRIC.key(), totalSum);
}
}
这个类定义了一个输出度量,它是我前面说过的问题数量。在方法compute
中,它获取每个文件的度量值MY\u CUSTOM\u METRIC
,并将它们相加。最后,它创建度量值MY_CUSTOM_METRIC
,即问题数量
此时,我需要在每个文件中定义度量值MY_CUSTOM_METRIC
,以便MyMeasureComputer
可以计算它,但我不知道如何做。我想它应该在传感器中
:
public class MySensor implements Sensor {
@Override
public void describe(SensorDescriptor descriptor) {
descriptor.name("MySensor").onlyOnLanguage(Java.KEY);
}
@Override
public void execute(SensorContext context) {
final FileSystem fs = context.fileSystem();
for (InputFile file : fs.inputFiles(fs.predicates().all())) {
context.<Integer>newMeasure()
.forMetric(MY_CUSTOM_METRIC)
.on(file)
.withValue(getNumCertainIssues(context, file))
.save();
}
}
private int getNumCertainIssues(SensorContext context, InputFile file) {
return 10; // TODO: how to get the number of issues?
}
}
公共类MySensor实现传感器{
@凌驾
公共无效描述(传感器描述符){
descriptor.name(“MySensor”).onlyOnLanguage(Java.KEY);
}
@凌驾
public void execute(传感器上下文){
final FileSystem fs=context.FileSystem();
for(InputFile文件:fs.inputFiles(fs.predicates().all())){
context.newMeasure()
.FormMetric(我的自定义度量)
.on(文件)
.withValue(getNumCertainIssues(上下文、文件))
.save();
}
}
私有int getNumCertainIssues(传感器上下文,输入文件){
return 10;//TODO:如何获取发行数量?
}
}
在方法execute
中,我可以用一个示例值(10)在每个文件中设置一个度量,并且它可以工作;我可以在SonarQube UI(第“测量”页)中看到它,以及每10个的总和:
我的问题是:
- 如何获取特定规则的问题数
- 是否应在类
传感器中执行此操作
- 有可能吗
谢谢。一台测量计算机在每个组件上执行:文件、目录、模块和项目
- 在文件(
)上,您可以获取问题(使用Component#getType#FILE
),计算规则MeasureComputerContext#getIssues
中的问题数量,然后使用MyCustomRule
保存它MeasureComputerContext\addMeasure
- 在“无文件”组件上,从子级计算度量值并保存它,这是您编写的代码
@Override
public void compute(MeasureComputerContext context) {
if (context.getComponent().getType() == FILE) {
List<Issue> fileIssues = context.getIssues();
// TODO get number of issues of type MyCustomRule
context.addMeasure(MY_CUSTOM_METRIC.key(), sum);
return;
}
int totalSum = 0;
for (Measure measure : context.getChildrenMeasures(MY_CUSTOM_METRIC.key())) {
totalSum += measure.getIntValue();
}
context.addMeasure(MY_CUSTOM_METRIC.key(), totalSum);
}
公共类MyMeasureComputer实现MeasureComputer{
@凌驾
公共度量值计算机定义定义(度量值计算机定义上下文定义上下文){
返回defContext.newDefinitionBuilder()
.setOutputMetrics(MY_CUSTOM_METRIC.key())
.build();
}
@覆盖
公共void计算(MeasureComputerContext上下文){
if(context.getComponent().getType()==文件){
List fileIssues=context.getIssues();
//TODO获取MyCustomRule类型的问题数
addMeasure(MY_CUSTOM_METRIC.key(),sum);
返回;
}
整数总和=0;
for(Measure-Measure:context.getChildrenMeasures(MY\u CUSTOM\u METRIC.key())){
totalSum+=measure.getIntValue();
}
addMeasure(MY_CUSTOM_METRIC.key(),totalSum);
}
谢谢你的及时回复,我可以实现我的目标!为了完成你的回答,我必须说我在《MySensor》课程中编写的代码不应该存在(而且,我删除了整个课程),因为您会因为为一个文件定义两次度量而出错。好消息!事实上,我忘了说应该创建no传感器。