Merge pull request #27931 from blaggacao/feat/sidebad-with-log-links
Feat: sidebar with log links
This commit is contained in:
commit
92ee2ce291
7 changed files with 76 additions and 14 deletions
|
|
@ -12,7 +12,7 @@ import frappe.utils
|
|||
from frappe import _, _dict
|
||||
from frappe.desk.form.document_follow import is_document_followed
|
||||
from frappe.model.utils.user_settings import get_user_settings
|
||||
from frappe.permissions import get_doc_permissions
|
||||
from frappe.permissions import get_doc_permissions, has_permission
|
||||
from frappe.utils.data import cstr
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
|
|
@ -128,6 +128,8 @@ def get_docinfo(doc=None, doctype=None, name=None):
|
|||
"is_document_followed": is_document_followed(doc.doctype, doc.name, frappe.session.user),
|
||||
"tags": get_tags(doc.doctype, doc.name),
|
||||
"document_email": get_document_email(doc.doctype, doc.name),
|
||||
"error_log_exists": get_error_log_exists(doc),
|
||||
"webhook_request_log_log_exists": get_webhook_request_log_exists(doc),
|
||||
}
|
||||
)
|
||||
|
||||
|
|
@ -201,6 +203,20 @@ def get_versions(doc: "Document") -> list[dict]:
|
|||
)
|
||||
|
||||
|
||||
def get_error_log_exists(doc: "Document") -> bool:
|
||||
if has_permission("Error Log"):
|
||||
return frappe.db.exists("Error Log", {"reference_doctype": doc.doctype, "reference_name": doc.name})
|
||||
return False
|
||||
|
||||
|
||||
def get_webhook_request_log_exists(doc: "Document") -> bool:
|
||||
if has_permission("Webhook Request Log"):
|
||||
return frappe.db.exists(
|
||||
"Webhook Request Log", {"reference_doctype": doc.doctype, "reference_document": doc.name}
|
||||
)
|
||||
return False
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_communications(doctype, name, start=0, limit=20):
|
||||
from frappe.utils import cint
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ def enqueue_webhook(doc, webhook) -> None:
|
|||
|
||||
except Exception as e:
|
||||
frappe.logger().debug({"enqueue_webhook_error": e})
|
||||
log_request(webhook.name, doc.name, request_url, headers, data)
|
||||
log_request(webhook.name, doc.doctype, doc.name, request_url, headers, data)
|
||||
return
|
||||
|
||||
for i in range(3):
|
||||
|
|
@ -167,16 +167,16 @@ def enqueue_webhook(doc, webhook) -> None:
|
|||
)
|
||||
r.raise_for_status()
|
||||
frappe.logger().debug({"webhook_success": r.text})
|
||||
log_request(webhook.name, doc.name, request_url, headers, data, r)
|
||||
log_request(webhook.name, doc.doctype, doc.name, request_url, headers, data, r)
|
||||
break
|
||||
|
||||
except requests.exceptions.ReadTimeout as e:
|
||||
frappe.logger().debug({"webhook_error": e, "try": i + 1})
|
||||
log_request(webhook.name, doc.name, request_url, headers, data)
|
||||
log_request(webhook.name, doc.doctype, doc.name, request_url, headers, data)
|
||||
|
||||
except Exception as e:
|
||||
frappe.logger().debug({"webhook_error": e, "try": i + 1})
|
||||
log_request(webhook.name, doc.name, request_url, headers, data, r)
|
||||
log_request(webhook.name, doc.doctype, doc.name, request_url, headers, data, r)
|
||||
sleep(3 * i + 1)
|
||||
if i != 2:
|
||||
continue
|
||||
|
|
@ -184,6 +184,7 @@ def enqueue_webhook(doc, webhook) -> None:
|
|||
|
||||
def log_request(
|
||||
webhook: str,
|
||||
doctype: str,
|
||||
docname: str,
|
||||
url: str,
|
||||
headers: dict,
|
||||
|
|
@ -194,6 +195,7 @@ def log_request(
|
|||
{
|
||||
"doctype": "Webhook Request Log",
|
||||
"webhook": webhook,
|
||||
"reference_doctype": doctype,
|
||||
"reference_document": docname,
|
||||
"user": frappe.session.user if frappe.session.user else None,
|
||||
"url": url,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"webhook",
|
||||
"reference_doctype",
|
||||
"reference_document",
|
||||
"headers",
|
||||
"data",
|
||||
|
|
@ -74,12 +75,20 @@
|
|||
"fieldtype": "Link",
|
||||
"label": "Webhook",
|
||||
"options": "Webhook"
|
||||
},
|
||||
{
|
||||
"fieldname": "reference_doctype",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Reference Doctype",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"in_create": 1,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-03-23 16:04:03.509383",
|
||||
"modified": "2024-09-14 05:52:41.583612",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Integrations",
|
||||
"name": "Webhook Request Log",
|
||||
|
|
@ -102,4 +111,4 @@
|
|||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ class WebhookRequestLog(Document):
|
|||
data: DF.Code | None
|
||||
error: DF.Text | None
|
||||
headers: DF.Code | None
|
||||
reference_doctype: DF.Data | None
|
||||
reference_document: DF.Data | None
|
||||
response: DF.Code | None
|
||||
url: DF.Data | None
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ frappe.db = {
|
|||
r.message && r.message.name ? resolve(true) : resolve(false);
|
||||
});
|
||||
} else if (typeof nameOrFilters === "object") {
|
||||
frappe.db.count(doctype, { filters: filters, limit: 1 }).then((count) => {
|
||||
frappe.db.count(doctype, { filters: nameOrFilters, limit: 1 }).then((count) => {
|
||||
resolve(count > 0);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ frappe.ui.form.Sidebar = class {
|
|||
|
||||
this.setup_keyboard_shortcuts();
|
||||
this.show_auto_repeat_status();
|
||||
this.show_error_log_status();
|
||||
this.show_webhook_request_log_status();
|
||||
frappe.ui.form.setup_user_image_event(this.frm);
|
||||
|
||||
this.refresh();
|
||||
|
|
@ -144,11 +146,11 @@ frappe.ui.form.Sidebar = class {
|
|||
fieldname: ["frequency"],
|
||||
},
|
||||
callback: function (res) {
|
||||
me.sidebar
|
||||
.find(".auto-repeat-status")
|
||||
.removeClass("hidden")
|
||||
.html(__("Repeats {0}", [__(res.message.frequency)]));
|
||||
me.sidebar.find(".auto-repeat-status").on("click", function () {
|
||||
let el = me.sidebar.find(".auto-repeat-status");
|
||||
el.find("span").html(__("Repeats {0}", [__(res.message.frequency)]));
|
||||
el.closest(".sidebar-section").removeClass("hidden");
|
||||
el.show();
|
||||
el.on("click", function () {
|
||||
frappe.set_route("Form", "Auto Repeat", me.frm.doc.auto_repeat);
|
||||
});
|
||||
},
|
||||
|
|
@ -156,6 +158,36 @@ frappe.ui.form.Sidebar = class {
|
|||
}
|
||||
}
|
||||
|
||||
show_error_log_status() {
|
||||
const docinfo = this.frm.get_docinfo();
|
||||
if (docinfo.error_log_exists) {
|
||||
let el = this.sidebar.find(".error-log-status");
|
||||
el.closest(".sidebar-section").removeClass("hidden");
|
||||
el.show();
|
||||
el.on("click", () => {
|
||||
frappe.set_route("List", "Error Log", {
|
||||
reference_doctype: this.frm.doc.doctype,
|
||||
reference_name: this.frm.doc.name,
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
show_webhook_request_log_status() {
|
||||
const docinfo = this.frm.get_docinfo();
|
||||
if (docinfo.webhook_request_log_exists) {
|
||||
let el = this.sidebar.find(".webhook-request-log-status");
|
||||
el.closest(".sidebar-section").removeClass("hidden");
|
||||
el.show();
|
||||
el.on("click", () => {
|
||||
frappe.set_route("List", "Webhook Request Log", {
|
||||
reference_doctype: this.frm.doc.doctype,
|
||||
reference_document: this.frm.doc.name,
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
make_tags() {
|
||||
if (this.frm.meta.issingle) {
|
||||
this.sidebar.find(".form-tags").toggle(false);
|
||||
|
|
|
|||
|
|
@ -136,7 +136,9 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="sidebar-section hidden">
|
||||
<a><span class="auto-repeat-status"><span></a>
|
||||
<a><li class="indicator red blink error-log-status" style="display: none;">{%= __("Error Logs") %}</li></a>
|
||||
<a><li class="indicator yellow webhook-request-log-status" style="display: none;">{%= __("Webhook Logs") %}</li></a>
|
||||
<a><li class="indicator blue auto-repeat-status" style="display: none;"></li></a>
|
||||
</div>
|
||||
<div class="sidebar-section text-muted">
|
||||
<div class="pageview-count hidden"></div>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue