public void Visit()

in Microsoft.Azure.Cosmos/src/Tracing/TraceWriter.TraceTextWriter.cs [334:468]


                public void Visit(ClientSideRequestStatisticsTraceDatum clientSideRequestStatisticsTraceDatum)
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.AppendLine($"Start Time: {clientSideRequestStatisticsTraceDatum.RequestStartTimeUtc.ToString(TraceWriter.HourTimeFormatString, CultureInfo.InvariantCulture)}");
                    if (clientSideRequestStatisticsTraceDatum.RequestEndTimeUtc.HasValue)
                    {
                        stringBuilder.AppendLine($"End Time: {clientSideRequestStatisticsTraceDatum.RequestEndTimeUtc.Value.ToString(TraceWriter.HourTimeFormatString, CultureInfo.InvariantCulture)}");
                    }

                    stringBuilder.AppendLine("Contacted Replicas");
                    Dictionary<Documents.TransportAddressUri, int> uriAndCounts = new Dictionary<Documents.TransportAddressUri, int>();
                    foreach (Documents.TransportAddressUri uri in clientSideRequestStatisticsTraceDatum.ContactedReplicas)
                    {
                        if (uri == null)
                        {
                            continue;
                        }

                        if (!uriAndCounts.TryGetValue(uri, out int count))
                        {
                            count = 0;
                        }

                        uriAndCounts[uri] = ++count;
                    }

                    foreach (KeyValuePair<Documents.TransportAddressUri, int> uriAndCount in uriAndCounts)
                    {
                        stringBuilder.AppendLine($"{space}{uriAndCount.Key?.ToString() ?? "<null>"}: {uriAndCount.Value}");
                    }

                    stringBuilder.AppendLine("Failed to Contact Replicas");
                    foreach (Documents.TransportAddressUri failedToContactReplica in clientSideRequestStatisticsTraceDatum.FailedReplicas)
                    {
                        stringBuilder.AppendLine($"{space}{failedToContactReplica?.ToString() ?? "<null>"}");
                    }

                    stringBuilder.AppendLine("Regions Contacted");
                    foreach (Documents.TransportAddressUri regionContacted in clientSideRequestStatisticsTraceDatum.ContactedReplicas)
                    {
                        stringBuilder.AppendLine($"{space}{regionContacted?.ToString() ?? "<null>"}");
                    }

                    stringBuilder.AppendLine("Address Resolution Statistics");
                    stringBuilder.AppendLine(AddressResolutionStatisticsTextTable.Singleton.TopLine);
                    stringBuilder.AppendLine(AddressResolutionStatisticsTextTable.Singleton.Header);
                    stringBuilder.AppendLine(AddressResolutionStatisticsTextTable.Singleton.MiddleLine);
                    foreach (KeyValuePair<string, AddressResolutionStatistics> stat in clientSideRequestStatisticsTraceDatum.EndpointToAddressResolutionStatistics)
                    {
                        string row = AddressResolutionStatisticsTextTable.Singleton.GetRow(
                            stat.Value.StartTime.ToString(TraceWriter.HourTimeFormatString, CultureInfo.InvariantCulture),
                            stat.Value.EndTime.HasValue ? stat.Value.EndTime.Value.ToString(TraceWriter.HourTimeFormatString, CultureInfo.InvariantCulture) : "NO END TIME",
                            stat.Value.TargetEndpoint);
                        stringBuilder.AppendLine(row);
                    }

                    stringBuilder.AppendLine(AddressResolutionStatisticsTextTable.Singleton.BottomLine);

                    stringBuilder.AppendLine("Store Response Statistics");
                    foreach (StoreResponseStatistics stat in clientSideRequestStatisticsTraceDatum.StoreResponseStatisticsList)
                    {
                        if (stat.RequestStartTime.HasValue)
                        {
                            stringBuilder.AppendLine($"{space}Start Time: {stat.RequestStartTime.Value.ToString(TraceWriter.HourTimeFormatString, CultureInfo.InvariantCulture)}");
                        }
                        else
                        {
                            stringBuilder.AppendLine("{space}Start Time Not Found");
                        }

                        stringBuilder.AppendLine($"{space}End Time: {stat.RequestResponseTime.ToString(TraceWriter.HourTimeFormatString, CultureInfo.InvariantCulture)}");

                        stringBuilder.AppendLine($"{space}Resource Type: {stat.RequestResourceType}");
                        stringBuilder.AppendLine($"{space}Operation Type: {stat.RequestOperationType}");

                        if (stat.StoreResult != null)
                        {
                            stringBuilder.AppendLine($"{space}Store Result");
                            stringBuilder.AppendLine($"{space}{space}Activity Id: {stat.StoreResult.ActivityId ?? "<null>"}");
                            stringBuilder.AppendLine($"{space}{space}Store Physical Address: {stat.StoreResult.StorePhysicalAddress?.ToString() ?? "<null>"}");
                            stringBuilder.AppendLine($"{space}{space}Status Code: {stat.StoreResult.StatusCode}/{stat.StoreResult.SubStatusCode}");
                            stringBuilder.AppendLine($"{space}{space}Is Valid: {stat.StoreResult.IsValid}");
                            stringBuilder.AppendLine($"{space}{space}LSN Info");
                            stringBuilder.AppendLine($"{space}{space}{space}LSN: {stat.StoreResult.LSN}");
                            stringBuilder.AppendLine($"{space}{space}{space}Item LSN: {stat.StoreResult.ItemLSN}");
                            stringBuilder.AppendLine($"{space}{space}{space}Global LSN: {stat.StoreResult.GlobalCommittedLSN}");
                            stringBuilder.AppendLine($"{space}{space}{space}Quorum Acked LSN: {stat.StoreResult.QuorumAckedLSN}");
                            stringBuilder.AppendLine($"{space}{space}{space}Using LSN: {stat.StoreResult.UsingLocalLSN}");
                            stringBuilder.AppendLine($"{space}{space}Session Token: {stat.StoreResult.SessionToken?.ConvertToString() ?? "<null>"}");
                            stringBuilder.AppendLine($"{space}{space}Quorum Info");
                            stringBuilder.AppendLine($"{space}{space}{space}Current Replica Set Size: {stat.StoreResult.CurrentReplicaSetSize}");
                            stringBuilder.AppendLine($"{space}{space}{space}Current Write Quorum: {stat.StoreResult.CurrentWriteQuorum}");
                            stringBuilder.AppendLine($"{space}{space}Exception");
                            try
                            {
                                stringBuilder.AppendLine($"{space}{space}{stat.StoreResult.GetException()}");
                            }
                            catch (Exception)
                            {
                                // This method throws if there is no exception.
                            }
                        }
                    }

                    if (clientSideRequestStatisticsTraceDatum.HttpResponseStatisticsList.Any())
                    {
                        stringBuilder.AppendLine("Http Response Statistics");
                        foreach (HttpResponseStatistics stat in clientSideRequestStatisticsTraceDatum.HttpResponseStatisticsList)
                        {
                            stringBuilder.AppendLine($"{space}HttpResponse");
                            stringBuilder.AppendLine($"{space}{space}RequestStartTime: {stat.RequestStartTime.ToString("o", CultureInfo.InvariantCulture)}");
                            stringBuilder.AppendLine($"{space}{space}DurationInMs: {stat.Duration.TotalMilliseconds:0.00}");
                            stringBuilder.AppendLine($"{space}{space}RequestUri: {stat.RequestUri}");
                            stringBuilder.AppendLine($"{space}{space}ResourceType: {stat.ResourceType}");
                            stringBuilder.AppendLine($"{space}{space}HttpMethod: {stat.HttpMethod}");

                            if (stat.Exception != null)
                            {
                                stringBuilder.AppendLine($"{space}{space}ExceptionType: {stat.Exception.GetType()}");
                                stringBuilder.AppendLine($"{space}{space}ExceptionMessage: {stat.Exception.Message}");
                            }

                            if (stat.HttpResponseMessage != null)
                            {
                                stringBuilder.AppendLine($"{space}{space}StatusCode: {stat.HttpResponseMessage.StatusCode}");
                                if (!stat.HttpResponseMessage.IsSuccessStatusCode)
                                {
                                    stringBuilder.AppendLine($"{space}{space}ReasonPhrase: {stat.HttpResponseMessage.ReasonPhrase}");
                                }
                            }
                        }
                    }

                    this.toStringValue = stringBuilder.ToString();
                }