java - 创建一个指标,显示 SonarQube 5.6 中特定规则的问题数量

标签 java plugins sonarqube

我正在使用 Java 插件 API 为 SonarQube 5.6.6 开发一个插件。我已经创建了一些自定义规则(检查),现在,我想创建一个自定义指标,显示一个项目有多少特定规则的问题,例如,规则的问题数量 MyCustomRule

我知道 SonarQube 用户可以转到问题页面并使用这些特定规则的名称进行过滤,这样他们就可以看到存在多少问题,但我想要措施<页面上的数字/em>.

我有一个实现 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);
    }
}

这个类定义了一个output metric,就是我之前说的issues number。在方法 compute 中,它获取每个文件的度量值 MY_CUSTOM_METRIC 并将它们全部相加。最后,它创建度量 MY_CUSTOM_METRIC,这是问题的数量。

此时,我需要在每个文件中定义度量值MY_CUSTOM_METRIC,以便MyMeasureComputer可以计算它,但我不知道该怎么做它。我认为它应该在 Sensor 中:

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?
    }

}

在方法 execute 中,我可以在每个文件中设置一个带有示例值 (10) 的指标并且它有效;我可以在 SonarQube UI(页面“Measures”)中看到它以及每 10 个的总和:

Total

Every file

我的问题是:

  • 如何获取特定规则的问题数?

  • 是否应该在 Sensor 类中完成?

  • 有可能吗?

谢谢。

最佳答案

MeasureComputer 在每个组件上执行:文件、目录、模块和项目。

  • 在文件 ( Component#getType#FILE ) 上,您可以获取问题(使用 MeasureComputerContext#getIssues ),计算来自规则 MyCustomRule 的问题数量, 然后使用 MeasureComputerContext#addMeasure 保存它.

  • 在非文件组件上,您计算子项的度量并保存它,这是您编写的代码。

你的代码看起来像这样:

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) { 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); }

关于java - 创建一个指标,显示 SonarQube 5.6 中特定规则的问题数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45982534/

相关文章:

plugins - 插件依赖最佳实践

eclipse - 如何使用键盘快捷键移动 Eclipse 选项卡?

javascript - 如何从 Sonar 分析中排除已编译资源的子文件夹?

java - 将生成的文件输入回程序中

java - static 修饰符是否会更改 java 中类成员的访问级别?

javascript - Cordova/Phonegap 通过 JavaScript inappbrowser 打印

maven-3 - Sonar Pitest插件

java - 线程 "main"java.lang.UnsupportedClassVersionError : org/sonarsource/scanner/cli/Main : Unsupported major. 次要版本 52.0 中的 Jenkins 异常

java - 使用 Apache Beam 的 Join 类时出现问题

java - Swagger/Openapi 和 openapi-generator 我们在哪里添加业务逻辑代码?