mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-12-03 12:23:46 +00:00
09edbd9492
- Add basethread.BaseThread that all threads outside of test suites should use - Add a signal handler to mitmproxy, mitmdump and mitmweb that dumps resource information to screen when SIGUSR1 is received. - Improve thread naming throughout to make thread dumps understandable
77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
from __future__ import (absolute_import, print_function, division)
|
|
|
|
import sys
|
|
import threading
|
|
import signal
|
|
import platform
|
|
|
|
import psutil
|
|
|
|
from netlib import version
|
|
|
|
|
|
def sysinfo():
|
|
data = [
|
|
"Mitmproxy verison: %s" % version.VERSION,
|
|
"Python version: %s" % platform.python_version(),
|
|
"Platform: %s" % platform.platform(),
|
|
]
|
|
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(sig, frm, file=sys.stdout): # pragma: no cover
|
|
p = psutil.Process()
|
|
|
|
print("****************************************************", file=file)
|
|
print("Summary", file=file)
|
|
print("=======", file=file)
|
|
print("num threads: ", p.num_threads(), file=file)
|
|
print("num fds: ", p.num_fds(), file=file)
|
|
print("memory: ", p.memory_info(), 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("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)
|
|
|
|
|
|
def register_info_dumper(): # pragma: no cover
|
|
signal.signal(signal.SIGUSR1, dump_info)
|