2026-10-13 10:33:31 +02:00
|
|
|
// Central diagnostics use the same draft, roles and independent publisher.
|
2026-10-13 16:58:15 +02:00
|
|
|
const diagnosticsFields=['diagnostics-enabled','diagnostics-mode','diagnostics-endpoint','diagnostics-sample','diagnostics-debug-sample',...['queue','flush','age','timeout'].map(key=>`diagnostics-${key}`)];
|
|
|
|
|
const diagnosticsLimits=[['queue','maxQueueSize',512],['flush','flushIntervalMs',2000],['age','maxRecordAgeMs',30000],['timeout','exportTimeoutMs',2000]];
|
|
|
|
|
function fillDiagnostics(p){const d=p.diagnostics||{};$('diagnostics-enabled').checked=d.enabled===true;$('diagnostics-mode').value=d.mode||'operational';$('diagnostics-endpoint').value=d.endpoint||'';$('diagnostics-sample').value=d.sampleRate??0.1;$('diagnostics-debug-sample').value=d.debugSampleRate??1;for(const [id,key,fallback] of diagnosticsLimits)$(`diagnostics-${id}`).value=d[key]??fallback;}
|
2026-10-13 10:33:31 +02:00
|
|
|
const fillBeforeDiagnostics=fill;fill=function(p){fillBeforeDiagnostics(p);fillDiagnostics(p);};
|
2026-10-13 16:58:15 +02:00
|
|
|
const draftBeforeDiagnostics=draft;draft=function(){const p=draftBeforeDiagnostics();p.diagnostics={...(p.diagnostics||{}),enabled:$('diagnostics-enabled').checked,mode:$('diagnostics-mode').value,endpoint:$('diagnostics-endpoint').value.trim(),sampleRate:Number($('diagnostics-sample').value),debugSampleRate:Number($('diagnostics-debug-sample').value)};for(const [id,key] of diagnosticsLimits)p.diagnostics[key]=Number($(`diagnostics-${id}`).value);if(!p.diagnostics.endpoint)delete p.diagnostics.endpoint;return p;};
|
2026-10-13 10:33:31 +02:00
|
|
|
const permissionsBeforeDiagnostics=applyOperatorPermissions;applyOperatorPermissions=function(principal){permissionsBeforeDiagnostics(principal);const allowed=principal.permissions?.includes('policy.write')||(independentApprovalRequired&&principal.role==='operator');for(const id of diagnosticsFields)$(id).disabled=!allowed;};
|
|
|
|
|
for(const id of diagnosticsFields)$(id).addEventListener('change',()=>updateDraftStatus());
|
|
|
|
|
if(policy)fillDiagnostics(policy);if(currentPrincipal)applyOperatorPermissions(currentPrincipal);
|