/// <summary>
 /// Initializes a new instance of the <see cref="DeviceChangeEventData"/> class.
 /// Initializes a new instance of the <see cref="EventData"/> class.
 /// </summary>
 /// <param name="data">
 /// The data.
 /// </param>
 public DeviceChangeEventData(NedeviceData data)
 {
     this.Dn = data.DeviceId;
     this.LoggingComputer = data.DeviceId;
     this.Message         = data.Description;
     this.NedeviceData    = data;
 }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DeviceChangeEventData" /> class.
        /// Initializes a new instance of the <see cref="EventData" /> class.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="eSightIp">The e sight ip.</param>
        public DeviceChangeEventData(NedeviceData data, string eSightIp, ServerTypeEnum serverType)
        {
            this.DeviceId = $"{eSightIp}-{data.DeviceId}";

            this.LoggingComputer = data.DeviceId;
            this.ESightIp        = eSightIp;
            this.Message         = data.Description;
            this.NedeviceData    = data;
        }
        /// <summary>
        /// Submit device changed event to processing queue
        /// </summary>
        /// <param name="data">The data.</param>
        public void SubmitNewDeviceEvent(NedeviceData data)
        {
            logger.Polling.Info($"[{data.DeviceId}] Submit new eSight device event to processing queue.");
            lock (deviceEventQueuelocker)
            {
                deviceEventQueue.Enqueue(data);
            }

            this.receiveDeviceEvent.Set();
        }
        /// <summary>
        /// Start Device event processor
        /// </summary>
        private void StartNeDeviceEventProcessor()
        {
            if (deviceEventProcessor == null)
            {
                deviceEventProcessor = new Thread(delegate()
                {
                    while (this.IsRunning)
                    {
                        logger.Polling.Info($"Current Device Event Processing Queue amount: {deviceEventQueue.Count}.");

                        if (deviceEventQueue.Count > 0 || receiveDeviceEvent.WaitOne())
                        {
                            NedeviceData eventObject = null;
                            lock (deviceEventQueuelocker)
                            {
                                if (deviceEventQueue.Count > 0)
                                {
                                    eventObject = deviceEventQueue.Dequeue();
                                }
                            }

                            if (eventObject != null)
                            {
                                logger.Polling.Info($"[{eventObject.DeviceId}] Start processing new device event.");


                                // should we catagory alarm with server type ?
                                var deviceId = eventObject.DeviceId;
                                MonitoringDeviceObject monitoringObject = GetDeviceByDN(deviceId);
                                if (monitoringObject == null)
                                {
                                    logger.Polling.Error($"[{eventObject.DeviceId}] No MonitoringObject({deviceId}) exists, event will be ignore");
                                    continue;
                                }

                                // waiting for monitoring-object ready.
                                WaitForDeviceMonitored(monitoringObject);


                                // Create New EventLog for new events, and generate SCOM event through associated rule
                                CreateNewEventLogForDeviceEvent(eventObject);
                            }
                        }
                    }
                });
            }

            this.deviceEventProcessor.Start();
            logger.Polling.Info("Device event processor starts successfully.");
        }
        /// <summary>
        /// Inserts the device change event.
        /// </summary>
        /// <param name="data">The data.</param>
        public void InsertDeviceChangeEvent(NedeviceData data)
        {
            Task.Run(() =>
            {
                try
                {
                    var serverType = this.GetServerType(data.DeviceId);

                    HWLogger.NOTIFICATION_PROCESS.Info($"Start deviceChangeEvent :{data.DeviceId}");
                    var deviceChangeEventData = new DeviceChangeEventData(data);
                    switch (serverType)
                    {
                    case ServerTypeEnum.Blade:
                        BladeConnector.Instance.InsertDeviceChangeEvent(deviceChangeEventData);
                        break;

                    case ServerTypeEnum.ChildBlade:
                        BladeConnector.Instance.InsertChildDeviceChangeEvent(deviceChangeEventData);
                        break;

                    case ServerTypeEnum.Highdensity:
                        HighdensityConnector.Instance.InsertDeviceChangeEvent(deviceChangeEventData);
                        break;

                    case ServerTypeEnum.ChildHighdensity:
                        HighdensityConnector.Instance.InsertChildDeviceChangeEvent(deviceChangeEventData);
                        break;

                    case ServerTypeEnum.Rack:
                        RackConnector.Instance.InsertDeviceChangeEvent(deviceChangeEventData);
                        break;

                    case ServerTypeEnum.KunLun:
                        KunLunConnector.Instance.InsertDeviceChangeEvent(deviceChangeEventData);
                        break;
                    }
                    HWLogger.NOTIFICATION_PROCESS.Info($"End deviceChangeEvent: {data.DeviceId}");
                }
                catch (Exception ex)
                {
                    HWLogger.UI.Error("InsertEvent Error: ", ex);
                }
            });
        }
        private void CreateNewEventLogForDeviceEvent(NedeviceData eventObject)
        {
            logger.Polling.Info($"[{eventObject.DeviceId}] Persist event to window EventLog now.");

            // Create new event log instance
            var           eventId  = 400 + eventIdSuffixs.ElementAt(idx++ % eventIdSuffixs.Count);
            EventInstance instance = new EventInstance(eventId, 0, EventLogEntryType.Information);

            var deviceId = $"{this.ESightIp}-{eventObject.DeviceId}";

            object[] values = new object[] {
                "Device changed notification",      // channel
                deviceId,                           // SCOM monitor object DN
                eventObject.Description,
            };

            EventLog.WriteEvent(EVENT_SOURCE, instance, values);
            this.logger.Polling.Info($"[{eventObject.DeviceId}] Persist event to window EventLog successfully.");
        }
        /// <summary>
        /// Inserts the device change event.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="serverType">Type of the server.</param>
        public void InsertDeviceChangeEvent(NedeviceData data, ServerTypeEnum serverType)
        {
            Task.Run(() =>
            {
                try
                {
                    //logger.NotifyProcess.Info($"Start Insert deviceChangeEvent.[Dn:{data.DeviceId}] [serverType:{serverType}]");
                    var deviceChangeEventData = new DeviceChangeEventData(data, this.ESightIp, serverType);
                    switch (serverType)
                    {
                    case ServerTypeEnum.Blade:
                    case ServerTypeEnum.ChildBlade:
                    case ServerTypeEnum.Switch:
                        BladeConnector.Instance.InsertDeviceChangeEvent(deviceChangeEventData, serverType, this.ESightIp);
                        break;

                    case ServerTypeEnum.Highdensity:
                    case ServerTypeEnum.ChildHighdensity:
                        HighdensityConnector.Instance.InsertDeviceChangeEvent(deviceChangeEventData, serverType, this.ESightIp);
                        break;

                    case ServerTypeEnum.Rack:
                        RackConnector.Instance.InsertDeviceChangeEvent(deviceChangeEventData, this.ESightIp);
                        break;

                    case ServerTypeEnum.KunLun:
                        KunLunConnector.Instance.InsertDeviceChangeEvent(deviceChangeEventData, this.ESightIp);
                        break;
                    }
                    //logger.NotifyProcess.Info($"End deviceChangeEvent: {data.DeviceId}");
                }
                catch (Exception ex)
                {
                    logger.NotifyProcess.Error(ex, "InsertEvent Error: ");
                }
            });
        }