TelemetryStorage newTelemetryStorage(Path path) { return new TelemetryStorage(path); }
private void saveNow() { storage.trySave(data); } }
public TelemetryManager(Path path, TelemetryClient client, Supplier<Boolean> usesConnectedModeSupplier, Supplier<Boolean> usesSonarCloudSupplier) { this.storage = newTelemetryStorage(path); this.usesConnectedModeSupplier = usesConnectedModeSupplier; this.usesSonarCloudSupplier = usesSonarCloudSupplier; this.data = storage.tryLoad(); this.client = client; }
private void save(TelemetryData data) throws IOException { Files.createDirectories(path.getParent()); Gson gson = createGson(); String json = gson.toJson(data); byte[] encoded = Base64.getEncoder().encode(json.getBytes(StandardCharsets.UTF_8)); Files.write(path, encoded); }
void trySave(TelemetryData data) { try { save(data); } catch (Exception e) { if (SonarLintUtils.isInternalDebugEnabled()) { log.error("Error saving telemetry data", e); throw new IllegalStateException(e); } } }
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(); } } }
private void tryMerge() { TelemetryData existing = storage.tryLoad(); if (existing != null) { data.mergeFrom(existing); } }
private TelemetryData load() throws IOException { Gson gson = createGson(); byte[] bytes = Files.readAllBytes(path); byte[] decoded = Base64.getDecoder().decode(bytes); String json = new String(decoded, StandardCharsets.UTF_8); return TelemetryData.validateAndMigrate(gson.fromJson(json, TelemetryData.class)); }