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;
8   
9   import ch.colabproject.colab.api.controller.common.DeletionManager;
10  import ch.colabproject.colab.api.controller.document.ExternalDataManager;
11  import ch.colabproject.colab.api.controller.monitoring.CronJobLogManager;
12  import ch.colabproject.colab.api.model.monitoring.CronJobLogName;
13  import ch.colabproject.colab.api.security.SessionManager;
14  import org.slf4j.Logger;
15  import org.slf4j.LoggerFactory;
16  
17  import jakarta.ejb.Schedule;
18  import jakarta.ejb.Singleton;
19  import jakarta.ejb.Startup;
20  import jakarta.inject.Inject;
21  
22  /**
23   * Do periodic tasks
24   *
25   * @author maxence
26   */
27  @Singleton
28  @Startup
29  public class CronTab {
30  
31      /** logger */
32      private static final Logger logger = LoggerFactory.getLogger(CronTab.class);
33  
34      /** session manager */
35      @Inject
36      private SessionManager sessionManager;
37  
38      /** To manager OpenGraph cache */
39      @Inject
40      private ExternalDataManager externalDataManager;
41  
42      /** To manage CronJobLogs */
43      @Inject
44      private CronJobLogManager cronJobLogManager;
45  
46      /** To access coLAB entities for deletion */
47      @Inject
48      private DeletionManager deletionManager;
49  
50      /**
51       * Each minute
52       */
53      @Schedule(hour = "*", minute = "*", persistent = false)
54      public void saveActivityDates() {
55          logger.trace("CRON: Persist activity dates to database");
56          sessionManager.writeActivityDatesToDatabaseInTrn();
57          cronJobLogManager.updateCronJobLogLastRunTime(CronJobLogName.SAVE_ACTIVITIES_DATE);
58      }
59  
60      /**
61       * each midnight, clear expired sessions
62       */
63      @Schedule(hour = "0", minute = "0", persistent = false)
64      public void dropOldHttpSession() {
65          logger.info("CRON: drop expired http session");
66          sessionManager.clearExpiredHttpSessionsInTrn();
67          cronJobLogManager.updateCronJobLogLastRunTime(CronJobLogName.DROP_OLD_HTTP_SESSIONS);
68      }
69  
70      /**
71       * each 00:30, clean outdated UrlMetadata
72       */
73      @Schedule(hour = "0", minute = "30", persistent = false)
74      public void dropOldUrlMetadata() {
75          logger.info("CRON: clean url metadata cache");
76          externalDataManager.clearOutdated();
77          cronJobLogManager.updateCronJobLogLastRunTime(CronJobLogName.DROP_OLD_URL_METADATA);
78      }
79  
80      /**
81       * each one o'clock, definitively delete data
82       */
83      @Schedule(hour = "1", minute = "0", persistent = false)
84      public void cleanBinColabEntities() {
85          logger.info("CRON: clean bin");
86          deletionManager.cleanBinInTrn();
87          cronJobLogManager.updateCronJobLogLastRunTime(CronJobLogName.CLEAN_BIN);
88      }
89  
90      /**
91       * each one o'clock, definitively delete data
92       */
93      @Schedule(hour = "1", minute = "30", persistent = false)
94      public void deleteForeverColabEntities() {
95          logger.info("CRON: Delete forever old obsolete colab entities");
96          deletionManager.deleteForeverInTrn();
97          cronJobLogManager.updateCronJobLogLastRunTime(CronJobLogName.DELETE_FOREVER);
98      }
99  }