예제 #1
0
        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());
            }
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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);
        }