From a684585e7cf7099ea61f23b3176b492883f19f00 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Thu, 20 Oct 2016 10:25:36 +1300 Subject: netlib.debug -> mitmproxy.utils.debug --- mitmproxy/tools/main.py | 2 +- mitmproxy/utils/debug.py | 120 +++++++++++++++++++++++++++++++++++++ netlib/debug.py | 120 ------------------------------------- test/mitmproxy/test_utils_debug.py | 23 +++++++ test/netlib/test_debug.py | 23 ------- 5 files changed, 144 insertions(+), 144 deletions(-) create mode 100644 mitmproxy/utils/debug.py delete mode 100644 netlib/debug.py create mode 100644 test/mitmproxy/test_utils_debug.py delete mode 100644 test/netlib/test_debug.py diff --git a/mitmproxy/tools/main.py b/mitmproxy/tools/main.py index 5d4e8dc9..f3526de9 100644 --- a/mitmproxy/tools/main.py +++ b/mitmproxy/tools/main.py @@ -7,7 +7,7 @@ from mitmproxy import exceptions from mitmproxy.proxy import config from mitmproxy.proxy import server from netlib import version_check -from netlib import debug +from mitmproxy.utils import debug def assert_utf8_env(): diff --git a/mitmproxy/utils/debug.py b/mitmproxy/utils/debug.py new file mode 100644 index 00000000..147fe4b1 --- /dev/null +++ b/mitmproxy/utils/debug.py @@ -0,0 +1,120 @@ +import gc +import os +import sys +import threading +import signal +import platform +import traceback + +from mitmproxy import version + +from OpenSSL import SSL + + +def sysinfo(): + data = [ + "Mitmproxy version: %s" % version.VERSION, + "Python version: %s" % platform.python_version(), + "Platform: %s" % platform.platform(), + "SSL version: %s" % SSL.SSLeay_version(SSL.SSLEAY_VERSION).decode(), + ] + d = platform.linux_distribution() + t = "Linux distro: %s %s %s" % d + if d[0]: # pragma: no-cover + data.append(t) + + d = platform.mac_ver() + t = "Mac version: %s %s %s" % d + if d[0]: # pragma: no-cover + data.append(t) + + d = platform.win32_ver() + t = "Windows version: %s %s %s %s" % d + if d[0]: # pragma: no-cover + data.append(t) + + return "\n".join(data) + + +def dump_info(signal=None, frame=None, file=sys.stdout, testing=False): # pragma: no cover + print("****************************************************", file=file) + print("Summary", file=file) + print("=======", file=file) + + try: + import psutil + except: + print("(psutil not installed, skipping some debug info)", file=file) + else: + p = psutil.Process() + print("num threads: ", p.num_threads(), file=file) + if hasattr(p, "num_fds"): + print("num fds: ", p.num_fds(), file=file) + print("memory: ", p.memory_info(), file=file) + + print(file=file) + print("Files", file=file) + print("=====", file=file) + for i in p.open_files(): + print(i, file=file) + + print(file=file) + print("Connections", file=file) + print("===========", file=file) + for i in p.connections(): + print(i, file=file) + + print(file=file) + print("Threads", file=file) + print("=======", file=file) + bthreads = [] + for i in threading.enumerate(): + if hasattr(i, "_threadinfo"): + bthreads.append(i) + else: + print(i.name, file=file) + bthreads.sort(key=lambda x: x._thread_started) + for i in bthreads: + print(i._threadinfo(), file=file) + + print(file=file) + print("Memory", file=file) + print("=======", file=file) + gc.collect() + d = {} + for i in gc.get_objects(): + t = str(type(i)) + if "mitmproxy" in t or "netlib" in t: + d[t] = d.setdefault(t, 0) + 1 + itms = list(d.items()) + itms.sort(key=lambda x: x[1]) + for i in itms[-20:]: + print(i[1], i[0], file=file) + print("****************************************************", file=file) + + if not testing: + sys.exit(1) + + +def dump_stacks(signal=None, frame=None, file=sys.stdout, testing=False): + id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) + code = [] + for threadId, stack in sys._current_frames().items(): + code.append( + "\n# Thread: %s(%d)" % ( + id2name.get(threadId, ""), threadId + ) + ) + for filename, lineno, name, line in traceback.extract_stack(stack): + code.append('File: "%s", line %d, in %s' % (filename, lineno, name)) + if line: + code.append(" %s" % (line.strip())) + print("\n".join(code), file=file) + if not testing: + sys.exit(1) + + +def register_info_dumpers(): + if os.name != "nt": + signal.signal(signal.SIGUSR1, dump_info) + signal.signal(signal.SIGUSR2, dump_stacks) diff --git a/netlib/debug.py b/netlib/debug.py deleted file mode 100644 index 147fe4b1..00000000 --- a/netlib/debug.py +++ /dev/null @@ -1,120 +0,0 @@ -import gc -import os -import sys -import threading -import signal -import platform -import traceback - -from mitmproxy import version - -from OpenSSL import SSL - - -def sysinfo(): - data = [ - "Mitmproxy version: %s" % version.VERSION, - "Python version: %s" % platform.python_version(), - "Platform: %s" % platform.platform(), - "SSL version: %s" % SSL.SSLeay_version(SSL.SSLEAY_VERSION).decode(), - ] - d = platform.linux_distribution() - t = "Linux distro: %s %s %s" % d - if d[0]: # pragma: no-cover - data.append(t) - - d = platform.mac_ver() - t = "Mac version: %s %s %s" % d - if d[0]: # pragma: no-cover - data.append(t) - - d = platform.win32_ver() - t = "Windows version: %s %s %s %s" % d - if d[0]: # pragma: no-cover - data.append(t) - - return "\n".join(data) - - -def dump_info(signal=None, frame=None, file=sys.stdout, testing=False): # pragma: no cover - print("****************************************************", file=file) - print("Summary", file=file) - print("=======", file=file) - - try: - import psutil - except: - print("(psutil not installed, skipping some debug info)", file=file) - else: - p = psutil.Process() - print("num threads: ", p.num_threads(), file=file) - if hasattr(p, "num_fds"): - print("num fds: ", p.num_fds(), file=file) - print("memory: ", p.memory_info(), file=file) - - print(file=file) - print("Files", file=file) - print("=====", file=file) - for i in p.open_files(): - print(i, file=file) - - print(file=file) - print("Connections", file=file) - print("===========", file=file) - for i in p.connections(): - print(i, file=file) - - print(file=file) - print("Threads", file=file) - print("=======", file=file) - bthreads = [] - for i in threading.enumerate(): - if hasattr(i, "_threadinfo"): - bthreads.append(i) - else: - print(i.name, file=file) - bthreads.sort(key=lambda x: x._thread_started) - for i in bthreads: - print(i._threadinfo(), file=file) - - print(file=file) - print("Memory", file=file) - print("=======", file=file) - gc.collect() - d = {} - for i in gc.get_objects(): - t = str(type(i)) - if "mitmproxy" in t or "netlib" in t: - d[t] = d.setdefault(t, 0) + 1 - itms = list(d.items()) - itms.sort(key=lambda x: x[1]) - for i in itms[-20:]: - print(i[1], i[0], file=file) - print("****************************************************", file=file) - - if not testing: - sys.exit(1) - - -def dump_stacks(signal=None, frame=None, file=sys.stdout, testing=False): - id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) - code = [] - for threadId, stack in sys._current_frames().items(): - code.append( - "\n# Thread: %s(%d)" % ( - id2name.get(threadId, ""), threadId - ) - ) - for filename, lineno, name, line in traceback.extract_stack(stack): - code.append('File: "%s", line %d, in %s' % (filename, lineno, name)) - if line: - code.append(" %s" % (line.strip())) - print("\n".join(code), file=file) - if not testing: - sys.exit(1) - - -def register_info_dumpers(): - if os.name != "nt": - signal.signal(signal.SIGUSR1, dump_info) - signal.signal(signal.SIGUSR2, dump_stacks) diff --git a/test/mitmproxy/test_utils_debug.py b/test/mitmproxy/test_utils_debug.py new file mode 100644 index 00000000..9acf8192 --- /dev/null +++ b/test/mitmproxy/test_utils_debug.py @@ -0,0 +1,23 @@ +import io + +from mitmproxy.utils import debug + + +def test_dump_info(): + cs = io.StringIO() + debug.dump_info(None, None, file=cs, testing=True) + assert cs.getvalue() + + +def test_dump_stacks(): + cs = io.StringIO() + debug.dump_stacks(None, None, file=cs, testing=True) + assert cs.getvalue() + + +def test_sysinfo(): + assert debug.sysinfo() + + +def test_register_info_dumpers(): + debug.register_info_dumpers() diff --git a/test/netlib/test_debug.py b/test/netlib/test_debug.py deleted file mode 100644 index bdb85c9e..00000000 --- a/test/netlib/test_debug.py +++ /dev/null @@ -1,23 +0,0 @@ -import io - -from netlib import debug - - -def test_dump_info(): - cs = io.StringIO() - debug.dump_info(None, None, file=cs, testing=True) - assert cs.getvalue() - - -def test_dump_stacks(): - cs = io.StringIO() - debug.dump_stacks(None, None, file=cs, testing=True) - assert cs.getvalue() - - -def test_sysinfo(): - assert debug.sysinfo() - - -def test_register_info_dumpers(): - debug.register_info_dumpers() -- cgit v1.2.3