/// <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); }
/// <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); } }