Skip to content

Instantly share code, notes, and snippets.

@wrobstory
Last active August 29, 2015 14:21
Show Gist options
  • Save wrobstory/e3e0057fa9001831f689 to your computer and use it in GitHub Desktop.
Save wrobstory/e3e0057fa9001831f689 to your computer and use it in GitHub Desktop.
Sliding Window Queue
;; Assume we initialize this queue at 11:00
(def time-queue (SlidingWindowQueue "1", "HOUR"))
;; We put some things in it over the hour
(put time-queue {:time "2015-05-21 11:01:00" :value 18})
(put time-queue {:time "2015-05-21 11:29:00" :value 10})
(put time-queue {:time "2015-05-21 11:31:00" :value 15})
(put time-queue {:time "2015-05-21 11:45:00" :value 7})
(get-all time-queue)
[{:time "2015-05-21 11:01:00" :value 1}
{:time "2015-05-21 11:29:00" :value 10}
{:time "2015-05-21 11:31:00" :value 15}
{:time "2015-05-21 11:45:00" :value 5}]
;; It's now 11:50, and we want to aggregate
(count-window time-queue 15 "minutes")
[{:window ["10:50:00" "11:05:00"] :count 1}
{:window ["11:05:00" "11:20:00"] :count 0}
{:window ["11:20:00" "11:35:00"] :count 2}
{:window ["11:35:00" "11:50:00"] :count 1}]
(count-all time-queue)
3
(window-sum time-queue 15 "minutes" :value)
[{:window ["10:50:00" "11:05:00"] :sum 18}
{:window ["11:05:00" "11:20:00"] :sum 0}
{:window ["11:20:00" "11:35:00"] :sum 25}
{:window ["11:35:00" "11:50:00"] :sum 7}]
(window-mean time-queue 20 "minutes" :value)
[{:window ["10:50:00" "11:10:00"] :mean 18}
{:window ["11:10:00" "11:30:00"] :mean 10}
{:window ["11:30:00" "11:50:00"] :mean 11}]
;; It's now 12:10, and we put a new thing on the queue
;; Anything earlier than 11:10 should be dropped from the queue
(put time-queue {:time "2015-05-21 12:10:00" :value 20})
(get-all time-queue)
[{:time "2015-05-21 11:29:00" :value 10}
{:time "2015-05-21 11:31:00" :value 15}
{:time "2015-05-21 12:10:00" :value 20}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment