Показать пользовательский сонар мера по сравнению типа проекта

У меня есть метрики, которые сканируют файлы JSON. Но когда я анализирую проект Java, мои пользовательские метрики (которые изначально предназначены для файлов JSON) отображаются на веб-сайте сонара. Я заметил, что есть "setHidden", поэтому я попытался использовать это значение без успеха.

Я хотел бы понять, как вызывается CoreMetrics "FUNCTION", которая вычисляет количество функций в Java-файле. Потому что этот показатель не вызывается при сканировании файла JSON. Я оставляю вам пример моего кода ниже

Мой датчик, который получает файлы, анализирует каждый файл и сохраняет метрики со значением:

public class SwaggerMetricsSensor implements Sensor {
Logger logger = Loggers.get(SwaggerMetricsSensor.class);

@Override
public void describe(SensorDescriptor descriptor) {
    descriptor.name("Get Metrics");
}

@Override public void execute(SensorContext context) {
    SwaggerParser parser = new SwaggerParser();

    FileSystem fs = context.fileSystem();
    Iterable<InputFile> files = fs.inputFiles(fs.predicates().hasType(InputFile.Type.MAIN));

    for (InputFile file : files) {
        if (file.toString().endsWith(".json")){
            try {
                Swagger swagger = parser.parse(
                        IOUtils.toString(file.inputStream(),
                                Charset.defaultCharset())
                );
                SwaggerMetricsAnalyzer analyzer = new SwaggerMetricsAnalyzer();
                if (swagger != null){
                    analyzer.analyze(swagger);
                    save(context, file, DESCRIBED_OBJECT_COUNT, false, analyzer.getMethodCount());
                    save(context, file, METHODS_COUNT, false, analyzer.getDescribedObjectCount());
                    save(context, file, OBJECT_COUNT, false, analyzer.getObjectCount());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("FILE" + file.toString());
            save(context, file, DESCRIBED_OBJECT_COUNT, true, 0);
            save(context, file, METHODS_COUNT, true, 0);
            save(context, file, OBJECT_COUNT, true, 0);
        }
    }

}

private <T extends Serializable> void save(SensorContext context, InputFile file, Metric<T> metric, Boolean hidden, T value) {
    System.out.println("SAVE : " + metric.setHidden(hidden));
    context.<T>newMeasure().forMetric(metric.setHidden(hidden)).on(file).withValue(value).save();
}

Мои swaggerMetrics, которые объявляют мои метрики:

public class SwaggerMetrics implements Metrics {

public static final Metric<Integer> METHODS_COUNT = new Metric.Builder("method_count", "Methods count", Metric.ValueType.INT)
        .setDescription("Methods count")
        .setDirection(Metric.DIRECTION_BETTER)
        .setQualitative(false)
        .setHidden(false)
        .setDomain(CoreMetrics.DOMAIN_SIZE)
        .create();

public static final Metric<Integer> DESCRIBED_OBJECT_COUNT = new Metric.Builder("described_object_count", "Described object count", Metric.ValueType.INT)
        .setDescription("Described object count")
        .setDirection(Metric.DIRECTION_BETTER)
        .setQualitative(false)
        .setHidden(false)
        .setDomain(CoreMetrics.DOMAIN_SIZE)
        .create();

public static final Metric<Integer> OBJECT_COUNT = new Metric.Builder("object_count", "Object count", Metric.ValueType.INT)
        .setDescription("Object count")
        .setDirection(Metric.DIRECTION_BETTER)
        .setQualitative(false)
        .setHidden(false)
        .setDomain(CoreMetrics.DOMAIN_SIZE)
        .create();


/**
 *
 * @return metrics list
 */
@Override
public List<Metric> getMetrics() {
    System.out.println("getMetrics : " + METHODS_COUNT.isHidden());
    System.out.println("FUNCTIONS  : " + CoreMetrics.FUNCTIONS.isHidden());
    return asList(METHODS_COUNT, DESCRIBED_OBJECT_COUNT, OBJECT_COUNT);
}

И пример MeasureComputer:

public class ComputeObjectCount implements MeasureComputer {
@Override
public MeasureComputerDefinition define(MeasureComputerDefinitionContext defContext) {
    return defContext.newDefinitionBuilder()
            .setOutputMetrics(OBJECT_COUNT.key())
            .build();
}

@Override
public void compute(MeasureComputerContext context) {
    if (context.getComponent().getType() != Component.Type.FILE){
        int sum = 0;
        for (Measure child : context.getChildrenMeasures(OBJECT_COUNT.getKey())){
            sum += child.getIntValue();
        }
        context.addMeasure(OBJECT_COUNT.getKey(), sum);
    }

}

0 ответов

Другие вопросы по тегам