private void sendCommandToServiceBusQueue(MessageProcessorFactoryModel messageProcessorFactoryModel, string deviceId, JObject command) { QueueClient queueClient = messageProcessorFactoryModel.SfInfraQueueClient; string iothubAlias = messageProcessorFactoryModel.IoTHubAlias; bool iothubIsPrimary = messageProcessorFactoryModel.IsIoTHubPrimary; try { JObject msgObj = new JObject(); msgObj.Add("job", "device management"); msgObj.Add("entity", "iotdevice"); msgObj.Add("entityId", deviceId); msgObj.Add("task", "update device reported property to db"); msgObj.Add("iothubDeviceId", deviceId); msgObj.Add("requester", "IoTHubReceiver_" + iothubAlias); msgObj.Add("requestDateTime", DateTime.UtcNow); msgObj.Add("iothubAlias", iothubAlias); msgObj.Add("iothubIsPrimary", iothubIsPrimary); JObject payload = new JObject(); payload.Add(SF_LASTUPDATED_TIMESTAMP, command[SF_LASTUPDATED_TIMESTAMP]); msgObj.Add("deviceConfiguration", payload); var messageString = JsonConvert.SerializeObject(msgObj); var msg = new BrokeredMessage(messageString); queueClient.Send(msg); } catch (Exception ex) { ConsoleLog.WriteMessageAlarmErrorLogToConsole("sendCommandToServiceBusQueue Exception: payload={0} ex={1}", command, ex.ToString()); ConsoleLog.WriteBlobLogError("sendCommandToServiceBusQueue Exception: payload={0} ex={1}", command, 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 bool testAlarmRuleStringEqual(string left, string op, string right, string testTarget) { int messageCatalogId = 1; MessageProcessorFactoryModel msgProcessorFactoryModel = new MessageProcessorFactoryModel(); SfMessageEventProcessor sfMsgEventProcessor = new SfMessageEventProcessor(msgProcessorFactoryModel); msgProcessorFactoryModel.MessageIdAlarmRules = getSampleAlarmRulesStringEqual(messageCatalogId, left, op, right); JObject payload = getSampleDeviceMessageForString(left, testTarget); Task <bool> alarmTriggered = sfMsgEventProcessor.RunAlarmRulesTest(msgProcessorFactoryModel, messageCatalogId, payload, false, false); return(alarmTriggered.Result); }
private bool testAlarmRule2(int a, string b, bool c, int d) { int messageCatalogId = 1; MessageProcessorFactoryModel msgProcessorFactoryModel = new MessageProcessorFactoryModel(); SfMessageEventProcessor sfMsgEventProcessor = new SfMessageEventProcessor(msgProcessorFactoryModel); msgProcessorFactoryModel.MessageIdAlarmRules = getSampleAlarmRules(messageCatalogId); JObject payload = getSampleDeviceMessage2(a, b, c, d); Task <bool> alarmTriggered = sfMsgEventProcessor.RunAlarmRulesTest(msgProcessorFactoryModel, messageCatalogId, payload, false, false); return(alarmTriggered.Result); }
private void loadConfigurationFromDB(string iotHubAliasName, MessageProcessorFactoryModel msgProcessorFactoryModel) { DBHelper._IoTHub iotHubHelper = new DBHelper._IoTHub(); IoTHub iotHub = iotHubHelper.GetByid(_IoTHubAliasName); if (iotHub == null) { ConsoleLog.WriteToConsole("IoTHubAlias Not Found. Alias:{0}", iotHubAliasName); ConsoleLog.WriteBlobLogError("IoTHubAlias Not Found. Alias:{0}", iotHubAliasName); throw new Exception("IoTHubAlias Not Found"); } _companyId = iotHub.CompanyID; msgProcessorFactoryModel.SimpleIoTDeviceMessageCatalogList = findAllMessageSchema(iotHub); msgProcessorFactoryModel.MessageIdAlarmRules = findAllMessageAlarmRules(iotHub.IoTHubAlias); findAllCompatibleEventHubs(iotHub); findDocDBConnectionString(iotHub); }
private bool runSingleRuleItem(SupportDataTypeEnum testDataType, string elementName, string op, string right, JObject testObject) { MessageProcessorFactoryModel msgProcessorFactoryModel = new MessageProcessorFactoryModel(); IoTHubAliasEventMessageReceiver receiver = new IoTHubAliasEventMessageReceiver("test"); Func <DynamicMessageElement, bool> func = receiver.CreateCompiledRuleFuncTest(testDataType, op, right); SfMessageEventProcessor sfMsgEventProcessor = new SfMessageEventProcessor(msgProcessorFactoryModel); RuleEngineItem ruleEngineItem = new RuleEngineItem { ElementName = elementName, DataType = testDataType, OrderOperation = "end", Result = false, Equality = func }; sfMsgEventProcessor.RunSingleRuleItemTest(ruleEngineItem, testObject); return(ruleEngineItem.Result); }
public SfEventMessageProcessorFactory(MessageProcessorFactoryModel msgProcessorFactoryModel) { this.msgProcessorFactoryModel = msgProcessorFactoryModel; }
public SfMessageEventProcessor(MessageProcessorFactoryModel msgProcessorFactoryModel) { this._msgProcessorFactoryModel = msgProcessorFactoryModel; }