(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!))