summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/session_sweeper.clj19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/session_sweeper.clj b/src/session_sweeper.clj
new file mode 100755
index 0000000..847d504
--- /dev/null
+++ b/src/session_sweeper.clj
@@ -0,0 +1,19 @@
+(ns session-sweeper
+ (:use compojure))
+
+(def *run-pruner* true)
+(def *pruner-sleep-ms* (* 1000 60 5))
+(def *pruner-agent* (agent nil))
+
+(defn prune-compojure-sessions! [x]
+ (doseq [[session-id session] @memory-sessions]
+ (if (< (session :expires-at) (System/currentTimeMillis))
+ (dosync
+ (commute memory-sessions dissoc session-id))))
+ (Thread/sleep *pruner-sleep-ms*)
+ (when *run-pruner*
+ (send *pruner-agent* #'prune-compojure-sessions!))
+ x)
+
+(defn start-session-pruner! []
+ (send *pruner-agent* prune-compojure-sessions!)) \ No newline at end of file