private static void OnUserRemovedFromCache(string userToken, FailureThrottling.FailureCounter value, RemoveReason reason)
 {
     Logger.TraceDebug(ExTraceGlobals.FailureThrottlingTracer, "User {0} is removed from failure throttling user cache. Reason: {1}", new object[]
     {
         userToken,
         reason
     });
     FailFastModule.RemotePowershellPerfCounter.FailureThrottlingUserCacheSize.RawValue = (long)FailureThrottling.failureThrottlingUserCache.Count;
 }
 private static FailureThrottling.FailureCounter GetCounter(string userToken)
 {
     Logger.EnterFunction(ExTraceGlobals.FailureThrottlingTracer, "FailureThrottlingUserCache.GetCounter");
     FailureThrottling.FailureCounter failureCounter;
     FailureThrottling.failureThrottlingUserCache.TryGetValue(userToken, out failureCounter);
     if (failureCounter == null || !failureCounter.IsValid)
     {
         Logger.TraceDebug(ExTraceGlobals.FailureThrottlingTracer, "Create counter for User {0}.", new object[]
         {
             userToken
         });
         failureCounter = new FailureThrottling.FailureCounter();
         FailureThrottling.failureThrottlingUserCache.InsertAbsolute(userToken, failureCounter, FailureThrottling.FailureThrottlingTimePeriod, new RemoveItemDelegate <string, FailureThrottling.FailureCounter>(FailureThrottling.OnUserRemovedFromCache));
         FailFastModule.RemotePowershellPerfCounter.FailureThrottlingUserCacheSize.RawValue = (long)FailureThrottling.failureThrottlingUserCache.Count;
     }
     Logger.ExitFunction(ExTraceGlobals.FailureThrottlingTracer, "FailureThrottlingUserCache.GetCounter");
     return(failureCounter);
 }
        internal static bool CountBasedOnStatusCode(string userToken, int statusCode)
        {
            int num;

            if (statusCode != 200)
            {
                if (statusCode != 400 && statusCode != 500)
                {
                    return(false);
                }
                num = 1;
            }
            else
            {
                num = -1;
            }
            FailureThrottling.FailureCounter counter = FailureThrottling.GetCounter(userToken);
            counter.AddDelta(num);
            Logger.TraceDebug(ExTraceGlobals.FailureThrottlingTracer, "User {0} counter changed to be {1}. Current status code is {2}.", new object[]
            {
                userToken,
                counter.Value,
                statusCode
            });
            if (num == 1 && counter.Value > FailureThrottling.failureThrottlingLimit)
            {
                Logger.TraceDebug(ExTraceGlobals.FailureThrottlingTracer, "User {0} is OverBudget. Counter: {1}. FailureThrottlingLimit: {2}", new object[]
                {
                    userToken,
                    counter.Value,
                    FailureThrottling.failureThrottlingLimit
                });
                return(true);
            }
            return(false);
        }