Packages
mist
3.0.0
6.0.3
6.0.2
6.0.1
6.0.0
5.0.4
5.0.3
5.0.2
5.0.1
5.0.0
5.0.0-rc1
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.0.0
1.2.0
1.1.0
1.0.0
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.17.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
a misty Gleam web server
Current section
Files
Jump to
Current section
Files
src/mist@internal@clock.erl
-module(mist@internal@clock).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([stop/1, start/2, get_date/0]).
-export_type([clock_message/0, clock_table/0, table_key/0, ets_opts/0]).
-type clock_message() :: set_time.
-type clock_table() :: mist_clock.
-type table_key() :: date_header.
-type ets_opts() :: set |
protected |
named_table |
{read_concurrency, boolean()}.
-file("/home/alex/gleams/mist/src/mist/internal/clock.gleam", 55).
-spec stop(any()) -> gleam@erlang@atom:atom_().
stop(_) ->
erlang:binary_to_atom(<<"ok"/utf8>>).
-file("/home/alex/gleams/mist/src/mist/internal/clock.gleam", 69).
-spec date() -> binary().
date() ->
_pipe = birl:now(),
birl:to_http(_pipe).
-file("/home/alex/gleams/mist/src/mist/internal/clock.gleam", 28).
-spec start(any(), any()) -> {ok, gleam@erlang@process:pid_()} |
{error, gleam@otp@actor:start_error()}.
start(_, _) ->
_pipe@1 = gleam@otp@actor:start_spec(
{spec,
fun() ->
Subj = gleam@erlang@process:new_subject(),
Selector = begin
_pipe = gleam_erlang_ffi:new_selector(),
gleam@erlang@process:selecting(
_pipe,
Subj,
fun gleam@function:identity/1
)
end,
ets:new(
mist_clock,
[set, protected, named_table, {read_concurrency, true}]
),
gleam@erlang@process:send(Subj, set_time),
{ready, Subj, Selector}
end,
500,
fun(Msg, State) -> case Msg of
set_time ->
ets:insert(mist_clock, {date_header, date()}),
gleam@erlang@process:send_after(State, 1000, set_time),
gleam@otp@actor:continue(State)
end end}
),
gleam@result:map(_pipe@1, fun gleam@erlang@process:subject_owner/1).
-file("/home/alex/gleams/mist/src/mist/internal/clock.gleam", 59).
-spec get_date() -> binary().
get_date() ->
case mist_ffi:ets_lookup_element(mist_clock, date_header, 2) of
{ok, Value} ->
Value;
_ ->
logging:log(
warning,
<<"Failed to lookup date, re-calculating"/utf8>>
),
date()
end.