ruleset town_crier { meta { name "times" use module io.picolabs.plan.apps alias app shares time } global { time = function(_headers){ app:html_page("manage times", "", <<

Manage times

Time installed
#{ent:time_installed}
Time last hour
#{ent:time_last_hour}
Time currently
#{time:now()}

Technical

ent:id = #{ent:id.encode()}

#{schedule:list().map(function(v){ <<
#{v.encode()}
>>}).join("")} >>, _headers) } } rule start { select when town_crier factory_reset if ent:id.isnull() then noop() fired { ent:time_installed := time:now() schedule time event "top_of_the_hour" repeat << 0 * * * * >> attributes { } setting(id) ent:id := id.typeof()=="Map" => id{"id"} | id } } rule hearTheCry { select when time top_of_the_hour fired { ent:time_last_hour := time:now() } } }