From f6904d27c9f60dba64d8b7d8f666e40e6973c66c Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Thu, 16 May 2013 19:24:20 +1000 Subject: [PATCH] Update: User Cache Prune Seperation Avoids other assemblies from requiring Quartz just to get CurrentUser --- Disco.BI/BI/UserBI/UserCache.cs | 51 +----------------------- Disco.BI/BI/UserBI/UserCachePruneTask.cs | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 49 deletions(-) create mode 100644 Disco.BI/BI/UserBI/UserCachePruneTask.cs diff --git a/Disco.BI/BI/UserBI/UserCache.cs b/Disco.BI/BI/UserBI/UserCache.cs index b7cc24cf..2339ef81 100644 --- a/Disco.BI/BI/UserBI/UserCache.cs +++ b/Disco.BI/BI/UserBI/UserCache.cs @@ -12,7 +12,7 @@ using Disco.Services.Tasks; namespace Disco.BI.UserBI { - public class UserCache : ScheduledTask + public class UserCache { private static ConcurrentDictionary> _Cache = new ConcurrentDictionary>(); private const long CacheTimeoutTicks = 6000000000; // 10 Minutes @@ -129,7 +129,7 @@ namespace Disco.BI.UserBI return _Cache.TryAdd(key, userRecord); } - private static void CleanStaleCache() + internal static void CleanStaleCache() { var usernames = _Cache.Keys.ToArray(); foreach (string username in usernames) @@ -142,52 +142,5 @@ namespace Disco.BI.UserBI } } } - - //public void InitalizeScheduledTask(DiscoDataContext dbContext, IScheduler Scheduler) - //{ - // // Run @ every 15mins - - // // Next 15min interval - // DateTime now = DateTime.Now; - // int mins = (15 - (now.Minute % 15)); - // if (mins < 10) - // mins += 15; - // DateTimeOffset startAt = new DateTimeOffset(now).AddMinutes(mins).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1); - - // IJobDetail jobDetail = new JobDetailImpl("UserCache_CleanStaleCache", typeof(UserCache)); - // ITrigger trigger = TriggerBuilder.Create(). - // WithIdentity("UserCache_CleanStaleCacheTrigger").StartAt(startAt). - // WithSchedule(SimpleScheduleBuilder.RepeatMinutelyForever(15)). - // Build(); - // Scheduler.ScheduleJob(jobDetail, trigger); - //} - - public override string TaskName { get { return "User Cache - Clean Stale Cache"; } } - - public override bool SingleInstanceTask { get { return true; } } - public override bool CancelInitiallySupported { get { return false; } } - public override bool LogExceptionsOnly { get { return true; } } - - public override void InitalizeScheduledTask(DiscoDataContext dbContext) - { - // Run @ every 15mins - - // Next 15min interval - DateTime now = DateTime.Now; - int mins = (15 - (now.Minute % 15)); - if (mins < 10) - mins += 15; - DateTimeOffset startAt = new DateTimeOffset(now).AddMinutes(mins).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1); - - TriggerBuilder triggerBuilder = TriggerBuilder.Create().StartAt(startAt). - WithSchedule(SimpleScheduleBuilder.RepeatMinutelyForever(15)); - - this.ScheduleTask(triggerBuilder); - } - - protected override void ExecuteTask() - { - CleanStaleCache(); - } } } diff --git a/Disco.BI/BI/UserBI/UserCachePruneTask.cs b/Disco.BI/BI/UserBI/UserCachePruneTask.cs new file mode 100644 index 00000000..a758d26a --- /dev/null +++ b/Disco.BI/BI/UserBI/UserCachePruneTask.cs @@ -0,0 +1,42 @@ +using Disco.Data.Repository; +using Disco.Services.Tasks; +using Quartz; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Disco.BI.UserBI +{ + public class UserCachePruneTask : ScheduledTask + { + public override string TaskName { get { return "User Cache - Clean Stale Cache"; } } + + public override bool SingleInstanceTask { get { return true; } } + public override bool CancelInitiallySupported { get { return false; } } + public override bool LogExceptionsOnly { get { return true; } } + + public override void InitalizeScheduledTask(DiscoDataContext dbContext) + { + // Run @ every 15mins + + // Next 15min interval + DateTime now = DateTime.Now; + int mins = (15 - (now.Minute % 15)); + if (mins < 10) + mins += 15; + DateTimeOffset startAt = new DateTimeOffset(now).AddMinutes(mins).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1); + + TriggerBuilder triggerBuilder = TriggerBuilder.Create().StartAt(startAt). + WithSchedule(SimpleScheduleBuilder.RepeatMinutelyForever(15)); + + this.ScheduleTask(triggerBuilder); + } + + protected override void ExecuteTask() + { + UserCache.CleanStaleCache(); + } + } +}