public void LogLatencies()
 {
     this.baseLogger.LogField(LogKey.AccountForestLatencyBreakup, RouteSelectorDiagnostics.GetBreakupOfLatencies(this.accountForestLatencies));
     this.baseLogger.LogField(LogKey.TotalAccountForestLatency, this.accountForestLatencies.Sum());
     this.baseLogger.LogField(LogKey.GlsLatencyBreakup, RouteSelectorDiagnostics.GetBreakupOfLatencies(this.globalLocatorLatencies));
     this.baseLogger.LogField(LogKey.TotalGlsLatency, this.globalLocatorLatencies.Sum());
     this.baseLogger.LogField(LogKey.ResourceForestLatencyBreakup, RouteSelectorDiagnostics.GetBreakupOfLatencies(this.resourceForestLatencies));
     this.baseLogger.LogField(LogKey.TotalResourceForestLatency, this.resourceForestLatencies.Sum());
     this.baseLogger.LogField(LogKey.SharedCacheLatencyBreakup, RouteSelectorDiagnostics.GetBreakupOfLatencies(this.sharedCacheLatencies));
     this.baseLogger.LogField(LogKey.TotalSharedCacheLatency, this.sharedCacheLatencies.Sum());
     this.baseLogger.LogField(LogKey.ServerLocatorLatency, this.serverLocatorLatencies.Sum());
 }
Exemple #2
0
 private void OnPostAuthorizeInternal(HttpContextBase context)
 {
     if (!HttpProxySettings.RouteSelectorEnabled.Value && !RouteSelectorModule.IsTesting)
     {
         return;
     }
     if (!RouteSelectorModule.IsTesting)
     {
         RequestLogger logger = RequestLogger.GetLogger(context);
         this.diagnostics = new RouteSelectorDiagnostics(logger);
     }
     this.diagnostics.SaveRoutingLatency(delegate
     {
         ServerLocatorReturn serverLocatorReturn = null;
         IRoutingKey[] array = (IRoutingKey[])context.Items["RoutingKeys"];
         if (array == null)
         {
             return;
         }
         if (array.Length == 0)
         {
             return;
         }
         serverLocatorReturn = this.serverLocator.LocateServer(array, this.diagnostics);
         this.diagnostics.LogLatencies();
         this.diagnostics.ProcessLatencyPerfCounters();
         if (serverLocatorReturn != null && !string.IsNullOrEmpty(serverLocatorReturn.ServerFqdn))
         {
             if (!context.Request.IsProxyTestProbeRequest())
             {
                 context.Request.Headers.Add("X-ProxyTargetServer", serverLocatorReturn.ServerFqdn);
                 context.Request.Headers.Add("X-ProxyTargetServerVersion", (serverLocatorReturn.ServerVersion != null) ? serverLocatorReturn.ServerVersion.ToString() : string.Empty);
             }
             this.diagnostics.SetTargetServer(serverLocatorReturn.ServerFqdn);
             RouteSelectorDiagnostics.UpdateRoutingFailurePerfCounter(serverLocatorReturn.ServerFqdn, false);
             if (serverLocatorReturn.RoutingEntries.Count > 0)
             {
                 StringBuilder stringBuilder = new StringBuilder();
                 bool flag = true;
                 foreach (IRoutingEntry routingEntry in serverLocatorReturn.RoutingEntries)
                 {
                     if (!flag)
                     {
                         stringBuilder.Append(",");
                     }
                     string value = RoutingEntryHeaderSerializer.Serialize(routingEntry);
                     stringBuilder.Append(value);
                     flag = false;
                     this.diagnostics.AddRoutingEntry(value);
                 }
                 context.Request.Headers.Add("X-RoutingEntry", stringBuilder.ToString());
             }
             int versionNumber           = serverLocatorReturn.ServerVersion ?? 0;
             ServerVersion serverVersion = new ServerVersion(versionNumber);
             string targetServerVersion  = string.Format(CultureInfo.InvariantCulture, "{0:d}.{1:d2}.{2:d4}.{3:d3}", new object[]
             {
                 serverVersion.Major,
                 serverVersion.Minor,
                 serverVersion.Build,
                 serverVersion.Revision
             });
             this.diagnostics.SetTargetServerVersion(targetServerVersion);
             return;
         }
         string value2 = "RouteNotFoundError";
         this.diagnostics.AddErrorInfo(value2);
         context.Response.StatusCode = 500;
         bool wasFailure             = true;
         foreach (IRoutingKey routingKey in array)
         {
             if (routingKey.RoutingItemType == RoutingItemType.LiveIdMemberName || routingKey.RoutingItemType == RoutingItemType.Smtp)
             {
                 wasFailure = false;
                 context.Response.StatusCode = 404;
                 break;
             }
         }
         RouteSelectorDiagnostics.UpdateRoutingFailurePerfCounter(null, wasFailure);
         context.ApplicationInstance.CompleteRequest();
     });
 }