public IcmWorkItemManagment(Config.InstanceConfig instanceConfig) { Logger.InfoFormat("Creating IcM work item manager..."); ValidateConfig(instanceConfig); config = instanceConfig; incidentDefaults = config.IncidentDefaults; X509Certificate certificate = RetrieveCertificate(CertThumbprint); dataServiceClient = new DataServiceODataClient( new Uri(config.IcmClientConfig.OdataServiceBaseUri), config, certificate); connectorClient = ConnectToIcmInstance(); if (connectorClient == null) { Logger.ErrorFormat("Cannot initialize IcM Webservice."); throw new Exception("Cannot initialize IcM Webservice."); } InitWorkItemsCache(); nameResolver = InitNameResolver(); dateHolder = DateTime.UtcNow; Logger.InfoFormat("Completed creating IcM work item manager."); }
public void IcmIncidentOverridesTypeTest() { // Test how overrides handle different types passed as "incident" Dictionary<string, string> values = new Dictionary<string, string>(); values.Add("RootCause", "Error"); values.Add("IsNoise", "Error"); values.Add("Severity", "3"); values.Add("Keywords", "Changed"); // These three should fail without error string testString = ""; IcmWorkItemManagment.ApplyOverrides(ref testString, values); int testInt = 0; IcmWorkItemManagment.ApplyOverrides(ref testInt, values); Mail2Bug.IcmIncidentsApiODataReference.IncidentImpactedComponent testComplexObj = new Mail2Bug.IcmIncidentsApiODataReference.IncidentImpactedComponent(); IcmWorkItemManagment.ApplyOverrides(ref testComplexObj, values); // These two should be handles identically Mail2Bug.IcmIncidentsApiODataReference.Incident testIncident = new Mail2Bug.IcmIncidentsApiODataReference.Incident(); testIncident.Keywords = "Initial"; testIncident.Severity = 4; IcmWorkItemManagment.ApplyOverrides(ref testIncident, values); Assert.AreEqual(testIncident.Severity, 3); Assert.AreEqual(testIncident.Keywords, "Changed"); AlertSourceIncident testAlertSourceIncident = new AlertSourceIncident(); testAlertSourceIncident.Keywords = "Initial"; testAlertSourceIncident.Severity = 4; IcmWorkItemManagment.ApplyOverrides(ref testAlertSourceIncident, values); Assert.AreEqual(testAlertSourceIncident.Severity, 3); Assert.AreEqual(testAlertSourceIncident.Keywords, "Changed"); }
public long CreateWorkItem(Dictionary <string, string> values, Dictionary <string, string> overrides) { AlertSourceIncident incident = CreateIncidentWithDefaults(values); if (connectorClient == null) { connectorClient = ConnectToIcmInstance(); } ApplyOverrides(ref incident, overrides); long incidentId = 0; IncidentAddUpdateResult result = connectorClient.AddOrUpdateIncident2( config.IcmClientConfig.ConnectorId, incident, RoutingOptions.None); if (result?.IncidentId != null) { incidentId = result.IncidentId.Value; WorkItemsCache.Add(values["ConverstionID"], incidentId); DateTime createDateTime = result.UpdateProcessTime ?? DateTime.UtcNow; InsertRecord(config.IcmClientConfig.RoutingId, values["ConverstionID"], incidentId, createDateTime); } return(incidentId); }
/// <summary> /// For more info, see https://icmdocs.azurewebsites.net/developers/Connectors/InjectingIncidentsUsingConnectorAPI.html /// </summary> /// <param name="testRunAlert"></param> /// <returns></returns> private static AlertSourceIncident GenerateAlertSourceIncidentFrom(string title, string owningTeamId, string containerPublicId, string routingId) { DateTime now = DateTime.UtcNow; AlertSourceIncident alertSourceIncident = new AlertSourceIncident() { Title = title, Summary = "Just for test", Severity = 4, Status = IncidentStatus.Active, OwningTeamId = owningTeamId, ImpactStartDate = DateTime.Now, CustomFields = new IncidentConnectorCustomField[] { new IncidentConnectorCustomField() { ContainerType = IncidentCustomFieldContainerType.Tenant, ContainerPublicId = new Guid(containerPublicId), FieldSet = null } }, Source = new AlertSourceInfo() { CreatedBy = IcMIncidentCreator, Origin = "Partner", CreateDate = now, ModifiedDate = now, IncidentId = Guid.NewGuid().ToString("N") }, OccurringLocation = new IncidentLocation { DataCenter = "DataCop", DeviceGroup = "DataCop", DeviceName = "DataCopAlert", Environment = "DEV", ServiceInstanceId = "DataCopAlertMicroService", }, RaisingLocation = new IncidentLocation { DataCenter = "DataCop", DeviceGroup = "DataCop", DeviceName = "DataCopAlert", Environment = "DEV", ServiceInstanceId = "DataCopAlertMicroService", }, RoutingId = routingId, }; return(alertSourceIncident); }
public AlertSourceIncident CreateIncidentWithDefaults(Dictionary <string, string> values) { AlertSourceIncident incident = new AlertSourceIncident(); incident.ImpactStartDate = Convert.ToDateTime(values[FieldNames.Incident.CreateDate]); incident.Title = values[FieldNames.Incident.Title]; incident.Severity = incidentDefaults.Severity; int maxHyperlinkLength = config.WorkItemSettings.RemoveHyperlinkExceedingNCharacters ?? -1; DescriptionEntry descriptionEntry = GenerateDescriptionEntry(values, maxHyperlinkLength); incident.DescriptionEntries = new [] { descriptionEntry }; incident.Keywords = values["ConverstionID"]; incident.Source = new AlertSourceInfo { CreatedBy = values[FieldNames.Incident.CreatedBy], CreateDate = DateTime.UtcNow, IncidentId = Guid.NewGuid().ToString(), ModifiedDate = DateTime.UtcNow, Origin = incidentDefaults.Source.Origin }; incident.OccurringLocation = new IncidentLocation { DataCenter = incidentDefaults.OccurringLocation.DataCenter, DeviceGroup = incidentDefaults.OccurringLocation.DeviceGroup, DeviceName = incidentDefaults.OccurringLocation.DeviceName, Environment = incidentDefaults.OccurringLocation.Environment, ServiceInstanceId = incidentDefaults.OccurringLocation.ServiceInstanceId }; incident.RaisingLocation = new IncidentLocation { DataCenter = incidentDefaults.RaisingLocation.DataCenter, DeviceGroup = incidentDefaults.RaisingLocation.DeviceGroup, DeviceName = incidentDefaults.RaisingLocation.DeviceName, Environment = incidentDefaults.RaisingLocation.Environment, ServiceInstanceId = incidentDefaults.RaisingLocation.ServiceInstanceId }; incident.RoutingId = config.IcmClientConfig.RoutingId; incident.Status = incidentDefaults.Status; if (values["CorrelationId"] != "0") { incident.CorrelationId = values["CorrelationId"]; } return(incident); }
public long CreateWorkItem(Dictionary <string, string> values) { AlertSourceIncident incident = this.CreateIncidentWithDefaults(values); if (connectorClient == null) { connectorClient = ConnectToIcmInstance(); } long incidentId = 0; IncidentAddUpdateResult result = connectorClient.AddOrUpdateIncident2( config.IcmClientConfig.ConnectorId, incident, RoutingOptions.None); if (result != null && result.IncidentId.HasValue) { incidentId = result.IncidentId.Value; WorkItemsCache.Add(values["ConverstionID"], incidentId); } return(incidentId); }
public void IcmIncidentOverridesTypeTest() { // Test how overrides handle different types passed as "incident" Dictionary <string, string> values = new Dictionary <string, string>(); values.Add("RootCause", "Error"); values.Add("IsNoise", "Error"); values.Add("Severity", "3"); values.Add("Keywords", "Changed"); // These three should fail without error string testString = ""; IcmWorkItemManagment.ApplyOverrides(ref testString, values); int testInt = 0; IcmWorkItemManagment.ApplyOverrides(ref testInt, values); Mail2Bug.IcmIncidentsApiODataReference.IncidentImpactedComponent testComplexObj = new Mail2Bug.IcmIncidentsApiODataReference.IncidentImpactedComponent(); IcmWorkItemManagment.ApplyOverrides(ref testComplexObj, values); // These two should be handles identically Mail2Bug.IcmIncidentsApiODataReference.Incident testIncident = new Mail2Bug.IcmIncidentsApiODataReference.Incident(); testIncident.Keywords = "Initial"; testIncident.Severity = 4; IcmWorkItemManagment.ApplyOverrides(ref testIncident, values); Assert.AreEqual(testIncident.Severity, 3); Assert.AreEqual(testIncident.Keywords, "Changed"); AlertSourceIncident testAlertSourceIncident = new AlertSourceIncident(); testAlertSourceIncident.Keywords = "Initial"; testAlertSourceIncident.Severity = 4; IcmWorkItemManagment.ApplyOverrides(ref testAlertSourceIncident, values); Assert.AreEqual(testAlertSourceIncident.Severity, 3); Assert.AreEqual(testAlertSourceIncident.Keywords, "Changed"); }
private static IncidentAddUpdateResult AddOrUpdateIncident(Guid targetConnector, AlertSourceIncident incident) { if (incident == null) { throw new InvalidOperationException("The incident parameter cannot be null"); } try { IConnectorIncidentManager icMConnectorClient = CreateIncidentManager(IcMAuthCertThumbprint); return(icMConnectorClient.AddOrUpdateIncident2(targetConnector, incident, RoutingOptions.None)); } catch (Exception e) { Console.WriteLine($"Failed to send incident to IcM:\n{e.Message}"); throw; } }