mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-02-13 02:42:45 +00:00
feat: remove & retry queue jobs
This commit is contained in:
@@ -6,9 +6,7 @@
|
||||
class="col-12 d-flex px-0 py-3 border-bottom color-border-secondary"
|
||||
ng-repeat="job in downloadJobs as filteredDownloadJobs"
|
||||
>
|
||||
<div class="w-100">
|
||||
{{job}}
|
||||
</div>
|
||||
<div class="w-100">{{job}}</div>
|
||||
<div class="d-flex">
|
||||
<div class="dropdown">
|
||||
<button
|
||||
@@ -25,11 +23,17 @@
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="#"
|
||||
ng-show="job.status != 'removed'"
|
||||
ng-click="removeJob(job)"
|
||||
ng-click="removeJob('download', job)"
|
||||
>
|
||||
<i class="fas fa-trash-alt"></i> Remove
|
||||
</a>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="#"
|
||||
ng-click="retryJob('download', job)"
|
||||
>
|
||||
<i class="fas fa-sync"></i> Retry
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -47,9 +51,7 @@
|
||||
class="col-12 d-flex px-0 py-3 border-bottom color-border-secondary"
|
||||
ng-repeat="job in removeJobs as filteredRemoveJobs"
|
||||
>
|
||||
<div class="w-100">
|
||||
{{job}}
|
||||
</div>
|
||||
<div class="w-100">{{job}}</div>
|
||||
<div class="d-flex">
|
||||
<div class="dropdown">
|
||||
<button
|
||||
@@ -66,11 +68,17 @@
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="#"
|
||||
ng-show="job.status != 'removed'"
|
||||
ng-click="removeJob(job)"
|
||||
ng-click="removeJob('remove', job)"
|
||||
>
|
||||
<i class="fas fa-trash-alt"></i> Remove
|
||||
</a>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="#"
|
||||
ng-click="retryJob('remove', job)"
|
||||
>
|
||||
<i class="fas fa-sync"></i> Retry
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -126,7 +126,7 @@ angular
|
||||
page: 1,
|
||||
limit: 25,
|
||||
sort: "name",
|
||||
search: ""
|
||||
search: "",
|
||||
};
|
||||
|
||||
function getConferences() {
|
||||
@@ -154,7 +154,8 @@ angular
|
||||
true
|
||||
);
|
||||
},
|
||||
]).controller("queuesAdminController", [
|
||||
])
|
||||
.controller("queuesAdminController", [
|
||||
"$scope",
|
||||
"$http",
|
||||
"$location",
|
||||
@@ -170,21 +171,12 @@ angular
|
||||
|
||||
$scope.downloadJobs = [];
|
||||
$scope.removeJobs = [];
|
||||
$scope.total = -1;
|
||||
$scope.totalPage = 0;
|
||||
$scope.query = {
|
||||
page: 1,
|
||||
limit: 25,
|
||||
sort: "name",
|
||||
search: ""
|
||||
};
|
||||
|
||||
function getQueues() {
|
||||
$http.get("/api/admin/queues", { params: $scope.query }).then(
|
||||
(res) => {
|
||||
$scope.downloadJobs = res.data.downloadQueue;
|
||||
$scope.removeJobs = res.data.removeQueue;
|
||||
$scope.$apply();
|
||||
},
|
||||
(err) => {
|
||||
console.error(err);
|
||||
@@ -193,14 +185,34 @@ angular
|
||||
}
|
||||
getQueues();
|
||||
|
||||
let timeClear = null;
|
||||
$scope.$watch(
|
||||
"query",
|
||||
() => {
|
||||
clearTimeout(timeClear);
|
||||
timeClear = setTimeout(getQueues, 500);
|
||||
},
|
||||
true
|
||||
);
|
||||
$scope.removeJob = function (queue, job) {
|
||||
$http
|
||||
.delete(`/api/admin/queue/${queue}/${job.id}`, {
|
||||
params: $scope.query,
|
||||
})
|
||||
.then(
|
||||
(res) => {
|
||||
getQueues();
|
||||
},
|
||||
(err) => {
|
||||
console.error(err);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
$scope.retryJob = function (queue, job) {
|
||||
$http
|
||||
.post(`/api/admin/queue/${queue}/${job.id}`, {
|
||||
params: $scope.query,
|
||||
})
|
||||
.then(
|
||||
(res) => {
|
||||
getQueues();
|
||||
},
|
||||
(err) => {
|
||||
console.error(err);
|
||||
}
|
||||
);
|
||||
};
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { Queue } from "bull";
|
||||
import * as express from "express";
|
||||
import AnonymizedRepositoryModel from "../database/anonymizedRepositories/anonymizedRepositories.model";
|
||||
import ConferenceModel from "../database/conference/conferences.model";
|
||||
import RepositoryModel from "../database/repositories/repositories.model";
|
||||
import UserModel from "../database/users/users.model";
|
||||
import { downloadQueue, removeQueue } from "../queue";
|
||||
import Repository from "../Repository";
|
||||
import { ensureAuthenticated } from "./connection";
|
||||
import { handleError, getUser, isOwnerOrAdmin } from "./route-utils";
|
||||
|
||||
@@ -29,6 +28,40 @@ router.use(
|
||||
}
|
||||
);
|
||||
|
||||
router.post("/queue/:name/:repo_id", async (req, res) => {
|
||||
let queue: Queue;
|
||||
if (req.params.name == "download") {
|
||||
queue = downloadQueue;
|
||||
} else if (req.params.name == "remove") {
|
||||
queue = removeQueue;
|
||||
} else {
|
||||
return res.status(404).json({ error: "queue_not_found" });
|
||||
}
|
||||
const job = await queue.getJob(req.params.repo_id);
|
||||
if (!job) {
|
||||
return res.status(404).json({ error: "job_not_found" });
|
||||
}
|
||||
job.retry();
|
||||
res.send("ok");
|
||||
});
|
||||
|
||||
router.delete("/queue/:name/:repo_id", async (req, res) => {
|
||||
let queue: Queue;
|
||||
if (req.params.name == "download") {
|
||||
queue = downloadQueue;
|
||||
} else if (req.params.name == "remove") {
|
||||
queue = removeQueue;
|
||||
} else {
|
||||
return res.status(404).json({ error: "queue_not_found" });
|
||||
}
|
||||
const job = await queue.getJob(req.params.repo_id);
|
||||
if (!job) {
|
||||
return res.status(404).json({ error: "job_not_found" });
|
||||
}
|
||||
await job.remove();
|
||||
res.send("ok");
|
||||
});
|
||||
|
||||
router.get("/queues", async (req, res) => {
|
||||
const out = await Promise.all([
|
||||
downloadQueue.getJobs([
|
||||
@@ -94,7 +127,9 @@ router.get("/repos", async (req, res) => {
|
||||
res.json({
|
||||
query: { $and: query },
|
||||
page,
|
||||
total: await AnonymizedRepositoryModel.find({ $and: query }).estimatedDocumentCount(),
|
||||
total: await AnonymizedRepositoryModel.find({
|
||||
$and: query,
|
||||
}).estimatedDocumentCount(),
|
||||
sort,
|
||||
results: await AnonymizedRepositoryModel.find({ $and: query })
|
||||
.sort(sort)
|
||||
|
||||
Reference in New Issue
Block a user