110 lines
2.7 KiB
Markdown
110 lines
2.7 KiB
Markdown
# todo:
|
|
- purge legacy converters:
|
|
- ...
|
|
- block generator
|
|
- type hints for definitions
|
|
- key warnings
|
|
- bailouts for:
|
|
- blockly json
|
|
- docs markdown
|
|
- dev server
|
|
- clean gh:a, ensure tests run correctly
|
|
|
|
|
|
### Action Specification
|
|
|
|
```js
|
|
const actionSpecification = {
|
|
// version of this JSON spec
|
|
version: "1.0.0-beta.1",
|
|
|
|
// job-level settings
|
|
settings: {},
|
|
|
|
// list of top-level expressions ("commands")
|
|
expressions: [
|
|
{ conditional: {
|
|
if: {
|
|
compare: {
|
|
left: { variable: "temperature" },
|
|
comparator: ">=",
|
|
right: 90
|
|
}
|
|
},
|
|
then: { publish: {
|
|
feed: { feed: "Feed:Thermostat" },
|
|
value: 85
|
|
}},
|
|
else: {
|
|
conditional: {
|
|
if: {
|
|
compare: {
|
|
left: { variable: "temperature" },
|
|
comparator: "<=",
|
|
right: 70
|
|
}
|
|
},
|
|
then: { publish: {
|
|
feed: { feed: "Feed:Thermostat" },
|
|
value: 75
|
|
}}
|
|
}
|
|
}
|
|
}}
|
|
]
|
|
}}
|
|
```
|
|
|
|
|
|
Validate/Parse/Save Routine
|
|
=============
|
|
- validate against json schema
|
|
- catch broad issues of data well-formedness
|
|
- validate permissions on all referenced resources
|
|
- catch hacking and data leaks
|
|
- validate IO account standing
|
|
- no SMS without IO+!
|
|
- find all "triggerables":
|
|
- feed references
|
|
- temporal references (dates, times, durations, schedules)
|
|
- power-up features
|
|
- hoist ids to a db column
|
|
- model_references or something, ["Feed:12345", "PowerUp:54321"]
|
|
- so those resources can query what actions reference them
|
|
- clear/register observers
|
|
- cron schedules
|
|
- feed hooks
|
|
- power-up apis
|
|
|
|
|
|
Execution
|
|
=========
|
|
- initialize:
|
|
- set up observers:
|
|
- watchdog timer
|
|
- expression constrainer
|
|
- system monitor
|
|
- stats reporter
|
|
- run logger (to support live-view of running job, or later replay)
|
|
- set up a variable context
|
|
- hash/openstruct/w/e with controlled access (namespacing, security)
|
|
- pre-fill with global data, feed values, power-up info, etc
|
|
- execute `expressions[]`
|
|
- synchronously
|
|
- later could be async via Threads, Fibers, or sidekiq jobs
|
|
- **only** executes and notifies observers
|
|
- use observers for all other desired behavior
|
|
- cleanup:
|
|
- ask all observers to finalize/report
|
|
- timestamps, completion statuses, logs, etc
|
|
- job status updates
|
|
- disable, error, etc as appropriate
|
|
- failure cleanup: expected errors the user might cause
|
|
- show good error/log messages
|
|
- help them fix their own problems
|
|
- notify us as appropriate
|
|
- error cleanup:
|
|
- includes unexpected errors that:
|
|
- need to come to our attention
|
|
- need to be hidden from the user but give good messaging
|
|
- maybe provide the user a way to reference this issue to us
|