Process {⨀,⨁,P}
step : ⨁ P → P
run : P → ⊥
get : ⨀ P → P
start : ⊤ → P
Process : #process
Documents : #document | {_,_}
Errors : #error
OKs : #history
Timers, Events : #event
Tasks : #task
Module : { action : 𝝨 P → P }
IO
DEF
IO is a two execution lists of errors and sucesses
DEF — are events, timers, tasks and module of the process
ENV holds an options {_,_} or #documents used in actions
ENV
Timers
#boundaryEvent
name *
timeout {0,{0,30,0}}
Technically each process spawns only one timer which handles ping and also term and step events per step or per process scope.
#event.timeout
#timer{event=ping}
tuneable heartbeat at bpe:config(ping)
erlang timediff
{Day,{Hrs,Min,Sec}}
ping is configuring globally; events are triggered only when distance between now and last event is less than pattern threshold in the #event.timeout description.
#boundaryEvent
'*' — any stage
'StageName' — applied to stage
#timoutEvent
termination event
completion event
'*' — any stage
'StageName' — applied to stage
action {request,'Stage'} P → 1/0,{reply,P}.
Errors
Errors are written to separate #error KVS chain, user may worry about exception or not. If so then user need to depend logic from effects.
#error
kvs:add #error
{ feed_id = { errors, Pid } }
stderr stream
#history
stdout stream
kvs:add #history
{ feed_id = { history, Pid } }
Events
spawn λ → bpe:event Pid #messageEvent
{ payload = pb:service dep close }
Pid = P#process.id