Skip to content

Commit 28f8a88

Browse files
authored
Format code with Spotless (#53)
* Add Spotless * Fix
1 parent 1392b58 commit 28f8a88

39 files changed

Lines changed: 1035 additions & 805 deletions

.editorconfig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
root = true
2+
3+
[*]
4+
end_of_line = lf
5+
insert_final_newline = true
6+
trim_trailing_whitespace = true
7+
8+
[*.java]
9+
indent_style = space
10+
indent_size = 4

.github/workflows/tests.yaml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ concurrency:
1010
cancel-in-progress: true
1111

1212
jobs:
13-
check-pre-commit:
13+
check-spotless:
1414
runs-on: ubuntu-latest
1515
steps:
1616
- uses: actions/checkout@v6
17-
- uses: actions/setup-python@v6
17+
- uses: actions/setup-java@v5
1818
with:
19-
python-version: "3.14"
20-
- uses: pre-commit/action@v3.0.1
19+
java-version: 21
20+
distribution: temurin
21+
- name: Check formatting
22+
run: mvn -B spotless:check
2123

2224
test-coverage:
2325
runs-on: ubuntu-latest

.pre-commit-config.yaml

Lines changed: 0 additions & 7 deletions
This file was deleted.

pom.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,21 @@
112112
<skipResolution>true</skipResolution>
113113
</configuration>
114114
</plugin>
115+
<plugin>
116+
<groupId>com.diffplug.spotless</groupId>
117+
<artifactId>spotless-maven-plugin</artifactId>
118+
<version>3.1.0</version>
119+
<configuration>
120+
<java>
121+
<googleJavaFormat>
122+
<version>1.33.0</version>
123+
<style>AOSP</style>
124+
</googleJavaFormat>
125+
<removeUnusedImports />
126+
<formatAnnotations />
127+
</java>
128+
</configuration>
129+
</plugin>
115130
</plugins>
116131
</build>
117132

src/main/java/io/apitally/common/ApitallyAppender.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package io.apitally.common;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
5-
6-
import org.slf4j.LoggerFactory;
7-
83
import ch.qos.logback.classic.Logger;
94
import ch.qos.logback.classic.LoggerContext;
105
import ch.qos.logback.classic.spi.ILoggingEvent;
116
import ch.qos.logback.core.AppenderBase;
12-
137
import io.apitally.common.dto.LogRecord;
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
import org.slf4j.LoggerFactory;
1411

1512
public class ApitallyAppender extends AppenderBase<ILoggingEvent> {
1613
private static final String NAME = "ApitallyAppender";

src/main/java/io/apitally/common/ApitallyClient.java

Lines changed: 115 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.apitally.common;
22

3+
import io.apitally.common.dto.Path;
4+
import io.apitally.common.dto.StartupData;
5+
import io.apitally.common.dto.SyncData;
36
import java.io.InputStream;
47
import java.net.URI;
58
import java.net.http.HttpClient;
@@ -17,15 +20,10 @@
1720
import java.util.concurrent.ScheduledExecutorService;
1821
import java.util.concurrent.ScheduledFuture;
1922
import java.util.concurrent.TimeUnit;
20-
2123
import org.slf4j.Logger;
2224
import org.slf4j.LoggerFactory;
2325
import org.springframework.retry.support.RetryTemplate;
2426

25-
import io.apitally.common.dto.Path;
26-
import io.apitally.common.dto.StartupData;
27-
import io.apitally.common.dto.SyncData;
28-
2927
public class ApitallyClient {
3028
public static class RetryableHubRequestException extends Exception {
3129
public RetryableHubRequestException(String message) {
@@ -46,16 +44,18 @@ public enum HubRequestStatus {
4644
private static final int INITIAL_PERIOD_SECONDS = 3600;
4745
private static final int MAX_QUEUE_TIME_SECONDS = 3600;
4846
private static final int REQUEST_TIMEOUT_SECONDS = 10;
49-
private static final String HUB_BASE_URL = Optional.ofNullable(System.getenv("APITALLY_HUB_BASE_URL"))
50-
.filter(s -> !s.trim().isEmpty())
51-
.orElse("https://hub.apitally.io");
47+
private static final String HUB_BASE_URL =
48+
Optional.ofNullable(System.getenv("APITALLY_HUB_BASE_URL"))
49+
.filter(s -> !s.trim().isEmpty())
50+
.orElse("https://hub.apitally.io");
5251

5352
private static final Logger logger = LoggerFactory.getLogger(ApitallyClient.class);
54-
private static final RetryTemplate retryTemplate = RetryTemplate.builder()
55-
.maxAttempts(3)
56-
.exponentialBackoff(Duration.ofSeconds(1), 2, Duration.ofSeconds(4), true)
57-
.retryOn(RetryableHubRequestException.class)
58-
.build();
53+
private static final RetryTemplate retryTemplate =
54+
RetryTemplate.builder()
55+
.maxAttempts(3)
56+
.exponentialBackoff(Duration.ofSeconds(1), 2, Duration.ofSeconds(4), true)
57+
.retryOn(RetryableHubRequestException.class)
58+
.build();
5959

6060
private final String clientId;
6161
private final String env;
@@ -121,31 +121,35 @@ private void sendStartupData() {
121121
if (startupData == null) {
122122
return;
123123
}
124-
HttpRequest request = HttpRequest.newBuilder()
125-
.uri(getHubUrl("startup"))
126-
.header("Content-Type", "application/json")
127-
.POST(HttpRequest.BodyPublishers.ofString(startupData.toJSON()))
128-
.build();
129-
sendHubRequest(request).thenAccept(status -> {
130-
if (status == HubRequestStatus.OK) {
131-
startupDataSent = true;
132-
startupData = null;
133-
} else if (status == HubRequestStatus.VALIDATION_ERROR) {
134-
startupDataSent = false;
135-
startupData = null;
136-
} else {
137-
startupDataSent = false;
138-
}
139-
});
124+
HttpRequest request =
125+
HttpRequest.newBuilder()
126+
.uri(getHubUrl("startup"))
127+
.header("Content-Type", "application/json")
128+
.POST(HttpRequest.BodyPublishers.ofString(startupData.toJSON()))
129+
.build();
130+
sendHubRequest(request)
131+
.thenAccept(
132+
status -> {
133+
if (status == HubRequestStatus.OK) {
134+
startupDataSent = true;
135+
startupData = null;
136+
} else if (status == HubRequestStatus.VALIDATION_ERROR) {
137+
startupDataSent = false;
138+
startupData = null;
139+
} else {
140+
startupDataSent = false;
141+
}
142+
});
140143
}
141144

142145
private void sendSyncData() {
143-
SyncData data = new SyncData(
144-
instanceLock.getInstanceUuid(),
145-
requestCounter.getAndResetRequests(),
146-
validationErrorCounter.getAndResetValidationErrors(),
147-
serverErrorCounter.getAndResetServerErrors(),
148-
consumerRegistry.getAndResetConsumers());
146+
SyncData data =
147+
new SyncData(
148+
instanceLock.getInstanceUuid(),
149+
requestCounter.getAndResetRequests(),
150+
validationErrorCounter.getAndResetValidationErrors(),
151+
serverErrorCounter.getAndResetServerErrors(),
152+
consumerRegistry.getAndResetConsumers());
149153
syncDataQueue.offer(data);
150154

151155
int i = 0;
@@ -158,11 +162,12 @@ private void sendSyncData() {
158162
// Add random delay between retries
159163
Thread.sleep(100 + random.nextInt(400));
160164
}
161-
HttpRequest request = HttpRequest.newBuilder()
162-
.uri(getHubUrl("sync"))
163-
.header("Content-Type", "application/json")
164-
.POST(HttpRequest.BodyPublishers.ofString(payload.toJSON()))
165-
.build();
165+
HttpRequest request =
166+
HttpRequest.newBuilder()
167+
.uri(getHubUrl("sync"))
168+
.header("Content-Type", "application/json")
169+
.POST(HttpRequest.BodyPublishers.ofString(payload.toJSON()))
170+
.build();
166171
HubRequestStatus status = sendHubRequest(request).join();
167172
if (status == HubRequestStatus.RETRYABLE_ERROR) {
168173
syncDataQueue.offer(payload);
@@ -191,11 +196,12 @@ private void sendLogData() {
191196
}
192197
}
193198
try (InputStream inputStream = logFile.getInputStream()) {
194-
HttpRequest request = HttpRequest.newBuilder()
195-
.uri(getHubUrl("log", "uuid=" + logFile.getUuid().toString()))
196-
.header("Content-Type", "application/octet-stream")
197-
.POST(HttpRequest.BodyPublishers.ofInputStream(() -> inputStream))
198-
.build();
199+
HttpRequest request =
200+
HttpRequest.newBuilder()
201+
.uri(getHubUrl("log", "uuid=" + logFile.getUuid().toString()))
202+
.header("Content-Type", "application/octet-stream")
203+
.POST(HttpRequest.BodyPublishers.ofInputStream(() -> inputStream))
204+
.build();
199205
HubRequestStatus status = sendHubRequest(request).join();
200206
if (status == HubRequestStatus.PAYMENT_REQUIRED) {
201207
requestLogger.clear();
@@ -217,70 +223,87 @@ private void sendLogData() {
217223
}
218224

219225
public CompletableFuture<HubRequestStatus> sendHubRequest(HttpRequest request) {
220-
return CompletableFuture.supplyAsync(() -> {
221-
try {
222-
return retryTemplate.execute(context -> {
226+
return CompletableFuture.supplyAsync(
227+
() -> {
223228
try {
224-
logger.debug("Sending request to Apitally hub: {}", request.uri());
225-
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
226-
if (response.statusCode() >= 200 && response.statusCode() < 300) {
227-
return HubRequestStatus.OK;
228-
} else if (response.statusCode() == 402) {
229-
return HubRequestStatus.PAYMENT_REQUIRED;
230-
} else if (response.statusCode() == 404) {
231-
enabled = false;
232-
stopSync();
233-
requestLogger.close();
234-
logger.error("Invalid Apitally client ID: {}", clientId);
235-
return HubRequestStatus.INVALID_CLIENT_ID;
236-
} else if (response.statusCode() == 422) {
237-
logger.error("Received validation error from Apitally hub: {}", response.body());
238-
return HubRequestStatus.VALIDATION_ERROR;
239-
} else {
240-
throw new RetryableHubRequestException(
241-
"Hub request failed with status code " + response.statusCode());
242-
}
229+
return retryTemplate.execute(
230+
context -> {
231+
try {
232+
logger.debug(
233+
"Sending request to Apitally hub: {}",
234+
request.uri());
235+
HttpResponse<String> response =
236+
httpClient.send(
237+
request,
238+
HttpResponse.BodyHandlers.ofString());
239+
if (response.statusCode() >= 200
240+
&& response.statusCode() < 300) {
241+
return HubRequestStatus.OK;
242+
} else if (response.statusCode() == 402) {
243+
return HubRequestStatus.PAYMENT_REQUIRED;
244+
} else if (response.statusCode() == 404) {
245+
enabled = false;
246+
stopSync();
247+
requestLogger.close();
248+
logger.error(
249+
"Invalid Apitally client ID: {}", clientId);
250+
return HubRequestStatus.INVALID_CLIENT_ID;
251+
} else if (response.statusCode() == 422) {
252+
logger.error(
253+
"Received validation error from Apitally hub: {}",
254+
response.body());
255+
return HubRequestStatus.VALIDATION_ERROR;
256+
} else {
257+
throw new RetryableHubRequestException(
258+
"Hub request failed with status code "
259+
+ response.statusCode());
260+
}
261+
} catch (Exception e) {
262+
throw new RetryableHubRequestException(
263+
"Hub request failed with exception: "
264+
+ e.getMessage());
265+
}
266+
});
243267
} catch (Exception e) {
244-
throw new RetryableHubRequestException(
245-
"Hub request failed with exception: " + e.getMessage());
268+
logger.error("Error sending request to Apitally hub", e);
269+
return HubRequestStatus.RETRYABLE_ERROR;
246270
}
247271
});
248-
} catch (Exception e) {
249-
logger.error("Error sending request to Apitally hub", e);
250-
return HubRequestStatus.RETRYABLE_ERROR;
251-
}
252-
});
253272
}
254273

255274
public void startSync() {
256275
if (scheduler == null) {
257-
scheduler = Executors.newSingleThreadScheduledExecutor(r -> {
258-
Thread thread = new Thread(r, "apitally-sync");
259-
thread.setDaemon(true);
260-
return thread;
261-
});
276+
scheduler =
277+
Executors.newSingleThreadScheduledExecutor(
278+
r -> {
279+
Thread thread = new Thread(r, "apitally-sync");
280+
thread.setDaemon(true);
281+
return thread;
282+
});
262283
}
263284

264285
if (syncTask != null) {
265286
syncTask.cancel(false);
266287
}
267288

268289
// Start with shorter initial sync interval
269-
syncTask = scheduler.scheduleAtFixedRate(
270-
this::sync,
271-
0,
272-
INITIAL_SYNC_INTERVAL_SECONDS,
273-
TimeUnit.SECONDS);
290+
syncTask =
291+
scheduler.scheduleAtFixedRate(
292+
this::sync, 0, INITIAL_SYNC_INTERVAL_SECONDS, TimeUnit.SECONDS);
274293

275294
// Schedule a one-time task to switch to regular sync interval
276-
scheduler.schedule(() -> {
277-
syncTask.cancel(false);
278-
syncTask = scheduler.scheduleAtFixedRate(
279-
this::sync,
280-
SYNC_INTERVAL_SECONDS,
281-
SYNC_INTERVAL_SECONDS,
282-
TimeUnit.SECONDS);
283-
}, INITIAL_PERIOD_SECONDS, TimeUnit.SECONDS);
295+
scheduler.schedule(
296+
() -> {
297+
syncTask.cancel(false);
298+
syncTask =
299+
scheduler.scheduleAtFixedRate(
300+
this::sync,
301+
SYNC_INTERVAL_SECONDS,
302+
SYNC_INTERVAL_SECONDS,
303+
TimeUnit.SECONDS);
304+
},
305+
INITIAL_PERIOD_SECONDS,
306+
TimeUnit.SECONDS);
284307
}
285308

286309
public void stopSync() {

src/main/java/io/apitally/common/ConsumerRegistry.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package io.apitally.common;
22

3+
import io.apitally.common.dto.Consumer;
34
import java.util.ArrayList;
45
import java.util.HashMap;
56
import java.util.HashSet;
67
import java.util.List;
78
import java.util.Map;
89
import java.util.Set;
910

10-
import io.apitally.common.dto.Consumer;
11-
1211
public class ConsumerRegistry {
1312
private final Map<String, Consumer> consumers;
1413
private final Set<String> updated;
@@ -57,7 +56,8 @@ public void addOrUpdateConsumer(Consumer consumer) {
5756
}
5857

5958
if (hasChanges) {
60-
consumers.put(consumer.getIdentifier(),
59+
consumers.put(
60+
consumer.getIdentifier(),
6161
new Consumer(consumer.getIdentifier(), newName, newGroup));
6262
updated.add(consumer.getIdentifier());
6363
}

0 commit comments

Comments
 (0)