Logging!
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Vacature> 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");
|
||||
|
||||
|
||||
@@ -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<Vacature> 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("<html>")
|
||||
.append("<head>")
|
||||
.append("<style>")
|
||||
.append("body { font-family: Arial, sans-serif; line-height: 1.6; }")
|
||||
.append("h1 { color: #333; }")
|
||||
.append("h2 { color: #555; }")
|
||||
.append("p { color: #666; }")
|
||||
.append("ul { padding-left: 20px; }")
|
||||
.append("li { margin-bottom: 10px; }")
|
||||
.append(".vacature { margin-bottom: 20px; padding: 10px; border: 1px solid #ddd; border-radius: 5px; background-color: #f9f9f9; }")
|
||||
.append(".vacature h2 { margin: 0; font-size: 18px; color: #333; }")
|
||||
.append(".vacature p { margin: 5px 0; }")
|
||||
.append(".footer { margin-top: 30px; font-size: 14px; color: #999; }")
|
||||
.append("</style>")
|
||||
.append("</head>")
|
||||
.append("<body>")
|
||||
.append("<h1>Lieve Danthe,</h1>")
|
||||
.append("<p>Hier zijn de nieuwste vacatures die ik heb gevonden:</p>")
|
||||
.append("<div>");
|
||||
|
||||
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("<div class=\"vacature\">")
|
||||
.append("<h2>").append(vacature.getTitel()).append("</h2>")
|
||||
.append("<p><strong>Locatie:</strong> ").append(vacature.getLocatie()).append("</p>")
|
||||
.append("<p><strong>Geplaatst:</strong> ").append(vacature.getDetail().getGeplaatst()).append("</p>")
|
||||
.append("<p><strong>Sluitingsdatum:</strong> ").append(vacature.getDetail().getSluitingsdatum()).append("</p>")
|
||||
.append("<p><strong>Salaris:</strong> ").append(vacature.getDetail().getSalaris()).append("</p>")
|
||||
.append("<p><strong>Aantal uren:</strong> ").append(vacature.getDetail().getAantalUren()).append("</p>")
|
||||
.append("<p><strong>FTE:</strong> ").append(vacature.getDetail().getFte()).append("</p>")
|
||||
.append("<p><strong>Startdatum:</strong> ").append(vacature.getDetail().getStartdatum()).append("</p>")
|
||||
.append("<p><strong>Soort vacature:</strong> ").append(vacature.getDetail().getSoortVacature()).append("</p>")
|
||||
.append("<p><strong>Dienstverband:</strong> ").append(vacature.getDetail().getDienstverband()).append("</p>")
|
||||
.append("<p><strong>Zij-instromers:</strong> ").append(vacature.getDetail().getZijInstromers()).append("</p>")
|
||||
.append("<p><a href=\"").append(vacature.getUrl()).append("\" style=\"color: #007bff; text-decoration: none;\">Bekijk vacature</a></p>")
|
||||
.append("</div>");
|
||||
}
|
||||
|
||||
emailBody.append("Met vriendelijke groet,\n");
|
||||
emailBody.append("Het vacatureteam\n");
|
||||
emailBody.append("(a.k.a je vriendje)");
|
||||
emailBody.append("</div>")
|
||||
.append("<div class=\"footer\">")
|
||||
.append("Met vriendelijke groet,<br>")
|
||||
.append("Het vacatureteam<br>")
|
||||
.append("(a.k.a je vriendje)")
|
||||
.append("</div>")
|
||||
.append("</body>")
|
||||
.append("</html>");
|
||||
|
||||
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()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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<Vacature> getServices() throws IOException {
|
||||
List<Vacature> 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<Vacature> 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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user