public async Task <Crate> ProcessExternalEvents(string curExternalEventPayload)
        {
            var issue            = JsonConvert.DeserializeObject <Models.JiraIssueEvent>(curExternalEventPayload);
            var atlassianEventCM = new JiraIssueWithCustomFieldsCM
            {
                JiraIssue = new AtlassianIssueEvent
                {
                    IssueKey      = issue.Issue.Key,
                    IssueId       = issue.Issue.Id,
                    UserId        = issue.User.Email,
                    Time          = issue.Timestamp,
                    ChangedAspect = issue.Issue.Fields.Project.Name,
                    EventType     = issue.IssueEventTypeName,
                    IssueEvent    = new Fr8.Infrastructure.Data.Manifests.JiraIssueEvent
                    {
                        IssueAssigneeName         = issue.Issue.Fields.Assignee.DisplayName,
                        IssueType                 = issue.Issue.Fields.IssueType.Name,
                        IssueAssigneeEmailAddress = issue.Issue.Fields.Assignee.EmailAddress,
                        IssuePriority             = issue.Issue.Fields.Priority.Name,
                        IssueResolution           = issue.Issue.Fields.Resolution,
                        IssueStatus               = issue.Issue.Fields.Status.Name,
                        IssueSummary              = issue.Issue.Fields.Summary,
                        ProjectName               = issue.Issue.Fields.Project.Name,
                        Timestamp                 = issue.Timestamp,
                        UserName     = issue.User.DisplayName,
                        WebhookEvent = issue.WebhookEvent,
                        Description  = issue.Issue.Fields.Description
                    }
                },
                CustomFields = null
            };
            var eventReportContent = new EventReportCM
            {
                EventNames        = string.Join(",", atlassianEventCM.JiraIssue.ChangedAspect),
                ExternalAccountId = atlassianEventCM.JiraIssue.UserId,
                EventPayload      = new CrateStorage(Crate.FromContent("Atlassian Issue Event", atlassianEventCM)),
                Manufacturer      = "Atlassian"
            };

            var curEventReport = Crate.FromContent("Atlassian Issue Event", eventReportContent);

            return(curEventReport);
        }
예제 #2
0
        public override async Task Run()
        {
            var eventCrate = Payload.CrateContentsOfType <EventReportCM>(x => x.Label == "Atlassian Issue Event").FirstOrDefault();

            if (eventCrate == null)
            {
                RequestPlanExecutionTermination("Atlassian event payload was not found");
                return;
            }

            var atlassianEventPayload = eventCrate.EventPayload.CrateContentsOfType <JiraIssueWithCustomFieldsCM>()
                                        .FirstOrDefault(e => e.JiraIssue.ChangedAspect.Contains(ActivityUI.ProjectSelector.selectedKey));

            if (atlassianEventPayload == null)
            {
                RequestPlanExecutionTermination("Atlassian event payload was not found");
                return;
            }
            var jiraIssueWithCustomFields = atlassianEventPayload;
            JiraIssueWithCustomFieldsCM jiraIssueWithCustomFieldsCM = new JiraIssueWithCustomFieldsCM();

            jiraIssueWithCustomFieldsCM.JiraIssue = jiraIssueWithCustomFields.JiraIssue;
            var jira  = CreateJiraRestClient();
            var issue = jira.GetIssue(jiraIssueWithCustomFields.JiraIssue.IssueKey);

            var jiraComments = issue.GetComments();

            // add custom fields to the manifest
            var customFields = new JiraCustomField[issue.CustomFields.Count];

            for (var i = 0; i < issue.CustomFields.Count; i++)
            {
                var customField = new JiraCustomField();
                customField.Key = issue.CustomFields[i].Name;
                for (var j = 0; j < issue.CustomFields[i].Values.Length; j++)
                {
                    customField.Values    = new string[issue.CustomFields[i].Values.Length];
                    customField.Values[j] = issue.CustomFields[i].Values[j];
                }
                customFields[i] = customField;
            }

            // add comments to the manifest
            var comments = new JiraComment[jiraComments.Count];

            for (var i = 0; i < jiraComments.Count; i++)
            {
                var comment = new JiraComment();
                comment.Author       = jiraComments[i].Author;
                comment.Body         = jiraComments[i].Body;
                comment.CreatedDate  = jiraComments[i].CreatedDate;
                comment.GroupLevel   = jiraComments[i].GroupLevel;
                comment.Id           = jiraComments[i].Id;
                comment.RoleLevel    = jiraComments[i].RoleLevel;
                comment.UpdateAuthor = jiraComments[i].UpdateAuthor;
                comment.UpdatedDate  = jiraComments[i].UpdatedDate;
                comments[i]          = comment;
            }
            jiraIssueWithCustomFieldsCM.CustomFields = customFields;
            jiraIssueWithCustomFieldsCM.Comments     = comments;

            // payload in the type of JiraIssueWithCustomFieldsCM (that includes custom fields of the issue and comments)
            Payload.Add(Crate <JiraIssueWithCustomFieldsCM> .FromContent(RuntimeCrateLabel, jiraIssueWithCustomFieldsCM));

            // payload in the type of StandardPayloadDataCM (does not include custom fields and comments)
            Payload.Add(Crate <StandardPayloadDataCM> .FromContent(RuntimeCrateLabel, new StandardPayloadDataCM(
                                                                       new KeyValueDTO(IssueKey, jiraIssueWithCustomFields.JiraIssue.IssueKey),
                                                                       new KeyValueDTO(ProjectName, jiraIssueWithCustomFields.JiraIssue.IssueEvent.ProjectName),
                                                                       new KeyValueDTO(IssueResolution, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssueResolution),
                                                                       new KeyValueDTO(IssuePriority, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssuePriority),
                                                                       new KeyValueDTO(IssueAssignee, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssueAssigneeName),
                                                                       new KeyValueDTO(IssueSummary, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssueSummary),
                                                                       new KeyValueDTO(IssueStatus, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssueStatus),
                                                                       new KeyValueDTO(IssueDescription, jiraIssueWithCustomFields.JiraIssue.IssueEvent.Description),
                                                                       new KeyValueDTO(IssueKey, jiraIssueWithCustomFields.JiraIssue.IssueKey),
                                                                       new KeyValueDTO(EventType, jiraIssueWithCustomFields.JiraIssue.EventType)
                                                                       )));
        }