82 lines
2.4 KiB
Python
82 lines
2.4 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
|
|
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 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 tearDown(self):
|
|
frappe.conf.monitor = 0
|
|
frappe.cache().delete_value(MONITOR_REDIS_KEY)
|