示例#1
0
        internal JobContext(IAlarmSource source, AlarmSourceEventArgs args)
        {
            Assertions.AssertNotNull(source, "source");
            Assertions.AssertNotNull(args, "args");

            AlarmSourceName = source.GetType().Name;
            Parameters = args.Parameters;
        }
        private void AlarmSource_NewAlarm(object sender, AlarmSourceEventArgs e)
        {
            IAlarmSource source = (IAlarmSource)sender;

            Operation operation = e.Operation;

            if (operation == null)
            {
                Logger.Instance.LogFormat(LogType.Warning, this, Resources.AlarmSourceNoOperation, source.GetType().FullName);
                return;
            }

            Logger.Instance.LogFormat(LogType.Info, this, Resources.AlarmSourceReceivedOperation, operation.ToString(), sender.GetType().Name);
            try
            {
                if (!ShouldStoreOperation(operation))
                {
                    Logger.Instance.LogFormat(LogType.Info, this, Resources.NewAlarmIgnoringAlreadyPresentOperation, operation.OperationNumber);
                    return;
                }

                // If there is no timestamp, use the current time.
                if (operation.Timestamp.Year == 1)
                {
                    Logger.Instance.LogFormat(LogType.Warning, this, Resources.NewAlarmInvalidTimestamp);
                    operation.Timestamp = DateTime.Now;
                }

                JobContext context = new JobContext(source, e);
                context.Phase = JobPhase.OnOperationSurfaced;
                _jobManager.ExecuteJobs(context, operation);

                operation = StoreOperation(operation);
                if (operation == null)
                {
                    return;
                }

                Logger.Instance.LogFormat(LogType.Info, this, Resources.NewAlarmStored, operation.Id);

                context.Phase = JobPhase.AfterOperationStored;
                _jobManager.ExecuteJobs(context, operation);

                Logger.Instance.LogFormat(LogType.Info, this, Resources.NewAlarmHandlingFinished, operation.Id);
            }
            catch (Exception ex)
            {
                Logger.Instance.LogFormat(LogType.Warning, this, Resources.NewAlarmHandlingException);
                Logger.Instance.LogException(this, ex);
            }
        }