public void analysisDoneOnSingleFile(@Nullable String fileExtension, int analysisTimeMs) { String language = TelemetryUtils.getLanguage(fileExtension); data.setUsedAnalysis(language, analysisTimeMs); mergeAndSave(); }
private static TelemetryAnalyzerPerformancePayload toPayload(Map.Entry<String, TelemetryAnalyzerPerformance> entry) { TelemetryAnalyzerPerformance analyzerPerformance = entry.getValue(); String language = entry.getKey(); int analysisCount = analyzerPerformance.analysisCount(); Map<String, BigDecimal> distribution = analyzerPerformance .frequencies().entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> { if (analysisCount == 0) { return BigDecimal.ZERO.setScale(2); } return BigDecimal.valueOf(100) .multiply(BigDecimal.valueOf(e.getValue())) .divide(BigDecimal.valueOf(analysisCount), 2, RoundingMode.HALF_EVEN); }, throwingMerger(), LinkedHashMap::new)); return new TelemetryAnalyzerPerformancePayload(language, distribution); }
/** * Upload telemetry data, when all conditions are satisfied: * - the day is different from the last upload * - the grace period has elapsed since the last upload * To be called periodically once a day. */ public void uploadLazily() { if (!dayChanged(data.lastUploadTime(), MIN_HOURS_BETWEEN_UPLOAD)) { return; } tryMerge(); if (!dayChanged(data.lastUploadTime(), MIN_HOURS_BETWEEN_UPLOAD)) { return; } data.setLastUploadTime(); saveNow(); client.upload(data, usesConnectedModeSupplier.get(), usesSonarCloudSupplier.get()); data.clearAnalyzers(); saveNow(); }
private TelemetryPayload createPayload(TelemetryData data, boolean usesConnectedMode, boolean usesSonarCloud) { OffsetDateTime systemTime = OffsetDateTime.now(); long daysSinceInstallation = data.installTime().until(systemTime, ChronoUnit.DAYS); TelemetryAnalyzerPerformancePayload[] analyzers = TelemetryUtils.toPayload(data.analyzers()); return new TelemetryPayload(daysSinceInstallation, data.numUseDays(), product, version, usesConnectedMode, usesSonarCloud, systemTime, data.installTime(), analyzers); }