コード例 #1
0
ファイル: DefaultAlertSink.cs プロジェクト: yjsyyyjszf/CC13.2
        private static XmlDocument CreateXmlContent(ImageServer.Common.Alert alert)
        {
            XmlDocument doc = new XmlDocument();

            XmlNode docElement = doc.CreateElement("Contents");

            doc.AppendChild(docElement);

            XmlNode messageNode = doc.CreateElement("Message");

            messageNode.AppendChild(doc.CreateTextNode(alert.Message));

            docElement.AppendChild(messageNode);

            if (alert.ContextData != null)
            {
                XmlNode contextContainerNode = doc.CreateElement("Context");
                XmlNode contextNode          = doc.ImportNode(XmlUtils.Serialize(alert.ContextData, false), true);

                contextContainerNode.AppendChild(contextNode);
                docElement.AppendChild(contextContainerNode);
            }

            return(doc);
        }
コード例 #2
0
ファイル: DefaultAlertSink.cs プロジェクト: yjsyyyjszf/CC13.2
        static private string ResolveKey(ImageServer.Common.Alert alert)
        {
            Platform.CheckForNullReference(alert, "alert");
            Platform.CheckForNullReference(alert.Source, "alert.Source");
            string key = String.Format("{0}/{1}/{2}/{3}",
                                       alert.Source.Host, alert.Source.Name, alert.Code, alert.ContextData);

            return(key);
        }
コード例 #3
0
 public void GenerateAlert(ImageServer.Common.Alert alert)
 {
     IAlertServiceExtension[] extensions = GetExtensions();
     foreach (IAlertServiceExtension ext in extensions)
     {
         try
         {
             ext.OnAlert(alert);
         }
         catch (Exception e)
         {
             Platform.Log(LogLevel.Error, e, "Error occurred when calling {0} OnAlert()", ext.GetType());
         }
     }
 }
コード例 #4
0
ファイル: DefaultAlertSink.cs プロジェクト: yjsyyyjszf/CC13.2
        public void OnAlert(ImageServer.Common.Alert alert)
        {
            AlertFilter filter = new AlertFilter(AlertCache.Instance);

            if (!filter.Filter(alert))
            {
                AlertCache.Instance.Add(alert);
                if (DatabaseEnabled)
                {
                    WriteToDatabase(alert);
                }
                else
                {
                    WriteToLog(alert);
                }
            }
        }
コード例 #5
0
ファイル: DefaultAlertSink.cs プロジェクト: yjsyyyjszf/CC13.2
 /// <summary>
 /// Adds an alert into the cache.
 /// </summary>
 /// <param name="alert"></param>
 public void Add(ImageServer.Common.Alert alert)
 {
     lock (_syncLock)
     {
         _listAlerts.Add(alert);
     }
     _cache.Add(ResolveKey(alert), alert, null, alert.ExpirationTime, Cache.NoSlidingExpiration, CacheItemPriority.Normal,
                delegate(string key, Object value, CacheItemRemovedReason reason)
     {
         // Discovered an exception here when debugging that may have caused the service to
         // crash. This delegate was called, however, the alert was not in the cache
         lock (_syncLock)
         {
             if (_listAlerts.Contains((ImageServer.Common.Alert)value))
             {
                 _listAlerts.Remove((ImageServer.Common.Alert)value);
             }
         }
     });
 }
コード例 #6
0
ファイル: DefaultAlertSink.cs プロジェクト: yjsyyyjszf/CC13.2
        private static void WriteToLog(ImageServer.Common.Alert alert)
        {
            XmlDocument doc = CreateXmlContent(alert);

            using (StringWriter sw = new StringWriter())
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                settings.NewLineOnAttributes = false;
                settings.OmitXmlDeclaration  = true;
                settings.Encoding            = Encoding.UTF8;

                XmlWriter writer = XmlWriter.Create(sw, settings);
                doc.WriteTo(writer);
                writer.Flush();

                String log = String.Format("ALERT: {0} : {1}", alert.Source.Name, sw);
                switch (alert.Level)
                {
                case AlertLevel.Critical:
                case AlertLevel.Error:
                    Platform.Log(LogLevel.Error, log);
                    break;

                case AlertLevel.Informational:
                    Platform.Log(LogLevel.Info, log);
                    break;

                case AlertLevel.Warning:
                    Platform.Log(LogLevel.Warn, log);
                    break;

                default:
                    Platform.Log(LogLevel.Info, log);
                    break;
                }
            }
        }
コード例 #7
0
ファイル: DefaultAlertSink.cs プロジェクト: yjsyyyjszf/CC13.2
        private static void WriteToDatabase(ImageServer.Common.Alert alert)
        {
            XmlDocument doc = CreateXmlContent(alert);

            AlertUpdateColumns columns = new AlertUpdateColumns();

            columns.AlertCategoryEnum = AlertCategoryEnum.GetEnum(alert.Category.ToString());
            columns.AlertLevelEnum    = AlertLevelEnum.GetEnum(alert.Level.ToString());
            columns.Component         = alert.Source.Name;
            columns.Content           = doc;
            columns.InsertTime        = Platform.Time;
            columns.Source            = alert.Source.Host;
            columns.TypeCode          = alert.Code;

            IPersistentStore store = PersistentStoreRegistry.GetDefaultStore();

            using (IUpdateContext ctx = store.OpenUpdateContext(UpdateContextSyncMode.Flush))
            {
                IAlertEntityBroker alertBroker = ctx.GetBroker <IAlertEntityBroker>();
                alertBroker.Insert(columns);
                ctx.Commit();
            }
        }
コード例 #8
0
ファイル: DefaultAlertSink.cs プロジェクト: yjsyyyjszf/CC13.2
 public bool Filter(ImageServer.Common.Alert alert)
 {
     return(_cache.Contains(alert));
 }
コード例 #9
0
ファイル: DefaultAlertSink.cs プロジェクト: yjsyyyjszf/CC13.2
 /// <summary>
 /// Gets a value indicating whether the specified alert or another alert that represents the same event is already in the cache.
 /// </summary>
 /// <param name="alert"></param>
 /// <returns></returns>
 public bool Contains(ImageServer.Common.Alert alert)
 {
     lock (_syncLock)
         return(_listAlerts.Contains(alert));
 }