From 132a0438ef6d7ed764ed5aee0436d19c091c9c0f Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Mon, 22 May 2023 15:14:05 +0000 Subject: [PATCH] chore(avs): fix #34 by scheduling avs background updates --- config/settings.yml | 7 +++++-- src/Handler/Admin.hs | 3 ++- src/Jobs/Crontab.hs | 24 ++++++++++++++++++++++++ src/Jobs/Types.hs | 5 +++++ src/Settings.hs | 8 +++++++- 5 files changed, 43 insertions(+), 4 deletions(-) diff --git a/config/settings.yml b/config/settings.yml index f5714203d..ecc94093d 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -81,8 +81,11 @@ health-check-ldap-admins-timeout: "_env:HEALTHCHECK_LDAP_ADMINS_TIMEOUT:60" health-check-http-reachable-timeout: "_env:HEALTHCHECK_HTTP_REACHABLE_TIMEOUT:2" health-check-matching-cluster-config-timeout: "_env:HEALTHCHECK_MATCHING_CLUSTER_CONFIG_TIMEOUT:2" -synchronise-ldap-users-within: "_env:SYNCHRONISE_LDAP_WITHIN:1209600" -synchronise-ldap-users-interval: "_env:SYNCHRONISE_LDAP_INTERVAL:3600" +synchronise-ldap-users-within: "_env:SYNCHRONISE_LDAP_WITHIN:1209600" # 14 Tage in Sekunden +synchronise-ldap-users-interval: "_env:SYNCHRONISE_LDAP_INTERVAL:3600" # jede Stunde + +synchronise-avs-users-within: "_env:SYNCHRONISE_AVS_WITHIN:5702400" # alle 66 Tage +synchronise-avs-users-interval: "_env:SYNCHRONISE_AVS_INTERVAL:21600" # alle 6 Stunden study-features-recache-relevance-within: 172800 study-features-recache-relevance-interval: 293 diff --git a/src/Handler/Admin.hs b/src/Handler/Admin.hs index 983a083d3..a434ace81 100644 --- a/src/Handler/Admin.hs +++ b/src/Handler/Admin.hs @@ -56,7 +56,8 @@ getAdminProblemsR = do (Left e) -> return $ Left $ text2widget $ tshow (e :: SomeException) (Right AvsLicenceDifferences{..}) -> do let problemIds = avsLicenceDiffRevokeAll <> avsLicenceDiffGrantVorfeld <> avsLicenceDiffRevokeRollfeld <> avsLicenceDiffGrantRollfeld - mapM_ (queueJob' . flip JobSynchroniseAvsId cutOffAvsSynch) problemIds + -- mapM_ (queueJob' . flip JobSynchroniseAvsId cutOffAvsSynch) problemIds + runDBJobs . forM_ problemIds $ queueDBJob . flip JobSynchroniseAvsId cutOffAvsSynch return $ Right ( Set.size avsLicenceDiffRevokeAll , Set.size avsLicenceDiffGrantVorfeld diff --git a/src/Jobs/Crontab.hs b/src/Jobs/Crontab.hs index 0a191fd75..d660e3552 100644 --- a/src/Jobs/Crontab.hs +++ b/src/Jobs/Crontab.hs @@ -332,6 +332,30 @@ determineCrontab = execWriterT $ do | otherwise -> return () + if + | is _Just appAvsConf + , Just syncWithin <- appSynchroniseAvsUsersWithin + , Just cInterval <- appJobCronInterval + -> do + nextIntervals <- getNextIntervals syncWithin appSynchroniseAvsUsersInterval cInterval + + forM_ nextIntervals $ \(nextEpoch, nextInterval, nextIntervalTime, numIntervals) -> do + tell $ HashMap.singleton + (JobCtlQueue JobSynchroniseAvs + { jEpoch = fromInteger nextEpoch + , jNumIterations = fromInteger numIntervals + , jIteration = fromInteger nextInterval + , jSynchAfter = Nothing + }) + Cron + { cronInitial = CronTimestamp $ utcToLocalTimeTZ appTZ nextIntervalTime + , cronRepeat = CronRepeatNever + , cronRateLimit = appSynchroniseLdapUsersInterval + , cronNotAfter = Right . CronTimestamp . utcToLocalTimeTZ appTZ $ addUTCTime appSynchroniseAvsUsersInterval nextIntervalTime + } + | otherwise + -> return () + whenIsJust ((,) <$> appPruneUnreferencedFilesWithin <*> appJobCronInterval) $ \(within, cInterval) -> do nextIntervals <- getNextIntervals within appPruneUnreferencedFilesInterval cInterval forM_ nextIntervals $ \(nextEpoch, nextInterval, nextIntervalTime, numIntervals) -> do diff --git a/src/Jobs/Types.hs b/src/Jobs/Types.hs index 4a2a9787e..8325d40fc 100644 --- a/src/Jobs/Types.hs +++ b/src/Jobs/Types.hs @@ -89,6 +89,11 @@ data Job , jIteration :: Natural } | JobSynchroniseLdapUser { jUser :: UserId } + | JobSynchroniseAvs { jNumIterations + , jEpoch + , jIteration :: Natural + , jSynchAfter :: Maybe UTCTime + } | JobSynchroniseAvsUser { jUser :: UserId , jSynchAfter :: Maybe UTCTime } diff --git a/src/Settings.hs b/src/Settings.hs index 9d58ca747..5b6c139cb 100644 --- a/src/Settings.hs +++ b/src/Settings.hs @@ -165,6 +165,9 @@ data AppSettings = AppSettings , appSynchroniseLdapUsersWithin :: Maybe NominalDiffTime , appSynchroniseLdapUsersInterval :: NominalDiffTime + , appSynchroniseAvsUsersWithin :: Maybe NominalDiffTime + , appSynchroniseAvsUsersInterval :: NominalDiffTime + , appLdapReTestFailover :: DiffTime , appSessionFilesExpire :: NominalDiffTime @@ -690,9 +693,12 @@ instance FromJSON AppSettings where appSessionTimeout <- o .: "session-timeout" - appSynchroniseLdapUsersWithin <- o .:? "synchronise-ldap-users-within" + appSynchroniseLdapUsersWithin <- o .:? "synchronise-ldap-users-within" appSynchroniseLdapUsersInterval <- o .: "synchronise-ldap-users-interval" + appSynchroniseAvsUsersWithin <- o .:? "synchronise-avs-users-within" + appSynchroniseAvsUsersInterval <- o .: "synchronise-avs-users-interval" + appLdapReTestFailover <- o .: "ldap-re-test-failover" appSessionFilesExpire <- o .: "session-files-expire"