public bool IsSquelched(Object obj = null) { var now = DateTime.Now.Ticks; ClearExpiredSquelches(); if (obj == null) { obj = String.Empty; } if (SquelchedObjects.ContainsValue(obj)) { return(true); } Tuple <int, long> seen; if (SeenObjects.TryGetValue(obj, out seen)) { // Item1 = count, Item2 = last seen var elapsed = new TimeSpan(now - seen.Item2); if (elapsed.TotalMilliseconds > Throttle.SquelchWithin) { Logger.Info("SeenObjects being reset with new tuple"); SeenObjects[obj] = new Tuple <int, long>(0, now); } else { if (seen.Item1 + 1 >= Throttle.SquelchCount) { // Squelched Logger.Info("Squelched"); SquelchedObjects[now] = obj; return(true); } else { SeenObjects[obj] = new Tuple <int, long>(seen.Item1 + 1, now); } } } else { SeenObjects[obj] = new Tuple <int, long>(0, now); } return(false); }
private void ClearExpiredSquelches() { var now = DateTime.Now.Ticks; Logger.InfoFormat("Clearing expired squelches"); var keys = new List <long>(SquelchedObjects.Keys); foreach (var when in keys) { var span = new TimeSpan(now - when); if (span.TotalMilliseconds > Throttle.SquelchDuration) { Logger.InfoFormat("Removing squelched entry"); SquelchedObjects.Remove(when); } else { break; } } }