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); }
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}&la={rootItem.Language}&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}&sc_mode=normal&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(); } }