View Source Runbox.StateStore.ScheduleUtils (runbox v17.1.0)

Module contains functions to compute savepoint timestamps.

Savepoint timestamps are calculated as multiples of schedule.

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.

Types

@type epoch_ms() :: non_neg_integer()

Timestamp defined as unix epoch in milliseconds

@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.

Functions

Link to this function

next_savepoint(schedule, timestamp)

View Source
@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

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)

View Source
@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

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)

View Source
@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

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)

View Source

Returns count of unreached savepoints.

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