Search in sources :

Example 16 with Metric

use of org.sonar.ce.task.projectanalysis.metric.Metric in project sonarqube by SonarSource.

the class MeasureRepositoryImpl method loadBatchMeasuresForComponent.

private void loadBatchMeasuresForComponent(Component component) {
    Integer ref = component.getReportAttributes().getRef();
    if (ref == null || !loadedComponents.add(ref)) {
        return;
    }
    try (CloseableIterator<ScannerReport.Measure> readIt = reportReader.readComponentMeasures(component.getReportAttributes().getRef())) {
        while (readIt.hasNext()) {
            ScannerReport.Measure batchMeasure = readIt.next();
            String metricKey = batchMeasure.getMetricKey();
            if (reportMetricValidator.validate(metricKey)) {
                Metric metric = metricRepository.getByKey(metricKey);
                batchMeasureToMeasure.toMeasure(batchMeasure, metric).ifPresent(measure -> delegate.add(component, metric, measure, OverridePolicy.DO_NOT_OVERRIDE));
            }
        }
    }
}
Also used : ScannerReport(org.sonar.scanner.protocol.output.ScannerReport) Metric(org.sonar.ce.task.projectanalysis.metric.Metric)

Example 17 with Metric

use of org.sonar.ce.task.projectanalysis.metric.Metric in project sonarqube by SonarSource.

the class QualityGateEventsStep method notifyUsers.

/**
 * @param rawStatus OK or ERROR + optional text
 */
private void notifyUsers(Component project, QualityGateStatus rawStatus, boolean isNewAlert) {
    QGChangeNotification notification = new QGChangeNotification();
    notification.setDefaultMessage(String.format("Alert on %s: %s", project.getName(), rawStatus.getStatus().getLabel())).setFieldValue("projectName", project.getName()).setFieldValue("projectKey", project.getKey()).setFieldValue("projectVersion", project.getProjectAttributes().getProjectVersion()).setFieldValue("alertName", rawStatus.getStatus().getLabel()).setFieldValue("alertText", rawStatus.getText()).setFieldValue("alertLevel", rawStatus.getStatus().toString()).setFieldValue("isNewAlert", Boolean.toString(isNewAlert));
    Branch branch = analysisMetadataHolder.getBranch();
    if (!branch.isMain()) {
        notification.setFieldValue("branch", branch.getName());
    }
    List<Metric> ratingMetrics = metricRepository.getMetricsByType(MetricType.RATING);
    String ratingMetricsInOneString = ratingMetrics.stream().map(Metric::getName).collect(Collectors.joining(","));
    notification.setFieldValue("ratingMetrics", ratingMetricsInOneString);
    notificationService.deliverEmails(singleton(notification));
    // compatibility with old API
    notificationService.deliver(notification);
}
Also used : Branch(org.sonar.ce.task.projectanalysis.analysis.Branch) QGChangeNotification(org.sonar.server.qualitygate.notification.QGChangeNotification) Metric(org.sonar.ce.task.projectanalysis.metric.Metric)

Example 18 with Metric

use of org.sonar.ce.task.projectanalysis.metric.Metric in project sonarqube by SonarSource.

the class QualityGateMeasuresStep method updateMeasures.

private void updateMeasures(Component project, Set<Condition> conditions, QualityGateDetailsDataBuilder builder) {
    Multimap<Metric, Condition> conditionsPerMetric = conditions.stream().collect(MoreCollectors.index(Condition::getMetric, java.util.function.Function.identity()));
    boolean ignoredConditions = false;
    for (Map.Entry<Metric, Collection<Condition>> entry : conditionsPerMetric.asMap().entrySet()) {
        Metric metric = entry.getKey();
        Optional<Measure> measure = measureRepository.getRawMeasure(project, metric);
        if (!measure.isPresent()) {
            continue;
        }
        final MetricEvaluationResult metricEvaluationResult = evaluateQualityGate(measure.get(), entry.getValue());
        final MetricEvaluationResult finalMetricEvaluationResult;
        if (smallChangesetQualityGateSpecialCase.appliesTo(project, metricEvaluationResult)) {
            finalMetricEvaluationResult = smallChangesetQualityGateSpecialCase.apply(metricEvaluationResult);
            ignoredConditions = true;
        } else {
            finalMetricEvaluationResult = metricEvaluationResult;
        }
        String text = evaluationResultTextConverter.asText(finalMetricEvaluationResult.condition, finalMetricEvaluationResult.evaluationResult);
        builder.addLabel(text);
        Measure updatedMeasure = Measure.updatedMeasureBuilder(measure.get()).setQualityGateStatus(new QualityGateStatus(finalMetricEvaluationResult.evaluationResult.getLevel(), text)).create();
        measureRepository.update(project, metric, updatedMeasure);
        builder.addEvaluatedCondition(finalMetricEvaluationResult);
    }
    builder.setIgnoredConditions(ignoredConditions);
}
Also used : EvaluatedCondition(org.sonar.ce.task.projectanalysis.measure.qualitygatedetails.EvaluatedCondition) Condition(org.sonar.ce.task.projectanalysis.qualitygate.Condition) QualityGateStatus(org.sonar.ce.task.projectanalysis.measure.QualityGateStatus) Measure(org.sonar.ce.task.projectanalysis.measure.Measure) Collection(java.util.Collection) Metric(org.sonar.ce.task.projectanalysis.metric.Metric) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap)

Example 19 with Metric

use of org.sonar.ce.task.projectanalysis.metric.Metric in project sonarqube by SonarSource.

the class IssueCounter method addNewMeasures.

private void addNewMeasures(Component component) {
    if (!newIssueClassifier.isEnabled()) {
        return;
    }
    double unresolvedVariations = currentCounters.counterForPeriod().unresolved;
    measureRepository.add(component, metricRepository.getByKey(NEW_VIOLATIONS_KEY), Measure.newMeasureBuilder().setVariation(unresolvedVariations).createNoValue());
    for (Map.Entry<String, String> entry : SEVERITY_TO_NEW_METRIC_KEY.entrySet()) {
        String severity = entry.getKey();
        String metricKey = entry.getValue();
        Multiset<String> bag = currentCounters.counterForPeriod().severityBag;
        Metric metric = metricRepository.getByKey(metricKey);
        measureRepository.add(component, metric, Measure.newMeasureBuilder().setVariation(bag.count(severity)).createNoValue());
    }
    // (see call currentCounters.counterForPeriod(period.getIndex()).xxx with xxx as severityBag or typeBag)
    for (Map.Entry<RuleType, String> entry : TYPE_TO_NEW_METRIC_KEY.entrySet()) {
        RuleType type = entry.getKey();
        String metricKey = entry.getValue();
        Multiset<RuleType> bag = currentCounters.counterForPeriod().typeBag;
        Metric metric = metricRepository.getByKey(metricKey);
        measureRepository.add(component, metric, Measure.newMeasureBuilder().setVariation(bag.count(type)).createNoValue());
    }
}
Also used : Metric(org.sonar.ce.task.projectanalysis.metric.Metric) RuleType(org.sonar.api.rules.RuleType) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) HashMap(java.util.HashMap)

Example 20 with Metric

use of org.sonar.ce.task.projectanalysis.metric.Metric in project sonarqube by SonarSource.

the class IssueCounter method addMeasure.

private void addMeasure(Component component, String metricKey, int value) {
    Metric metric = metricRepository.getByKey(metricKey);
    measureRepository.add(component, metric, Measure.newMeasureBuilder().create(value));
}
Also used : Metric(org.sonar.ce.task.projectanalysis.metric.Metric)

Aggregations

Metric (org.sonar.ce.task.projectanalysis.metric.Metric)35 Test (org.junit.Test)16 Measure (org.sonar.ce.task.projectanalysis.measure.Measure)15 UseDataProvider (com.tngtech.java.junit.dataprovider.UseDataProvider)5 MetricImpl (org.sonar.ce.task.projectanalysis.metric.MetricImpl)5 Condition (org.sonar.ce.task.projectanalysis.qualitygate.Condition)4 ImmutableMap (com.google.common.collect.ImmutableMap)2 Map (java.util.Map)2 QualityGateStatus (org.sonar.ce.task.projectanalysis.measure.QualityGateStatus)2 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 RuleType (org.sonar.api.rules.RuleType)1 Branch (org.sonar.ce.task.projectanalysis.analysis.Branch)1 Component (org.sonar.ce.task.projectanalysis.component.Component)1 EvaluatedCondition (org.sonar.ce.task.projectanalysis.measure.qualitygatedetails.EvaluatedCondition)1 QualityGateDetailsData (org.sonar.ce.task.projectanalysis.measure.qualitygatedetails.QualityGateDetailsData)1 MetricType (org.sonar.ce.task.projectanalysis.metric.Metric.MetricType)1 EvaluationResult (org.sonar.ce.task.projectanalysis.qualitygate.EvaluationResult)1 QualityGate (org.sonar.ce.task.projectanalysis.qualitygate.QualityGate)1 TestComputationStepContext (org.sonar.ce.task.step.TestComputationStepContext)1