Skip to content

Commit dc22004

Browse files
authored
✨ Feat(scheduler): regularly check api ademe and log errors (#865)
1 parent 689dbe4 commit dc22004

File tree

4 files changed

+68
-1
lines changed

4 files changed

+68
-1
lines changed

dossierfacile-api-owner/src/main/java/fr/dossierfacile/api/dossierfacileapiowner/property/PropertyServiceImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import fr.dossierfacile.common.entity.PropertyLog;
1212
import fr.dossierfacile.common.entity.Tenant;
1313
import fr.dossierfacile.common.enums.OwnerLogType;
14+
import fr.dossierfacile.common.model.AdemeApiResultModel;
1415
import fr.dossierfacile.common.repository.PropertyLogRepository;
1516
import fr.dossierfacile.common.service.interfaces.TenantCommonService;
1617
import fr.dossierfacile.common.utils.MapperUtil;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package fr.dossierfacile.api.dossierfacileapiowner.property;
1+
package fr.dossierfacile.common.model;
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
44
import lombok.AllArgsConstructor;

dossierfacile-task-scheduler/src/main/java/fr/dossierfacile/scheduler/tasks/TaskName.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
public enum TaskName {
44

5+
CHECK_API_ADEME,
56
GARBAGE_COLLECTION,
67
OWNER_DELETE,
78
OWNER_WARNINGS_1,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package fr.dossierfacile.scheduler.tasks.ademe;
2+
3+
import com.fasterxml.jackson.databind.DeserializationFeature;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import fr.dossierfacile.common.model.AdemeApiResultModel;
6+
import fr.dossierfacile.common.utils.MapperUtil;
7+
import fr.dossierfacile.scheduler.LoggingContext;
8+
import lombok.RequiredArgsConstructor;
9+
import lombok.extern.slf4j.Slf4j;
10+
import org.springframework.scheduling.annotation.Scheduled;
11+
import org.springframework.stereotype.Service;
12+
13+
import java.net.URI;
14+
import java.net.URISyntaxException;
15+
import java.net.http.HttpClient;
16+
import java.net.http.HttpRequest;
17+
import java.net.http.HttpResponse;
18+
import java.time.Instant;
19+
import java.util.Date;
20+
import java.util.concurrent.TimeUnit;
21+
22+
import static fr.dossierfacile.scheduler.tasks.TaskName.CHECK_API_ADEME;
23+
24+
@Slf4j
25+
@Service
26+
@RequiredArgsConstructor
27+
public class CheckAdemeApiTask {
28+
private final ObjectMapper objectMapper = MapperUtil.newObjectMapper();
29+
30+
// Used to check if the API is down and log details
31+
@Scheduled(fixedDelayString = "${scheduled.process.check.api.ademe:10}", initialDelayString = "${scheduled.process.check.api.ademe:10}", timeUnit = TimeUnit.MINUTES)
32+
public void checkAdemeApi() {
33+
LoggingContext.startTask(CHECK_API_ADEME);
34+
URI uri;
35+
HttpResponse<String> response;
36+
try {
37+
uri = new URI("https://observatoire-dpe-audit.ademe.fr/pub/dpe/2392E2001612S");
38+
HttpRequest request = HttpRequest.newBuilder()
39+
.uri(uri)
40+
.GET()
41+
.build();
42+
try (HttpClient client = HttpClient.newHttpClient()) {
43+
response = client.send(request, HttpResponse.BodyHandlers.ofString());
44+
String json = response.body();
45+
if (response.statusCode() == 404) {
46+
log.error("ADEME API ERROR 404 : DPE NOT FOUND");
47+
}
48+
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
49+
AdemeApiResultModel ademeApiResultModel = objectMapper.readValue(json, AdemeApiResultModel.class);
50+
51+
if(!ademeApiResultModel.getNumero().equals("2392E2001612S")) {
52+
log.error("ADEME API ERROR : Error with number : {}", ademeApiResultModel.getNumero());
53+
}
54+
if (!ademeApiResultModel.getDateRealisation().equals("2023-06-14T22:00:00Z")) {
55+
log.error("ADEME API ERROR : Error with date : {}", ademeApiResultModel.getDateRealisation());
56+
}
57+
} catch (Exception e) {
58+
log.error("ADEME API ERROR : An error occurred while processing the request", e);
59+
}
60+
} catch (URISyntaxException e) {
61+
log.error("ADEME API ERROR : An URISyntaxException occured", e);
62+
}
63+
LoggingContext.endTask();
64+
}
65+
}

0 commit comments

Comments
 (0)