2016-06-11 07:52:24 +00:00
|
|
|
from __future__ import (absolute_import, print_function, division)
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import threading
|
|
|
|
import signal
|
2016-06-11 04:40:21 +00:00
|
|
|
import platform
|
2016-06-11 07:52:24 +00:00
|
|
|
|
|
|
|
import psutil
|
|
|
|
|
2016-06-11 04:40:21 +00:00
|
|
|
from netlib import version
|
|
|
|
|
2016-06-11 09:06:41 +00:00
|
|
|
from OpenSSL import SSL;
|
|
|
|
|
2016-06-11 04:40:21 +00:00
|
|
|
|
|
|
|
def sysinfo():
|
|
|
|
data = [
|
2016-06-11 09:04:13 +00:00
|
|
|
"Mitmproxy version: %s" % version.VERSION,
|
2016-06-11 07:52:24 +00:00
|
|
|
"Python version: %s" % platform.python_version(),
|
|
|
|
"Platform: %s" % platform.platform(),
|
2016-06-11 09:06:41 +00:00
|
|
|
"SSL version: %s" % SSL.SSLeay_version(SSL.SSLEAY_VERSION),
|
2016-06-11 04:40:21 +00:00
|
|
|
]
|
|
|
|
d = platform.linux_distribution()
|
2016-06-11 07:52:24 +00:00
|
|
|
t = "Linux distro: %s %s %s" % d
|
|
|
|
if d[0]: # pragma: no-cover
|
2016-06-11 05:56:17 +00:00
|
|
|
data.append(t)
|
2016-06-11 04:40:21 +00:00
|
|
|
|
|
|
|
d = platform.mac_ver()
|
2016-06-11 07:52:24 +00:00
|
|
|
t = "Mac version: %s %s %s" % d
|
|
|
|
if d[0]: # pragma: no-cover
|
2016-06-11 05:56:17 +00:00
|
|
|
data.append(t)
|
2016-06-11 04:40:21 +00:00
|
|
|
|
|
|
|
d = platform.win32_ver()
|
2016-06-11 07:52:24 +00:00
|
|
|
t = "Windows version: %s %s %s %s" % d
|
|
|
|
if d[0]: # pragma: no-cover
|
2016-06-11 05:56:17 +00:00
|
|
|
data.append(t)
|
2016-06-11 04:40:21 +00:00
|
|
|
|
|
|
|
return "\n".join(data)
|
2016-06-11 07:52:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
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)
|