feat: delete background jobs from form views
This commit is contained in:
parent
fc0ff7bd2e
commit
dca6592b7e
4 changed files with 50 additions and 8 deletions
|
|
@ -107,7 +107,7 @@
|
|||
"in_create": 1,
|
||||
"is_virtual": 1,
|
||||
"links": [],
|
||||
"modified": "2022-09-11 04:39:35.771198",
|
||||
"modified": "2022-09-11 05:27:50.878534",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "RQ Job",
|
||||
|
|
@ -122,6 +122,16 @@
|
|||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1
|
||||
},
|
||||
{
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Administrator",
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "modified",
|
||||
|
|
|
|||
|
|
@ -22,7 +22,10 @@ JOB_STATUSES = ["queued", "started", "failed", "finished", "deferred", "schedule
|
|||
class RQJob(Document):
|
||||
def load_from_db(self):
|
||||
job = Job.fetch(self.name, connection=get_redis_conn())
|
||||
if not for_current_site(job):
|
||||
raise frappe.PermissionError
|
||||
super(Document, self).__init__(serialize_job(job))
|
||||
self._job_obj = job
|
||||
|
||||
@staticmethod
|
||||
def get_list(args):
|
||||
|
|
@ -63,6 +66,11 @@ class RQJob(Document):
|
|||
|
||||
return matched_job_ids
|
||||
|
||||
def delete(self):
|
||||
frappe.only_for("System Manager")
|
||||
if self._job_obj and for_current_site(self._job_obj):
|
||||
self._job_obj.delete()
|
||||
|
||||
@staticmethod
|
||||
def get_count(args) -> int:
|
||||
# Can not be implemented efficiently due to site filtering hence ignored.
|
||||
|
|
@ -79,9 +87,6 @@ class RQJob(Document):
|
|||
def db_update(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def delete(self):
|
||||
pass
|
||||
|
||||
|
||||
def serialize_job(job: Job) -> frappe._dict:
|
||||
if not for_current_site(job):
|
||||
|
|
@ -126,10 +131,23 @@ def fetch_job_ids(queue: Queue, status: str) -> list[str | None]:
|
|||
"failed": queue.failed_job_registry,
|
||||
"deferred": queue.deferred_job_registry,
|
||||
"scheduled": queue.scheduled_job_registry,
|
||||
"canceled": queue.canceled_job_registry,
|
||||
}
|
||||
|
||||
registry = registry_map.get(status)
|
||||
if registry:
|
||||
if registry is not None:
|
||||
job_ids = registry.get_job_ids()
|
||||
return [j for j in job_ids if j]
|
||||
|
||||
return []
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def remove_failed_jobs():
|
||||
frappe.only_for("System Manager")
|
||||
for queue in get_queues():
|
||||
fail_registry = queue.failed_job_registry
|
||||
for job_ids in create_batch(fail_registry.get_job_ids(), 100):
|
||||
for job in Job.fetch_many(job_ids=job_ids, connection=get_redis_conn()):
|
||||
if job and for_current_site(job):
|
||||
fail_registry.remove(job, delete_job=True)
|
||||
|
|
|
|||
13
frappe/core/doctype/rq_job/rq_job_list.js
Normal file
13
frappe/core/doctype/rq_job/rq_job_list.js
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
frappe.listview_settings["RQ Job"] = {
|
||||
hide_name_column: true,
|
||||
|
||||
refresh(listview) {
|
||||
if (!has_common(frappe.user_roles, ["Administrator", "System Manager"])) return;
|
||||
|
||||
listview.page.add_inner_button(__("Remove Failed Jobs"), () => {
|
||||
frappe.confirm(__("Are you sure you want to remove all failed jobs?"), () => {
|
||||
frappe.xcall("frappe.core.doctype.rq_job.rq_job.remove_failed_jobs");
|
||||
});
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
@ -37,8 +37,9 @@
|
|||
},
|
||||
{
|
||||
"fieldname": "current_job_id",
|
||||
"fieldtype": "Data",
|
||||
"label": "Current Job ID"
|
||||
"fieldtype": "Link",
|
||||
"label": "Current Job ID",
|
||||
"options": "RQ Job"
|
||||
},
|
||||
{
|
||||
"fieldname": "pid",
|
||||
|
|
@ -106,7 +107,7 @@
|
|||
"in_create": 1,
|
||||
"is_virtual": 1,
|
||||
"links": [],
|
||||
"modified": "2022-09-11 04:38:30.606019",
|
||||
"modified": "2022-09-11 05:02:53.981705",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "RQ Worker",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue