private void sendAlarmToServiceBusQueue(QueueClient queueClient, AlarmMessageHelper alarmDocuHelper) { try { var alarmMessage = new { MessageCatalogId = alarmDocuHelper.MessageId, AlarmRuleCatalogId = alarmDocuHelper.AlarmRuleId, AlarmRuleCatalogName = alarmDocuHelper.AlarmRuleName, AlarmRuleCatalogDescription = alarmDocuHelper.AlarmRuleDescription, MessageDocumentId = alarmDocuHelper.MessageDocumentId, TriggeredTime = alarmDocuHelper.TriggeredTime, Message = alarmDocuHelper.Payload }; var messageString = JsonConvert.SerializeObject(alarmMessage); var msg = new BrokeredMessage(messageString); queueClient.Send(msg); } catch (Exception ex) { ConsoleLog.WriteMessageAlarmErrorLogToConsole("sendAlarmToServiceBusQueue Exception: messageId={0}, alarmRuleId={1}, triggeredTime={2} payload={3} ex={4}", alarmDocuHelper.MessageId, alarmDocuHelper.AlarmRuleId, alarmDocuHelper.TriggeredTime, alarmDocuHelper.Payload, ex.ToString()); ConsoleLog.WriteBlobLogError("sendAlarmToServiceBusQueue Exception: messageId={0}, alarmRuleId={1}, triggeredTime={2} payload={3} ex={4}", alarmDocuHelper.MessageId, alarmDocuHelper.AlarmRuleId, alarmDocuHelper.TriggeredTime, alarmDocuHelper.Payload, ex.ToString()); } }
private async Task runAlarmRules(MessageProcessorFactoryModel msgProcessorFactoryModel, int messageCatalogId, JObject payload, string messageDocumentId) { try { var ts = payload["msgTimestamp"]; DateTime msgTimestamp = DateTime.Parse(ts.ToString()); Dictionary <int, List <AlarmRuleCatalogEngine> > messageIdAlarmRules = msgProcessorFactoryModel.MessageIdAlarmRules; if (messageIdAlarmRules.ContainsKey(messageCatalogId) == true) { List <AlarmRuleCatalogEngine> alarmRuleCatalogEngine = messageIdAlarmRules[messageCatalogId]; foreach (AlarmRuleCatalogEngine arcEngine in alarmRuleCatalogEngine) { if (arcEngine.RuleEngineItems.Count > 0) { // Get all results of equations foreach (KeyValuePair <string, RuleEngineItem> ruleEngineItem in arcEngine.RuleEngineItems) { runSingleRuleItem(ruleEngineItem.Value, payload); } // Get the result of bitwise operation bool alarmTriggered = compileBitWiseRules(arcEngine.RuleEngineItems.Count - 1, arcEngine.RuleEngineItems); if (alarmTriggered) { string now = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); bool alarmSent = checkAlarmTimeWindow(arcEngine, msgTimestamp); ConsoleLog.WriteMessageAlarmLogToConsoleInfo("AlarmRuleCatalogId={0}, alarmSent={1}, LastTriggerTime={2}", arcEngine.AlarmRuleCatalogId, alarmSent, arcEngine.LastTriggerTime.ToString("yyyy-MM-ddTHH:mm:ss")); AlarmMessageHelper alarmMessageHelper = new AlarmMessageHelper(arcEngine.AlarmRuleCatalog, now, alarmSent, messageDocumentId, payload); // Send the alarm to Service Bus if it matchs the time window if (alarmSent) { sendAlarmToServiceBusQueue(msgProcessorFactoryModel.SfQueueClient, alarmMessageHelper); } // Put the alarm to document DB await putAlarmDocument(msgProcessorFactoryModel.SfDocumentDBHelper, alarmMessageHelper); } } } } } catch (Exception ex) { ConsoleLog.WriteToConsole("runAlarmRules Exception: {0}", ex.ToString()); ConsoleLog.WriteBlobLogError("runAlarmRules Exception: {0}", ex.ToString()); return; } }
private async Task putAlarmDocument(SfDocumentDBHelper sfDocumentDBHelper, AlarmMessageHelper alarmDocumentHelper) { AlarmDocument alarmDocument = new AlarmDocument { Type = DocumentType.AlarmDocument, MessageCatalogId = alarmDocumentHelper.MessageId, AlarmRuleCatalogId = alarmDocumentHelper.AlarmRuleId, AlarmRuleCatalogName = alarmDocumentHelper.AlarmRuleName, AlarmRuleCatalogDescription = alarmDocumentHelper.AlarmRuleDescription, TriggeredTime = alarmDocumentHelper.TriggeredTime, // Machine Local Time AlarmSent = alarmDocumentHelper.AlarmSent, MessageDocumentId = alarmDocumentHelper.MessageDocumentId, Message = alarmDocumentHelper.Payload }; await sfDocumentDBHelper.DocumentClient.CreateDocumentAsync( UriFactory.CreateDocumentCollectionUri(sfDocumentDBHelper.DocumentDbDatabaseName, sfDocumentDBHelper.DocumentDbCollectionName), alarmDocument); }