コード例 #1
0
        private TicketArticle CreatePlatformArticle(AlertContext context)
        {
            string conditions = $"Window Size: {context.Condition.WindowSize} \n";

            foreach (var metric in context.Condition.AllOf)
            {
                conditions = $"Metric Name : {metric.MetricName} \n " +
                             $"Operator: {metric.Operator} \n " +
                             $"Threshold {metric.Threshold} \n " +
                             $"Time Aggregation: {metric.TimeAggregation}";
                conditions += "\n\n";
            }

            TicketArticle activityLogArticle = new TicketArticle
            {
                Subject = context.ConditionType,
                Body    = $"Conditions: \n" +
                          $"{conditions}" +
                          $"Window Start Time: {context.Condition.WindowStartTime.ToString(DateTimeFormat)} \n " +
                          $"Window End Time: {context.Condition.WindowEndTime.ToString(DateTimeFormat)}",
                Type = "note",
            };

            return(activityLogArticle);
        }
コード例 #2
0
        public static TicketWithArticle Combine(Ticket ticket, TicketArticle article)
        {
            var combined = new TicketWithArticle();

            TypeUtility.CopyProperties(ticket, combined);
            combined.Article = article;
            return(combined);
        }
コード例 #3
0
 private ExportTicketArticleItem CreateArticleItem(TicketArticle article)
 {
     return(new ExportTicketArticleItem
     {
         Id = article.Id,
         Subject = article.Subject,
         ContentType = article.ContentType,
         Body = article.Body,
         Internal = article.Internal,
         Type = article.Type,
     });
 }
コード例 #4
0
        public void CreateTicket(Alert alert)
        {
            TicketArticle ticketArticle = new TicketArticle();

            switch (alert.Data.Essentials.MonitoringService)
            {
            case MonitoringService.Platform:
                ticketArticle = CreatePlatformArticle(alert.Data.AlertContext);
                break;

            case MonitoringService.LogAnalytics:
                ticketArticle = CreateLogAnalyticsArticle(alert.Data.AlertContext);
                break;

            case MonitoringService.ApplicationInsights:
                ticketArticle = CreateApplicationInsightsArticle(alert.Data.AlertContext);
                break;

            case MonitoringService.ActivityLog:
                ticketArticle = CreateActivityLogArticle(alert.Data.AlertContext);
                break;

            case MonitoringService.ServiceHealth:
                ticketArticle = CreateServiceHealthArticle(alert.Data.AlertContext);
                break;

            case MonitoringService.ResourceHealth:
                ticketArticle = CreateResourceHealthArticle(alert.Data.AlertContext);
                break;

            default:
                ticketArticle = new TicketArticle
                {
                    Subject = "Default Subject",
                    Body    = "Default Body",
                    Type    = "note",
                };
                break;
            }

            var ticket = TicketClient.CreateTicketAsync(
                new Ticket
            {
                Title      = $"{alert.Data.Essentials.AlertRule}",
                GroupId    = 1,
                CustomerId = 1,
                OwnerId    = 1
            }, ticketArticle);
        }
コード例 #5
0
        private TicketArticle CreateActivityLogArticle(AlertContext context)
        {
            TicketArticle activityLogArticle = new TicketArticle
            {
                Subject = context.OperationName,
                Body    = $"Authorization: \n" +
                          $"Action: {context.Authorization.Action} \n" +
                          $"Scope: {context.Authorization.Scope} \n\n" +
                          $"Level: {context.Level} \n" +
                          $"Status: {context.Status} \n" +
                          $"Caller: {context.Caller} \n" +
                          $"Event Time: {context.EventTimestamp.ToString(DateTimeFormat)}",
                Type = "note"
            };

            return(activityLogArticle);
        }
コード例 #6
0
        private TicketArticle CreateApplicationInsightsArticle(AlertContext context)
        {
            //string tables = FormatSearchResults(context.SearchResults);

            TicketArticle activityLogArticle = new TicketArticle
            {
                Subject = context.AlertType,
                Body    = $"Search Query {context.SearchQuery} \n " +
                          $"Link To Search Results: {context.LinkToSearchResults} \n" +
                          $"Search Interval Start Time Utc: {context.SearchIntervalStartTimeUtc.ToString(DateTimeFormat)} \n" +
                          $"Result Count {context.ResultCount} \n " +
                          $"Search Interval In Minutes: {context.SearchIntervalInMinutes} \n " +
                          $"Threshold: {context.Threshold} \n " +
                          $"Operator: {context.Operator} \n ",
                //$"Search Result: {tables}",
                Type = "note"
            };

            return(activityLogArticle);
        }
コード例 #7
0
        private TicketArticle CreateResourceHealthArticle(AlertContext context)
        {
            TicketArticle activityLogArticle = new TicketArticle
            {
                Subject = context.EventSource,
                Body    = $"Level: {context.Level} \n " +
                          $"Operation Name: {context.OperationName} \n\n" +

                          $"Properties: \n" +
                          $"Title: {context.Properties.Title} \n" +
                          $"Current Health Status: {context.Properties.CurrentHealthStatus} \n" +
                          $"Previous Health Status: {context.Properties.PreviousHealthStatus} \n" +
                          $"Type: {context.Properties.Type} \n" +
                          $"Cause: {context.Properties.Cause} \n\n" +

                          $"Status: {context.Status} \n " +
                          $"Event Time: {context.EventTimestamp.ToString(DateTimeFormat)}",
                Type = "note",
                From = context.Caller
            };

            return(activityLogArticle);
        }
コード例 #8
0
        private TicketArticle CreateServiceHealthArticle(AlertContext context)
        {
            TicketArticle activityLogArticle = new TicketArticle
            {
                Subject = context.EventSource,
                Body    = $"Level: {context.Level} \n " +
                          $"Operation Name: {context.OperationName} \n\n" +

                          $"Properties: \n" +
                          $"Title: {context.Properties.Title} \n" +
                          $"Service: {context.Properties.Service} \n" +
                          $"Region: {context.Properties.Region} \n" +
                          $"ImpactStartTime: {context.Properties.ImpactStartTime.ToString(DateTimeFormat)} \n" +
                          $"Stage: {context.Properties.Stage} \n\n" +

                          $"Status: {context.Status} \n " +
                          $"Event Time: {context.EventTimestamp.ToString(DateTimeFormat)}",
                Type = "note",
                From = context.Caller
            };

            return(activityLogArticle);
        }
コード例 #9
0
        private TicketArticle CreateLogAnalyticsArticle(AlertContext context)
        {
            string affectedConfigurationItems = string.Empty;

            foreach (var affectedItem in context.AffectedConfigurationItems)
            {
                affectedConfigurationItems += $"{affectedItem} \n";
            }

            //string tables = FormatSearchResults(context.SearchResults);

            TicketArticle activityLogArticle = new TicketArticle
            {
                Subject = context.AlertType,
                Body    = $"Search Query: \n" +
                          $"{context.SearchQuery} \n\n " +

                          $"Link To Search Results: {context.LinkToSearchResults} \n\n" +

                          $"Affected Configuration Items: \n" +
                          $"{affectedConfigurationItems} \n" +

                          $"Search Interval Start Time Utc: {context.SearchIntervalStartTimeUtc.ToString(DateTimeFormat)} \n" +
                          $"Result Count {context.ResultCount} \n " +
                          $"Severity Description: {context.SeverityDescription} \n " +
                          $"Search Interval In Minutes: {context.SearchIntervalInMinutes} \n " +
                          $"Threshold: {context.Threshold} \n " +
                          $"Operator: {context.Operator} \n\n ",

                //$"Search Result: \n" +
                //$"{tables}",
                Type = "note"
            };

            return(activityLogArticle);
        }
コード例 #10
0
 public Task <TicketArticle> CreateTicketArticleAsync(TicketArticle article)
 {
     return(PostAsync <TicketArticle>("/api/v1/ticket_articles", article));
 }
コード例 #11
0
 public Task <Ticket> CreateTicketAsync(Ticket ticket, TicketArticle article)
 {
     return(PostAsync <Ticket>("/api/v1/tickets", TicketWithArticle.Combine(ticket, article)));
 }