private async Task <bool> PostMessage(Event <LogEventData> evt) { if (evt == null) { return(false); } if ((LogEventLevelList?.Count ?? 0) > 0 && !LogEventLevelList.Contains(evt.Data.Level)) { return(false); } if (!(Channel ?? "").HasValue()) { return(false); } var apiBaseUrl = RocketApiUrl.NormalizeHostOrFQDN(); var client = new JsonRestClient(apiBaseUrl); client.DoNotAuthorize = true; // Get the auth ticket _step = "Will authenticate: " + client.GetUriForResource("login"); var authTicket = await client.PostAsync <RocketAuthTicket, RocketAuthPayload>("login", new RocketAuthPayload { username = Username, password = Password }) .ConfigureAwait(false); if (authTicket?.data == null || authTicket.status != "success") { var e = new ApplicationException("Can not authenticate Rocket.Chat with the specified username/passwod"); Log.Error(e, "Rocket.Chat authentication failure"); return(false); } _step = "Done authenticate"; var renderedMessage = (evt?.Data?.RenderedMessage ?? ""); var summary = renderedMessage.CleanCRLF().TruncateWithEllipsis(255); var channel = Channel.StartsWith("#") ? Channel.Trim() : $"#{Channel.Trim()}"; var seqUrl = SeqUrl.NormalizeHostOrFQDN(); var eventUrl = $"{seqUrl}#/events?filter=@Id%20%3D%20'{evt.Id}'"; var propValuesInTitle = BuildPropertyValuesString(evt); // Create the rocket message var rocketMessage = new RocketChatMessage { channel = channel, text = $"[ View Event ]({eventUrl}) {(propValuesInTitle.HasValue() ? propValuesInTitle + " : " : "")}{summary}" }; // Attach the rendered message if (renderedMessage.HasValue()) { var attachment = new RocketChatMessageAttachment { color = RocketChatMessageAttachment.ColorByLevel(evt.Data.Level), title = "Message", //title_link = eventUrl, collapsed = true, }; var field = new RocketChatMessageAttachmentField { @short = false, value = renderedMessage, }; attachment.fields = attachment.fields ?? new List <RocketChatMessageAttachmentField>(); attachment.fields.Add(field); rocketMessage.attachments = rocketMessage.attachments ?? new List <RocketChatMessageAttachment>(); rocketMessage.attachments.Add(attachment); } // If event has exception attach that Exception if (AttachException && (evt?.Data?.Exception ?? "").HasValue()) { var attachment = new RocketChatMessageAttachment { color = RocketChatMessageAttachment.ColorByLevel(LogEventLevel.Fatal), title = "Exception", //title_link = eventUrl, collapsed = true, }; var field = new RocketChatMessageAttachmentField { @short = false, value = evt.Data.Exception, }; attachment.fields = attachment.fields ?? new List <RocketChatMessageAttachmentField>(); attachment.fields.Add(field); rocketMessage.attachments = rocketMessage.attachments ?? new List <RocketChatMessageAttachment>(); rocketMessage.attachments.Add(attachment); } // Attach structured properties if (AttachProperties && (evt?.Data?.Properties?.Count ?? 0) > 0) { var attachment = new RocketChatMessageAttachment { title = "Additional Data", //title_link = eventUrl, collapsed = true }; var allProps = evt.Data.Properties; var additionPropList = AdditionalPropertiesList; foreach (var kvp in allProps) { if (additionPropList?.Count > 0 && !additionPropList.Contains(kvp.Key)) { continue; } var field = new RocketChatMessageAttachmentField { @short = false, title = kvp.Key, value = kvp.Value != null?JsonConvert.SerializeObject(kvp.Value) : "" }; attachment.fields = attachment.fields ?? new List <RocketChatMessageAttachmentField>(); attachment.fields.Add(field); } rocketMessage.attachments = rocketMessage.attachments ?? new List <RocketChatMessageAttachment>(); rocketMessage.attachments.Add(attachment); } // Add auth token data to request header Dictionary <string, string> authHeaders = new Dictionary <string, string> { ["X-User-Id"] = authTicket.data.userId, ["X-Auth-Token"] = authTicket.data.authToken, }; _step = "Will post message"; // Post the message var postMessageResult = await client.PostAsync <RocketChatPostMessageResult, RocketChatMessage>("chat.postMessage", rocketMessage, authHeaders).ConfigureAwait(false); if (postMessageResult == null || !postMessageResult.success) { var e = new ApplicationException("Can not post message to Rocket.Chat"); var error = (postMessageResult?.error ?? ""); Log.Error(e, "Rocket.Chat post message failure : {error}", error); return(false); } _step = "Done post message"; return(true); }
private async Task <bool> CreateIssue(Event <LogEventData> evt) { if (evt == null) { return(false); } if ((LogEventLevelList?.Count ?? 0) > 0 && !LogEventLevelList.Contains(evt.Data.Level)) { return(false); } if (!(GitLabProjectName ?? "").HasValue() || !(GitLabPrivateToken ?? "").HasValue()) { return(false); } object projectNamePropValue = null; evt?.Data?.Properties?.TryGetValue(GitLabProjectName, out projectNamePropValue); var projectName = projectNamePropValue?.ToString() ?? GitLabProjectName; if (!(projectName ?? "").HasValue()) { return(false); } var apiBaseUrl = GitLabRestApiUrl.NormalizeHostOrFQDN(); var client = new JsonRestClient(apiBaseUrl); client.DoNotAuthorize = true; // Add private token data to request header Dictionary <string, string> headers = new Dictionary <string, string> { ["PRIVATE-TOKEN"] = GitLabPrivateToken }; _step = $"Will get project id for {projectName}"; var searchResult = await client.GetAsync <List <IdDto> >($"projects/search/{projectName}", headers) .ConfigureAwait(false); var projectId = searchResult.FirstOrDefault(); if (projectId == null) { Log.Error($"Project not found {projectName}"); return(false); } var renderedMessage = (evt?.Data?.RenderedMessage ?? ""); var summary = renderedMessage.CleanCRLF().TruncateWithEllipsis(255); _step = $"DONE get project id for {projectName}"; var seqUrl = SeqUrl.NormalizeHostOrFQDN(); var eventUrl = $"{seqUrl}#/events?filter=@Id%20%3D%20'{evt.Id}'"; var propValuesInTitle = BuildPropertyValuesString(evt, TitlePropertiesList); var labels = BuildPropertyValuesString(evt, LabelPropertiesList, ",", (AddLogLevelAsLabel ? new string[1] { evt.Data.Level.ToString() } : null)); StringBuilder sb = new StringBuilder(); // Attach the rendered message if (renderedMessage.HasValue()) { sb.AppendLine($"**Message** [View Event]({eventUrl})"); sb.AppendLine("```"); sb.AppendLine(renderedMessage); sb.AppendLine("```"); sb.AppendLine(""); } // If event has exception attach that Exception if (AttachException && (evt?.Data?.Exception ?? "").HasValue()) { sb.AppendLine("**Exception**"); sb.AppendLine("```"); sb.AppendLine(evt?.Data?.Exception); sb.AppendLine("```"); sb.AppendLine(""); } // Attach structured properties if (AttachProperties && (evt?.Data?.Properties?.Count ?? 0) > 0) { sb.AppendLine("**Properties**"); var allProps = evt.Data.Properties; var additionPropList = AdditionalPropertiesList; sb.AppendLine("```"); foreach (var kvp in allProps) { if (additionPropList?.Count > 0 && !additionPropList.Contains(kvp.Key)) { continue; } sb.AppendLine($"* {kvp.Key} : {(kvp.Value != null ? JsonConvert.SerializeObject(kvp.Value) : "")}");; } sb.AppendLine("```"); sb.AppendLine(""); } // Create the issue var gitLabIssue = new NewIssuePayload { id = projectId.id, title = $"{(propValuesInTitle.HasValue() ? propValuesInTitle + " : " : "")}{summary}", description = sb.ToString(), labels = labels }; _step = $"Will create issue for {projectId.id} -> {projectName}"; // Post the message var createIssueResult = await client.PostAsync <NewIssueResponsePayload, NewIssuePayload>($"projects/{projectId.id}/issues", gitLabIssue, headers) .ConfigureAwait(false); if (createIssueResult == null || !createIssueResult.id.HasValue) { var e = new ApplicationException($"Can not create issue for project {projectId.id} -> {projectName}"); var error = (createIssueResult?.error ?? ""); Log.Error(e, "GitLab create issue failure : {error}", error); return(false); } _step = $"DONE create issue {projectId.id} -> {projectName}"; return(true); }
private async Task <bool> CreateIssue(Event <LogEventData> evt) { if (evt == null) { return(false); } if ((LogEventLevelList?.Count ?? 0) > 0 && !LogEventLevelList.Contains(evt.Data.Level)) { return(false); } if (!(GitHubRepoName ?? "").HasValue() || !(GitHubRepoOwnerName ?? "").HasValue() || !(GitHubUsername ?? "").HasValue() ) { return(false); } Uri entUri = null; if ((GitHubEntUrl ?? "").HasValue() && !Uri.TryCreate(GitHubEntUrl, UriKind.RelativeOrAbsolute, out entUri)) { return(false); } var phv = new ProductHeaderValue("SeqApp.GitHub"); if (entUri != null) { _step = $"Will probe GitHub enterprise {entUri}"; var probe = new EnterpriseProbe(phv); var result = await probe.Probe(entUri); _step = $"DONE probe GitHub enterprise {entUri}"; if (result != EnterpriseProbeResult.Ok) { Log.Error("Probe enterprise GitHub failed with result {result}", result); return(false); } } object repoNamePropValue = null; evt?.Data?.Properties?.TryGetValue(GitHubRepoName, out repoNamePropValue); var repoName = repoNamePropValue?.ToString() ?? GitHubRepoName; if (!(repoName ?? "").HasValue()) { return(false); } object repoOwnerNamePropValue = null; evt?.Data?.Properties?.TryGetValue(GitHubRepoOwnerName, out repoOwnerNamePropValue); var repoOwnerName = repoOwnerNamePropValue?.ToString() ?? GitHubRepoOwnerName; if (!(repoOwnerName ?? "").HasValue()) { return(false); } var creds = (GitHubPassword ?? "").HasValue() ? new Credentials(GitHubUsername, GitHubPassword) : new Credentials(GitHubUsername); var client = entUri == null ? new GitHubClient(phv) : new GitHubClient(phv, entUri); client.Credentials = creds; var renderedMessage = (evt?.Data?.RenderedMessage ?? ""); var summary = renderedMessage.CleanCRLF().TruncateWithEllipsis(255); var seqUrl = SeqUrl.NormalizeHostOrFQDN(); var eventUrl = $"{seqUrl}#/events?filter=@Id%20%3D%20'{evt.Id}'"; var propValuesInTitle = BuildPropertyValuesString(evt, TitlePropertiesList); StringBuilder sb = new StringBuilder(); // Attach the rendered message if (renderedMessage.HasValue()) { sb.AppendLine($"**Message** [View Event]({eventUrl})"); sb.AppendLine("```"); sb.AppendLine(renderedMessage); sb.AppendLine("```"); sb.AppendLine(""); } // If event has exception attach that Exception if (AttachException && (evt?.Data?.Exception ?? "").HasValue()) { sb.AppendLine("**Exception**"); sb.AppendLine("```"); sb.AppendLine(evt?.Data?.Exception); sb.AppendLine("```"); sb.AppendLine(""); } // Attach structured properties if (AttachProperties && (evt?.Data?.Properties?.Count ?? 0) > 0) { sb.AppendLine("**Properties**"); var allProps = evt.Data.Properties; var additionPropList = AdditionalPropertiesList; sb.AppendLine("```"); foreach (var kvp in allProps) { if (additionPropList?.Count > 0 && !additionPropList.Contains(kvp.Key)) { continue; } sb.AppendLine($"* {kvp.Key} : {(kvp.Value != null ? JsonConvert.SerializeObject(kvp.Value) : "")}");; } sb.AppendLine("```"); sb.AppendLine(""); } // Create the issue var title = $"{(propValuesInTitle.HasValue() ? propValuesInTitle + " : " : "")}{summary}"; var newIssue = new NewIssue(title) { Body = sb.ToString(), }; var labels = GetPropertyValuesAsList(evt, LabelPropertiesList, ",", (AddLogLevelAsLabel ? new string[1] { evt.Data.Level.ToString() } : null)); if (labels?.Count > 0) { labels.ForEach(lb => newIssue.Labels.Add(lb)); } _step = $"Will create issue for {GitHubRepoOwnerName}/{GitHubRepoName}"; var createdIssue = await client.Issue.Create(GitHubRepoOwnerName, GitHubRepoName, newIssue).ConfigureAwait(false); _step = $"DONE create issue for {GitHubRepoOwnerName}/{GitHubRepoName}"; return(true); }