Calculate even intervals for. Sometimes we need to have periodic tasks to be executed exactly at certain time points, for example running a task every 15 minutes.
- At the beginning of hour,
- 15th minute,
- 30th minute,
- 45th minute.
So instead of doing it manually, it is better if it is automated.
Available functions:
Every.minute/1
Every.minutes/2
Every.hour/1
Every.hours/2
Every.day/1
All functions accept an optional relative_to
(DateTime
or NaiveDateTime
)
parameter which can be used to fake the current moment in time. If it is not
provided, the current time will be used.
Every.minute/1
, Every.hour/1
and Every.day/1
only accept the optional
relative_to
parameter. They return the milliseconds left until the next
minute/hour/day.
Every.minutes/2
and Every.hours/2
both accept an interval as first parameter
and the optional relative_to
as second parameter. They return the milliseconds
until the the next interval.
Note: All functions return the difference in milliseconds!
# Lets say we want to trigger our task every 5 minutes and current time is 12:02
# so next calls will be at 12:05, 12:10 ... 12:55 ...
Process.send_after(self(), :work, Every.minutes(5))
# If we want to trigger every minute
Process.send_after(self(), :work, Every.minute())
# If we want to trigger every hour
Process.send_after(self(), :work, Every.hour())
# If we want to trigger every 2 hours
Process.send_after(self(), :work, Every.hours(2))
# If we want to trigger every day
Process.send_after(self(), :work, Every.day())
This library can be installed by adding every
to the list of dependencies in
your mix.exs
:
def deps do
[{:every, "~> 0.0.9"}]
end
Have fun!
✨ 🍰 ✨