aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/debug.py
blob: b48cb12207b4402da7182c89f68d21400ca1e625 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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)