public void RaiseNew(string subject, string message)
        {
            var incidents = _apiClient.GetOpenIncidents();

            var incident = incidents.FirstOrDefault(i => i.trigger_summary_data != null
                                                         &&
                                                         i.trigger_summary_data.IndexOf(subject,
                                                             StringComparison.OrdinalIgnoreCase) >= 0);

            if (incident == null)
            {
                //raise new
                var newIncident = new IncidentEvent
                {
                    client = "ParkmobilePagerdutyCli",
                    description = subject,
                    incident_key = Guid.NewGuid().ToString(),
                    service_key = _config.EventAuthToken,
                    details = message
                };

                var response = _apiClient.Trigger(newIncident);
                if (response.IsOk())
                {
                    Console.WriteLine("Issue created, key: {0}",
                        response.incident_key);
                }
                else
                {
                    Console.WriteLine("Failed to create issue: {0} {1}",
                        response.status,
                        response.message);
                }
            }
            else
            {
                Console.WriteLine("Issue exists, key: {0}\nSubject:{1}",
                    incident.incident_key,
                    incident.trigger_summary_data);
            }
        }
        public void SerializeEvent()
        {
            var incident = new IncidentEvent
            {
                client = "UnitTest",
                description = "Event triggered by unittest",
                incident_key = "bdf7c75f-90c8-4870-a1c5-4c9855e58767",
                service_key = "Test",
            };

            var json = JsonSerializer.SerializeToString(incident);

            Trace.WriteLine(json);
            Assert.AreEqual("{\"service_key\":\"Test\",\"event_type\":\"trigger\"," +
                            "\"description\":\"Event triggered by unittest\"," +
                            "\"incident_key\":\"bdf7c75f-90c8-4870-a1c5-4c9855e58767\",\"client\":\"UnitTest\"}",
                            json);
        }
        public void CreateAcknowledgeResolve()
        {
            var config = GetPagerDutyConfig();

            /*var config = new PagerDutyConfig
                {
                    EventAuthToken = "YOUR_EVENT_API_KEY_HERE",
                    EventApiUrl = "https://events.pagerduty.com/generic/2010-04-15/create_event.json"
                };
            */

            var incident = new IncidentEvent
                {
                    client = "UnitTest",
                    description = "Event triggered by unittest",
                    incident_key = Guid.NewGuid().ToString(),
                    service_key = config.EventAuthToken,
                };

            var apiClient = new IntegrationApi(config);

            var response = apiClient.Trigger(incident);

            Assert.IsTrue(response.IsOk(), "Incident should be created");

            var acknowledge = new AcknowledgeEvent(incident, "Working on it!");

            var ackResponse = apiClient.Acknowledge(acknowledge);

            Assert.IsTrue(ackResponse.IsOk(), "Incident should be acknowledged");

            var resolveEvent = new ResolveEvent(incident, "Fixed!");

            var resResponse = apiClient.Resolve(resolveEvent);

            Assert.IsTrue(resResponse.IsOk(), "Incident should be resolved");
        }
        public void RaiseIfNotKnown()
        {
            var config = GetPagerDutyConfig();
            var subject = "[IPHost] 'Parkmobile NL Web02 on web02-nl.parkmobile.com' - 'down'";
            var api = new IntegrationApi(config);

            var incidents = api.GetOpenIncidents();

            var incident = incidents.FirstOrDefault(i => i.trigger_summary_data != null
                           && i.trigger_summary_data.IndexOf("IPHOST", StringComparison.OrdinalIgnoreCase) >= 0 );

            if (incident == null)
            {
                //raise new
                var newIncident = new IncidentEvent
                {
                    client = "IPHost",
                    description = subject,
                    incident_key = Guid.NewGuid().ToString(),
                    service_key = config.EventAuthToken,
                };

                var response = api.Trigger(newIncident);

                Assert.IsTrue(response.IsOk(), "Incident should be created");
            }
            else
            {
                //already known, keep on going
            }
        }