private void CreateOrCloseEventServiceAlarm(bool isHaveOldAlarm, EventCollection currentState)
 {
     if (currentState.Health != Health.OK)
     {
         if (!isHaveOldAlarm)
         {
             OnLog("Insert Event:Webserver unavailable");
             var alarm = new ApplianceAlarm
             {
                 OptType       = "1",
                 AlarmName     = "Webserver unavailable ",
                 AlarmType     = EnumAlarmType.WebServerUnavailable,
                 PossibleCause = "IIS express service is stopped or uninstalled.",
                 Suggstion     = "Check the website",
                 Additional    = currentState.ErrorMsg
             };
             var applianceEvent = new ApplianceEvent(alarm);
             ApplianceConnector.Instance.InsertEvent(applianceEvent);
         }
     }
     else
     {
         if (isHaveOldAlarm)
         {
             OnLog("Close Event:Webserver unavailable");
             var alarm = new ApplianceAlarm
             {
                 OptType   = "2",
                 AlarmType = EnumAlarmType.WebServerUnavailable,
             };
             var applianceEvent = new ApplianceEvent(alarm);
             ApplianceConnector.Instance.InsertEvent(applianceEvent);
         }
     }
 }
 private void CreateOrCloseServerMpAlarm(bool isHaveOldAlarm, ServerCollection currentState)
 {
     if (currentState.Health != Health.OK)
     {
         if (!isHaveOldAlarm)
         {
             OnLog("Insert Event:Server ManagementPack Missing");
             var alarm = new ApplianceAlarm
             {
                 OptType       = "1",
                 AlarmName     = "Server ManagementPack Missing",
                 AlarmType     = EnumAlarmType.ServerMpMissing,
                 PossibleCause = "The Management Pack of the plug-in is uninstalled.",
                 Suggstion     = "import the Huawei.FusionDirector.Server.Library.mpb",
                 Additional    = currentState.ErrorMsg
             };
             var applianceEvent = new ApplianceEvent(alarm);
             ApplianceConnector.Instance.InsertEvent(applianceEvent);
         }
     }
     else
     {
         if (isHaveOldAlarm)
         {
             OnLog("Close Event:Server ManagementPack Missing");
             var alarm = new ApplianceAlarm
             {
                 OptType   = "2",
                 AlarmType = EnumAlarmType.ServerMpMissing,
             };
             var applianceEvent = new ApplianceEvent(alarm);
             ApplianceConnector.Instance.InsertEvent(applianceEvent);
         }
     }
 }
        public void Update(ApplianceEvent data)
        {
            var app = _production.SmappeeConfig.SingleOrDefault(a => a.Id == data.ApplianceId);

            if (app == default(Appliance) || string.IsNullOrEmpty(app.AssociatedTransponder))
            {
                return;
            }

            var pad = _padStates.SingleOrDefault(p => p.Value.Any(t => t.Id == app.AssociatedTransponder && t.Active)).Key;

            if (!string.IsNullOrEmpty(pad))
            {
                var areas = GetAssociatedAreas(pad);

                foreach (var area in areas)
                {
                    var oldState = _aoiStates[area.Id];
                    var newState = new AoiState
                    {
                        Timestamp = data.Timestamp,
                        AreaId    = area.Id
                    };

                    if (data.WattChange > 0)
                    {
                        newState.Value = UpdateConfidence(oldState.Value, Significance.ApplianceStart);
                    }
                    else
                    {
                        newState.Value = UpdateConfidence(oldState.Value, Significance.ApplianceStop);
                        if (newState.Value < 0)
                        {
                            newState.Value = 0;
                        }
                    }

                    _aoiStates[area.Id] = newState;
                    StateChanged(this, newState);
                }
            }
        }
        private void CreateOrCloseFusionDirectorAlarm(List <MonitoringAlert> existAlarmData, FusionDirectorCollection currentState)
        {
            var fdStatuses = JsonConvert.DeserializeObject <Dictionary <string, string> >(currentState.ErrorMsg);

            foreach (var fdStatus in fdStatuses)
            {
                var  fdIp           = fdStatus.Key;
                var  error          = fdStatus.Value;
                bool isHaveOldAlarm = existAlarmData.Any(x => x.CustomField1 == EnumAlarmType.FdConnectError.ToString() && x.CustomField4.Contains(fdIp));
                if (fdStatus.Value != "OK")//本次有告警,则插入或更新告警
                {
                    OnLog($"[{fdIp}] Insert Or Update Event:FusionDirector connect Error");
                    var alarm = new ApplianceAlarm
                    {
                        OptType       = "1",
                        AlarmName     = "FusionDirector Connect Error",
                        AlarmType     = EnumAlarmType.FdConnectError,
                        PossibleCause = $"{error}",
                        Suggstion     = "check whether the FusionDirector server is shut down or whether the network is abnormal.",
                        Additional    = error
                    };
                    var applianceEvent = new ApplianceEvent(alarm);
                    ApplianceConnector.Instance.InsertEvent(applianceEvent, fdIp);
                }
                else
                {
                    //本次没有告警 且有旧的告警,则关闭
                    if (isHaveOldAlarm)
                    {
                        OnLog($"[{fdIp}] Close Event:FusionDirector Connect Error");
                        var alarm = new ApplianceAlarm
                        {
                            OptType   = "2",
                            AlarmType = EnumAlarmType.FdConnectError,
                        };
                        var applianceEvent = new ApplianceEvent(alarm);
                        ApplianceConnector.Instance.InsertEvent(applianceEvent, fdIp);
                    }
                }
            }
        }
Пример #5
0
 public void setEvent(ApplianceEvent eventt)
 {
     this.eventt = eventt;
 }
Пример #6
0
 public void setEvent(ApplianceEvent eventt)
 {
     this.eventt = eventt;
 }
        /// <summary>
        /// Inserts the event.
        /// </summary>
        /// <param name="mpClass">The mp class.</param>
        /// <param name="eventData">The event data.</param>
        public void InsertEvent(ApplianceEvent eventData, string fusionDirectorIp)
        {
            var logger = HWLogger.Service;

            try
            {
                var alarmType = eventData.AlarmData.AlarmType.ToString();
                MGroup.Instance.CheckConnection();
                var logPre = $"ApplianceEvent:[alarmType:{alarmType}] [OptType={eventData.OptType}] [LevelId={eventData.LevelId}] ";
                var obj    = GetAppliance();
                if (obj == null)
                {
                    logger.Warn($"{logPre} Can not find the ApplianceObject");
                    return;
                }
                var isReady = CheckAndWaitHealthStateReady(obj);
                if (!isReady)
                {
                    logger.Warn($"{logPre} The MonitoringObject state is uninitialized.Drop the event.");
                    return;
                }
                var alertHistory = this.GetUnclosedAlert();
                switch (eventData.OptType)
                {
                case "1":
                    #region 告警
                    //如果不存在,则插入
                    var alertToUpdate = alertHistory.FirstOrDefault(x => x.CustomField1 == alarmType && x.CustomField4.Contains(fusionDirectorIp));
                    if (alertToUpdate == null || alertToUpdate.TimeAdded < MGroup.Instance.MpInstallTime)
                    {
                        obj.InsertCustomMonitoringEvent(eventData.ToCustomMonitoringEvent());
                        logger.Debug($"{logPre}Insert new Event.");
                    }
                    else
                    {
                        #region 存在则更新
                        if (alertToUpdate != null)
                        {
                            alertToUpdate.CustomField4 = eventData.AlarmData.PossibleCause;
                            alertToUpdate.CustomField5 = eventData.AlarmData.Additional;
                            alertToUpdate.Update(eventData.AlarmData.Additional);
                            logger.Debug($"{logPre}Update Event.");
                        }
                        else
                        {
                            logger.Warn($"{logPre}Ingore Event.Can not find the alert.");
                        }
                        #endregion
                    }
                    #endregion
                    break;

                case "2":
                    #region 清除告警
                    if (eventData.LevelId == 1 || eventData.LevelId == 2)    //清除告警
                    {
                        var alertToClose = alertHistory.FirstOrDefault(x => x.CustomField1 == alarmType && x.CustomField4.Contains(fusionDirectorIp));
                        if (alertToClose != null)
                        {
                            alertToClose.ResolutionState = this.CloseState.ResolutionState;
                            alertToClose.Update("Close by sdk.");
                            logger.Debug($"{logPre}Close Event.");
                        }
                        else
                        {
                            logger.Warn($"{logPre}Ingore Event.Can not find the alert.");
                        }
                    }
                    else
                    {
                        logger.Warn($"{logPre}Ignore Event.");     //忽略事件
                    }
                    #endregion
                    break;

                default:
                    logger.Error($"{logPre}Unknown OptType.");
                    break;
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
        }