Runbox.StateStore.ScheduleUtils (runbox v1.2.0)

Module contains functions to compute savepoint timestamps.

Savepoint timestamps are calculated as multiples of schedule.

Link to this section Summary

Types

Timestamp defined as unix epoch in milliseconds

Difference between two unix epoch timestamps in milliseconds

Interval (in seconds) between savepoint timestamps.

Functions

Returns next savepoint based on given schedule and timestamp.

Returns previous savepoint based on given schedule and timestamp.

Returns unreached savepoints based on given schedule in range of given timestamps (from; to>

Returns count of unreached savepoints.

Link to this section Types

@type epoch_ms() :: non_neg_integer()

Timestamp defined as unix epoch in milliseconds

Link to this type

epoch_ms_interval()

@type epoch_ms_interval() :: non_neg_integer()

Difference between two unix epoch timestamps in milliseconds

@type schedule() :: epoch_ms_interval() | :none

Interval (in seconds) between savepoint timestamps.

Link to this section Functions

Link to this function

next_savepoint(schedule, timestamp)

@spec next_savepoint(schedule(), epoch_ms()) :: epoch_ms()

Returns next savepoint based on given schedule and timestamp.

Next savepoint is calculated as next multiple of schedule larger or equal to given timestamp.

examples

Examples

iex> Runbox.StateStore.ScheduleUtils.next_savepoint(60_000, 0)
60_000

iex> Runbox.StateStore.ScheduleUtils.next_savepoint(60_000, 10_000)
60_000

iex> Runbox.StateStore.ScheduleUtils.next_savepoint(60_000, 60_000)
120_000
Link to this function

previous_savepoint(schedule, timestamp)

@spec previous_savepoint(schedule(), epoch_ms()) :: epoch_ms()

Returns previous savepoint based on given schedule and timestamp.

Next savepoint is calculated as previous multiple of schedule lower or equal to given timestamp.

examples

Examples

iex> Runbox.StateStore.ScheduleUtils.previous_savepoint(60_000, 30_000)
0

iex> Runbox.StateStore.ScheduleUtils.previous_savepoint(60_000, 60_000)
60_000

iex> Runbox.StateStore.ScheduleUtils.previous_savepoint(60_000, 90_000)
60_000

iex> Runbox.StateStore.ScheduleUtils.previous_savepoint(60_000, 120_000)
120_000

iex> Runbox.StateStore.ScheduleUtils.previous_savepoint(60_000, 150_000)
120_000
Link to this function

unreached_savepoints(schedule, from, to)

@spec unreached_savepoints(schedule(), epoch_ms(), epoch_ms()) :: [epoch_ms()]

Returns unreached savepoints based on given schedule in range of given timestamps (from; to>

examples

Examples

iex> Runbox.StateStore.ScheduleUtils.unreached_savepoints(60_000, 0, 120_000)
[60_000, 120_000]

iex> Runbox.StateStore.ScheduleUtils.unreached_savepoints(60_000, 60_000, 120_000)
[120_000]

iex> Runbox.StateStore.ScheduleUtils.unreached_savepoints(60_000, 60_000, 180_000)
[120_000, 180_000]
Link to this function

unreached_savepoints_count(schedule, from, to)

Returns count of unreached savepoints.

examples

Examples

iex> Runbox.StateStore.ScheduleUtils.unreached_savepoints_count(60_000, 0, 120_000)
2

iex> Runbox.StateStore.ScheduleUtils.unreached_savepoints_count(60_000, 60_000, 120_000)
1

iex> Runbox.StateStore.ScheduleUtils.unreached_savepoints_count(1, 0, 120_000)
120_000