check the mojang api statuses in parallel
All checks were successful
Deploy App / docker (ubuntu-latest, 2.44.0, 17, 3.8.5) (push) Successful in 1m38s
All checks were successful
Deploy App / docker (ubuntu-latest, 2.44.0, 17, 3.8.5) (push) Successful in 1m38s
This commit is contained in:
parent
4d4e8557d8
commit
0b187a852c
@ -12,6 +12,8 @@ import java.net.http.HttpClient;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
@Log4j2
|
||||
@SpringBootApplication
|
||||
@ -20,6 +22,7 @@ public class Main {
|
||||
.setDateFormat("MM-dd-yyyy HH:mm:ss")
|
||||
.create();
|
||||
public static final HttpClient HTTP_CLIENT = HttpClient.newHttpClient();
|
||||
public static final ExecutorService EXECUTOR_POOL = Executors.newFixedThreadPool(8); // Adjust the thread pool size as per your requirement
|
||||
|
||||
@SneakyThrows
|
||||
public static void main(String[] args) {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cc.fascinated.service;
|
||||
|
||||
import cc.fascinated.Main;
|
||||
import cc.fascinated.common.EndpointStatus;
|
||||
import cc.fascinated.common.ExpiringSet;
|
||||
import cc.fascinated.common.WebRequest;
|
||||
@ -26,6 +27,7 @@ import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Service @Log4j2 @Getter
|
||||
@ -180,9 +182,9 @@ public class MojangService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status of the Mojang API.
|
||||
* Gets the status of the Mojang APIs.
|
||||
*
|
||||
* @return the status of the Mojang API
|
||||
* @return the status
|
||||
*/
|
||||
public CachedEndpointStatus getMojangApiStatus() {
|
||||
log.info("Getting Mojang API status");
|
||||
@ -192,18 +194,40 @@ public class MojangService {
|
||||
return endpointStatus.get();
|
||||
}
|
||||
|
||||
// Fetch the status of the Mojang APIs
|
||||
Map<String, Boolean> endpoints = new HashMap<>();
|
||||
// Fetch the status of the Mojang API endpoints
|
||||
List<CompletableFuture<Boolean>> futures = new ArrayList<>();
|
||||
for (EndpointStatus endpoint : MOJANG_ENDPOINTS) {
|
||||
CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(() -> {
|
||||
boolean online = false;
|
||||
ResponseEntity<?> response = WebRequest.get(endpoint.getEndpoint(), String.class);
|
||||
if (endpoint.getAllowedStatuses().contains(response.getStatusCode())) {
|
||||
online = true;
|
||||
}
|
||||
return online;
|
||||
}, Main.EXECUTOR_POOL);
|
||||
|
||||
futures.add(future);
|
||||
}
|
||||
|
||||
//
|
||||
CompletableFuture<Void> allFutures = CompletableFuture.allOf(
|
||||
futures.toArray(new CompletableFuture[0]));
|
||||
|
||||
try {
|
||||
allFutures.get(5, TimeUnit.SECONDS); // Timeout in 10 seconds
|
||||
} catch (Exception e) {
|
||||
log.error("Timeout while fetching Mojang API status: {}", e.getMessage());
|
||||
}
|
||||
|
||||
// Process the results
|
||||
Map<String, Boolean> endpoints = new HashMap<>();
|
||||
for (int i = 0; i < MOJANG_ENDPOINTS.size(); i++) {
|
||||
EndpointStatus endpoint = MOJANG_ENDPOINTS.get(i);
|
||||
boolean online = futures.get(i).join();
|
||||
endpoints.put(endpoint.getEndpoint(), online);
|
||||
}
|
||||
log.info("Fetched Mojang API status for {} endpoints", endpoints.size());
|
||||
|
||||
log.info("Fetched Mojang API status for {} endpoints", endpoints.size());
|
||||
CachedEndpointStatus status = new CachedEndpointStatus(
|
||||
MOJANG_ENDPOINT_STATUS_KEY,
|
||||
endpoints,
|
||||
|
Loading…
Reference in New Issue
Block a user