View Javadoc
1   /*
2    * The coLAB project
3    * Copyright (C) 2021-2023 AlbaSim, MEI, HEIG-VD, HES-SO
4    *
5    * Licensed under the MIT License
6    */
7   package ch.colabproject.colab.api.controller.monitoring;
8   
9   import ch.colabproject.colab.api.model.monitoring.CronJobLog;
10  import ch.colabproject.colab.api.model.monitoring.CronJobLogName;
11  import ch.colabproject.colab.api.persistence.jpa.monitoring.CronJobLogDao;
12  import org.slf4j.Logger;
13  import org.slf4j.LoggerFactory;
14  
15  import javax.ejb.LocalBean;
16  import javax.ejb.Stateless;
17  import javax.ejb.TransactionAttribute;
18  import javax.ejb.TransactionAttributeType;
19  import javax.inject.Inject;
20  import java.time.OffsetDateTime;
21  
22  /**
23   * Logic to manage cron job logging
24   *
25   * @author mikkelvestergaard
26   */
27  @Stateless
28  @LocalBean
29  public class CronJobLogManager {
30  
31      /**
32       * logger
33       */
34      private static final Logger logger = LoggerFactory.getLogger(CronJobLogManager.class);
35  
36      /**
37       * CronJobLog persistence
38       */
39      @Inject
40      private CronJobLogDao cronJobLogDao;
41  
42      /**
43       * Create a new cronJobLog with given cronJobLogName
44       *
45       * @param jobLogName name of the cronJobLog to create
46       *
47       * @return created cronJobLog
48       */
49      private CronJobLog createCronJobLog(CronJobLogName jobLogName) {
50          CronJobLog cronJobLog = new CronJobLog();
51          cronJobLog.setJobName(jobLogName);
52          cronJobLogDao.persistCronJobLog(cronJobLog);
53  
54          return cronJobLog;
55      }
56  
57      /**
58       * Update a cronJobLog's lastRunTime
59       *
60       * @param jobName name of cronJob to update
61       */
62      @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
63      public void updateCronJobLogLastRunTime(CronJobLogName jobName) {
64          logger.debug("Update cronJobLog lastRunTime {}", jobName);
65  
66          CronJobLog cronJobLog = cronJobLogDao.findCronJobLogByName(jobName);
67  
68          if (cronJobLog == null) {
69              cronJobLog = createCronJobLog(jobName);
70          }
71  
72          OffsetDateTime now = OffsetDateTime.now();
73          cronJobLog.setLastRunTime(now);
74  
75      }
76  }