allow replacement values in target strings, allow frames without keys, correct status handling

This commit is contained in:
andreas 2023-10-09 20:23:40 +02:00
parent 4a93dd8fa4
commit 8e40fa5e9d
2 changed files with 73 additions and 31 deletions

View File

@ -126,16 +126,13 @@ types:
- 1
- 2
- &serial1
type: checkbox
label: 'Serial 1'
key: serial1
values:
- &serialValues
- key: true
children:
- type: select
key: type
target: "define:GWSERIAL_TYPE"
target: "define:#serial#TYPE"
label: "Serial Type"
values:
- key: uni
@ -145,11 +142,11 @@ types:
children:
- <<: *gpiopin
key: RX
target: "define:GWSERIAL_RX"
target: "define:#serial#RX"
mandatory: true
- <<: *gpiopin
key: TX
target: "define:GWSERIAL_TX"
target: "define:#serial#TX"
mandatory: true
- key: bi
value: 2
@ -158,11 +155,11 @@ types:
children:
- <<: *gpiopin
key: RX
target: "define:GWSERIAL_RX"
target: "define:#serial#RX"
mandatory: true
- <<: *gpiopin
key: TX
target: "define:GWSERIAL_TX"
target: "define:#serial#TX"
mandatory: true
- key: rx
value: 3
@ -171,7 +168,7 @@ types:
children:
- <<: *gpiopin
key: RX
target: "define:GWSERIAL_RX"
target: "define:#serial#RX"
mandatory: true
- key: tx
value: 1
@ -180,8 +177,24 @@ types:
children:
- <<: *gpiopin
key: TX
target: "define:GWSERIAL_TX"
target: "define:#serial#TX"
mandatory: true
- &serial1
type: checkbox
label: 'Serial 1'
key: serial1
base:
serial: GWSERIAL_
values: *serialValues
- &serial2
type: checkbox
label: 'Serial 2'
key: serial2
base:
serial: GWSERIAL2_
values: *serialValues
resources:
default: &esp32default
serial: 2
@ -218,3 +231,4 @@ config:
resource: *esp32default
children:
- *serial1
- *serial2

View File

@ -5,8 +5,10 @@ class PipelineInfo{
constructor(id){
this.STFIELDS=['status','error','status_url'];
this.reset(id);
this.lastUpdate=0;
}
update(state){
this.lastUpdate=(new Date()).getTime();
if (state.pipeline_id !== undefined && state.pipeline_id !== this.id){
return false;
}
@ -32,7 +34,7 @@ class PipelineInfo{
isRunning(){
if (! this.valid()) return false;
if (this.status === undefined) return false;
return ['error','success','canceled'].indexOf(this.status) < 0;
return ['error','success','canceled','failed','errored'].indexOf(this.status) < 0;
}
}
@ -113,7 +115,8 @@ class PipelineInfo{
fetchJson(API,{api:'status',pipeline:currentPipeline.id})
.then((st)=>{
if (queryPipeline !== currentPipeline.id) return;
if (currentPipeline.id !== st.pipeline_id) return;
let stid=st.pipeline_id||st.id;
if (currentPipeline.id !== stid) return;
if (st.status === undefined) st.status=st.state;
currentPipeline.update(st);
updateStatus();
@ -214,7 +217,9 @@ class PipelineInfo{
}
try{
let content=await readFile(file,true);
config=JSON.parse(content);
let newConfig=JSON.parse(content);
removeSelectors(ROOT_PATH,true);
config=newConfig;
buildSelectors(ROOT_PATH,structure.config.children,true);
findPipeline();
} catch (e){
@ -300,7 +305,9 @@ class PipelineInfo{
let frame=addEl('div','selector level'+level.length+' t'+config.type,parent);
frame.setAttribute(PATH_ATTR,name);
let inputFrame=addEl('div','inputFrame',frame);
let title=addEl('div','title t'+config.type,inputFrame,config.label);
if (config.label !== undefined){
addEl('div','title t'+config.type,inputFrame,config.label);
}
let initialConfig=undefined
if (config.type === 'frame' || config.type === undefined){
initialConfig=config;
@ -418,8 +425,7 @@ class PipelineInfo{
});
}
}
const buildSelectors=(prefix,configList,initial,parent)=>{
removeSelectors(prefix,!initial);
const buildSelectors=(prefix,configList,initial,base,parent)=>{
if (!parent) parent=document.getElementById("selectors");;
if (!configList) return;
let frame=addEl('div','selectorFrame',parent);
@ -427,19 +433,38 @@ class PipelineInfo{
let expandedList=expandList(configList);
expandedList.forEach((cfg)=>{
if (cfg.key === undefined){
console.log("config without key",cfg);
return;
if (cfg.type !== undefined && cfg.type !== 'frame'){
console.log("config without key",cfg);
return;
}
}
let name=prefix;
if (name !== undefined){
if (cfg.key !== undefined) {
name=prefix+SEPARATOR+cfg.key;
}
}
else{
name=cfg.key;
}
let name=prefix?(prefix+SEPARATOR+cfg.key):cfg.key;
let current=config[name];
let currentBase=Object.assign({},base,cfg.base);
let childFrame=buildSelector(frame,cfg,name,current,
(child,initial,opt_frame)=>{
buildSelectors(name,child.children,initial,opt_frame||childFrame);
configStruct[name]=child;
if(cfg.key !== undefined) removeSelectors(name,!initial);
buildSelectors(name,child.children,initial,currentBase,opt_frame||childFrame);
if (cfg.key !== undefined) configStruct[name]={cfg:child,base:currentBase};
buildValues(initial);
})
})
}
const replaceValues=(str,base)=>{
for (let k in base){
let r=new RegExp("#"+k+"#","g");
str=str.replace(r,base[k]);
}
return str;
}
const ROOT_PATH='root';
const buildValues=(initial)=>{
let environment;
@ -454,7 +479,9 @@ class PipelineInfo{
//round1: find allowed resources
//round2: really collect values
for (let k in configStruct) {
let struct = configStruct[k];
let container = configStruct[k];
if (! container.cfg) continue;
let struct=container.cfg;
if (round > 0) config[k] = struct.key;
if (struct.target !== undefined ) {
if (struct.value === undefined){
@ -463,8 +490,9 @@ class PipelineInfo{
}
continue;
}
if (struct.target === 'environment' ) {
if (round > 0) environment = struct.value;
let target=replaceValues(struct.target,container.base);
if (target === 'environment' ) {
if (round > 0 && struct.key !== undefined) environment = struct.value;
else allowedResources=struct.resource;
continue;
}
@ -477,13 +505,13 @@ class PipelineInfo{
}
resList.push(struct);
}
if (struct.target === 'define') {
if (target === 'define') {
flags += " -D" + struct.value;
continue;
}
const DEFPRFX = "define:";
if (struct.target.indexOf(DEFPRFX) == 0) {
let def = struct.target.substring(DEFPRFX.length);
if (target.indexOf(DEFPRFX) == 0) {
let def = target.substring(DEFPRFX.length);
flags += " -D" + def + "=" + struct.value;
continue;
}
@ -623,7 +651,7 @@ class PipelineInfo{
let now=new Date();
let m=now.getMonth()+1;
m=((m<10)?"0":"")+m;
let d=now.getDay();
let d=now.getDate();
d=((d<10)?"0":"")+d;
val=val+now.getFullYear()+m+d;
}