public boolean isEnabled() { return data.enabled(); }
/** * Merge from existing telemetry data to avoid overwriting values * that might be more up to date than the current instance. * * @param other existing telemetry data to merge from */ void mergeFrom(TelemetryData other) { if (isOlder(lastUseDate, other.lastUseDate)) { lastUseDate = other.lastUseDate; } if (other.numUseDays > numUseDays) { numUseDays = other.numUseDays; installTime = other.installTime; } if (isOlder(lastUploadDateTime, other.lastUploadDateTime)) { lastUploadDateTime = other.lastUploadDateTime; } }
if (data.installDate() != null && (data.installTime() == null || data.installTime().toLocalDate().isAfter(data.installDate()))) { data.setInstallTime(data.installDate.atTime(OffsetTime.now())); if (data.installTime() == null || data.installTime().isAfter(OffsetDateTime.now())) { data.setInstallTime(OffsetDateTime.now()); LocalDate lastUseDate = data.lastUseDate(); if (lastUseDate == null) { data.setNumUseDays(0); data.analyzers = new LinkedHashMap<>(); return data; if (lastUseDate.isBefore(data.installTime().toLocalDate())) { data.setLastUseDate(data.installTime().toLocalDate()); } else if (lastUseDate.isAfter(today)) { data.setLastUseDate(today); long maxUseDays = data.installTime().toLocalDate().until(data.lastUseDate(), DAYS) + 1; if (data.numUseDays() > maxUseDays) { data.setNumUseDays(maxUseDays); data.setLastUseDate(data.lastUseDate());
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); }
/** * 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 void tryMerge() { TelemetryData existing = storage.tryLoad(); if (existing != null) { data.mergeFrom(existing); } }
TelemetryData tryLoad() { try { if (!Files.isRegularFile(path)) { return new TelemetryData(); } return load(); } catch (Exception e) { if (SonarLintUtils.isInternalDebugEnabled()) { log.error("Error loading telemetry data", e); throw new IllegalStateException(e); } return new TelemetryData(); } } }