MCPcopy
hub / github.com/apache/devlake / extractIssues

Function extractIssues

backend/plugins/jira/tasks/issue_extractor.go:108–251  ·  view source on GitHub ↗
(data *JiraTaskData, mappings *typeMappings, apiIssue *apiv2models.Issue, row *api.RawData, userFieldMaps map[string]struct{})

Source from the content-addressed store, hash-verified

106}
107
108func extractIssues(data *JiraTaskData, mappings *typeMappings, apiIssue *apiv2models.Issue, row *api.RawData, userFieldMaps map[string]struct{}) ([]interface{}, errors.Error) {
109 err := apiIssue.SetAllFields(row.Data)
110 if err != nil {
111 return nil, err
112 }
113 var results []interface{}
114 // if the field `created` is nil, ignore it
115 if apiIssue.Fields.Created == nil {
116 return results, nil
117 }
118 sprints, issue, comments, worklogs, changelogs, changelogItems, users := apiIssue.ExtractEntities(data.Options.ConnectionId, userFieldMaps)
119 for _, sprintId := range sprints {
120 sprintIssue := &models.JiraSprintIssue{
121 ConnectionId: data.Options.ConnectionId,
122 SprintId: sprintId,
123 IssueId: issue.IssueId,
124 IssueCreatedDate: &issue.Created,
125 ResolutionDate: issue.ResolutionDate,
126 }
127 results = append(results, sprintIssue)
128 }
129 if issue.ResolutionDate != nil {
130 temp := uint(issue.ResolutionDate.Unix()-issue.Created.Unix()) / 60
131 issue.LeadTimeMinutes = &temp
132 }
133 if data.Options.ScopeConfig != nil && data.Options.ScopeConfig.StoryPointField != "" {
134 unknownStoryPoint := apiIssue.Fields.AllFields[data.Options.ScopeConfig.StoryPointField]
135 switch sp := unknownStoryPoint.(type) {
136 case string:
137 // string, try to parse
138 temp, _ := strconv.ParseFloat(sp, 32)
139 issue.StoryPoint = &temp
140 case nil:
141 default:
142 // not string, convert to float64, ignore it if failed
143 temp, _ := unknownStoryPoint.(float64)
144 issue.StoryPoint = &temp
145 }
146
147 }
148 // default due date field is "duedate"
149 dueDateField := "duedate"
150 if data.Options.ScopeConfig != nil && data.Options.ScopeConfig.DueDateField != "" {
151 dueDateField = data.Options.ScopeConfig.DueDateField
152 }
153 // using location of issues.Created
154 loc := issue.Created.Location()
155 issue.DueDate, _ = utils.GetTimeFieldFromMap(apiIssue.Fields.AllFields, dueDateField, loc)
156 // code in next line will set issue.Type to issueType.Name
157 issue.Type = mappings.TypeIdMappings[issue.Type]
158 issue.StdType = mappings.StdTypeMappings[issue.Type]
159 if issue.StdType == "" {
160 issue.StdType = strings.ToUpper(issue.Type)
161 }
162 issue.StdStatus = getStdStatus(issue.StatusKey)
163 if value, ok := mappings.StandardStatusMappings[issue.Type][issue.StatusKey]; ok {
164 issue.StdStatus = value.StandardStatus
165 }

Callers 2

ExtractEpicsFunction · 0.85
ExtractIssuesFunction · 0.85

Calls 3

getStdStatusFunction · 0.85
ExtractEntitiesMethod · 0.80
SetAllFieldsMethod · 0.45

Tested by

no test coverage detected