Browse Source

Komponentenverwaltung: ETL-Jobs per POST starten

master
Andre Knieschewski 21 hours ago
parent
commit
67f5f559bb
  1. 2
      superx/edit/kern/superx_komponentenverwaltung.jsp

2
superx/edit/kern/superx_komponentenverwaltung.jsp

@ -801,7 +801,7 @@ function runDiagnostics(){renderVersionDiagnostics();if(!el.diagnosticsRest){ret @@ -801,7 +801,7 @@ function runDiagnostics(){renderVersionDiagnostics();if(!el.diagnosticsRest){ret
function copyFromElement(id){var node=document.getElementById(id);if(!node){return;}var text=node.value!==undefined?node.value:node.textContent;if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){msg('Text wurde in die Zwischenablage kopiert.','ok');}).catch(function(){node.focus();if(node.select){node.select();}msg('Text markieren und manuell kopieren.','warn');});}else{node.focus();if(node.select){node.select();}msg('Text markieren und manuell kopieren.','warn');}}
function startPlan(m,planFn,label){if(!m){return;}var p=planFn(m);if(!p.available){msg(label+' ist nicht verfügbar: '+p.reason,'error');return;}var jobId=(p.job&&p.job.id)?p.job.id:'-';var moduleName=m.name||key(m);var body=actionConfirmBody(label,moduleName,key(m),'Der Vorgang kann länger dauern. Bitte nur starten, wenn aktuell kein anderer ETL-Lauf aktiv ist.');askConfirm(label+' starten?',body,label+' starten').then(function(ok){if(!ok){return;}startJob(API_BASE+p.endpoint,label+' '+moduleName+' ('+jobId+')');});}
function startUpgrade(m){if(!m){return;}var p=upgradePlan(m);var isInstall=m.installed!==true;var label=isInstall?'Installation':'Upgrade';if(!p.available){msg(label+' ist nicht verfügbar: '+p.reason,'error');return;}var abbr=key(m);var moduleName=m.name||abbr;var extra=confirmRow('Installierte Version',p.versionInfo.installed||'nicht geliefert','code-value')+confirmRow('Verfügbare Version',p.versionInfo.target||'nicht geliefert','code-value');var body=actionConfirmBody(label,moduleName,abbr,'Der Vorgang kann länger dauern. Bitte nur starten, wenn aktuell kein anderer ETL-/Installationslauf aktiv ist.',extra);askConfirm(isInstall?'Modul installieren?':'Upgrade starten?',body,label+' starten').then(function(ok){if(!ok){return;}startJob(API_BASE+p.endpoint,(isInstall?'Installieren ':'Upgrade ')+moduleName);});}
function startJob(url,label){hideMsg();setLog('', 'Neuer Lauf wird gestartet.');appendLog('Starte: '+label);appendLog(url);fetchJson(url).then(function(result){var id=parseId(result);if(id===-1){msg('Der Server hat -1 zurückgeliefert. Es wurde kein neuer Job gestartet. Mögliche Ursachen: Ein anderer Job läuft bereits oder der Server konnte für diesen Endpunkt keinen passenden Startjob ermitteln.','error');appendLog('Start nicht angenommen: -1');return checkRunning(true);}if(id===null){msg('Startantwort konnte nicht als JobExecutionId interpretiert werden.','error');appendLog('Startantwort: '+stringify(result));return;}currentExecutionId=id;currentLogId=null;lastStatusPayload=null;currentJobLabel=label;logFailureByExecutionId[id]=false;setLog('Job gestartet. Log wird nach Abschluss automatisch geladen oder kann über „Log laden“ abgefragt werden.','JobExecutionId '+id);updateRun('gestartet');el.loadLogBtn.disabled=false;el.stopRunBtn.disabled=false;msg('Job gestartet. JobExecutionId: '+id,'ok');return syncRunningAfterStart(id,label).then(function(){startPolling();});}).catch(function(e){msg(e.message||String(e),'error');appendLog('Fehler beim Start: '+(e.message||String(e)));});}
function startJob(url,label){hideMsg();setLog('', 'Neuer Lauf wird gestartet.');appendLog('Starte: '+label);appendLog(url);fetchJson(url,{method:'POST'}).then(function(result){var id=parseId(result);if(id===-1){msg('Der Server hat -1 zurückgeliefert. Es wurde kein neuer Job gestartet. Mögliche Ursachen: Ein anderer Job läuft bereits oder der Server konnte für diesen Endpunkt keinen passenden Startjob ermitteln.','error');appendLog('Start nicht angenommen: -1');return checkRunning(true);}if(id===null){msg('Startantwort konnte nicht als JobExecutionId interpretiert werden.','error');appendLog('Startantwort: '+stringify(result));return;}currentExecutionId=id;currentLogId=null;lastStatusPayload=null;currentJobLabel=label;logFailureByExecutionId[id]=false;setLog('Job gestartet. Log wird nach Abschluss automatisch geladen oder kann über „Log laden“ abgefragt werden.','JobExecutionId '+id);updateRun('gestartet');el.loadLogBtn.disabled=false;el.stopRunBtn.disabled=false;msg('Job gestartet. JobExecutionId: '+id,'ok');return syncRunningAfterStart(id,label).then(function(){startPolling();});}).catch(function(e){msg(e.message||String(e),'error');appendLog('Fehler beim Start: '+(e.message||String(e)));});}
function syncRunningAfterStart(startId,label){return new Promise(function(resolve){setTimeout(resolve,700);}).then(function(){return fetchJson(API_BASE+'/running');}).then(function(data){var runningId=parseId(data);if(runningId&&runningId>0&&runningId!==startId){appendLog('Hinweis: /running meldet laufende JobExecutionId '+runningId+' statt Startantwort '+startId+'. Verwende '+runningId+' für Status und Log.');currentExecutionId=runningId;}if(data&&typeof data==='object'){updateKnownIds(data);if(data.jobName){currentJobLabel=data.jobName;}else if(data.name){currentJobLabel=data.name;}}updateRun('gestartet');return Promise.resolve();}).catch(function(e){appendLog('Hinweis: /running konnte nach dem Start nicht zur ID-Prüfung gelesen werden: '+(e.message||String(e)));return Promise.resolve();});}
function parseId(r){if(typeof r==='number'){return r;}if(typeof r==='string'){var s=r.trim();if(/^-?\d+$/.test(s)){return parseInt(s,10);}try{return parseId(JSON.parse(s));}catch(e){return null;}}if(r&&typeof r==='object'){var keys=['jobExecutionId','id','executionId'];for(var i=0;i<keys.length;i++){if(r[keys[i]]!==undefined&&r[keys[i]]!==null){return parseId(r[keys[i]]);}}}return null;}
function stringify(v){if(typeof v==='string'){return v;}try{return JSON.stringify(v,null,2);}catch(e){return String(v);}}

Loading…
Cancel
Save