From 3f9bba02f70447e495249f66c9650b8aade269cb Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Tue, 25 Dec 2018 16:30:03 +0530 Subject: [PATCH] refactor(recorder): Don't record cache activity --- .../js/frappe/recorder/RequestDetail.vue | 20 ----- frappe/recorder.py | 77 ------------------- frappe/www/recorder.py | 6 -- 3 files changed, 103 deletions(-) diff --git a/frappe/public/js/frappe/recorder/RequestDetail.vue b/frappe/public/js/frappe/recorder/RequestDetail.vue index 911b05587a..1199cb32d0 100644 --- a/frappe/public/js/frappe/recorder/RequestDetail.vue +++ b/frappe/public/js/frappe/recorder/RequestDetail.vue @@ -18,25 +18,6 @@ - -
-
-
-
- -
-
-
-
-
{{ call.stack }}
-
{{ call.call }}
-
-
-
-
@@ -56,7 +37,6 @@ export default { uuid: this.$route.param } }).then( r => { - this.cache = r.message.cache this.calls = r.message.calls }) }, diff --git a/frappe/recorder.py b/frappe/recorder.py index 3aa0a07454..9bf1e06e38 100644 --- a/frappe/recorder.py +++ b/frappe/recorder.py @@ -15,94 +15,17 @@ def recorder_start(): # Now is a good time # If uuid is not set then RecorderMiddleware isn't active if "uuid" in frappe.request.environ: - wrap_cache() frappe.db.sql = recorder(frappe.db.sql) def recorder_stop(): # Recorded calls need to be stored in cache # This looks like a terribe syntax, Because it actually is if "uuid" in frappe.request.environ: - persist_cache() persist(frappe.db.sql) def time_ms(): return time.time() * 1000 -def wrap_cache(): - def cache_recorder(function): - def wrapper(*args, **kwargs): - start_time_ms = time_ms() - result = function(*args, **kwargs) - end_time_ms = time_ms() - - # Some elementary analysis shows that following lines are a little time consuming - # These can be made optional. - stack = "".join(traceback.format_stack()) - - data = { - "function": function.__name__, - #"args": args, - #"kwargs": kwargs, - # result is sometimes a nested dict, those can't be sometimes JSON serialized. - # pickle.dumps seems like a nice way to go., but JS can't understand pickle. - # Skip result for now - # "result": result, - "stack": stack, - # Exact redis query is not available for now - # Regenerate equivalent function call instead. - "call": "{}(*{},**{})".format(function.__name__, args, kwargs), - "time": { - "start": start_time_ms, - "end": end_time_ms, - "total": end_time_ms - start_time_ms, - }, - } - - wrapper.calls.append(data) - return result - wrapper.calls = list() - return wrapper - - # frappe.cache() will provide an instance of RedisWrapper - # Selected methods of this class are used to do cache operations - # Recording activity of these methods will give a nice picture of cache activity - - # cache_methods lists all interesting cache methods - # Override these methods with the use of wrapper function - # that records each call along with some suplimentary data - redis_server = frappe.cache() - cache_methods = [ - "set_value", "get_value", - "get_all", "get_keys", - "delete_keys", "delete_key", "delete_value", - "lpush", "rpush", "lpop", "llen", "lrange", - "hset", "hgetall", "hincrby", "hget", "hdel", "hdel_keys", "hkeys", - "sadd", "srem", "sismember", "spop", "srandmember", "smembers", - "zincrby", "zrange" - ] - - # cache_methods will be needed again while storing recorded calls in cache - # Store cache_methods list in cache_methods attribute of wrap_cache - wrap_cache.cache_methods = cache_methods - for method in cache_methods: - # For now assume that all these methods exist on RedisWrapper instance - original = getattr(redis_server, method) - modified = cache_recorder(original) - setattr(redis_server, method, modified) - -def persist_cache(): - redis_server = frappe.cache() - cache_methods = wrap_cache.cache_methods - calls = [] - uuid = frappe.request.environ["uuid"] - for method in cache_methods: - # Assumes that the method exists on RedisWrapper instance - # and function.calls also exists - function = getattr(redis_server, method) - calls.extend(function.calls) - - # Record all calls in cache - frappe.cache().set("recorder-calls-cache-{}".format(uuid), dumps(calls)) def recorder(function): def wrapper(*args, **kwargs): diff --git a/frappe/www/recorder.py b/frappe/www/recorder.py index 1351e1a325..6bba4890bf 100644 --- a/frappe/www/recorder.py +++ b/frappe/www/recorder.py @@ -32,13 +32,7 @@ def get_request_data(uuid): for index, call in enumerate(calls): call["index"] = index - cache = frappe.cache().get("recorder-calls-cache-{}".format(uuid)) - cache = json.loads(cache.decode()) - for index, call in enumerate(cache): - call["index"] = index - return { - "cache": cache, "calls": calls, }