Implement faults page

This commit is contained in:
Zaid Abdulla committed 2018-12-26 00:22:07 -08:00
1 parent b24c3626ac
commit 3cfac28fb1
16 files changed
+643 -246

No files matched your search

+22 -11
View File
@@ -265,7 +265,7 @@ function postTask(task, connectionRequest, callback) {
if (
res.statusCode === 202 &&
res.statusMessage !== "Task queued but not processed" &&
res.statusMessage !== "Task faulte"
res.statusMessage !== "Task faulted"
)
connectionRequestStatus = res.statusMessage;
}
@@ -305,18 +305,28 @@ function postTasks(deviceId, tasks) {
connectionRequest: connectionRequestStatus,
tasks: statuses
});
Promise.all(
statuses.map(s => query("tasks", new Filter(["=", "_id", s._id])))
)
let promises2 = [];
for (let s of statuses) {
promises2.push(query("tasks", new Filter(["=", "_id", s._id])));
promises2.push(
query(
"faults",
new Filter(["=", "_id", `${deviceId}:task_${s._id}`])
)
);
}
Promise.all(promises2)
.then(res => {
for (let [i, r] of res.entries()) {
if (!r[0]) {
statuses[i].status = "done";
} else if (r[0].fault) {
statuses[i].status = "fault";
statuses[i].fault = r[0].fault;
for (let [i, r] of statuses.entries()) {
if (res[i * 2].length === 0) {
r.status = "done";
} else if (res[i * 2 + 1].length === 1) {
r.status = "fault";
r.fault = res[i * 2 + 1][0];
}
deleteResource("tasks", statuses[i]._id);
deleteResource("tasks", r._id);
}
resolve({
@@ -333,3 +343,4 @@ function postTasks(deviceId, tasks) {
exports.query = query;
exports.count = count;
exports.postTasks = postTasks;
exports.deleteResource = deleteResource;
+21 -3
View File
@@ -13,6 +13,7 @@ const resources = {
provisions: true,
files: true,
virtual_parameters: true,
faults: true,
tasks: false
};
@@ -22,6 +23,12 @@ for (let [resource, update] of Object.entries(resources)) {
if (ctx.request.query.filter) filter = new Filter(ctx.request.query.filter);
if (ctx.request.query.limit) limit = +ctx.request.query.limit;
// Exclude temporary tasks and faults
if (resource === "tasks" || resource === "faults") {
let f = new Filter(["NOT", ["<", "expiry", Date.now() + 60000]]);
filter = f.and(filter);
}
let count = await apiFunctions.count(resource, filter, limit);
ctx.set("X-Total-Count", count);
ctx.body = "";
@@ -33,6 +40,12 @@ for (let [resource, update] of Object.entries(resources)) {
if (ctx.request.query.limit) limit = +ctx.request.query.limit;
if (ctx.request.query.skip) skip = +ctx.request.query.skip;
// Exclude temporary tasks and faults
if (resource === "tasks" || resource === "faults") {
let f = new Filter(["NOT", ["<", "expiry", Date.now() + 60000]]);
filter = f.and(filter);
}
ctx.body = await apiFunctions.query(
resource,
filter,
@@ -56,9 +69,14 @@ for (let [resource, update] of Object.entries(resources)) {
ctx.body = res[0];
});
if (update) {
// TODO add PUT, PATCH, DELETE routes
}
// TODO add PUT, PATCH routes
if (update)
router.delete(`/${resource}/:id`, async ctx => {
let found = await apiFunctions.deleteResource(resource, ctx.params.id);
if (found) ctx.status = 200;
else ctx.status = 404;
ctx.body = "";
});
}
router.post("/devices/:id/tasks", async ctx => {