コード例 #1
0
        public void On(Event <LogEventData> evt)
        {
            try
            {
                if (TraceMessage)
                {
                    Log
                    .ForContext("Uri", new Uri(TeamsBaseUrl))
                    .Information("Start Processing {Message}", evt.Data.RenderedMessage);
                }

                TeamsCard body = BuildBody(evt);

                var httpClientHandler = new HttpClientHandler();

                if (!string.IsNullOrEmpty(WebProxy))
                {
                    httpClientHandler.Proxy    = new WebProxy(WebProxy, false);
                    httpClientHandler.UseProxy = true;
                }
                else
                {
                    httpClientHandler.UseProxy = false;
                }

                using (var client = new HttpClient(httpClientHandler))
                {
                    client.BaseAddress = new Uri(TeamsBaseUrl);

                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    var response = client.PostAsync(
                        "",
                        new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json")
                        ).Result;

                    if (!response.IsSuccessStatusCode)
                    {
                        Log
                        .ForContext("Uri", response.RequestMessage.RequestUri)
                        .Error("Could not send Teams message, server replied {StatusCode} {StatusMessage}: {Message}", Convert.ToInt32(response.StatusCode), response.StatusCode, response.Content.ReadAsStringAsync().Result);
                    }
                    else
                    {
                        if (TraceMessage)
                        {
                            string reponseResult = response.Content.ReadAsStringAsync().Result;
                            Log
                            .ForContext("Uri", response.RequestMessage.RequestUri)
                            .Information("Server replied {StatusCode} {StatusMessage}: {Message}", Convert.ToInt32(response.StatusCode), response.StatusCode, reponseResult);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log
                .ForContext("Uri", new Uri(TeamsBaseUrl))
                .Error(ex, "An error occured while constructing request.");
            }
        }
コード例 #2
0
        private TeamsCard BuildBody(Event <LogEventData> evt)
        {
            // Build action
            var url = BaseUrl;

            if (string.IsNullOrWhiteSpace(url))
            {
                url = Host.ListenUris.FirstOrDefault();
            }

            TeamsPotentialAction action = new TeamsPotentialAction()
            {
                Name    = "Click here to open in Seq",
                Targets = new[]
                {
                    new TeamsActionTarget {
                        Uri = $"{url}#/events?filter=@Id%20%3D%3D%20%22{evt.Id}%22&show=expanded"
                    }
                }
            };

            // Build message
            var msg = evt.Data.RenderedMessage;

            if (msg.Length > 1000)
            {
                msg = msg.EscapeMarkdown().Substring(0, 1000);
            }

            var color = Color;

            if (string.IsNullOrWhiteSpace(color))
            {
                color = _levelColorMap[evt.Data.Level];
            }

            TeamsCard body = new TeamsCard
            {
                Title           = evt.Data.Level.ToString().EscapeMarkdown(),
                ThemeColor      = color,
                Text            = msg,
                PotentialAction = new []
                {
                    action
                }
            };

            // Build sections
            var sections = new List <TeamsSection>();

            if (!ExcludeProperties && evt.Data.Properties != null)
            {
                var facts = evt.Data.Properties
                            .Where(i => i.Value != null)
                            .Select(i => new TeamsFact {
                    Name = i.Key, Value = i.Value.ToString().EscapeMarkdown()
                })
                            .ToArray();

                if (facts.Any())
                {
                    sections.Add(new TeamsSection {
                        Facts = facts
                    });
                }
            }

            if (!string.IsNullOrWhiteSpace(evt.Data.Exception))
            {
                sections.Add(new TeamsSection {
                    Title = "Exception", Text = evt.Data.Exception.EscapeMarkdown()
                });
            }

            body.Sections = sections.ToArray();

            return(body);
        }