Viel neues
This commit is contained in:
151
qa-tool/htdocs/js/docbee.js
Normal file
151
qa-tool/htdocs/js/docbee.js
Normal file
@@ -0,0 +1,151 @@
|
||||
// auto-split module
|
||||
|
||||
|
||||
function sleep(ms) {
|
||||
return new Promise(r => setTimeout(r, ms));
|
||||
}
|
||||
|
||||
|
||||
async function getJSON(url) {
|
||||
const r = await fetch(url, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Authorization": "Bearer " + DOCBEE_TOKEN,
|
||||
"Accept": "application/json"
|
||||
}
|
||||
});
|
||||
const text = await r.text().catch(() => "-");
|
||||
let json = null;
|
||||
try {
|
||||
json = JSON.parse(text);
|
||||
} catch {}
|
||||
console.log("[DocBee][GET]", url);
|
||||
console.log("[DocBee][RES]", r.status, text.slice(0, 700));
|
||||
return {
|
||||
ok: r.ok,
|
||||
status: r.status,
|
||||
json,
|
||||
text
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
async function putJSON(url, body) {
|
||||
const r = await fetch(url, {
|
||||
method: "PUT",
|
||||
headers: {
|
||||
"Authorization": "Bearer " + DOCBEE_TOKEN,
|
||||
"Content-Type": "application/json; charset=utf-8",
|
||||
"Accept": "application/json"
|
||||
},
|
||||
body: JSON.stringify(body)
|
||||
});
|
||||
const text = await r.text().catch(() => "-");
|
||||
console.log("[DocBee][PUT]", url, body);
|
||||
console.log("[DocBee][RES]", r.status, text.slice(0, 700));
|
||||
let json = null;
|
||||
try {
|
||||
json = JSON.parse(text);
|
||||
} catch {}
|
||||
return {
|
||||
ok: r.ok,
|
||||
status: r.status,
|
||||
json,
|
||||
text
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
async function postJSON(url, body) {
|
||||
const r = await fetch(url, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Authorization": "Bearer " + DOCBEE_TOKEN,
|
||||
"Content-Type": "application/json; charset=utf-8",
|
||||
"Accept": "application/json"
|
||||
},
|
||||
body: JSON.stringify(body)
|
||||
});
|
||||
const text = await r.text().catch(() => "-");
|
||||
console.log("[DocBee][POST]", url, body);
|
||||
console.log("[DocBee][RES]", r.status, text.slice(0, 700));
|
||||
if (r.status === 401) {
|
||||
try {
|
||||
updateTokenBadge("bad");
|
||||
} catch (_) {}
|
||||
}
|
||||
return {
|
||||
ok: r.ok,
|
||||
status: r.status,
|
||||
text
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
async function restoreTicketStatus(ticketId, prevStatusId) {
|
||||
try {
|
||||
const maxLoops = 5; // ~30s
|
||||
let stable = 0;
|
||||
for (let i = 0; i < maxLoops; i++) {
|
||||
await sleep(100);
|
||||
const tCur = await getJSON(`${DOCBEE_BASEURL}/restApi/v1/ticket/${ticketId}?fields=ticketStatus`);
|
||||
const curId = tCur?.json?.ticketStatus ?? null;
|
||||
if (curId == null) break;
|
||||
if (curId !== prevStatusId) {
|
||||
let r = await putJSON(`${DOCBEE_BASEURL}/restApi/v1/ticket/${ticketId}`, {
|
||||
ticketStatus: {
|
||||
id: prevStatusId
|
||||
}
|
||||
});
|
||||
if (!r.ok) {
|
||||
await putJSON(`${DOCBEE_BASEURL}/restApi/v1/ticket/${ticketId}`, {
|
||||
status: {
|
||||
id: prevStatusId
|
||||
}
|
||||
});
|
||||
}
|
||||
stable = 0;
|
||||
} else {
|
||||
stable++;
|
||||
if (stable >= 2) break;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("[DocBee] restoreTicketStatus failed:", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function setTicketStatus(ticketId, statusId) {
|
||||
const base = `${DOCBEE_BASEURL}/restApi/v1`;
|
||||
const tries = [
|
||||
() => putJSON(`${base}/ticket/${ticketId}`, {
|
||||
ticketStatus: statusId
|
||||
}),
|
||||
];
|
||||
let last = null;
|
||||
for (let i = 0; i < tries.length; i++) {
|
||||
try {
|
||||
const r = await tries[i]();
|
||||
console.log(`[DocBee][STATUS][try ${i}]`, r?.status, r?.ok);
|
||||
if (r && r.ok) return {
|
||||
ok: true,
|
||||
variant: i,
|
||||
status: r.status,
|
||||
text: r.text
|
||||
};
|
||||
last = r;
|
||||
} catch (e) {
|
||||
console.warn(`[DocBee][STATUS][try ${i}] exception`, e);
|
||||
last = {
|
||||
ok: false,
|
||||
status: 0,
|
||||
text: String(e)
|
||||
};
|
||||
}
|
||||
}
|
||||
return last || {
|
||||
ok: false
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user