From cf98081644d46bd6bad54e5d7c698cbc744c5f1c Mon Sep 17 00:00:00 2001 From: veenm Date: Sun, 19 Jan 2025 20:24:39 +0100 Subject: [PATCH] Logging! --- .../jobfindr/resources/VacatureResource.java | 6 ++ .../jobfindr/scrapers/ScraperService.java | 5 ++ .../veenm/jobfindr/services/EmailService.java | 74 +++++++++++++------ .../jobfindr/services/VacatureService.java | 46 ++++++++++-- src/main/resources/application.properties | 12 +++ 5 files changed, 114 insertions(+), 29 deletions(-) diff --git a/src/main/java/nl/veenm/jobfindr/resources/VacatureResource.java b/src/main/java/nl/veenm/jobfindr/resources/VacatureResource.java index 5cbc654..98997e2 100644 --- a/src/main/java/nl/veenm/jobfindr/resources/VacatureResource.java +++ b/src/main/java/nl/veenm/jobfindr/resources/VacatureResource.java @@ -33,4 +33,10 @@ public class VacatureResource { public Vacature getVacature() throws IOException { return vacatureService.getVacature(); } + + @GET + @Path("/clean") + public void cleanVacatures() throws IOException { + vacatureService.cleanVacatures(); + } } diff --git a/src/main/java/nl/veenm/jobfindr/scrapers/ScraperService.java b/src/main/java/nl/veenm/jobfindr/scrapers/ScraperService.java index 077c5b9..899fd54 100644 --- a/src/main/java/nl/veenm/jobfindr/scrapers/ScraperService.java +++ b/src/main/java/nl/veenm/jobfindr/scrapers/ScraperService.java @@ -5,6 +5,7 @@ import jakarta.inject.Inject; import nl.veenm.jobfindr.domain.Vacature; import nl.veenm.jobfindr.domain.VacatureDetail; import nl.veenm.jobfindr.repository.VacatureDetailRepository; +import org.jboss.logging.Logger; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -19,10 +20,14 @@ import java.util.stream.Collectors; @ApplicationScoped public class ScraperService { + private static final Logger log = Logger.getLogger(ScraperService.class); + public List scrapeVacatures(String url) throws IOException { // Maak verbinding met de website Document doc = Jsoup.connect(url).get(); + log.info("Scraping vacatures from " + url); + // Selecteer alle vacature-elementen Elements vacatureElements = doc.select("div.mt-2.text-overflow-ellipsis"); diff --git a/src/main/java/nl/veenm/jobfindr/services/EmailService.java b/src/main/java/nl/veenm/jobfindr/services/EmailService.java index 997e256..3f8b362 100644 --- a/src/main/java/nl/veenm/jobfindr/services/EmailService.java +++ b/src/main/java/nl/veenm/jobfindr/services/EmailService.java @@ -4,6 +4,7 @@ import io.quarkus.mailer.Mail; import io.quarkus.mailer.Mailer; import jakarta.enterprise.context.ApplicationScoped; import nl.veenm.jobfindr.domain.Vacature; +import org.jboss.logging.Logger; import java.time.LocalDateTime; import java.util.List; @@ -11,6 +12,8 @@ import java.util.List; @ApplicationScoped public class EmailService { + private static final Logger log = Logger.getLogger(EmailService.class); + private final Mailer mailer; public EmailService(Mailer mailer) { @@ -18,39 +21,64 @@ public class EmailService { } public void stuurVacatureEmail(String recipient, List vacatures) { - // Bouw de inhoud van de e-mail + // Bouw de HTML-inhoud van de e-mail StringBuilder emailBody = new StringBuilder(); - emailBody.append("Lieve Danthe,\n\n"); - emailBody.append("Hier zijn de nieuwste vacatures die ik heb gevonden:\n\n"); + emailBody.append("") + .append("") + .append("") + .append("") + .append("") + .append("

Lieve Danthe,

") + .append("

Hier zijn de nieuwste vacatures die ik heb gevonden:

") + .append("
"); for (Vacature vacature : vacatures) { - emailBody.append("- ").append(vacature.getTitel()).append("\n"); - emailBody.append(" Locatie: ").append(vacature.getLocatie()).append("\n"); - emailBody.append(" Details: ").append("\n"); - emailBody.append(" -Geplaatst: ").append(vacature.getDetail().getGeplaatst()).append("\n"); - emailBody.append(" -Sluitingsdatum: ").append(vacature.getDetail().getSluitingsdatum()).append("\n"); - emailBody.append(" -Salaris: ").append(vacature.getDetail().getSalaris()).append("\n"); - emailBody.append(" -Aantal uren: ").append(vacature.getDetail().getAantalUren()).append("\n"); - emailBody.append(" -FTE: ").append(vacature.getDetail().getFte()).append("\n"); - emailBody.append(" -Startdatum: ").append(vacature.getDetail().getStartdatum()).append("\n"); - emailBody.append(" -Soort vacature: ").append(vacature.getDetail().getSoortVacature()).append("\n"); - emailBody.append(" -Dienstverband: ").append(vacature.getDetail().getDienstverband()).append("\n"); - emailBody.append(" -Zij-instromers: ").append(vacature.getDetail().getZijInstromers()).append("\n"); - emailBody.append(" Link: ").append(vacature.getUrl()).append("\n\n"); + emailBody.append("
") + .append("

").append(vacature.getTitel()).append("

") + .append("

Locatie: ").append(vacature.getLocatie()).append("

") + .append("

Geplaatst: ").append(vacature.getDetail().getGeplaatst()).append("

") + .append("

Sluitingsdatum: ").append(vacature.getDetail().getSluitingsdatum()).append("

") + .append("

Salaris: ").append(vacature.getDetail().getSalaris()).append("

") + .append("

Aantal uren: ").append(vacature.getDetail().getAantalUren()).append("

") + .append("

FTE: ").append(vacature.getDetail().getFte()).append("

") + .append("

Startdatum: ").append(vacature.getDetail().getStartdatum()).append("

") + .append("

Soort vacature: ").append(vacature.getDetail().getSoortVacature()).append("

") + .append("

Dienstverband: ").append(vacature.getDetail().getDienstverband()).append("

") + .append("

Zij-instromers: ").append(vacature.getDetail().getZijInstromers()).append("

") + .append("

Bekijk vacature

") + .append("
"); } - emailBody.append("Met vriendelijke groet,\n"); - emailBody.append("Het vacatureteam\n"); - emailBody.append("(a.k.a je vriendje)"); + emailBody.append("
") + .append("
") + .append("Met vriendelijke groet,
") + .append("Het vacatureteam
") + .append("(a.k.a je vriendje)") + .append("
") + .append("") + .append(""); LocalDateTime now = LocalDateTime.now(); - String date = now.getDayOfYear() + "-" + now.getMonth().getValue(); + String date = now.getDayOfMonth() + "-" + now.getMonthValue() + "-" + now.getYear(); - String subject = "[%s] Nieuwe vacatures gevonden"; + String subject = String.format("[%s] Nieuwe vacatures gevonden", date); - // Verstuur de e-mail - mailer.send(Mail.withText(recipient, String.format(subject, date), emailBody.toString())); + // Verstuur de e-mail met HTML-inhoud + log.info("Sending email to " + recipient); + mailer.send(Mail.withHtml(recipient, subject, emailBody.toString())); } + } diff --git a/src/main/java/nl/veenm/jobfindr/services/VacatureService.java b/src/main/java/nl/veenm/jobfindr/services/VacatureService.java index f23def9..8220e63 100644 --- a/src/main/java/nl/veenm/jobfindr/services/VacatureService.java +++ b/src/main/java/nl/veenm/jobfindr/services/VacatureService.java @@ -8,9 +8,12 @@ import nl.veenm.jobfindr.domain.Vacature; import nl.veenm.jobfindr.repository.VacatureDetailRepository; import nl.veenm.jobfindr.repository.VacatureRepository; import nl.veenm.jobfindr.scrapers.ScraperService; +import org.jboss.logging.Logger; import java.io.IOException; import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -29,12 +32,13 @@ public class VacatureService { @Inject VacatureDetailRepository vacatureDetailRepository; + private static final Logger logger = Logger.getLogger(VacatureService.class); + public List getServices() throws IOException { List vacatures = new ArrayList<>(); vacatures.addAll(scraperService.scrapeVacatures("https://www.meesterbaan.nl/vacatures/50-km?trefwoord=duits&locatie=Apeldoorn")); vacatures.addAll(scraperService.scrapeVacatures("https://www.meesterbaan.nl/vacatures/50-km?trefwoord=frans&locatie=Apeldoorn")); emailService.stuurVacatureEmail("vanveenmel11@gmail.com", vacatures); -// emailService.stuurVacatureEmail("danthefranken@gmail.com", vacatures); return vacatures; } @@ -70,23 +74,21 @@ public class VacatureService { if (!newVacatures.isEmpty()) { // Sla de nieuwe vacatures op newVacatures.forEach(vacature -> { - System.out.println(newVacatures.size()); vacature.setDatum(today); vacatureDetailRepository.persist(vacature.getDetail()); vacatureRepository.persist(vacature); }); // Verstuur een e-mail -// emailService.stuurVacatureEmail("danthefranken@gmail.com", newVacatures); + emailService.stuurVacatureEmail("danthefranken@gmail.com", newVacatures); emailService.stuurVacatureEmail("vanveenmel11@gmail.com", newVacatures); - System.out.println("Nieuwe vacatures verstuurd en opgeslagen."); + logger.info("Nieuwe vacatures verstuurd en opgeslagen."); } else { - System.out.println("Geen nieuwe vacatures gevonden."); + logger.info("Geen nieuwe vacatures gevonden."); } } @Scheduled(cron = "0 0 9 * * ?") - @Scheduled(cron = "0 53 13 * * ?") @Scheduled(cron = "0 0 17 * * ?") @Transactional void dagelijksControleerEnVerstuur() throws IOException { @@ -94,11 +96,43 @@ public class VacatureService { } public List getAllVacatures() { + logger.info("Get all vacatures"); return vacatureRepository.listAll(); } public Vacature getVacature() throws IOException { return scraperService.getVacatureDetails(new Vacature()); } + + @Scheduled(cron = "0 0 0 * * ?") + @Transactional + public void cleanVacatures() { + logger.info("Cleaning vacatures"); + getAllVacatures().forEach(vacature -> { + var date = convertStringToLocalDate(vacature.getDetail().getSluitingsdatum()); + var today = LocalDate.now(); + + if (date != null) { + if (date.isBefore(today)) { + logger.info("Deleting vacature " + vacature.getTitel()); + vacatureDetailRepository.delete(vacature.getDetail()); + vacatureRepository.delete(vacature); + } + } + + }); + } + + + public static LocalDate convertStringToLocalDate(String dateString) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + try { + return LocalDate.parse(dateString, formatter); + } catch (DateTimeParseException e) { + logger.error("Ongeldige datumstring: " + dateString); + return null; // Of gooi een aangepaste exception als dat gewenst is + } + } + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 138a320..8f1ce5e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,3 +1,4 @@ +# Mailer configuratie quarkus.mailer.from=${MAILER_FROM} quarkus.mailer.host=${MAILER_HOST} quarkus.mailer.port=${MAILER_PORT} @@ -20,4 +21,15 @@ quarkus.http.cors.origins=${CORS_ORIGINS} quarkus.http.cors.methods=GET, POST, PUT, DELETE, OPTIONS quarkus.http.cors.headers=Content-Type, Authorization +#Logger +# Instellen van het logniveau (mogelijkheden: TRACE, DEBUG, INFO, WARN, ERROR, OFF) +quarkus.log.level=INFO + +# Configureren van het formatteren van logs +quarkus.log.console.format=%d{yyyy-MM-dd} %d{HH:mm:ss} %-5p [%c] (%s%e)%n + +# Logs naar een bestand sturen +quarkus.log.file.enable=true +quarkus.log.file.path=logs/app.log +quarkus.log.file.format=%d{yyyy-MM-dd} %d{HH:mm:ss} %-5p [%c] (%s%e)%n