This is an automated email from the ASF dual-hosted git repository.

abeizn pushed a commit to branch option-time-after
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/option-time-after by this push:
     new 1a58ce22f fix: option time after for plugins
1a58ce22f is described below

commit 1a58ce22f0028db997254f58fb79889514ee9055
Author: abeizn <[email protected]>
AuthorDate: Thu Dec 7 13:59:03 2023 +0800

    fix: option time after for plugins
---
 .../pluginhelper/api/api_collector_with_state.go   | 27 ++++++++++++++++++++--
 backend/plugins/ae/tasks/task_data.go              |  1 +
 backend/plugins/bamboo/models/task.go              |  1 +
 backend/plugins/bitbucket/tasks/task_data.go       |  1 +
 backend/plugins/circleci/tasks/task_data.go        |  1 +
 backend/plugins/customize/tasks/task_data.go       |  1 +
 backend/plugins/feishu/tasks/task_data.go          |  1 +
 backend/plugins/gitee/tasks/task_data.go           |  1 +
 backend/plugins/github/tasks/task_data.go          |  1 +
 backend/plugins/gitlab/tasks/task_data.go          |  1 +
 backend/plugins/icla/tasks/task_data.go            |  3 ++-
 backend/plugins/jenkins/tasks/task_data.go         |  1 +
 backend/plugins/jira/tasks/task_data.go            |  1 +
 backend/plugins/opsgenie/tasks/task_data.go        |  1 +
 backend/plugins/pagerduty/tasks/task_data.go       |  1 +
 backend/plugins/slack/tasks/task_data.go           |  1 +
 backend/plugins/sonarqube/tasks/task_data.go       |  1 +
 backend/plugins/tapd/tasks/task_data.go            |  1 +
 backend/plugins/teambition/tasks/task_data.go      |  1 +
 backend/plugins/trello/tasks/task_data.go          |  1 +
 backend/plugins/zentao/tasks/task_data.go          |  1 +
 21 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/backend/helpers/pluginhelper/api/api_collector_with_state.go 
b/backend/helpers/pluginhelper/api/api_collector_with_state.go
index 7eb54ac14..0434086d1 100644
--- a/backend/helpers/pluginhelper/api/api_collector_with_state.go
+++ b/backend/helpers/pluginhelper/api/api_collector_with_state.go
@@ -21,6 +21,7 @@ import (
        "encoding/json"
        "net/http"
        "net/url"
+       "reflect"
        "time"
 
        "github.com/apache/incubator-devlake/core/dal"
@@ -44,12 +45,35 @@ type ApiCollectorStateManager struct {
 // NewStatefulApiCollector create a new ApiCollectorStateManager
 func NewStatefulApiCollector(args RawDataSubTaskArgs) 
(*ApiCollectorStateManager, errors.Error) {
        db := args.Ctx.GetDal()
-
+       syncPolicy := args.Ctx.TaskContext().SyncPolicy()
        rawDataSubTask, err := NewRawDataSubTask(args)
        if err != nil {
                return nil, errors.Default.Wrap(err, "Couldn't resolve raw 
subtask args")
        }
 
+       // get optionTimeAfter from options
+       data := args.Ctx.GetData()
+       value := reflect.ValueOf(data)
+       if value.Kind() == reflect.Ptr && value.Elem().Kind() == reflect.Struct 
{
+               options := value.Elem().FieldByName("Options")
+               if options.IsValid() && options.Kind() == reflect.Ptr && 
options.Elem().Kind() == reflect.Struct {
+                       timeAfter := options.Elem().FieldByName("TimeAfter")
+                       if timeAfter.IsValid() && timeAfter.Kind() == 
reflect.String && timeAfter.String() != "" {
+                               optionTimeAfter, parseErr := 
time.Parse(time.RFC3339, timeAfter.String())
+                               if parseErr != nil {
+                                       return nil, 
errors.Default.Wrap(parseErr, "Failed to parse timeAfter!")
+                               }
+                               if syncPolicy != nil {
+                                       syncPolicy.TimeAfter = &optionTimeAfter
+                               } else {
+                                       syncPolicy = &models.SyncPolicy{
+                                               TimeAfter: &optionTimeAfter,
+                                       }
+                               }
+                       }
+               }
+       }
+
        // CollectorLatestState retrieves the latest collector state from the 
database
        oldState := models.CollectorLatestState{}
        err = db.First(&oldState, dal.Where(`raw_data_table = ? AND 
raw_data_params = ?`, rawDataSubTask.table, rawDataSubTask.params))
@@ -68,7 +92,6 @@ func NewStatefulApiCollector(args RawDataSubTaskArgs) 
(*ApiCollectorStateManager
        oldLatestSuccessStart := oldState.LatestSuccessStart
 
        // Calculate incremental and since based on syncPolicy and old state
-       syncPolicy := args.Ctx.TaskContext().SyncPolicy()
        var isIncremental bool
        var since *time.Time
 
diff --git a/backend/plugins/ae/tasks/task_data.go 
b/backend/plugins/ae/tasks/task_data.go
index 3a933536c..19275ce80 100644
--- a/backend/plugins/ae/tasks/task_data.go
+++ b/backend/plugins/ae/tasks/task_data.go
@@ -24,6 +24,7 @@ import (
 type AeOptions struct {
        ConnectionId uint64 `json:"connectionId"`
        ProjectId    int
+       TimeAfter    string
 }
 
 type AeTaskData struct {
diff --git a/backend/plugins/bamboo/models/task.go 
b/backend/plugins/bamboo/models/task.go
index a3578cf80..64b7db30e 100644
--- a/backend/plugins/bamboo/models/task.go
+++ b/backend/plugins/bamboo/models/task.go
@@ -32,4 +32,5 @@ type BambooOptions struct {
        Tasks              []string `json:"tasks,omitempty"`
        ScopeConfigId      uint64   `mapstructure:"scopeConfigId" 
json:"scopeConfigId"`
        *BambooScopeConfig `mapstructure:"scopeConfig" json:"scopeConfig"`
+       TimeAfter          string
 }
diff --git a/backend/plugins/bitbucket/tasks/task_data.go 
b/backend/plugins/bitbucket/tasks/task_data.go
index 235b05080..418e6f121 100644
--- a/backend/plugins/bitbucket/tasks/task_data.go
+++ b/backend/plugins/bitbucket/tasks/task_data.go
@@ -29,6 +29,7 @@ type BitbucketOptions struct {
        FullName                     string   `json:"fullName" 
mapstructure:"fullName"`
        ScopeConfigId                uint64   `json:"scopeConfigId" 
mapstructure:"scopeConfigId,omitempty"`
        *models.BitbucketScopeConfig `mapstructure:"scopeConfig,omitempty" 
json:"scopeConfig"`
+       TimeAfter                    string
 }
 
 type BitbucketTaskData struct {
diff --git a/backend/plugins/circleci/tasks/task_data.go 
b/backend/plugins/circleci/tasks/task_data.go
index d9398e017..43d55104b 100644
--- a/backend/plugins/circleci/tasks/task_data.go
+++ b/backend/plugins/circleci/tasks/task_data.go
@@ -29,6 +29,7 @@ type CircleciOptions struct {
        PageSize      uint64                      `mapstruct:"pageSize"`
        ScopeConfigId uint64                      `json:"scopeConfigId" 
mapstructure:"scopeConfigId,omitempty"`
        ScopeConfig   *models.CircleciScopeConfig `json:"scopeConfig" 
mapstructure:"scopeConfig,omitempty"`
+       TimeAfter     string
 }
 
 type CircleciTaskData struct {
diff --git a/backend/plugins/customize/tasks/task_data.go 
b/backend/plugins/customize/tasks/task_data.go
index 6850bd725..dc1a08e3d 100644
--- a/backend/plugins/customize/tasks/task_data.go
+++ b/backend/plugins/customize/tasks/task_data.go
@@ -26,6 +26,7 @@ type MappingRules struct {
 
 type Options struct {
        TransformationRules []MappingRules `json:"transformationRules"`
+       TimeAfter           string
 }
 
 type TaskData struct {
diff --git a/backend/plugins/feishu/tasks/task_data.go 
b/backend/plugins/feishu/tasks/task_data.go
index 428c06739..77b4c67d4 100644
--- a/backend/plugins/feishu/tasks/task_data.go
+++ b/backend/plugins/feishu/tasks/task_data.go
@@ -28,6 +28,7 @@ type FeishuApiParams struct {
 type FeishuOptions struct {
        ConnectionId       uint64  `json:"connectionId"`
        NumOfDaysToCollect float64 `json:"numOfDaysToCollect"`
+       TimeAfter          string
 }
 
 type FeishuTaskData struct {
diff --git a/backend/plugins/gitee/tasks/task_data.go 
b/backend/plugins/gitee/tasks/task_data.go
index aa551fbc3..ba834e2f0 100644
--- a/backend/plugins/gitee/tasks/task_data.go
+++ b/backend/plugins/gitee/tasks/task_data.go
@@ -30,6 +30,7 @@ type GiteeOptions struct {
        Owner        string
        Repo         string
        ScopeConfig  models.GiteeScopeConfig `mapstructure:"scopeConfig" 
json:"scopeConfig"`
+       TimeAfter    string
 }
 
 type GiteeTaskData struct {
diff --git a/backend/plugins/github/tasks/task_data.go 
b/backend/plugins/github/tasks/task_data.go
index f87d57694..05c96fc91 100644
--- a/backend/plugins/github/tasks/task_data.go
+++ b/backend/plugins/github/tasks/task_data.go
@@ -34,6 +34,7 @@ type GithubOptions struct {
        Repo          string                    `json:"repo"  
mapstructure:"repo,omitempty"`
        Name          string                    `json:"name"  
mapstructure:"name,omitempty"`
        ScopeConfig   *models.GithubScopeConfig 
`mapstructure:"scopeConfig,omitempty" json:"scopeConfig"`
+       TimeAfter     string
 }
 
 type GithubTaskData struct {
diff --git a/backend/plugins/gitlab/tasks/task_data.go 
b/backend/plugins/gitlab/tasks/task_data.go
index 0eaa36e45..8c70c2b29 100644
--- a/backend/plugins/gitlab/tasks/task_data.go
+++ b/backend/plugins/gitlab/tasks/task_data.go
@@ -28,6 +28,7 @@ type GitlabOptions struct {
        ProjectId     int                       `mapstructure:"projectId" 
json:"projectId"`
        ScopeConfigId uint64                    `mapstructure:"scopeConfigId" 
json:"scopeConfigId"`
        ScopeConfig   *models.GitlabScopeConfig `mapstructure:"scopeConfig" 
json:"scopeConfig"`
+       TimeAfter     string
 }
 
 type GitlabTaskData struct {
diff --git a/backend/plugins/icla/tasks/task_data.go 
b/backend/plugins/icla/tasks/task_data.go
index dfa35a0ea..dc992b1f6 100644
--- a/backend/plugins/icla/tasks/task_data.go
+++ b/backend/plugins/icla/tasks/task_data.go
@@ -29,7 +29,8 @@ type IclaOptions struct {
        // options means some custom params required by plugin running.
        // Such As How many rows do your want
        // You can use it in subtasks, and you need to pass it to main.go and 
pipelines.
-       Tasks []string `json:"tasks,omitempty"`
+       Tasks     []string `json:"tasks,omitempty"`
+       TimeAfter string
 }
 
 type IclaTaskData struct {
diff --git a/backend/plugins/jenkins/tasks/task_data.go 
b/backend/plugins/jenkins/tasks/task_data.go
index d34b4e6ac..f97d2bbc5 100644
--- a/backend/plugins/jenkins/tasks/task_data.go
+++ b/backend/plugins/jenkins/tasks/task_data.go
@@ -35,6 +35,7 @@ type JenkinsOptions struct {
        JobPath       string                     `json:"jobPath"`     // 
"job/path1/job/path2"
        Tasks         []string                   `json:"tasks,omitempty"`
        ScopeConfig   *models.JenkinsScopeConfig `mapstructure:"scopeConfig" 
json:"scopeConfig"`
+       TimeAfter     string
 }
 
 type JenkinsTaskData struct {
diff --git a/backend/plugins/jira/tasks/task_data.go 
b/backend/plugins/jira/tasks/task_data.go
index 42433bf9c..cd27bb38f 100644
--- a/backend/plugins/jira/tasks/task_data.go
+++ b/backend/plugins/jira/tasks/task_data.go
@@ -31,6 +31,7 @@ type JiraOptions struct {
        ScopeConfig   *models.JiraScopeConfig `json:"scopeConfig"`
        ScopeConfigId uint64
        PageSize      int
+       TimeAfter     string
 }
 
 type JiraTaskData struct {
diff --git a/backend/plugins/opsgenie/tasks/task_data.go 
b/backend/plugins/opsgenie/tasks/task_data.go
index 5d20fc820..02b4364a3 100644
--- a/backend/plugins/opsgenie/tasks/task_data.go
+++ b/backend/plugins/opsgenie/tasks/task_data.go
@@ -28,6 +28,7 @@ type OpsgenieOptions struct {
        ServiceId    string   `json:"service_id,omitempty"`
        ServiceName  string   `json:"service_name,omitempty"`
        Tasks        []string `json:"tasks,omitempty"`
+       TimeAfter    string
        *models.OpsenieScopeConfig
 }
 
diff --git a/backend/plugins/pagerduty/tasks/task_data.go 
b/backend/plugins/pagerduty/tasks/task_data.go
index 5f456f725..904c5b1f4 100644
--- a/backend/plugins/pagerduty/tasks/task_data.go
+++ b/backend/plugins/pagerduty/tasks/task_data.go
@@ -28,6 +28,7 @@ type PagerDutyOptions struct {
        ServiceId    string   `json:"service_id,omitempty"`
        ServiceName  string   `json:"service_name,omitempty"`
        Tasks        []string `json:"tasks,omitempty"`
+       TimeAfter     string
        *models.PagerdutyScopeConfig
 }
 
diff --git a/backend/plugins/slack/tasks/task_data.go 
b/backend/plugins/slack/tasks/task_data.go
index 41c811fb6..0f3b2f088 100644
--- a/backend/plugins/slack/tasks/task_data.go
+++ b/backend/plugins/slack/tasks/task_data.go
@@ -27,6 +27,7 @@ type SlackApiParams struct {
 
 type SlackOptions struct {
        ConnectionId uint64 `json:"connectionId"`
+       TimeAfter    string
 }
 
 type SlackTaskData struct {
diff --git a/backend/plugins/sonarqube/tasks/task_data.go 
b/backend/plugins/sonarqube/tasks/task_data.go
index 998054a69..1780ab918 100644
--- a/backend/plugins/sonarqube/tasks/task_data.go
+++ b/backend/plugins/sonarqube/tasks/task_data.go
@@ -31,6 +31,7 @@ type SonarqubeOptions struct {
        ConnectionId uint64   `json:"connectionId"`
        ProjectKey   string   `json:"projectKey"`
        Tasks        []string `json:"tasks,omitempty"`
+       TimeAfter    string
 }
 
 type SonarqubeTaskData struct {
diff --git a/backend/plugins/tapd/tasks/task_data.go 
b/backend/plugins/tapd/tasks/task_data.go
index 16b077bbb..676b77546 100644
--- a/backend/plugins/tapd/tasks/task_data.go
+++ b/backend/plugins/tapd/tasks/task_data.go
@@ -32,6 +32,7 @@ type TapdOptions struct {
        CstZone       *time.Location
        ScopeConfigId uint64
        ScopeConfig   *models.TapdScopeConfig `json:"scopeConfig"`
+       TimeAfter     string
 }
 
 type TapdTaskData struct {
diff --git a/backend/plugins/teambition/tasks/task_data.go 
b/backend/plugins/teambition/tasks/task_data.go
index 961f1f33d..d112cb417 100644
--- a/backend/plugins/teambition/tasks/task_data.go
+++ b/backend/plugins/teambition/tasks/task_data.go
@@ -30,6 +30,7 @@ type TeambitionOptions struct {
        PageSize            uint64 `mapstruct:"pageSize"`
        CstZone             *time.Location
        TransformationRules TransformationRules `json:"transformationRules"`
+       TimeAfter           string
 }
 
 type TeambitionTaskData struct {
diff --git a/backend/plugins/trello/tasks/task_data.go 
b/backend/plugins/trello/tasks/task_data.go
index 273fc3f71..169edb7d2 100644
--- a/backend/plugins/trello/tasks/task_data.go
+++ b/backend/plugins/trello/tasks/task_data.go
@@ -27,6 +27,7 @@ type TrelloOptions struct {
        BoardId       string `json:"boardId"`
        ScopeId       string
        ScopeConfigId uint64
+       TimeAfter     string
 }
 
 type TrelloTaskData struct {
diff --git a/backend/plugins/zentao/tasks/task_data.go 
b/backend/plugins/zentao/tasks/task_data.go
index 26bc9734c..bdb0baf8a 100644
--- a/backend/plugins/zentao/tasks/task_data.go
+++ b/backend/plugins/zentao/tasks/task_data.go
@@ -38,6 +38,7 @@ type ZentaoOptions struct {
        // TODO not support now
        ScopeConfigId uint64                    `json:"scopeConfigId" 
mapstructure:"scopeConfigId,omitempty"`
        ScopeConfig   *models.ZentaoScopeConfig `json:"scopeConfig" 
mapstructure:"scopeConfig,omitempty"`
+       TimeAfter     string
 }
 
 func (o *ZentaoOptions) GetParams() any {

Reply via email to