private bool checkAlarmTimeWindow(AlarmRuleCatalogEngine arcEngine, DateTime msgTimestamp) { if (arcEngine.Triggered) { if (arcEngine.AlarmRuleCatalog.KeepHappenInSec <= 0) { arcEngine.LastTriggerTime = msgTimestamp; return(true);// Always triggered } else { DateTime nextAcceptableTime = arcEngine.LastTriggerTime.AddSeconds(arcEngine.AlarmRuleCatalog.KeepHappenInSec); int result = DateTime.Compare(msgTimestamp, nextAcceptableTime); if (result > 0) { // the message timestamp is later than the next accpetable time arcEngine.LastTriggerTime = msgTimestamp; return(true); } else { return(false); } } } else { arcEngine.Triggered = true; arcEngine.LastTriggerTime = msgTimestamp; return(true); } }
private Dictionary <int, List <AlarmRuleCatalogEngine> > findAllMessageAlarmRules(string iotHubAlias) { Dictionary <int, List <AlarmRuleCatalogEngine> > messageIdAlarmRules = new Dictionary <int, List <AlarmRuleCatalogEngine> >(); SFDatabaseEntities dbEntity = new SFDatabaseEntities(); var L2Enty = from c in dbEntity.IoTDevice join msgCatalog in dbEntity.IoTDeviceMessageCatalog on c.IoTHubDeviceID equals msgCatalog.IoTHubDeviceID where c.IoTHubAlias == iotHubAlias && msgCatalog.MessageCatalog.DeletedFlag == false select msgCatalog.MessageCatalog; List <MessageCatalog> mcList = L2Enty.Distinct().ToList <MessageCatalog>(); foreach (MessageCatalog mc in mcList) { List <AlarmRuleCatalogEngine> arcEngineList = new List <AlarmRuleCatalogEngine>(); foreach (AlarmRuleCatalog arc in mc.AlarmRuleCatalog) { if (arc.DeletedFlag == false && arc.ActiveFlag == true) { ConsoleLog.WriteMessageAlarmLogToConsole("AlarmRuleCatalogId={0}", arc.Id); AlarmRuleCatalogEngine are = new AlarmRuleCatalogEngine(); are.AlarmRuleCatalogId = arc.Id; are.AlarmRuleCatalog = arc; are.RuleEngineItems = createRuleEngineItem(arc.Id); are.LastTriggerTime = new DateTime(2017, 1, 1); are.Triggered = false; arcEngineList.Add(are); } } messageIdAlarmRules.Add(mc.Id, arcEngineList); } return(messageIdAlarmRules); }