6.8 KiB
6.8 KiB
TODO
- MAJOR Implement configuration manager:
- configuration is a set of signals (that can be organized in group and subgroup) that are used to configure a system or a sub system
- with configuration manager user should be able to:
- Define and manage configuration sets: delete (keep server side copy of deleted config), create (specifying default to parameters, mandatory, optional etc), edit (with versioning git style) and compare set
- user can fork an existing config instance to create a new one
- user can compare two instances: show unified diff or side by side diff
- etc...
- Create, delete (keep server cache), edit (git style versioning) and compare configuration instances: meaning set actual value to a configuration set
- user can fork an existing config instance to create a new one
- user can compare two instances: show unified diff or side by side diff
- etc...
- Define and manage configuration sets: delete (keep server side copy of deleted config), create (specifying default to parameters, mandatory, optional etc), edit (with versioning git style) and compare set
- user can apply and save configuration instances from manager
- instance snapshot: create a new instance from the current live value of all of a set's target signals (optional label, else auto name) — exposed in the config editor (⎙ Snapshot), control loop (
action.config.snapshot) and logic editor (action.config.snapshot) - live diff: compare a stored instance against current signal values ("Diff vs current" button →
/config/instances/{id}/livediff) - git-style versioning for config sets and instances: fork any revision, click to view, promote to current, with unified / side-by-side diff (shared
VersionTree) - in logic editor and control loop add nodes to read/write/create/apply config instances
- apply and read config-instance nodes in both control logic (server Go) and panel logic (client TS)
- create / write nodes (mutate versioned instances from automation) in both engines
- Config Selector panel widget: operator picks an instance of a chosen set (optionally a subset) from a combo, writing its id to a panel-local string variable; apply/read/write panel-logic nodes can read their instance dynamically from that variable ("From variable" source)
- support for all supported types (number, bools, enums, arrays, string etc)
- ux elements for config set
- the configuration editor should automatically get type and info from signal when possible (type is read-only, auto-derived from the bound signal)
- a slick tree drag and drop editor to order elements and organize in group and sub-groups
- possibility to customise unit, max, min etc
- export / import a config set as JSON
- full-screen config window
- ux elements for config instances:
- automatically use the correct setting widget depending on the type (e.g. combo for enum, nubmer input for number):
- for arrays: import csv option, display points as mini plot (+ open dialog plot with more info), manual enter points via table like interface
- automatically fill with default or existing values (when forking an existing instance)
- explicity show errors/missing info and give additional info on hover
- automatically use the correct setting widget depending on the type (e.g. combo for enum, nubmer input for number):
- add advanced validation / transformation framework to configurations using custom CUE rules:
- backend runs validation / transformation rules (real CUE via
cuelang.org/go;internal/confmgr/cue.go). Rules are a third versionedKindbound to a set; evaluated on instance create/update — violations block the save, concrete derivations transform & persist the values - user can create/edit/delete/compare rules from webui (Rules tab in ConfigManager; git-style versioning + side-by-side/unified source diff)
- integrate syntax highlight (hand-rolled
CueEditor.tsx, mirroringLuaEditor) - integrate autocomplete for signals names and cue grammars (param keys + target signals + CUE keywords/types; Ctrl+Space)
integrate cue lsp— descoped: a separate language-server process does not fit the no-npm / single portable-binary architecture
- integrate syntax highlight (hand-rolled
- when validation fails the error is propagated to the user (live
/config/rules/checkpanel while editing; save returns the structured violation) - all actions tracked via history (versioned rules) + audit (
config.rule.create/update/delete/promote/fork)
- backend runs validation / transformation rules (real CUE via
- Improve UX:
- Synthetic editor:
- color code the node link by type
- edges color depends on type (e.g. float) including arrays
- input / outputs are color coded (if can accept many, gray, otherwise specific color, can be dynamic)
- can not connect input / output that are not compatible
- hover on a block in error should show the reason
- add proper array functionality
- add shortcut to add Signals (S) and nodes (N) with HUD
- color code the node link by type
- Panels:
- in view mode the widgets should have no border/bg but blend with background
- add widgets such as toggle switch, table and other industrial hmi widgets
- add container widgets: labelled/title pane, tab panes, collapsable panes etc
- plot pane:
- add toolbar
- add time window selector to toolbar
- plot x-axis synchronised (option to unlink in toolbar)
- cursors and measuraments
- pause/resume
- save screenshot
- clean ui:
- create small statusbar where connection widget and other status related info will be placed
- group advanced items (audit/control loops/config manager etc) in a tool menu or something similar to not fill the toolbar
- make the toolbar as clean as possible
- Synthetic editor:
- Logic editor:
- add full support to local array values: dynamic, dynamic but capped max, fixed size etc:
- array functions should work with new local array
- add full support to local array values: dynamic, dynamic but capped max, fixed size etc:
- Control loop:
- add full support to server side array values
- Implement git style versioning for: synthetic variable, panels, control logic:
- possibility to fork any version
- click to view the version
- possibility to view graphical diff between versions (side by side or unified diff)
- simple slick versioning pane:
- vertical tree like
- each version represented by a circle
- active (the one currently view/edited) version has circle bigger then rest
- selected (the one that will be executed/showed by user) version has circle full, not active only border
- unsaved / new version appear with connection line dashed
- Implement admin pane: create / manage groups, set users permits, manage auditors etc
- Implement new datasources:
- Finalize alarm service
- modbus tcp
- scpi tcp
- udp? other?
- MAJOR Implement proper distributed server side nodes to balance load and have redundancy (if a node is not available anymore all its clients migrate seamelessly to another)