예제 #1
0
        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);
        }
예제 #4
0
        /// <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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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");
        }
예제 #8
0
        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;
            }
        }