public void CanSerializeJson()
        {
            // Arrange
            const string name    = "Name";
            var          targets = new[]
            {
                new OpenUriTarget("http://example.com/", "default"),
            };
            var sut = new OpenUriAction(name, targets);

            // Act
            string json = JsonSerializer.Serialize(sut, JsonConfig.Default);

            // Assert
            json.Should().Contain(Type)
            .And.Contain("\"name\":\"" + name + "\"")
            .And.Contain("\"targets\":[{\"uri\":\"http://example.com/\",\"os\":\"default\"}]");
        }
        /// <summary>
        /// Create a card with multiple log entries
        /// </summary>
        /// <param name="webHookURL">The webhook url</param>
        /// <param name="logEntries">The entries with the error message</param>
        /// <returns>A message card</returns>
        public static MessageCard CreateMessageCardFromList(string webHookURL, List <QueueLog> logEntries)
        {
            const int   MaxMessages = 3;
            MessageCard card        = new MessageCard();

            card.Title = "Log entry error";

            // Group the trigrams
            var logTrigrams = logEntries.Select(m => m.LogEntry.Trigram).Distinct();

            card.Text = $"Number of messages: {logEntries.Count}, {logTrigrams.Count()} trigram impacted";

            var sections = new List <Section>();
            var actions  = new List <IAction>();

            foreach (var trigram in logTrigrams)
            {
                var sec = new Section
                {
                    ActivityTitle    = trigram,
                    ActivitySubtitle = DateTime.Now.ToString(),
                };

                // Select only entries for the specific trigram
                var logEntriesTrigram = logEntries.Where(m => m.LogEntry.Trigram == trigram);
                sec.Text = $"Number of errors: {logEntriesTrigram.Count()} ({MaxMessages} max displayed)";

                int messagesPosted = 1;
                var facts          = new List <Fact>();
                foreach (var log in logEntriesTrigram)
                {
                    var logEntry = log.LogEntry;

                    List <Fact> fctsLog;
                    if (trigram != TeamsQueueNotification.NoTrigram)
                    {
                        fctsLog = new List <Fact>
                        {
                            new Fact {
                                Name = $"_____", Value = ""
                            },
                            new Fact {
                                Name = $"{nameof(logEntry.Date)}", Value = logEntry?.Date
                            },
                            new Fact {
                                Name = $"Original message:", Value = logEntry?.Message
                            },
                            new Fact {
                                Name = $"Error message:", Value = log.ErrorMessage
                            }
                        };
                    }
                    else
                    {
                        fctsLog = new List <Fact>
                        {
                            new Fact {
                                Name = $"_____", Value = ""
                            },
                            new Fact {
                                Name = $"Error message:", Value = log.ErrorMessage
                            }
                        };
                    }
                    facts.AddRange(fctsLog);
                    if (messagesPosted++ >= MaxMessages)
                    {
                        break;
                    }
                }
                ;
                sec.Facts = facts;
                sections.Add(sec);
                card.Sections = sections;
                if (trigram != TeamsQueueNotification.NoTrigram)
                {
                    var action =

                        new OpenUriAction
                    {
                        Type    = ActionType.OpenUri,
                        Name    = $"View {trigram} on Kibana",
                        Targets = new List <Target> {
                            new Target {
                                OS = TargetOs.Default, Uri = string.Format(Environment.GetEnvironmentVariable(DefaultKibanaUrl), trigram)
                            }
                        }
                    };

                    actions.Add(action);
                }
            }
            card.Actions = actions;
            return(card);
        }
示例#3
0
        public void SendNotification(object sender, EventArgs args)
        {
            var sitecoreArgs = args as Sitecore.Events.SitecoreEventArgs;

            if (!(sitecoreArgs?.Parameters[0] is Publisher publisher))
            {
                return;
            }

            var rootItem    = publisher.Options.RootItem;
            var publishJobs = Sitecore.Jobs.JobManager.GetJobs().Where(x => x.Name.Equals(publisher.GetJobName())).ToList();
            var site        = _siteResolver.ResolveSite(rootItem);
            var hostUrl     = "https://" + (site != null ? site.HostName : $"{HttpContext.Current?.Request.Url.Scheme}://{HttpContext.Current?.Request.Url.Host}");
            var ItemId      = HttpUtility.UrlEncode(rootItem.ID.ToString());

            foreach (var j in publishJobs.Where(p => p.Handle.IsLocal))
            {
                var teamsMessage = new MessageCard();
                var facts        = new List <Fact> {
                    new Fact {
                        Name = "User: "******"{messageSplit[0]}: ", Value = messageSplit[1]
                    };
                    facts.Add(fact);
                }

                var section = new Section
                {
                    ActivityTitle    = $"{j.Name} Done!",
                    ActivitySubtitle = $"Version: {rootItem.Version}, Language: {rootItem.Language}, Target DB: {publisher.Options.TargetDatabase}. Subitems: {publisher.Options.Deep}",
                    ActivityImage    = "https://sitecorecdn.azureedge.net/-/media/sitecoresite/images/global/logo/favicon.png",
                    Facts            = facts
                };

                var sitecoreRedirectAction = new OpenUriAction {
                    Type = ActionType.OpenUri, Name = "Go to Sitecore", Targets = new [] { new Target {
                                                                                               OS = TargetOs.Default, Uri = $"{hostUrl}/sitecore/shell/sitecore/content/Applications/Content Editor.aspx?id={ItemId}&amp;la={rootItem.Language}&amp;fo={ItemId}"
                                                                                           } }
                };
                var publicRedirectAction = new OpenUriAction {
                    Type = ActionType.OpenUri, Name = "Go to website", Targets = new [] { new Target {
                                                                                              OS = TargetOs.Default, Uri = $"{hostUrl}/?sc_itemid={ItemId}&amp;sc_mode=normal&amp;sc_lang={rootItem.Language}"
                                                                                          } }
                };

                teamsMessage.Context    = "https://schema.org/extensions";
                teamsMessage.Type       = "MessageCard";
                teamsMessage.Summary    = "Publish Notification";
                teamsMessage.ThemeColor = "008000";
                teamsMessage.Sections   = new [] { section };
                teamsMessage.Actions    = new [] { sitecoreRedirectAction, publicRedirectAction };

                _msTeamsConnectorService.ProcessAsync(teamsMessage).ConfigureAwait(false).GetAwaiter().GetResult();
            }
        }