seitime-frappe/frappe/tests/test_monitor.py
Ankush Menat 961585f1d9
fix: misc dx improvemnts (#22188)
* fix(dx): simplify adding callbacks

frappe.db.after_commit(func) == frappe.db.after_commit.add(func)

* fix: trace id missing

DB gets initted before request
2023-08-28 07:01:25 +00:00

90 lines
2.7 KiB
Python

# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
import frappe
import frappe.monitor
from frappe.monitor import MONITOR_REDIS_KEY, get_trace_id
from frappe.tests.utils import FrappeTestCase
from frappe.utils import set_request
from frappe.utils.response import build_response
class TestMonitor(FrappeTestCase):
def setUp(self):
frappe.conf.monitor = 1
frappe.cache.delete_value(MONITOR_REDIS_KEY)
def tearDown(self):
frappe.conf.monitor = 0
frappe.cache.delete_value(MONITOR_REDIS_KEY)
def test_enable_monitor(self):
set_request(method="GET", path="/api/method/frappe.ping")
response = build_response("json")
frappe.monitor.start()
frappe.monitor.stop(response)
logs = frappe.cache.lrange(MONITOR_REDIS_KEY, 0, -1)
self.assertEqual(len(logs), 1)
log = frappe.parse_json(logs[0].decode())
self.assertTrue(log.duration)
self.assertTrue(log.site)
self.assertTrue(log.timestamp)
self.assertTrue(log.uuid)
self.assertTrue(log.request)
self.assertEqual(log.transaction_type, "request")
self.assertEqual(log.request["method"], "GET")
def test_no_response(self):
set_request(method="GET", path="/api/method/frappe.ping")
frappe.monitor.start()
frappe.monitor.stop(response=None)
logs = frappe.cache.lrange(MONITOR_REDIS_KEY, 0, -1)
self.assertEqual(len(logs), 1)
log = frappe.parse_json(logs[0].decode())
self.assertEqual(log.request["status_code"], 500)
self.assertEqual(log.transaction_type, "request")
self.assertEqual(log.request["method"], "GET")
def test_job(self):
frappe.utils.background_jobs.execute_job(
frappe.local.site, "frappe.ping", None, None, {}, is_async=False
)
logs = frappe.cache.lrange(MONITOR_REDIS_KEY, 0, -1)
self.assertEqual(len(logs), 1)
log = frappe.parse_json(logs[0].decode())
self.assertEqual(log.transaction_type, "job")
self.assertTrue(log.job)
self.assertEqual(log.job["method"], "frappe.ping")
self.assertEqual(log.job["scheduled"], False)
self.assertEqual(log.job["wait"], 0)
def test_flush(self):
set_request(method="GET", path="/api/method/frappe.ping")
response = build_response("json")
frappe.monitor.start()
frappe.monitor.stop(response)
open(frappe.monitor.log_file(), "w").close()
frappe.monitor.flush()
with open(frappe.monitor.log_file()) as f:
logs = f.readlines()
self.assertEqual(len(logs), 1)
log = frappe.parse_json(logs[0])
self.assertEqual(log.transaction_type, "request")
def test_trace_ids(self):
set_request(method="GET", path="/api/method/frappe.ping")
response = build_response("json")
frappe.monitor.start()
frappe.db.sql("select 1")
self.assertIn(get_trace_id(), str(frappe.db.last_query))
frappe.monitor.stop(response)