This is an automated email from the ASF dual-hosted git repository.
abeizn pushed a commit to branch fix#6801
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/fix#6801 by this push:
new 6fa3aa3e9 fix: make some plugin time filed default null
6fa3aa3e9 is described below
commit 6fa3aa3e936436c4990321c2dfe99310435ca82f
Author: abeizn <[email protected]>
AuthorDate: Mon Jan 15 15:55:45 2024 +0800
fix: make some plugin time filed default null
---
backend/core/models/domainlayer/ticket/issue.go | 14 ++---
...0240115_modify_issue_leadtimeminutes_to_uint.go | 68 ++++++++++++++++++++++
...leds_sort.go => 20240116_modify_fileds_sort.go} | 6 +-
backend/core/models/migrationscripts/register.go | 1 +
backend/plugins/bitbucket/models/issue.go | 5 +-
backend/plugins/bitbucket/tasks/issue_convertor.go | 7 ++-
backend/plugins/gitee/models/issue.go | 5 +-
backend/plugins/gitee/tasks/issue_convertor.go | 2 +-
backend/plugins/gitee/tasks/issue_extractor.go | 3 +-
backend/plugins/github/models/issue.go | 2 +-
backend/plugins/github/tasks/issue_convertor.go | 2 +-
backend/plugins/github/tasks/issue_extractor.go | 3 +-
.../github_graphql/tasks/issue_extractor.go | 3 +-
backend/plugins/gitlab/models/issue.go | 9 +--
backend/plugins/gitlab/tasks/issue_convertor.go | 2 +-
backend/plugins/gitlab/tasks/issue_extractor.go | 7 ++-
backend/plugins/jira/models/issue.go | 8 +--
backend/plugins/jira/tasks/apiv2models/issue.go | 8 ++-
backend/plugins/jira/tasks/issue_convertor.go | 2 +-
backend/plugins/jira/tasks/issue_extractor.go | 9 ++-
.../plugins/opsgenie/tasks/incidents_converter.go | 7 ++-
.../plugins/pagerduty/tasks/incidents_converter.go | 7 ++-
backend/plugins/tapd/tasks/bug_converter.go | 10 ++--
backend/plugins/tapd/tasks/story_converter.go | 9 ++-
backend/plugins/tapd/tasks/task_converter.go | 10 ++--
backend/plugins/teambition/tasks/task_converter.go | 18 +++---
backend/plugins/webhook/api/incident.go | 10 ++--
backend/plugins/zentao/tasks/bug_convertor.go | 3 +-
backend/plugins/zentao/tasks/story_convertor.go | 9 +--
backend/plugins/zentao/tasks/task_convertor.go | 12 ++--
30 files changed, 182 insertions(+), 79 deletions(-)
diff --git a/backend/core/models/domainlayer/ticket/issue.go
b/backend/core/models/domainlayer/ticket/issue.go
index 1ef02d4a6..8c8a9c067 100644
--- a/backend/core/models/domainlayer/ticket/issue.go
+++ b/backend/core/models/domainlayer/ticket/issue.go
@@ -35,20 +35,20 @@ type Issue struct {
OriginalType string `gorm:"type:varchar(500)"`
Status string `gorm:"type:varchar(100)"`
OriginalStatus string `gorm:"type:varchar(100)"`
- StoryPoint float64
+ StoryPoint *float64
ResolutionDate *time.Time
CreatedDate *time.Time
UpdatedDate *time.Time
- LeadTimeMinutes int64
- ParentIssueId string `gorm:"type:varchar(255)"`
- Priority string `gorm:"type:varchar(255)"`
- OriginalEstimateMinutes int64
- TimeSpentMinutes int64
- TimeRemainingMinutes int64
+ LeadTimeMinutes *uint
+ OriginalEstimateMinutes *int64
+ TimeSpentMinutes *int64
+ TimeRemainingMinutes *int64
CreatorId string `gorm:"type:varchar(255)"`
CreatorName string `gorm:"type:varchar(255)"`
AssigneeId string `gorm:"type:varchar(255)"`
AssigneeName string `gorm:"type:varchar(255)"`
+ ParentIssueId string `gorm:"type:varchar(255)"`
+ Priority string `gorm:"type:varchar(255)"`
Severity string `gorm:"type:varchar(255)"`
Component string `gorm:"type:varchar(255)"`
OriginalProject string `gorm:"type:varchar(255)"`
diff --git
a/backend/core/models/migrationscripts/20240115_modify_issue_leadtimeminutes_to_uint.go
b/backend/core/models/migrationscripts/20240115_modify_issue_leadtimeminutes_to_uint.go
new file mode 100644
index 000000000..77c02d193
--- /dev/null
+++
b/backend/core/models/migrationscripts/20240115_modify_issue_leadtimeminutes_to_uint.go
@@ -0,0 +1,68 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package migrationscripts
+
+import (
+ "github.com/apache/incubator-devlake/core/context"
+ "github.com/apache/incubator-devlake/core/dal"
+ "github.com/apache/incubator-devlake/core/errors"
+ "github.com/apache/incubator-devlake/core/plugin"
+ "github.com/apache/incubator-devlake/helpers/migrationhelper"
+)
+
+var _ plugin.MigrationScript = (*modifyIssueLeadTimeMinutesToUint)(nil)
+
+type issue20240115 struct {
+ LeadTimeMinutes *uint
+}
+
+func (issue20240115) TableName() string {
+ return "issues"
+}
+
+type modifyIssueLeadTimeMinutesToUint struct{}
+
+func (u *modifyIssueLeadTimeMinutesToUint) Up(basicRes context.BasicRes)
errors.Error {
+ db := basicRes.GetDal()
+ if err := migrationhelper.ChangeColumnsType[issue20240115](
+ basicRes,
+ u,
+ issue20240115{}.TableName(),
+ []string{"lead_time_minutes"},
+ func(tmpColumnParams []interface{}) errors.Error {
+ return db.UpdateColumn(
+ &issue20240115{},
+ "lead_time_minutes",
+ dal.DalClause{Expr: " ? ", Params:
tmpColumnParams},
+ dal.Where("? != 0", tmpColumnParams...),
+ )
+ },
+ ); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (*modifyIssueLeadTimeMinutesToUint) Version() uint64 {
+ return 20240115170000
+}
+
+func (*modifyIssueLeadTimeMinutesToUint) Name() string {
+ return "modify issues lead_time_minutes to *uint"
+}
diff --git
a/backend/core/models/migrationscripts/20240108_modify_fileds_sort.go
b/backend/core/models/migrationscripts/20240116_modify_fileds_sort.go
similarity index 97%
rename from backend/core/models/migrationscripts/20240108_modify_fileds_sort.go
rename to backend/core/models/migrationscripts/20240116_modify_fileds_sort.go
index 27f16a2cf..c2359f891 100644
--- a/backend/core/models/migrationscripts/20240108_modify_fileds_sort.go
+++ b/backend/core/models/migrationscripts/20240116_modify_fileds_sort.go
@@ -46,6 +46,10 @@ func (*modfiyFieldsSort) Up(baseRes context.BasicRes)
errors.Error {
if err != nil {
return err
}
+ err = db.Exec("alter table issues modify lead_time_minutes
bigint after updated_date;")
+ if err != nil {
+ return err
+ }
// pull_requests
err = db.Exec("alter table pull_requests modify base_ref
varchar(255) after base_repo_id;")
if err != nil {
@@ -180,7 +184,7 @@ func (*modfiyFieldsSort) Up(baseRes context.BasicRes)
errors.Error {
}
func (*modfiyFieldsSort) Version() uint64 {
- return 20240108000008
+ return 20240116000011
}
func (*modfiyFieldsSort) Name() string {
diff --git a/backend/core/models/migrationscripts/register.go
b/backend/core/models/migrationscripts/register.go
index 13a9192ff..74377d7d0 100644
--- a/backend/core/models/migrationscripts/register.go
+++ b/backend/core/models/migrationscripts/register.go
@@ -104,5 +104,6 @@ func All() []plugin.MigrationScript {
new(modifyIssueOriginalTypeLength),
new(addCommitMsgtoPipelineCommit),
new(modfiyFieldsSort),
+ new(modifyIssueLeadTimeMinutesToUint),
}
}
diff --git a/backend/plugins/bitbucket/models/issue.go
b/backend/plugins/bitbucket/models/issue.go
index 4032d3505..c4f0d20fb 100644
--- a/backend/plugins/bitbucket/models/issue.go
+++ b/backend/plugins/bitbucket/models/issue.go
@@ -18,8 +18,9 @@ limitations under the License.
package models
import (
- "github.com/apache/incubator-devlake/core/models/common"
"time"
+
+ "github.com/apache/incubator-devlake/core/models/common"
)
type BitbucketIssue struct {
@@ -38,7 +39,7 @@ type BitbucketIssue struct {
AssigneeId string `gorm:"type:varchar(255)"`
AssigneeName string `gorm:"type:varchar(255)"`
MilestoneId int `gorm:"index"`
- LeadTimeMinutes uint
+ LeadTimeMinutes *uint
Url string `gorm:"type:varchar(255)"`
ClosedAt *time.Time
BitbucketCreatedAt time.Time
diff --git a/backend/plugins/bitbucket/tasks/issue_convertor.go
b/backend/plugins/bitbucket/tasks/issue_convertor.go
index 04c4f599b..3c3455fbb 100644
--- a/backend/plugins/bitbucket/tasks/issue_convertor.go
+++ b/backend/plugins/bitbucket/tasks/issue_convertor.go
@@ -18,6 +18,9 @@ limitations under the License.
package tasks
import (
+ "reflect"
+ "strconv"
+
"github.com/apache/incubator-devlake/core/dal"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/models/domainlayer"
@@ -26,8 +29,6 @@ import (
plugin "github.com/apache/incubator-devlake/core/plugin"
"github.com/apache/incubator-devlake/helpers/pluginhelper/api"
"github.com/apache/incubator-devlake/plugins/bitbucket/models"
- "reflect"
- "strconv"
)
var ConvertIssuesMeta = plugin.SubTaskMeta{
@@ -72,8 +73,8 @@ func ConvertIssues(taskCtx plugin.SubTaskContext)
errors.Error {
Type: issue.Type,
Status: issue.StdState,
OriginalStatus: issue.State,
- LeadTimeMinutes: int64(issue.LeadTimeMinutes),
Url: issue.Url,
+ LeadTimeMinutes: issue.LeadTimeMinutes,
CreatedDate: &issue.BitbucketCreatedAt,
UpdatedDate: &issue.BitbucketUpdatedAt,
ResolutionDate: issue.ClosedAt,
diff --git a/backend/plugins/gitee/models/issue.go
b/backend/plugins/gitee/models/issue.go
index 3be7ab84b..0753f46f1 100644
--- a/backend/plugins/gitee/models/issue.go
+++ b/backend/plugins/gitee/models/issue.go
@@ -18,8 +18,9 @@ limitations under the License.
package models
import (
- "github.com/apache/incubator-devlake/core/models/common"
"time"
+
+ "github.com/apache/incubator-devlake/core/models/common"
)
type GiteeIssue struct {
@@ -37,7 +38,7 @@ type GiteeIssue struct {
AuthorName string `gorm:"type:varchar(255)"`
AssigneeId int
AssigneeName string `gorm:"type:varchar(255)"`
- LeadTimeMinutes uint
+ LeadTimeMinutes *uint
Url string `gorm:"type:varchar(255)"`
ClosedAt *time.Time
GiteeCreatedAt time.Time
diff --git a/backend/plugins/gitee/tasks/issue_convertor.go
b/backend/plugins/gitee/tasks/issue_convertor.go
index 8cf0f86d3..0662c3e97 100644
--- a/backend/plugins/gitee/tasks/issue_convertor.go
+++ b/backend/plugins/gitee/tasks/issue_convertor.go
@@ -73,7 +73,7 @@ func ConvertIssues(taskCtx plugin.SubTaskContext)
errors.Error {
Type: issue.Type,
AssigneeName: issue.AssigneeName,
CreatorName: issue.AuthorName,
- LeadTimeMinutes: int64(issue.LeadTimeMinutes),
+ LeadTimeMinutes: issue.LeadTimeMinutes,
Url: issue.Url,
CreatedDate: &issue.GiteeCreatedAt,
UpdatedDate: &issue.GiteeUpdatedAt,
diff --git a/backend/plugins/gitee/tasks/issue_extractor.go
b/backend/plugins/gitee/tasks/issue_extractor.go
index 5f20ec8fa..93ee490b3 100644
--- a/backend/plugins/gitee/tasks/issue_extractor.go
+++ b/backend/plugins/gitee/tasks/issue_extractor.go
@@ -231,7 +231,8 @@ func convertGiteeIssue(issue *IssuesResponse, connectionId
uint64, repositoryId
giteeIssue.AuthorName = issue.User.Login
}
if issue.FinishAt != nil {
- giteeIssue.LeadTimeMinutes =
uint(issue.FinishAt.ToTime().Sub(issue.GiteeCreatedAt.ToTime()).Minutes())
+ temp :=
uint(issue.FinishAt.ToTime().Sub(issue.GiteeCreatedAt.ToTime()).Minutes())
+ giteeIssue.LeadTimeMinutes = &temp
}
return giteeIssue, nil
diff --git a/backend/plugins/github/models/issue.go
b/backend/plugins/github/models/issue.go
index 34be4d42f..80e071cc5 100644
--- a/backend/plugins/github/models/issue.go
+++ b/backend/plugins/github/models/issue.go
@@ -39,7 +39,7 @@ type GithubIssue struct {
AssigneeId int
AssigneeName string `gorm:"type:varchar(255)"`
MilestoneId int `gorm:"index"`
- LeadTimeMinutes uint
+ LeadTimeMinutes *uint
Url string `gorm:"type:varchar(255)"`
ClosedAt *time.Time
GithubCreatedAt time.Time
diff --git a/backend/plugins/github/tasks/issue_convertor.go
b/backend/plugins/github/tasks/issue_convertor.go
index 165f21835..a1c5f9188 100644
--- a/backend/plugins/github/tasks/issue_convertor.go
+++ b/backend/plugins/github/tasks/issue_convertor.go
@@ -95,7 +95,7 @@ func ConvertIssues(taskCtx plugin.SubTaskContext)
errors.Error {
OriginalStatus: issue.State,
AssigneeName: issue.AssigneeName,
CreatorName: issue.AuthorName,
- LeadTimeMinutes: int64(issue.LeadTimeMinutes),
+ LeadTimeMinutes: issue.LeadTimeMinutes,
Url: issue.Url,
CreatedDate: &issue.GithubCreatedAt,
UpdatedDate: &issue.GithubUpdatedAt,
diff --git a/backend/plugins/github/tasks/issue_extractor.go
b/backend/plugins/github/tasks/issue_extractor.go
index 974ad397d..4dbce5bee 100644
--- a/backend/plugins/github/tasks/issue_extractor.go
+++ b/backend/plugins/github/tasks/issue_extractor.go
@@ -193,7 +193,8 @@ func convertGithubIssue(issue *IssuesResponse, connectionId
uint64, repositoryId
githubIssue.AuthorName = issue.User.Login
}
if issue.ClosedAt != nil {
- githubIssue.LeadTimeMinutes =
uint(issue.ClosedAt.ToTime().Sub(issue.GithubCreatedAt.ToTime()).Minutes())
+ temp :=
uint(issue.ClosedAt.ToTime().Sub(issue.GithubCreatedAt.ToTime()).Minutes())
+ githubIssue.LeadTimeMinutes = &temp
}
if issue.Milestone != nil {
githubIssue.MilestoneId = issue.Milestone.Id
diff --git a/backend/plugins/github_graphql/tasks/issue_extractor.go
b/backend/plugins/github_graphql/tasks/issue_extractor.go
index 355343e0c..ca95e1dd8 100644
--- a/backend/plugins/github_graphql/tasks/issue_extractor.go
+++ b/backend/plugins/github_graphql/tasks/issue_extractor.go
@@ -152,7 +152,8 @@ func convertGithubIssue(milestoneMap map[int]int, issue
GraphqlQueryIssue, conne
githubIssue.AuthorName = issue.Author.Login
}
if issue.ClosedAt != nil {
- githubIssue.LeadTimeMinutes =
uint(issue.ClosedAt.Sub(issue.CreatedAt).Minutes())
+ temp := uint(issue.ClosedAt.Sub(issue.CreatedAt).Minutes())
+ githubIssue.LeadTimeMinutes = &temp
}
if issue.Milestone != nil {
if milestoneId, ok := milestoneMap[issue.Milestone.Number]; ok {
diff --git a/backend/plugins/gitlab/models/issue.go
b/backend/plugins/gitlab/models/issue.go
index 749ae62b8..5d57d6806 100644
--- a/backend/plugins/gitlab/models/issue.go
+++ b/backend/plugins/gitlab/models/issue.go
@@ -18,8 +18,9 @@ limitations under the License.
package models
import (
- "github.com/apache/incubator-devlake/core/models/common"
"time"
+
+ "github.com/apache/incubator-devlake/core/models/common"
)
type GitlabIssue struct {
@@ -38,15 +39,15 @@ type GitlabIssue struct {
CreatorName string `gorm:"type:varchar(255)"`
AssigneeId int
AssigneeName string `gorm:"type:varchar(255)"`
- LeadTimeMinutes uint
+ LeadTimeMinutes *uint
Url string `gorm:"type:varchar(255)"`
ClosedAt *time.Time
GitlabCreatedAt time.Time
GitlabUpdatedAt time.Time `gorm:"index"`
Severity string `gorm:"type:varchar(255)"`
Component string `gorm:"type:varchar(255)"`
- TimeEstimate int64
- TotalTimeSpent int64
+ TimeEstimate *int64
+ TotalTimeSpent *int64
common.NoPKModel
}
diff --git a/backend/plugins/gitlab/tasks/issue_convertor.go
b/backend/plugins/gitlab/tasks/issue_convertor.go
index 879c0df0a..8a09bd7d2 100644
--- a/backend/plugins/gitlab/tasks/issue_convertor.go
+++ b/backend/plugins/gitlab/tasks/issue_convertor.go
@@ -78,7 +78,7 @@ func ConvertIssues(taskCtx plugin.SubTaskContext)
errors.Error {
Description: issue.Body,
Priority: issue.Priority,
OriginalType: issue.Type,
- LeadTimeMinutes:
int64(issue.LeadTimeMinutes),
+ LeadTimeMinutes: issue.LeadTimeMinutes,
Url: issue.Url,
CreatedDate: &issue.GitlabCreatedAt,
UpdatedDate: &issue.GitlabUpdatedAt,
diff --git a/backend/plugins/gitlab/tasks/issue_extractor.go
b/backend/plugins/gitlab/tasks/issue_extractor.go
index 88943459a..860834e99 100644
--- a/backend/plugins/gitlab/tasks/issue_extractor.go
+++ b/backend/plugins/gitlab/tasks/issue_extractor.go
@@ -110,8 +110,8 @@ type IssuesResponse struct {
Full string
}
TimeStats struct {
- TimeEstimate int64
- TotalTimeSpent int64
+ TimeEstimate *int64
+ TotalTimeSpent *int64
HumanTimeEstimate string
HumanTotalTimeSpent string
}
@@ -308,7 +308,8 @@ func convertGitlabIssue(issue *IssuesResponse, projectId
int) (*models.GitlabIss
gitlabIssue.CreatorName = issue.Author.Username
}
if issue.GitlabClosedAt != nil {
- gitlabIssue.LeadTimeMinutes =
uint(issue.GitlabClosedAt.ToTime().Sub(issue.GitlabCreatedAt.ToTime()).Minutes())
+ temp :=
uint(issue.GitlabClosedAt.ToTime().Sub(issue.GitlabCreatedAt.ToTime()).Minutes())
+ gitlabIssue.LeadTimeMinutes = &temp
}
return gitlabIssue, nil
diff --git a/backend/plugins/jira/models/issue.go
b/backend/plugins/jira/models/issue.go
index f2c0f9f83..489118831 100644
--- a/backend/plugins/jira/models/issue.go
+++ b/backend/plugins/jira/models/issue.go
@@ -38,8 +38,8 @@ type JiraIssue struct {
EpicKey string `gorm:"type:varchar(255)"`
StatusName string `gorm:"type:varchar(255)"`
StatusKey string `gorm:"type:varchar(255)"`
- StoryPoint float64
- OriginalEstimateMinutes int64 // user input?
+ StoryPoint *float64
+ OriginalEstimateMinutes *int64 // user input?
AggregateEstimateMinutes int64 // sum up of all subtasks?
RemainingEstimateMinutes int64 // could it be negative value?
CreatorAccountId string `gorm:"type:varchar(255)"`
@@ -57,9 +57,9 @@ type JiraIssue struct {
ResolutionDate *time.Time
Created time.Time
Updated time.Time `gorm:"index"`
- SpentMinutes int64
+ SpentMinutes *int64
CommentTotal int64
- LeadTimeMinutes uint
+ LeadTimeMinutes *uint
StdType string `gorm:"type:varchar(255)"`
StdStatus string `gorm:"type:varchar(255)"`
Components string `gorm:"type:varchar(255)"`
diff --git a/backend/plugins/jira/tasks/apiv2models/issue.go
b/backend/plugins/jira/tasks/apiv2models/issue.go
index 732783940..2ebace7c4 100644
--- a/backend/plugins/jira/tasks/apiv2models/issue.go
+++ b/backend/plugins/jira/tasks/apiv2models/issue.go
@@ -227,7 +227,7 @@ func (i Issue) toToolLayer(connectionId uint64)
*models.JiraIssue {
Self: i.Self,
IconURL: i.Fields.Issuetype.IconURL,
IssueKey: i.Key,
- StoryPoint: workload,
+ StoryPoint: &workload,
Summary: i.Fields.Summary,
Description: i.Fields.Description,
Type: i.Fields.Issuetype.ID,
@@ -254,7 +254,8 @@ func (i Issue) toToolLayer(connectionId uint64)
*models.JiraIssue {
result.PriorityName = i.Fields.Priority.Name
}
if i.Fields.Timeoriginalestimate != nil {
- result.OriginalEstimateMinutes = *i.Fields.Timeoriginalestimate
/ 60
+ temp := *i.Fields.Timeoriginalestimate / 60
+ result.OriginalEstimateMinutes = &temp
}
if i.Fields.Aggregatetimeestimate != nil {
result.AggregateEstimateMinutes =
*i.Fields.Aggregatetimeestimate / 60
@@ -271,7 +272,8 @@ func (i Issue) toToolLayer(connectionId uint64)
*models.JiraIssue {
result.SprintName = i.Fields.Sprint.Name
}
if i.Fields.Timespent != nil {
- result.SpentMinutes = *i.Fields.Timespent / 60
+ temp := *i.Fields.Timespent / 60
+ result.SpentMinutes = &temp
}
return result
}
diff --git a/backend/plugins/jira/tasks/issue_convertor.go
b/backend/plugins/jira/tasks/issue_convertor.go
index bdb24444e..e82ae3995 100644
--- a/backend/plugins/jira/tasks/issue_convertor.go
+++ b/backend/plugins/jira/tasks/issue_convertor.go
@@ -103,7 +103,7 @@ func ConvertIssues(taskCtx plugin.SubTaskContext)
errors.Error {
Priority: jiraIssue.PriorityName,
CreatedDate: &jiraIssue.Created,
UpdatedDate: &jiraIssue.Updated,
- LeadTimeMinutes:
int64(jiraIssue.LeadTimeMinutes),
+ LeadTimeMinutes:
jiraIssue.LeadTimeMinutes,
TimeSpentMinutes: jiraIssue.SpentMinutes,
OriginalProject: jiraIssue.ProjectName,
Component: jiraIssue.Components,
diff --git a/backend/plugins/jira/tasks/issue_extractor.go
b/backend/plugins/jira/tasks/issue_extractor.go
index c2346bcb2..d2230bd74 100644
--- a/backend/plugins/jira/tasks/issue_extractor.go
+++ b/backend/plugins/jira/tasks/issue_extractor.go
@@ -111,18 +111,21 @@ func extractIssues(data *JiraTaskData, mappings
*typeMappings, row *api.RawData)
results = append(results, sprintIssue)
}
if issue.ResolutionDate != nil {
- issue.LeadTimeMinutes =
uint(issue.ResolutionDate.Unix()-issue.Created.Unix()) / 60
+ temp := uint(issue.ResolutionDate.Unix()-issue.Created.Unix())
/ 60
+ issue.LeadTimeMinutes = &temp
}
if data.Options.ScopeConfig != nil &&
data.Options.ScopeConfig.StoryPointField != "" {
unknownStoryPoint :=
apiIssue.Fields.AllFields[data.Options.ScopeConfig.StoryPointField]
switch sp := unknownStoryPoint.(type) {
case string:
// string, try to parse
- issue.StoryPoint, _ = strconv.ParseFloat(sp, 32)
+ temp, _ := strconv.ParseFloat(sp, 32)
+ issue.StoryPoint = &temp
case nil:
default:
// not string, convert to float64, ignore it if failed
- issue.StoryPoint, _ = unknownStoryPoint.(float64)
+ temp, _ := unknownStoryPoint.(float64)
+ issue.StoryPoint = &temp
}
}
diff --git a/backend/plugins/opsgenie/tasks/incidents_converter.go
b/backend/plugins/opsgenie/tasks/incidents_converter.go
index 82d5406d2..7ff88624d 100644
--- a/backend/plugins/opsgenie/tasks/incidents_converter.go
+++ b/backend/plugins/opsgenie/tasks/incidents_converter.go
@@ -157,12 +157,13 @@ func getStatus(incident *models.Incident) string {
panic("unknown incident status encountered")
}
-func getTimes(incident *models.Incident) (int64, *time.Time) {
- var leadTime int64
+func getTimes(incident *models.Incident) (*uint, *time.Time) {
+ var leadTime *uint
var resolutionDate *time.Time
if incident.Status == models.IncidentStatusResolved {
resolutionDate = &incident.UpdatedDate
- leadTime =
int64(resolutionDate.Sub(incident.CreatedDate).Minutes())
+ temp := uint(resolutionDate.Sub(incident.CreatedDate).Minutes())
+ leadTime = &temp
}
return leadTime, resolutionDate
}
diff --git a/backend/plugins/pagerduty/tasks/incidents_converter.go
b/backend/plugins/pagerduty/tasks/incidents_converter.go
index 902fdb9ba..c10f286b5 100644
--- a/backend/plugins/pagerduty/tasks/incidents_converter.go
+++ b/backend/plugins/pagerduty/tasks/incidents_converter.go
@@ -144,12 +144,13 @@ func getStatus(incident *models.Incident) string {
panic("unknown incident status encountered")
}
-func getTimes(incident *models.Incident) (int64, *time.Time) {
- var leadTime int64
+func getTimes(incident *models.Incident) (*uint, *time.Time) {
+ var leadTime *uint
var resolutionDate *time.Time
if incident.Status == models.IncidentStatusResolved {
resolutionDate = &incident.UpdatedDate
- leadTime =
int64(resolutionDate.Sub(incident.CreatedDate).Minutes())
+ temp := uint(resolutionDate.Sub(incident.CreatedDate).Minutes())
+ leadTime = &temp
}
return leadTime, resolutionDate
}
diff --git a/backend/plugins/tapd/tasks/bug_converter.go
b/backend/plugins/tapd/tasks/bug_converter.go
index aa32acb2d..635b153dc 100644
--- a/backend/plugins/tapd/tasks/bug_converter.go
+++ b/backend/plugins/tapd/tasks/bug_converter.go
@@ -18,6 +18,10 @@ limitations under the License.
package tasks
import (
+ "reflect"
+ "strconv"
+ "time"
+
"github.com/apache/incubator-devlake/core/dal"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/models/domainlayer"
@@ -26,9 +30,6 @@ import (
"github.com/apache/incubator-devlake/core/plugin"
helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
"github.com/apache/incubator-devlake/plugins/tapd/models"
- "reflect"
- "strconv"
- "time"
)
func ConvertBug(taskCtx plugin.SubTaskContext) errors.Error {
@@ -87,7 +88,8 @@ func ConvertBug(taskCtx plugin.SubTaskContext) errors.Error {
results = append(results, issueAssignee)
}
if domainL.ResolutionDate != nil && domainL.CreatedDate
!= nil {
- domainL.LeadTimeMinutes =
int64(domainL.ResolutionDate.Sub(*domainL.CreatedDate).Minutes())
+ temp :=
uint(domainL.ResolutionDate.Sub(*domainL.CreatedDate).Minutes())
+ domainL.LeadTimeMinutes = &temp
}
boardIssue := &ticket.BoardIssue{
BoardId:
getWorkspaceIdGen().Generate(toolL.ConnectionId, toolL.WorkspaceId),
diff --git a/backend/plugins/tapd/tasks/story_converter.go
b/backend/plugins/tapd/tasks/story_converter.go
index 7fccbf781..c02e41c5e 100644
--- a/backend/plugins/tapd/tasks/story_converter.go
+++ b/backend/plugins/tapd/tasks/story_converter.go
@@ -55,6 +55,8 @@ func ConvertStory(taskCtx plugin.SubTaskContext) errors.Error
{
Input: cursor,
Convert: func(inputRow interface{}) ([]interface{},
errors.Error) {
toolL := inputRow.(*models.TapdStory)
+ timeRemainingMinutes := int64(toolL.Remain)
+ storyPoint := float64(toolL.Size)
domainL := &ticket.Issue{
DomainEntity: domainlayer.DomainEntity{
Id:
storyIdGen.Generate(toolL.ConnectionId, toolL.Id),
@@ -65,14 +67,14 @@ func ConvertStory(taskCtx plugin.SubTaskContext)
errors.Error {
Type: toolL.StdType,
OriginalType: toolL.Type,
Status: toolL.StdStatus,
- StoryPoint: float64(toolL.Size),
+ StoryPoint: &storyPoint,
OriginalStatus: toolL.Status,
ResolutionDate:
(*time.Time)(toolL.Completed),
CreatedDate:
(*time.Time)(toolL.Created),
UpdatedDate:
(*time.Time)(toolL.Modified),
ParentIssueId:
storyIdGen.Generate(toolL.ConnectionId, toolL.ParentId),
Priority: toolL.Priority,
- TimeRemainingMinutes: int64(toolL.Remain),
+ TimeRemainingMinutes: &timeRemainingMinutes,
CreatorId:
getAccountIdGen().Generate(data.Options.ConnectionId, toolL.Creator),
CreatorName: toolL.Creator,
AssigneeName: toolL.Owner,
@@ -90,7 +92,8 @@ func ConvertStory(taskCtx plugin.SubTaskContext) errors.Error
{
results = append(results, issueAssignee)
}
if domainL.ResolutionDate != nil && domainL.CreatedDate
!= nil {
- domainL.LeadTimeMinutes =
int64(domainL.ResolutionDate.Sub(*domainL.CreatedDate).Minutes())
+ temp :=
uint(domainL.ResolutionDate.Sub(*domainL.CreatedDate).Minutes())
+ domainL.LeadTimeMinutes = &temp
}
boardIssue := &ticket.BoardIssue{
BoardId:
getWorkspaceIdGen().Generate(toolL.ConnectionId, toolL.WorkspaceId),
diff --git a/backend/plugins/tapd/tasks/task_converter.go
b/backend/plugins/tapd/tasks/task_converter.go
index 014acb0ad..c7e3f5157 100644
--- a/backend/plugins/tapd/tasks/task_converter.go
+++ b/backend/plugins/tapd/tasks/task_converter.go
@@ -18,6 +18,10 @@ limitations under the License.
package tasks
import (
+ "reflect"
+ "strconv"
+ "time"
+
"github.com/apache/incubator-devlake/core/dal"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/models/domainlayer"
@@ -26,9 +30,6 @@ import (
"github.com/apache/incubator-devlake/core/plugin"
helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
"github.com/apache/incubator-devlake/plugins/tapd/models"
- "reflect"
- "strconv"
- "time"
)
func ConvertTask(taskCtx plugin.SubTaskContext) errors.Error {
@@ -87,7 +88,8 @@ func ConvertTask(taskCtx plugin.SubTaskContext) errors.Error {
results = append(results, issueAssignee)
}
if domainL.ResolutionDate != nil && domainL.CreatedDate
!= nil {
- domainL.LeadTimeMinutes =
int64(domainL.ResolutionDate.Sub(*domainL.CreatedDate).Minutes())
+ temp :=
uint(domainL.ResolutionDate.Sub(*domainL.CreatedDate).Minutes())
+ domainL.LeadTimeMinutes = &temp
}
boardIssue := &ticket.BoardIssue{
BoardId:
getWorkspaceIdGen().Generate(toolL.ConnectionId, toolL.WorkspaceId),
diff --git a/backend/plugins/teambition/tasks/task_converter.go
b/backend/plugins/teambition/tasks/task_converter.go
index aadf8cc33..fd212d379 100644
--- a/backend/plugins/teambition/tasks/task_converter.go
+++ b/backend/plugins/teambition/tasks/task_converter.go
@@ -19,6 +19,10 @@ package tasks
import (
"fmt"
+ "reflect"
+ "strconv"
+ "time"
+
"github.com/apache/incubator-devlake/core/dal"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/models/domainlayer"
@@ -26,9 +30,6 @@ import (
"github.com/apache/incubator-devlake/core/plugin"
helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
"github.com/apache/incubator-devlake/plugins/teambition/models"
- "reflect"
- "strconv"
- "time"
)
var ConvertTasksMeta = plugin.SubTaskMeta{
@@ -61,6 +62,7 @@ func ConvertTasks(taskCtx plugin.SubTaskContext) errors.Error
{
Convert: func(inputRow interface{}) ([]interface{},
errors.Error) {
userTool := inputRow.(*models.TeambitionTask)
originalEstimateMinutes, timeSpentMinutes,
timeRemainingMinutes := calcEstimateTimeMinutes(userTool)
+ leadTimeMinutes := uint(calcLeadTimeMinutes(userTool))
issue := &ticket.Issue{
DomainEntity: domainlayer.DomainEntity{
Id:
getTaskIdGen().Generate(data.Options.ConnectionId, userTool.Id),
@@ -74,16 +76,16 @@ func ConvertTasks(taskCtx plugin.SubTaskContext)
errors.Error {
OriginalProject:
getProjectIdGen().Generate(data.Options.ConnectionId, data.Options.ProjectId),
AssigneeId: userTool.ExecutorId,
Url:
fmt.Sprintf("https://www.teambition.com/task/%s", userTool.Id),
- LeadTimeMinutes:
calcLeadTimeMinutes(userTool),
- OriginalEstimateMinutes:
originalEstimateMinutes,
- TimeSpentMinutes: timeSpentMinutes,
- TimeRemainingMinutes: timeRemainingMinutes,
+ LeadTimeMinutes: &leadTimeMinutes,
+ OriginalEstimateMinutes:
&originalEstimateMinutes,
+ TimeSpentMinutes: &timeSpentMinutes,
+ TimeRemainingMinutes: &timeRemainingMinutes,
ResolutionDate:
userTool.AccomplishTime.ToNullableTime(),
CreatedDate:
userTool.Created.ToNullableTime(),
UpdatedDate:
userTool.Updated.ToNullableTime(),
}
if storyPoint, ok :=
strconv.ParseFloat(userTool.StoryPoint, 64); ok == nil {
- issue.StoryPoint = storyPoint
+ issue.StoryPoint = &storyPoint
}
if a, err := FindAccountById(db, userTool.CreatorId);
err == nil {
issue.CreatorName = a.Name
diff --git a/backend/plugins/webhook/api/incident.go
b/backend/plugins/webhook/api/incident.go
index dfcabe56c..456c899a5 100644
--- a/backend/plugins/webhook/api/incident.go
+++ b/backend/plugins/webhook/api/incident.go
@@ -102,15 +102,15 @@ func PostIssue(input *plugin.ApiResourceInput)
(*plugin.ApiResourceOutput, error
Type: request.Type,
Status: request.Status,
OriginalStatus: request.OriginalStatus,
- StoryPoint: request.StoryPoint,
+ StoryPoint: &request.StoryPoint,
ResolutionDate: request.ResolutionDate,
CreatedDate: request.CreatedDate,
UpdatedDate: request.UpdatedDate,
- LeadTimeMinutes: int64(request.LeadTimeMinutes),
+ LeadTimeMinutes: &request.LeadTimeMinutes,
Priority: request.Priority,
- OriginalEstimateMinutes: request.OriginalEstimateMinutes,
- TimeSpentMinutes: request.TimeSpentMinutes,
- TimeRemainingMinutes: request.TimeRemainingMinutes,
+ OriginalEstimateMinutes: &request.OriginalEstimateMinutes,
+ TimeSpentMinutes: &request.TimeSpentMinutes,
+ TimeRemainingMinutes: &request.TimeRemainingMinutes,
CreatorName: request.CreatorName,
AssigneeName: request.AssigneeName,
Severity: request.Severity,
diff --git a/backend/plugins/zentao/tasks/bug_convertor.go
b/backend/plugins/zentao/tasks/bug_convertor.go
index 5b91b0347..5c926cee6 100644
--- a/backend/plugins/zentao/tasks/bug_convertor.go
+++ b/backend/plugins/zentao/tasks/bug_convertor.go
@@ -106,7 +106,8 @@ func ConvertBug(taskCtx plugin.SubTaskContext) errors.Error
{
domainEntity.AssigneeId =
accountIdGen.Generate(data.Options.ConnectionId, toolEntity.AssignedToId)
}
if toolEntity.ClosedDate != nil {
- domainEntity.LeadTimeMinutes =
int64(toolEntity.ClosedDate.ToNullableTime().Sub(toolEntity.OpenedDate.ToTime()).Minutes())
+ temp :=
uint(toolEntity.ClosedDate.ToNullableTime().Sub(toolEntity.OpenedDate.ToTime()).Minutes())
+ domainEntity.LeadTimeMinutes = &temp
}
var results []interface{}
if domainEntity.AssigneeId != "" {
diff --git a/backend/plugins/zentao/tasks/story_convertor.go
b/backend/plugins/zentao/tasks/story_convertor.go
index d0d67e64e..f9aea6aaa 100644
--- a/backend/plugins/zentao/tasks/story_convertor.go
+++ b/backend/plugins/zentao/tasks/story_convertor.go
@@ -70,7 +70,7 @@ func ConvertStory(taskCtx plugin.SubTaskContext) errors.Error
{
},
Convert: func(inputRow interface{}) ([]interface{},
errors.Error) {
toolEntity := inputRow.(*models.ZentaoStory)
-
+ originalEstimateMinutes := int64(toolEntity.Estimate) *
60
domainEntity := &ticket.Issue{
DomainEntity: domainlayer.DomainEntity{
Id:
storyIdGen.Generate(toolEntity.ConnectionId, toolEntity.ID),
@@ -89,8 +89,8 @@ func ConvertStory(taskCtx plugin.SubTaskContext) errors.Error
{
Url:
convertIssueURL(toolEntity.Url, "story", toolEntity.ID),
OriginalProject:
getOriginalProject(data),
Status: toolEntity.StdStatus,
- OriginalEstimateMinutes:
int64(toolEntity.Estimate) * 60,
- StoryPoint: toolEntity.Estimate,
+ OriginalEstimateMinutes:
&originalEstimateMinutes,
+ StoryPoint: &toolEntity.Estimate,
}
if mappingType, ok :=
stdTypeMappings[domainEntity.OriginalType]; ok && mappingType != "" {
domainEntity.Type = mappingType
@@ -118,7 +118,8 @@ func ConvertStory(taskCtx plugin.SubTaskContext)
errors.Error {
}
if toolEntity.ClosedDate != nil {
- domainEntity.LeadTimeMinutes =
int64(toolEntity.ClosedDate.ToNullableTime().Sub(toolEntity.OpenedDate.ToTime()).Minutes())
+ temp :=
uint(toolEntity.ClosedDate.ToNullableTime().Sub(toolEntity.OpenedDate.ToTime()).Minutes())
+ domainEntity.LeadTimeMinutes = &temp
}
domainBoardIssue := &ticket.BoardIssue{
diff --git a/backend/plugins/zentao/tasks/task_convertor.go
b/backend/plugins/zentao/tasks/task_convertor.go
index caac592b2..3489b6c29 100644
--- a/backend/plugins/zentao/tasks/task_convertor.go
+++ b/backend/plugins/zentao/tasks/task_convertor.go
@@ -69,6 +69,9 @@ func ConvertTask(taskCtx plugin.SubTaskContext) errors.Error {
},
Convert: func(inputRow interface{}) ([]interface{},
errors.Error) {
toolEntity := inputRow.(*models.ZentaoTask)
+ originalEstimateMinutes := int64(toolEntity.Estimate *
60)
+ timeSpentMinutes := int64(toolEntity.Consumed * 60)
+ timeRemainingMinutes := int64(toolEntity.Left * 60)
domainEntity := &ticket.Issue{
DomainEntity: domainlayer.DomainEntity{
@@ -89,9 +92,9 @@ func ConvertTask(taskCtx plugin.SubTaskContext) errors.Error {
Url:
convertIssueURL(toolEntity.Url, "task", toolEntity.ID),
OriginalProject:
getOriginalProject(data),
Status: toolEntity.StdStatus,
- OriginalEstimateMinutes:
int64(toolEntity.Estimate * 60),
- TimeSpentMinutes:
int64(toolEntity.Consumed * 60),
- TimeRemainingMinutes: int64(toolEntity.Left
* 60),
+ OriginalEstimateMinutes:
&originalEstimateMinutes,
+ TimeSpentMinutes: &timeSpentMinutes,
+ TimeRemainingMinutes: &timeRemainingMinutes,
}
if mappingType, ok :=
stdTypeMappings[domainEntity.OriginalType]; ok && mappingType != "" {
domainEntity.Type = mappingType
@@ -106,7 +109,8 @@ func ConvertTask(taskCtx plugin.SubTaskContext)
errors.Error {
domainEntity.AssigneeId =
accountIdGen.Generate(data.Options.ConnectionId, toolEntity.AssignedToId)
}
if toolEntity.ClosedDate != nil {
- domainEntity.LeadTimeMinutes =
int64(toolEntity.ClosedDate.ToNullableTime().Sub(toolEntity.OpenedDate.ToTime()).Minutes())
+ temp :=
uint(toolEntity.ClosedDate.ToNullableTime().Sub(toolEntity.OpenedDate.ToTime()).Minutes())
+ domainEntity.LeadTimeMinutes = &temp
}
var results []interface{}
if domainEntity.AssigneeId != "" {