public void RaiseAlert(ApplicationAlertKind kind, params object[] details)
        {
            BeginLogging();
            ExpireDups();

            var jsonDetail = JsonConvert.SerializeObject(details);

            var alert = new NodeAlert
            {
                Id = Guid.NewGuid().ToString(),
                ComponentOrigin = _reg.ComponentType,
                Detail          = jsonDetail,
                EventTime       = DateTime.UtcNow,
                Handled         = false,
                Kind            = kind
            };

            var hash = AlertHash(alert);

            if (!_duplicateTracking.ContainsKey(hash))
            {
                _duplicateTracking.TryAdd(hash, DateTime.UtcNow);
                _alerts.Enqueue(alert);
                _log.ErrorFormat("Application alert: {0}", jsonDetail);
                System.Diagnostics.Debug.WriteLine(jsonDetail);
            }
            else
            {
                _log.DebugFormat("app alert {0} is duplicate, discarding", hash);
            }
        }
 public static int AlertHash(NodeAlert item)
 {
     return(Hash.GetCombinedHashCodeForHashes(item.Detail.GetHashCode(), item.Kind.GetHashCode()));
 }