feat: capture custom values in frappe monitor

lets monitor add extra info for:
- Save/Submit by doctype
- Report generation time by standard report name
This commit is contained in:
Ankush Menat 2022-09-23 16:46:33 +05:30 committed by Ankush Menat
parent 002b27dbdd
commit 967cc26fab
5 changed files with 21 additions and 0 deletions

View file

@ -13,5 +13,6 @@
"root_login": "root",
"root_password": "travis",
"host_name": "http://test_site:8000",
"monitor": 1,
"server_script_enabled": true
}

View file

@ -8,6 +8,7 @@ import frappe
from frappe.desk.form.load import get_attachments
from frappe.desk.query_report import generate_report_result
from frappe.model.document import Document
from frappe.monitor import add_data_to_monitor
from frappe.utils import gzip_compress, gzip_decompress
from frappe.utils.background_jobs import enqueue
@ -25,6 +26,8 @@ def run_background(prepared_report):
instance = frappe.get_doc("Prepared Report", prepared_report)
report = frappe.get_doc("Report", instance.ref_report_doctype)
add_data_to_monitor(report=instance.ref_report_doctype)
try:
report.custom_columns = []

View file

@ -5,6 +5,7 @@ import json
import frappe
from frappe.desk.form.load import run_onload
from frappe.monitor import add_data_to_monitor
@frappe.whitelist()
@ -25,6 +26,8 @@ def savedocs(doc, action):
run_onload(doc)
send_updated_docs(doc)
add_data_to_monitor(doctype=doc.doctype, action=action)
frappe.msgprint(frappe._("Saved"), indicator="green", alert=True)

View file

@ -12,6 +12,7 @@ from frappe import _
from frappe.core.utils import ljust_list
from frappe.model.utils import render_include
from frappe.modules import get_module_path, scrub
from frappe.monitor import add_data_to_monitor
from frappe.permissions import get_role_permissions
from frappe.translate import send_translations
from frappe.utils import (
@ -254,6 +255,8 @@ def run(
result["add_total_row"] = report.add_total_row and not result.get("skip_total_row", False)
add_data_to_monitor(report=report)
return result

View file

@ -25,6 +25,13 @@ def stop(response=None):
frappe.local.monitor.dump(response)
def add_data_to_monitor(**kwargs) -> None:
"""Add additional custom key-value pairs along with monitor log.
Note: Key-value pairs should be simple JSON exportable types."""
if hasattr(frappe.local, "monitor"):
frappe.local.monitor.add_custom_data(**kwargs)
def log_file():
return os.path.join(frappe.utils.get_bench_path(), "logs", "monitor.json.log")
@ -71,6 +78,10 @@ class Monitor:
waitdiff = self.data.timestamp - job.enqueued_at
self.data.job.wait = int(waitdiff.total_seconds() * 1000000)
def add_custom_data(self, **kwargs):
if self.data:
self.data.update(kwargs)
def dump(self, response=None):
try:
timediff = datetime.utcnow() - self.data.timestamp