CronJobLogManager.java
/*
 * The coLAB project
 * Copyright (C) 2021-2023 AlbaSim, MEI, HEIG-VD, HES-SO
 *
 * Licensed under the MIT License
 */
package ch.colabproject.colab.api.controller.monitoring;
import ch.colabproject.colab.api.model.monitoring.CronJobLog;
import ch.colabproject.colab.api.model.monitoring.CronJobLogName;
import ch.colabproject.colab.api.persistence.jpa.monitoring.CronJobLogDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.inject.Inject;
import java.time.OffsetDateTime;
/**
 * Logic to manage cron job logging
 *
 * @author mikkelvestergaard
 */
@Stateless
@LocalBean
public class CronJobLogManager {
    /**
     * logger
     */
    private static final Logger logger = LoggerFactory.getLogger(CronJobLogManager.class);
    /**
     * CronJobLog persistence
     */
    @Inject
    private CronJobLogDao cronJobLogDao;
    /**
     * Create a new cronJobLog with given cronJobLogName
     *
     * @param jobLogName name of the cronJobLog to create
     *
     * @return created cronJobLog
     */
    private CronJobLog createCronJobLog(CronJobLogName jobLogName) {
        CronJobLog cronJobLog = new CronJobLog();
        cronJobLog.setJobName(jobLogName);
        cronJobLogDao.persistCronJobLog(cronJobLog);
        return cronJobLog;
    }
    /**
     * Update a cronJobLog's lastRunTime
     *
     * @param jobName name of cronJob to update
     */
    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    public void updateCronJobLogLastRunTime(CronJobLogName jobName) {
        logger.debug("Update cronJobLog lastRunTime {}", jobName);
        CronJobLog cronJobLog = cronJobLogDao.findCronJobLogByName(jobName);
        if (cronJobLog == null) {
            cronJobLog = createCronJobLog(jobName);
        }
        OffsetDateTime now = OffsetDateTime.now();
        cronJobLog.setLastRunTime(now);
    }
}