Class UpstreamConnectionTiming
Captures the timing of establishing a single upstream (server-facing) TCP/TLS connection. Only populated when EnableRequestTimingCapture is enabled; otherwise no instance is ever allocated.
One instance is created per upstream connection, at the moment that connection is first established, and is never mutated afterwards. It is shared by every session that later reuses that same connection from the pool - reachable from any of them via UpstreamConnectionTiming.
Address resolution can return more than one IP address for a hostname; the proxy tries them in order until one connects. The duration properties below reflect only the phases of the address that ultimately succeeded - FailedAddressAttempts tells you how many earlier addresses were tried and failed first.
Inherited Members
Namespace: Titanium.Web.Proxy.Diagnostics
Assembly: Titanium.Web.Proxy.dll
Syntax
public sealed class UpstreamConnectionTiming
Properties
| Edit this page View SourceConnectStartedAt
When the proxy started establishing this connection (immediately before DNS resolution).
Declaration
public DateTime ConnectStartedAt { get; }
Property Value
| Type | Description |
|---|---|
| DateTime |
DnsDuration
How long DNS resolution took.
Declaration
public TimeSpan? DnsDuration { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan? |
DnsResolvedAt
When DNS resolution of the connect target (the upstream proxy's hostname, if one is configured and in use; otherwise the origin server's hostname) completed.
Declaration
public DateTime? DnsResolvedAt { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? |
EstablishedAt
When this connection became fully ready to use - the same instant as the last of TlsHandshakeCompletedAt, UpstreamProxyConnectedAt or TcpConnectedAt that applies to this connection.
Declaration
public DateTime EstablishedAt { get; }
Property Value
| Type | Description |
|---|---|
| DateTime |
FailedAddressAttempts
Number of DNS-resolved addresses that were tried and failed before the address that ultimately succeeded. Zero if the first address tried succeeded (the common case).
Declaration
public int FailedAddressAttempts { get; }
Property Value
| Type | Description |
|---|---|
| int |
TcpConnectDuration
How long the TCP handshake took, across every address attempted.
Declaration
public TimeSpan? TcpConnectDuration { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan? |
TcpConnectedAt
When the TCP handshake to the (possibly multi-address) connect target completed, on whichever address ultimately succeeded.
Declaration
public DateTime? TcpConnectedAt { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? |
TlsHandshakeCompletedAt
When the TLS handshake with the origin server completed. null for a plain (non-HTTPS) connection.
Declaration
public DateTime? TlsHandshakeCompletedAt { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? |
TlsHandshakeDuration
How long the TLS handshake with the origin took. null for a plain connection.
Declaration
public TimeSpan? TlsHandshakeDuration { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan? |
TotalDuration
Total wall-clock time spent establishing this connection, end to end.
Declaration
public TimeSpan TotalDuration { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan |
UpstreamProxyConnectDuration
How long it took to establish the HTTP CONNECT tunnel through an external upstream proxy. null when no external HTTP upstream proxy is in use.
Declaration
public TimeSpan? UpstreamProxyConnectDuration { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan? |
UpstreamProxyConnectedAt
When the HTTP CONNECT tunnel through an external HTTP(S) upstream proxy was established (including any Negotiate/NTLM/Kerberos authentication round trips). null when no external HTTP upstream proxy is in use for this connection.
Declaration
public DateTime? UpstreamProxyConnectedAt { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? |