Crontab.Scheduler (crontab v1.2.0)

View Source

This module provides the functionality to retrieve the next run date or the previous run date from a %CronExpression{}.

Summary

Functions

This function provides the functionality to retrieve the next run date from a %Crontab.CronExpression{}.

This function provides the functionality to retrieve the next run date from a %Crontab.CronExpression{}.

Find the next execution dates relative to a given date from a %CronExpression{}.

This function provides the functionality to retrieve the previous run date from a %Crontab.CronExpression{}.

This function provides the functionality to retrieve the previous run date from a %Crontab.CronExpression{}.

Find the previous n execution dates relative to a given date from a %CronExpression{}.

Types

date()

@type date() :: DateTime.t() | NaiveDateTime.t()

direction()

@type direction() :: :increment | :decrement

result()

@type result() :: maybe(date(), any())

Functions

get_next_run_date(cron_expression, date \\ NaiveDateTime.utc_now(), max_runs \\ 10000)

@spec get_next_run_date(Crontab.CronExpression.t(), date(), integer()) :: result()

This function provides the functionality to retrieve the next run date from a %Crontab.CronExpression{}.

Examples

iex> Crontab.Scheduler.get_next_run_date(%Crontab.CronExpression{}, ~N[2002-01-13 23:00:07])
{:ok, ~N[2002-01-13 23:01:00]}

iex> Crontab.Scheduler.get_next_run_date(
...>   %Crontab.CronExpression{year: [{:/, :*, 9}]},
...>   ~N[2002-01-13 23:00:07]
...> )
{:ok, ~N[2007-01-01 00:00:00]}

iex> Crontab.Scheduler.get_next_run_date(%Crontab.CronExpression{reboot: true})
** (RuntimeError) Special identifier @reboot is not supported.

get_next_run_date!(cron_expression, date \\ NaiveDateTime.utc_now(), max_runs \\ 10000)

@spec get_next_run_date!(Crontab.CronExpression.t(), date(), integer()) :: date()

This function provides the functionality to retrieve the next run date from a %Crontab.CronExpression{}.

Examples

iex> Crontab.Scheduler.get_next_run_date!(%Crontab.CronExpression{}, ~N[2002-01-13 23:00:07])
~N[2002-01-13 23:01:00]

iex> Crontab.Scheduler.get_next_run_date!(
...>   %Crontab.CronExpression{year: [1990]},
...>   ~N[2002-01-13 23:00:07]
...> )
** (RuntimeError) No compliant date was found for your interval.

iex> Crontab.Scheduler.get_next_run_date!(
...>   %Crontab.CronExpression{year: [{:/, :*, 9}]},
...>   ~N[2002-01-13 23:00:07]
...> )
~N[2007-01-01 00:00:00]

iex> Crontab.Scheduler.get_next_run_date!(%Crontab.CronExpression{reboot: true})
** (RuntimeError) Special identifier @reboot is not supported.

get_next_run_dates(cron_expression, date \\ NaiveDateTime.utc_now())

@spec get_next_run_dates(Crontab.CronExpression.t(), date()) :: Enumerable.t()

Find the next execution dates relative to a given date from a %CronExpression{}.

Examples

iex> Enum.take(
...>   Crontab.Scheduler.get_next_run_dates(
...>     %Crontab.CronExpression{extended: true},
...>     ~N[2016-12-17 00:00:00]
...>   ),
...>   3
...> )
[
  ~N[2016-12-17 00:00:00],
  ~N[2016-12-17 00:00:01],
  ~N[2016-12-17 00:00:02]
]

iex> Enum.take(
...>   Crontab.Scheduler.get_next_run_dates(
...>     %Crontab.CronExpression{},
...>     ~N[2016-12-17 00:00:00]
...>   ),
...>   3
...> )
[
  ~N[2016-12-17 00:00:00],
  ~N[2016-12-17 00:01:00],
  ~N[2016-12-17 00:02:00]
]

iex> Enum.take(
...>   Crontab.Scheduler.get_next_run_dates(
...>     %Crontab.CronExpression{
...>       year: [2017],
...>       month: [1],
...>       day: [1],
...>       hour: [0],
...>       minute: [1]
...>     },
...>     ~N[2016-12-17 00:00:00]
...>   ),
...>   3
...> )
[~N[2017-01-01 00:01:00]]

iex> Enum.take(Crontab.Scheduler.get_next_run_dates(%Crontab.CronExpression{reboot: true}), 3)
** (RuntimeError) Special identifier @reboot is not supported.

get_previous_run_date(cron_expr, date \\ NaiveDateTime.utc_now(), max_runs \\ 10000)

@spec get_previous_run_date(Crontab.CronExpression.t(), date(), integer()) :: result()

This function provides the functionality to retrieve the previous run date from a %Crontab.CronExpression{}.

Examples

iex> Crontab.Scheduler.get_previous_run_date(
...>   %Crontab.CronExpression{},
...>   ~N[2002-01-13 23:00:07]
...> )
{:ok, ~N[2002-01-13 23:00:00]}

iex> Crontab.Scheduler.get_previous_run_date(
...>   %Crontab.CronExpression{
...>     year: [{:/, :*, 9}]
...>   },
...>   ~N[2002-01-13 23:00:07]
...> )
{:ok, ~N[1998-12-31 23:59:00]}

iex> Crontab.Scheduler.get_previous_run_date(%Crontab.CronExpression{reboot: true})
** (RuntimeError) Special identifier @reboot is not supported.

get_previous_run_date!(cron_expression, date \\ NaiveDateTime.utc_now(), max_runs \\ 10000)

@spec get_previous_run_date!(Crontab.CronExpression.t(), date(), integer()) :: date()

This function provides the functionality to retrieve the previous run date from a %Crontab.CronExpression{}.

Examples

iex> Crontab.Scheduler.get_previous_run_date!(
...>   %Crontab.CronExpression{},
...>   ~N[2002-01-13 23:00:07]
...> )
~N[2002-01-13 23:00:00]

iex> Crontab.Scheduler.get_previous_run_date!(
...>   %Crontab.CronExpression{year: [2100]},
...>   ~N[2002-01-13 23:00:07]
...> )
** (RuntimeError) No compliant date was found for your interval.

iex> Crontab.Scheduler.get_previous_run_date!(
...>   %Crontab.CronExpression{
...>     year: [{:/, :*, 9}]
...>   },
...>   ~N[2002-01-13 23:00:07]
...> )
~N[1998-12-31 23:59:00]

iex> Crontab.Scheduler.get_previous_run_date!(%Crontab.CronExpression{reboot: true})
** (RuntimeError) Special identifier @reboot is not supported.

get_previous_run_dates(cron_expression, date \\ NaiveDateTime.utc_now())

@spec get_previous_run_dates(Crontab.CronExpression.t(), date()) :: Enumerable.t()

Find the previous n execution dates relative to a given date from a %CronExpression{}.

Examples

iex> Enum.take(
...>   Crontab.Scheduler.get_previous_run_dates(
...>     %Crontab.CronExpression{extended: true},
...>     ~N[2016-12-17 00:00:00]
...>   ),
...>   3
...> )
[
  ~N[2016-12-17 00:00:00],
  ~N[2016-12-16 23:59:59],
  ~N[2016-12-16 23:59:58]
]

iex> Enum.take(
...>   Crontab.Scheduler.get_previous_run_dates(
...>     %Crontab.CronExpression{},
...>     ~N[2016-12-17 00:00:00]
...>   ),
...>   3
...> )
[
  ~N[2016-12-17 00:00:00],
  ~N[2016-12-16 23:59:00],
  ~N[2016-12-16 23:58:00]
]

iex> Enum.take(
...>   Crontab.Scheduler.get_previous_run_dates(
...>     %Crontab.CronExpression{
...>       year: [2017],
...>       month: [1],
...>       day: [1],
...>       hour: [0],
...>       minute: [1]
...>     },
...>     ~N[2016-12-17 00:00:00]
...>   ),
...>   3
...> )
[]

iex> Enum.take(
...>   Crontab.Scheduler.get_previous_run_dates(%Crontab.CronExpression{reboot: true}),
...>   3
...> )
** (RuntimeError) Special identifier @reboot is not supported.