Last active
August 29, 2015 14:21
-
-
Save wrobstory/e3e0057fa9001831f689 to your computer and use it in GitHub Desktop.
Sliding Window Queue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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