Esempio n. 1
0
        /// <summary>
        /// アラーム情報を作成しQueueStorageへ登録する
        /// </summary>
        /// <param name="failurePredictiveResultLog">故障予兆結果ログ</param>
        /// <param name="messageId">メッセージID</param>
        /// <param name="alarmDef">アラーム定義</param>
        /// <returns>成功した場合true、失敗した場合falseを返す</returns>
        public bool CreateAndEnqueueAlarmInfo(FailurePredictiveResultLog failurePredictiveResultLog, string messageId, IEnumerable <DtAlarmDefFailurePremonitor> alarmDef)
        {
            bool result = true;

            _logger.EnterJson("{0}", new { failurePredictiveResultLog, messageId, alarmDef });

            int index      = 1;
            int alarmCount = alarmDef.Count();

            foreach (var alarm in alarmDef)
            {
                string message = null;
                try
                {
                    string alarmDescription = alarm.AlarmDescription;
                    if (!string.IsNullOrEmpty(alarmDescription))
                    {
                        alarmDescription = string.Format(alarmDescription, failurePredictiveResultLog.Threshold, failurePredictiveResultLog.NumOfTimes, failurePredictiveResultLog.LastEventDt);
                    }

                    // Sq1.1.3: アラームキューを生成する
                    var alarmInfo = new AlarmInfo
                    {
                        SourceEquipmentUid = failurePredictiveResultLog.SourceEquipmentUid,
                        TypeCode           = failurePredictiveResultLog.TypeCode,
                        ErrorCode          = failurePredictiveResultLog.ErrorCode,
                        AlarmLevel         = alarm.AlarmLevel,
                        AlarmTitle         = alarm.AlarmTitle,
                        AlarmDescription   = alarmDescription,
                        AlarmDatetime      = _timeProvider.UtcNow.ToString(Utility.Const.AlarmQueueDateTimeFormat),
                        EventDatetime      = failurePredictiveResultLog.CollectDt,
                        AlarmDefId         = $"{_settings.SystemName}_{_settings.SubSystemName}_{alarm.Sid.ToString()}",
                        MessageId          = alarmCount <= 1 ? messageId : $"{messageId}_{index}"
                    };
                    index++;

                    message = JsonConvert.SerializeObject(alarmInfo);

                    // Sq1.1.4: キューを登録する
                    _queueRepository.SendMessageToAlarmQueue(message);
                }
                catch (Exception e)
                {
                    // アラーム生成エラー or アラームキューにアラーム情報を送信できない(基本設計書 5.1.2.4 エラー処理)
                    _logger.Error(e, string.IsNullOrEmpty(message) ? nameof(Resources.UT_FLP_FLP_005) : nameof(Resources.UT_FLP_FLP_006), new object[] { messageId });
                    result = false;
                }
            }

            _logger.Leave();
            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// アラーム定義を取得する
        /// </summary>
        /// <param name="failurePredictiveResultLog">故障予兆結果ログ</param>
        /// <param name="messageId">メッセージID</param>
        /// <param name="models">DBから取得したパラメータ</param>
        /// <returns>成功した場合true、失敗した場合falseを返す</returns>
        public bool ReadAlarmDefinition(FailurePredictiveResultLog failurePredictiveResultLog, string messageId, out IEnumerable <DtAlarmDefFailurePremonitor> models)
        {
            models = null;

            try
            {
                _logger.EnterJson("{0}", new { failurePredictiveResultLog, messageId });

                // Sq1.1.1: 故障予兆監視アラーム定義を取得
                models = _dtAlarmDefFailurePremonitorRepository.ReadDtAlarmDefFailurePremonitor(failurePredictiveResultLog);

                return(true);
            }
            catch (RmsException e)
            {
                // DBにアクセスできない(基本設計書 5.1.2.4 エラー処理)
                _logger.Error(e, nameof(Resources.UT_FLP_FLP_003), new object[] { messageId });
                return(false);
            }
            finally
            {
                _logger.LeaveJson("{0}", new { models });
            }
        }
        /// <summary>
        /// DT_ALARM_DEF_FAILURE_PREMONITORテーブルからDtAlarmDefFailurePremonitorを取得する
        /// </summary>
        /// <param name="failurePredictiveResultLog">故障予兆結果ログ</param>
        /// <returns>取得したデータ</returns>
        public IEnumerable <DtAlarmDefFailurePremonitor> ReadDtAlarmDefFailurePremonitor(FailurePredictiveResultLog failurePredictiveResultLog)
        {
            IEnumerable <DtAlarmDefFailurePremonitor> models = null;

            try
            {
                _logger.EnterJson("{0}", failurePredictiveResultLog);

                List <DBAccessor.Models.DtAlarmDefFailurePremonitor> entities = null;
                _dbPolly.Execute(() =>
                {
                    using (DBAccessor.Models.RmsDbContext db = new DBAccessor.Models.RmsDbContext(_appSettings))
                    {
                        entities = db.DtAlarmDefFailurePremonitor
                                   .Where(x => string.IsNullOrEmpty(x.TypeCode) || x.TypeCode == failurePredictiveResultLog.TypeCode)
                                   .Where(x => string.IsNullOrEmpty(x.ErrorCode) || x.ErrorCode == failurePredictiveResultLog.ErrorCode)
                                   .ToList();

                        // 同一エラーコードの定義が複数存在した場合
                        if (entities.Count > 1)
                        {
                            entities = entities.Where(x => string.IsNullOrEmpty(x.AnalysisText) || failurePredictiveResultLog.ErrorContents.Contains(x.AnalysisText)).ToList();
                        }
                    }
                });

                if (entities != null)
                {
                    models = entities.Select(x => x.ToModel());
                }

                return(models);
            }
            catch (Exception e)
            {
                throw new RmsException("DT_ALARM_DEF_FAILURE_PREMONITORテーブルのSelectに失敗しました。", e);
            }
            finally
            {
                _logger.LeaveJson("{0}", models);
            }
        }