From 172250b279bcc961ae3a131d200f6cc0e875fb07 Mon Sep 17 00:00:00 2001 From: Zac Gaetano Date: Mon, 6 Apr 2026 23:30:00 -0400 Subject: [PATCH] fix: AMPP Monitor field mapping for Grassvalley API colon-namespaced keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AMPP API returns keys like 'state:jobState', 'name:text', 'type:jobType', 'creator:id', 'created:dateTime', 'job:id' — not plain 'status', 'name', etc. Frontend was falling back to 'Job' / 'Unknown' for every entry. Updated field lookups to read colon-namespaced keys first, with fallbacks for compatibility. Also added 'aborted' to the failed status detection. --- public/index.html | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/public/index.html b/public/index.html index 555e4dc..a315813 100644 --- a/public/index.html +++ b/public/index.html @@ -1241,10 +1241,14 @@ async function loadAmppJobs() { } jobs.forEach(job => { const el=document.createElement('div'); el.className='job-item'; - const st=(job.status||job.state||job.jobStatus||'unknown').toLowerCase(); - const cls=st.includes('run')||st.includes('active')?'running':st.includes('complet')||st.includes('success')||st.includes('done')?'completed':st.includes('fail')||st.includes('error')?'failed':st.includes('queue')||st.includes('wait')||st.includes('pend')?'queued':'unknown'; - const name=job.name||job.displayName||job.id||'Job'; - const meta=[job.created?new Date(job.created).toLocaleString():'', job.type||job.jobType||''].filter(Boolean).join(' · '); + // AMPP API uses colon-namespaced keys e.g. "state:jobState", "name:text", "job:id" + const st=(job['state:jobState']||job.status||job.state||job.jobStatus||'unknown').toLowerCase(); + const cls=st.includes('run')||st.includes('active')?'running':st.includes('complet')||st.includes('success')||st.includes('done')?'completed':st.includes('fail')||st.includes('error')||st.includes('abort')?'failed':st.includes('queue')||st.includes('wait')||st.includes('pend')?'queued':'unknown'; + const name=job['name:text']||job['assetName:text']||job.name||job.displayName||job['job:id']||job.id||'Job'; + const jobType=(job['type:jobType']||job['subtype:jobSubtype']||job.type||job.jobType||'').replace(/([A-Z])/g,' $1').trim(); + const creator=job['creator:id']||''; + const created=job['created:dateTime']||job.created||''; + const meta=[created?new Date(created).toLocaleString():'', jobType, creator].filter(Boolean).join(' · '); el.innerHTML=`
${esc(name)}
${esc(meta)}
${cls.charAt(0).toUpperCase()+cls.slice(1)}`; list.appendChild(el); });