From 050431fdd651016a71b895db384b53983319184e Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sat, 2 Apr 2016 21:33:51 +0200 Subject: [PATCH] improve timing display --- mitmproxy/console/flowdetailview.py | 110 +++++++++++++++------------- mitmproxy/flow.py | 12 +-- 2 files changed, 64 insertions(+), 58 deletions(-) diff --git a/mitmproxy/console/flowdetailview.py b/mitmproxy/console/flowdetailview.py index 8e3a47ae8..d338b6bce 100644 --- a/mitmproxy/console/flowdetailview.py +++ b/mitmproxy/console/flowdetailview.py @@ -5,7 +5,7 @@ from .. import utils def maybe_timestamp(base, attr): - if base and getattr(base, attr): + if base is not None and getattr(base, attr): return utils.format_timestamp_with_milli(getattr(base, attr)) else: return "active" @@ -89,65 +89,71 @@ def flowdetails(state, flow): parts = [] - parts.append( - [ - "Client conn. established", - maybe_timestamp(cc, "timestamp_start") - ] - ) - parts.append( - [ - "Server conn. initiated", - maybe_timestamp(sc, "timestamp_start") - ] - ) - parts.append( - [ - "Server conn. TCP handshake", - maybe_timestamp(sc, "timestamp_tcp_setup") - ] - ) - if sc.ssl_established: + if cc is not None and cc.timestamp_start: parts.append( [ - "Server conn. SSL handshake", - maybe_timestamp(sc, "timestamp_ssl_setup") + "Client conn. established", + maybe_timestamp(cc, "timestamp_start") + ] + ) + if cc.ssl_established: + parts.append( + [ + "Client conn. TLS handshake", + maybe_timestamp(cc, "timestamp_ssl_setup") + ] + ) + if sc is not None and sc.timestamp_start: + parts.append( + [ + "Server conn. initiated", + maybe_timestamp(sc, "timestamp_start") ] ) parts.append( [ - "Client conn. SSL handshake", - maybe_timestamp(cc, "timestamp_ssl_setup") + "Server conn. TCP handshake", + maybe_timestamp(sc, "timestamp_tcp_setup") + ] + ) + if sc.ssl_established: + parts.append( + [ + "Server conn. TLS handshake", + maybe_timestamp(sc, "timestamp_ssl_setup") + ] + ) + if req is not None and req.timestamp_start: + parts.append( + [ + "First request byte", + maybe_timestamp(req, "timestamp_start") + ] + ) + parts.append( + [ + "Request complete", + maybe_timestamp(req, "timestamp_end") + ] + ) + if resp is not None and resp.timestamp_start: + parts.append( + [ + "First response byte", + maybe_timestamp(resp, "timestamp_start") + ] + ) + parts.append( + [ + "Response complete", + maybe_timestamp(resp, "timestamp_end") ] ) - parts.append( - [ - "First request byte", - maybe_timestamp(req, "timestamp_start") - ] - ) - parts.append( - [ - "Request complete", - maybe_timestamp(req, "timestamp_end") - ] - ) - parts.append( - [ - "First response byte", - maybe_timestamp(resp, "timestamp_start") - ] - ) - parts.append( - [ - "Response complete", - maybe_timestamp(resp, "timestamp_end") - ] - ) - # sort operations by timestamp - parts = sorted(parts, key=lambda p: p[1]) + if parts: + # sort operations by timestamp + parts = sorted(parts, key=lambda p: p[1]) - text.append(urwid.Text([("head", "Timing:")])) - text.extend(common.format_keyvals(parts, key="key", val="text", indent=4)) + text.append(urwid.Text([("head", "Timing:")])) + text.extend(common.format_keyvals(parts, key="key", val="text", indent=4)) return searchable.Searchable(state, text) diff --git a/mitmproxy/flow.py b/mitmproxy/flow.py index 781ea1502..8ba9b7f92 100644 --- a/mitmproxy/flow.py +++ b/mitmproxy/flow.py @@ -838,9 +838,9 @@ class FlowMaster(controller.Master): address=dict(address=(host, port), use_ipv6=False), clientcert=None, ssl_established=False, - timestamp_start=time.time(), - timestamp_end=time.time(), - timestamp_ssl_setup=time.time() + timestamp_start=None, + timestamp_end=None, + timestamp_ssl_setup=None )) s = ServerConnection.from_state(dict( @@ -850,9 +850,9 @@ class FlowMaster(controller.Master): sni=host, source_address=dict(address=('', 0), use_ipv6=False), ssl_established=True, - timestamp_start=time.time(), - timestamp_tcp_setup=time.time(), - timestamp_ssl_setup=time.time(), + timestamp_start=None, + timestamp_tcp_setup=None, + timestamp_ssl_setup=None, timestamp_end=None, via=None ))