/// <summary> /// Returns whether audit event meets filter criteria /// </summary> /// <param name="auditEvent"></param> /// <param name="auditEventFilter"></param> /// <returns></returns> private static bool IsAuditEventMeetsCriteria(AuditEvent auditEvent, AuditEventFilter auditEventFilter) { if (IsAuditEventHeaderMeetsCriteria(auditEvent, auditEventFilter)) // Header meets criteria { if (auditEventFilter.ValueFilters.Count == 0) // No value filters { return(true); } // Check value filters int countFiltersValid = 0; int countFiltersInvalid = 0; foreach (AuditEventValueFilter valueFilter in auditEventFilter.ValueFilters) { AuditEventValue auditEventValue = auditEvent.GetValueByValueTypeId(valueFilter.ValueTypeID); if (auditEventValue == null) // Audit event doesn't have value { countFiltersInvalid++; } else // Has value, check it { if (auditEventValue.Value.Equals(valueFilter.Value)) // Values match { countFiltersValid++; } else { countFiltersInvalid++; } } } return(auditEventFilter.AllFiltersRequired ? (countFiltersValid == auditEventFilter.ValueFilters.Count) : (countFiltersValid > 0)); } return(false); }
/// <summary> /// Deserializes value /// </summary> /// <param name="valueTypeId"></param> /// <param name="value"></param> /// <returns></returns> private AuditEventValue DeserializeValue(int valueTypeId, string value) { AuditEventValueType valueType = _auditEventValueTypeRepository.GetByID(valueTypeId); AuditEventValueConverter converter = _valueConverters.Find(item => item.Handles(valueTypeId)); var auditEventValue = new AuditEventValue() { TypeID = Convert.ToInt32(valueTypeId), Value = converter == null ? value : converter.ValueConverter.Convert(value, value.GetType(), valueType.Type) }; return(auditEventValue); }
protected string GetValueDescription(AuditEvent auditEvent, int valueTypeId, AuditEventValueTypeRepository auditEventValueTypeRepository, List <AuditEventValueConverter> valueConverters) { string eventDescription = ""; AuditEventValue auditEventValue = auditEvent.GetValueByValueTypeId(valueTypeId); if (auditEventValue != null && auditEventValue.Value != null) { AuditEventValueType auditEventValueType = auditEventValueTypeRepository.GetByID(auditEventValue.TypeID); AuditEventValueConverter auditEventValueConverter = valueConverters.Find(current => current.Handles(auditEventValue.TypeID)); if (auditEventValueConverter != null) // Sanity check { eventDescription = auditEventValueConverter.ValueConverter.Convert(auditEventValue.Value, auditEventValueType.Type, typeof(String)).ToString(); } } return(eventDescription); }
/// <summary> /// Serializes value /// </summary> /// <param name="auditEventValue"></param> /// <returns></returns> private string SerializeValue(AuditEventValue auditEventValue) { if (auditEventValue.Value is null) { return("null"); } AuditEventValueType valueType = _auditEventValueTypeRepository.GetByID(auditEventValue.TypeID); AuditEventValueConverter converter = _valueConverters.Find(current => current.Handles(auditEventValue.TypeID)); if (converter != null) { return(converter.ValueConverter.Convert(auditEventValue.Value, valueType.Type, typeof(string)).ToString()); } return(auditEventValue.Value.ToString()); }
/// <summary> /// Posts message to MS Teams channel /// </summary> /// <param name="auditEvent"></param> /// <param name="auditEventType"></param> /// <param name="postMessageSettings"></param> public void PostMessage(AuditEvent auditEvent, AuditEventType auditEventType, MSTeamsPostMessageSettings postMessageSettings) { AuditEventValueTypeRepository auditEventValueTypeRepository = new AuditEventValueTypeRepository(); //Get Message value AuditEventValue auditEventValueMessage = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.Message); AuditEventValue auditEventValueRunId = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanRunID); AuditEventValue auditEventValueScenarioId = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanScenarioID); AuditEventValue auditEventValueAutoBookId = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanAutoBookID); AuditEventValue auditEventValuePipelineErrorMessage = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanPipelineEventErrorMessage); // Determine if sub event is set string subEvent = ""; foreach (int valueTypeId in new int[] { AuditEventValueTypes.GamePlanPipelineEventID, AuditEventValueTypes.GamePlanAutoBookEventID }) { subEvent = GetValueDescription(auditEvent, valueTypeId, auditEventValueTypeRepository, _valueConverters); if (!String.IsNullOrEmpty(subEvent)) { break; } } StringBuilder title = new StringBuilder(auditEventType.Description); if (!String.IsNullOrEmpty(subEvent)) { title.Append(string.Format(" - {0}", subEvent)); } // Set Run/Scenario details Run run = null; StringBuilder message = new StringBuilder(title.ToString()); if (auditEventValueRunId != null || auditEventValueScenarioId != null) { using (var scope = _repositoryFactory.BeginRepositoryScope()) { var runRepository = scope.CreateRepository <IRunRepository>(); run = (auditEventValueRunId != null ? runRepository.Find((Guid)auditEventValueRunId.Value) : runRepository.FindByScenarioId((Guid)auditEventValueScenarioId.Value)); message.Append(message.Length == 0 ? "" : "; "); message.Append(string.Format("Description: {0}; Run ID: {1}", run.Description, MSTeamsMessageFormatter.FormatHyperlink(run.Id.ToString(), WebLinkFactory.GetRunDetailsURL(_frontendUrl, run.Id)))); if (auditEventValueScenarioId != null) { message.Append(message.Length == 0 ? "" : "; "); message.Append(string.Format("Scenario ID: {0}", MSTeamsMessageFormatter.FormatHyperlink(auditEventValueScenarioId.Value.ToString(), WebLinkFactory.GetOptimiserReportURL(_frontendUrl, run.Id, (Guid)auditEventValueScenarioId.Value)))); } } } // Set AutoBook details if (auditEventValueAutoBookId != null) { message.Append(message.Length == 0 ? "" : "; "); message.Append(string.Format("AutoBook ID: {0}", MSTeamsMessageFormatter.FormatHyperlink(auditEventValueAutoBookId.Value.ToString(), WebLinkFactory.GetAutoBookURL(_frontendUrl, (Guid)auditEventValueAutoBookId.Value)))); } // Set pipeline error if (auditEventValuePipelineErrorMessage != null) { message.Append(message.Length == 0 ? "" : "; "); message.Append(string.Format("Error: {0}", auditEventValuePipelineErrorMessage.Value.ToString())); } // Set message if (auditEventValueMessage != null) { message.Append(message.Length == 0 ? "" : "; "); message.Append(string.Format("Message: {0}", auditEventValueMessage.Value.ToString())); } // Post message _msTeamsREST.PostSimpleMessage(postMessageSettings.Url, "", message.ToString()); }
public MailMessage CreateEmail(AuditEvent auditEvent) { // Determine if we need to generate email EmailAuditEventSettings emailAuditEventSettings = _emailAuditEventSettingsList.Find(s => s.EventTypeId == auditEvent.EventTypeID); if (!Handles(auditEvent)) { return(null); } AuditEventValueTypeRepository auditEventValueTypeRepository = new AuditEventValueTypeRepository(); AuditEventType auditEventType = new AuditEventTypeRepository().GetByID(auditEvent.EventTypeID); // Determine if sub event is set string subEvent = ""; foreach (int valueTypeId in new int[] { AuditEventValueTypes.GamePlanPipelineEventID, AuditEventValueTypes.GamePlanAutoBookEventID }) { subEvent = GetValueDescription(auditEvent, valueTypeId, auditEventValueTypeRepository, _valueConverters); if (!String.IsNullOrEmpty(subEvent)) { break; } } MailMessage mail = new MailMessage(); if (!String.IsNullOrEmpty(subEvent)) // Sub event indicated { mail.Subject = string.Format("[{0}] {1}: {2}: {3}", _environmentId, Globals.ProductName, auditEventType.Description, subEvent); } else { mail.Subject = string.Format("[{0}] {1}: {2}", _environmentId, Globals.ProductName, auditEventType.Description); } mail.Sender = new MailAddress(emailAuditEventSettings.NotificationSettings.SenderAddress, emailAuditEventSettings.NotificationSettings.SenderAddress); mail.From = new MailAddress(emailAuditEventSettings.NotificationSettings.SenderAddress, emailAuditEventSettings.NotificationSettings.SenderAddress); mail.Body = GetBody(auditEvent, subEvent, _valueConverters, auditEventValueTypeRepository); mail.IsBodyHtml = mail.Body.ToLower().Contains("<html>") && (mail.Body.ToLower().Contains("<head>") || mail.Body.ToLower().Contains("<head/>")); // Check if specific email address indicated in audit event List <AuditEventValue> recipientAuditEventValues = new List <AuditEventValue>(); AuditEventValue recipientAuditEventValue = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.RecipientEmailAddress); if (recipientAuditEventValue != null) { recipientAuditEventValues.Add(recipientAuditEventValue); } if (recipientAuditEventValues.Count == 0) { for (int index = 0; index < emailAuditEventSettings.NotificationSettings.RecipientAddresses.Count; index++) { mail.To.Add(new MailAddress(emailAuditEventSettings.NotificationSettings.RecipientAddresses[index], emailAuditEventSettings.NotificationSettings.RecipientAddresses[index])); } } else { foreach (AuditEventValue auditEventValue in recipientAuditEventValues) { mail.To.Add(new MailAddress(auditEventValue.Value.ToString())); } } if (emailAuditEventSettings.NotificationSettings.CCAddresses != null) { emailAuditEventSettings.NotificationSettings.CCAddresses.ForEach(address => mail.CC.Add(new MailAddress(address, address))); } /* * foreach (AuditEventValue auditEventValue in auditEvent.Values.Where(item => item.TypeID == AuditEventValueTypes.EmailAttachment)) * { * mail.Attachments.Add(new Attachment(auditEventValue.Value.ToString())); * } */ return(mail); }
/// <summary> /// Posts message to MS Teams channel /// </summary> /// <param name="auditEvent"></param> /// <param name="auditEventType"></param> /// <param name="postMessageSettings"></param> public void PostMessage(AuditEvent auditEvent, AuditEventType auditEventType, MSTeamsPostMessageSettings postMessageSettings) { AuditEventValueTypeRepository auditEventValueTypeRepository = new AuditEventValueTypeRepository(); //Get Message value AuditEventValue auditEventValueMessage = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.Message); AuditEventValue auditEventValueRunId = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanRunID); AuditEventValue auditEventValueScenarioId = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanScenarioID); AuditEventValue auditEventValueAutoBookId = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanAutoBookID); // Determine if sub event is set string subEvent = ""; foreach (int valueTypeId in new int[] { AuditEventValueTypes.GamePlanPipelineEventID, AuditEventValueTypes.GamePlanAutoBookEventID }) { subEvent = GetValueDescription(auditEvent, valueTypeId, auditEventValueTypeRepository, _valueConverters); if (!String.IsNullOrEmpty(subEvent)) { break; } } List <string> detailsTextList = new List <string>(); List <string> detailsUrlList = new List <string>(); StringBuilder title = new StringBuilder(auditEventType.Description); if (!String.IsNullOrEmpty(subEvent)) { title.Append(string.Format(" - {0}", subEvent)); } // Set Run/Scenario details Run run = null; StringBuilder message = new StringBuilder(""); if (auditEventValueRunId != null || auditEventValueScenarioId != null) { using (var scope = _repositoryFactory.BeginRepositoryScope()) { var runRepository = scope.CreateRepository <IRunRepository>(); run = (auditEventValueRunId != null ? runRepository.Find((Guid)auditEventValueRunId.Value) : runRepository.FindByScenarioId((Guid)auditEventValueScenarioId.Value)); if (auditEventValueScenarioId == null) { // Set URL detailsUrlList.Add(WebLinkFactory.GetRunDetailsURL(_frontendUrl, run.Id)); detailsTextList.Add("Run Details"); } else { detailsUrlList.Add(WebLinkFactory.GetRunDetailsURL(_frontendUrl, run.Id)); detailsTextList.Add("Run Details"); // Set URL detailsUrlList.Add(WebLinkFactory.GetOptimiserReportURL(_frontendUrl, run.Id, (Guid)auditEventValueScenarioId.Value)); detailsTextList.Add("Scenario Details"); } } } // Set AutoBook details if (auditEventValueAutoBookId != null) { detailsUrlList.Add(WebLinkFactory.GetAutoBookURL(_frontendUrl, (Guid)auditEventValueAutoBookId.Value)); detailsTextList.Add("AutoBook Details"); } DataTable dataTable = GetValuesDataTable(auditEvent, run, auditEventType, subEvent, auditEventValueTypeRepository, _valueConverters); foreach (DataRow dataRow in dataTable.Rows) { message.Append(message.Length == 0 ? "" : "; "); //message.Append(message.Length == 0 ? "" : "<BR/>"); message.Append(string.Format("{0}: {1}", dataRow[0].ToString(), dataRow[1].ToString())); } // Post message _msTeamsREST.PostMessageCard(postMessageSettings.Url, "Title", title.ToString(), message.ToString(), detailsTextList, detailsUrlList); }
public MailMessage CreateEmail(AuditEvent auditEvent) { // Determine if we need to generate email if (!Handles(auditEvent)) { return(null); } using (var scope = _repositoryFactory.BeginRepositoryScope()) { EmailAuditEventSettings emailAuditEventSettings = _emailAuditEventSettingsList.Find(s => s.EventTypeId == auditEvent.EventTypeID); AuditEventValueTypeRepository auditEventValueTypeRepository = new AuditEventValueTypeRepository(); // Determine if sub event is set string subEvent = ""; foreach (int valueTypeId in new int[] { AuditEventValueTypes.GamePlanPipelineEventID, AuditEventValueTypes.GamePlanAutoBookEventID }) { subEvent = GetValueDescription(auditEvent, valueTypeId, auditEventValueTypeRepository, _valueConverters); if (!String.IsNullOrEmpty(subEvent)) { break; } } // Get run details, check if specific scenario specified var runRepository = scope.CreateRepository <IRunRepository>(); AuditEventValue runIdAuditEventValue = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanRunID); AuditEventValue scenarioIdAuditEventValue = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.GamePlanScenarioID); Run run = runRepository.Find((Guid)runIdAuditEventValue.Value); AuditEventType auditEventType = new AuditEventTypeRepository().GetByID(auditEvent.EventTypeID); MailMessage mail = new MailMessage(); if (!String.IsNullOrEmpty(subEvent)) // No pipeline event { mail.Subject = string.Format("[{0}] {1}: {2}: {3}", _environmentId, Globals.ProductName, auditEventType.Description, subEvent); } else { mail.Subject = string.Format("[{0}] {1}: {2}", _environmentId, Globals.ProductName, auditEventType.Description); } // Indicate if run failed in subject, bit of a hack as we have to check the message string if (auditEvent.EventTypeID == AuditEventTypes.GamePlanRunCompleted) { string message = GetValueDescription(auditEvent, AuditEventValueTypes.Message, auditEventValueTypeRepository, _valueConverters); if (!String.IsNullOrEmpty(message) && message.ToLower().Contains("errors")) { mail.Subject = mail.Subject + string.Format(" ({0})", message); } } // Load scenarios var scenarioRepository = scope.CreateRepository <IScenarioRepository>(); var scenarioIds = run.Scenarios.Select(e => e.Id).Distinct().ToArray(); List <Scenario> scenarios = scenarioRepository.FindByIds(scenarioIds).ToList(); mail.Sender = new MailAddress(emailAuditEventSettings.NotificationSettings.SenderAddress, emailAuditEventSettings.NotificationSettings.SenderAddress); mail.From = new MailAddress(emailAuditEventSettings.NotificationSettings.SenderAddress, emailAuditEventSettings.NotificationSettings.SenderAddress); mail.Body = scenarioIdAuditEventValue == null?GetBody(auditEvent, auditEventType, run, scenarios, subEvent, auditEventValueTypeRepository) : GetBody(auditEvent, auditEventType, run, (Guid)scenarioIdAuditEventValue.Value, scenarios.First(s => s.Id == (Guid)scenarioIdAuditEventValue.Value), subEvent, auditEventValueTypeRepository); mail.IsBodyHtml = mail.Body.ToLower().Contains("<html>") && (mail.Body.ToLower().Contains("<head>") || mail.Body.ToLower().Contains("<head/>")); // Check if specific email address indicated in audit event List <AuditEventValue> recipientAuditEventValues = new List <AuditEventValue>(); AuditEventValue recipientAuditEventValue = auditEvent.GetValueByValueTypeId(AuditEventValueTypes.RecipientEmailAddress); if (recipientAuditEventValue != null) { recipientAuditEventValues.Add(recipientAuditEventValue); } if (recipientAuditEventValues.Count == 0) { for (int index = 0; index < emailAuditEventSettings.NotificationSettings.RecipientAddresses.Count; index++) { mail.To.Add(new MailAddress(emailAuditEventSettings.NotificationSettings.RecipientAddresses[index], emailAuditEventSettings.NotificationSettings.RecipientAddresses[index])); } } else { foreach (AuditEventValue auditEventValue in recipientAuditEventValues) { mail.To.Add(new MailAddress(auditEventValue.Value.ToString())); } } if (emailAuditEventSettings.NotificationSettings.CCAddresses != null) { emailAuditEventSettings.NotificationSettings.CCAddresses.ForEach(address => mail.CC.Add(new MailAddress(address, address))); } /* * foreach (AuditEventValue auditEventValue in auditEvent.Values.Where(item => item.TypeID == AuditEventValueTypes.EmailAttachment)) * { * mail.Attachments.Add(new Attachment(auditEventValue.Value.ToString())); * } */ return(mail); } }