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

mappjzc pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 3f3e0ad75 feat(bamboo): change project to plan (#4452)
3f3e0ad75 is described below

commit 3f3e0ad75b734bdfd5d148bcef013a4aa909f76a
Author: Warren Chen <[email protected]>
AuthorDate: Mon Feb 20 14:58:16 2023 +0800

    feat(bamboo): change project to plan (#4452)
---
 backend/plugins/bamboo/api/blueprint_v200.go       |  10 +-
 backend/plugins/bamboo/impl/impl.go                |   8 +-
 .../migrationscripts/20230216_add_init_tables.go   |   3 +-
 .../models/migrationscripts/archived/plan.go       |  48 ++++++++
 backend/plugins/bamboo/models/plan.go              |  88 ++++++++++++++
 backend/plugins/bamboo/models/project.go           |  54 +++++----
 .../{project_collector.go => plan_collector.go}    |  42 ++++---
 backend/plugins/bamboo/tasks/plan_extractor.go     |  61 ++++++++++
 ...{projects_convertor.go => project_convertor.go} |   2 +
 backend/plugins/bamboo/tasks/project_extractor.go  | 127 ---------------------
 backend/plugins/bamboo/tasks/shared.go             |  23 +---
 11 files changed, 267 insertions(+), 199 deletions(-)

diff --git a/backend/plugins/bamboo/api/blueprint_v200.go 
b/backend/plugins/bamboo/api/blueprint_v200.go
index 1ce6d404f..d627b0973 100644
--- a/backend/plugins/bamboo/api/blueprint_v200.go
+++ b/backend/plugins/bamboo/api/blueprint_v200.go
@@ -18,9 +18,7 @@ limitations under the License.
 package api
 
 import (
-       "encoding/json"
        "fmt"
-       "io"
        "net/http"
 
        "github.com/apache/incubator-devlake/plugins/bamboo/models"
@@ -134,7 +132,7 @@ func GetprojectByConnectionIdAndscopeId(connectionId 
uint64, scopeId string) (*m
        key := scopeId
        project := &models.BambooProject{}
        db := basicRes.GetDal()
-       err := db.First(project, dal.Where("connection_id = ? AND key = ?", 
connectionId, key))
+       err := db.First(project, dal.Where("connection_id = ? AND project_key = 
?", connectionId, key))
        if err != nil {
                if db.IsErrorNotFound(err) {
                        return nil, errors.Default.Wrap(err, fmt.Sprintf("can 
not find project by connection [%d] scope [%s]", connectionId, scopeId))
@@ -178,11 +176,7 @@ func GetApiProject(
        if res.StatusCode != http.StatusOK {
                return nil, 
errors.HttpStatus(res.StatusCode).New(fmt.Sprintf("unexpected status code when 
requesting project detail from %s", res.Request.URL.String()))
        }
-       body, err := errors.Convert01(io.ReadAll(res.Body))
-       if err != nil {
-               return nil, err
-       }
-       err = errors.Convert(json.Unmarshal(body, projectRes))
+       err = helper.UnmarshalResponse(res, projectRes)
        if err != nil {
                return nil, err
        }
diff --git a/backend/plugins/bamboo/impl/impl.go 
b/backend/plugins/bamboo/impl/impl.go
index 2680319c0..734f6471e 100644
--- a/backend/plugins/bamboo/impl/impl.go
+++ b/backend/plugins/bamboo/impl/impl.go
@@ -81,8 +81,8 @@ func (p Bamboo) Description() string {
 func (p Bamboo) SubTaskMetas() []plugin.SubTaskMeta {
        // TODO add your sub task here
        return []plugin.SubTaskMeta{
-               tasks.CollectProjectMeta,
-               tasks.ExtractProjectMeta,
+               tasks.CollectPlanMeta,
+               tasks.ExtractPlanMeta,
                tasks.ConvertProjectsMeta,
        }
 }
@@ -115,7 +115,7 @@ func (p Bamboo) PrepareTaskData(taskCtx plugin.TaskContext, 
options map[string]i
                // support v100 & advance mode
                // If we still cannot find the record in db, we have to request 
from remote server and save it to db
                db := taskCtx.GetDal()
-               err = db.First(&scope, dal.Where("connection_id = ? AND key = 
?", op.ConnectionId, op.ProjectKey))
+               err = db.First(&scope, dal.Where("connection_id = ? AND 
project_key = ?", op.ConnectionId, op.ProjectKey))
                if err != nil && db.IsErrorNotFound(err) {
                        apiProject, err := api.GetApiProject(op.ProjectKey, 
apiClient)
                        if err != nil {
@@ -180,7 +180,7 @@ func (p Bamboo) ApiResources() 
map[string]map[string]plugin.ApiResourceHandler {
 }
 
 func (p Bamboo) MakePipelinePlan(connectionId uint64, scope 
[]*plugin.BlueprintScopeV100) (plugin.PipelinePlan, errors.Error) {
-       return nil, errors.Default.New("Bamboo don't support blueprint v100")
+       return nil, errors.Default.New("Bamboo does not support blueprint v100")
 }
 
 func (p Bamboo) Close(taskCtx plugin.TaskContext) errors.Error {
diff --git 
a/backend/plugins/bamboo/models/migrationscripts/20230216_add_init_tables.go 
b/backend/plugins/bamboo/models/migrationscripts/20230216_add_init_tables.go
index 1b208b546..61c335e79 100644
--- a/backend/plugins/bamboo/models/migrationscripts/20230216_add_init_tables.go
+++ b/backend/plugins/bamboo/models/migrationscripts/20230216_add_init_tables.go
@@ -31,11 +31,12 @@ func (u *addInitTables) Up(baseRes context.BasicRes) 
errors.Error {
                baseRes,
                &archived.BambooConnection{},
                &archived.BambooProject{},
+               &archived.BambooPlan{},
        )
 }
 
 func (*addInitTables) Version() uint64 {
-       return 20230216205028
+       return 20230216205031
 }
 
 func (*addInitTables) Name() string {
diff --git a/backend/plugins/bamboo/models/migrationscripts/archived/plan.go 
b/backend/plugins/bamboo/models/migrationscripts/archived/plan.go
new file mode 100644
index 000000000..91b5b0c61
--- /dev/null
+++ b/backend/plugins/bamboo/models/migrationscripts/archived/plan.go
@@ -0,0 +1,48 @@
+/*
+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 archived
+
+import (
+       
"github.com/apache/incubator-devlake/core/models/migrationscripts/archived"
+)
+
+type BambooPlan struct {
+       ConnectionId              uint64  `gorm:"primaryKey"`
+       PlanKey                   string  `json:"planKey" gorm:"primaryKey"`
+       Name                      string  `json:"name"`
+       Expand                    string  `json:"expand"`
+       ProjectKey                string  `json:"projectKey" gorm:"index"`
+       ProjectName               string  `json:"projectName"`
+       Description               string  `json:"description"`
+       ShortName                 string  `json:"shortName"`
+       BuildName                 string  `json:"buildName"`
+       ShortKey                  string  `json:"shortKey"`
+       Type                      string  `json:"type"`
+       Enabled                   bool    `json:"enabled"`
+       Href                      string  `json:"href"`
+       Rel                       string  `json:"rel"`
+       IsFavourite               bool    `json:"isFavourite"`
+       IsActive                  bool    `json:"isActive"`
+       IsBuilding                bool    `json:"isBuilding"`
+       AverageBuildTimeInSeconds float64 `json:"averageBuildTimeInSeconds"`
+       archived.NoPKModel
+}
+
+func (b *BambooPlan) TableName() string {
+       return "_tool_bamboo_plans"
+}
diff --git a/backend/plugins/bamboo/models/plan.go 
b/backend/plugins/bamboo/models/plan.go
new file mode 100644
index 000000000..fa1ecce92
--- /dev/null
+++ b/backend/plugins/bamboo/models/plan.go
@@ -0,0 +1,88 @@
+/*
+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 models
+
+import (
+       "github.com/apache/incubator-devlake/core/models/common"
+)
+
+type BambooPlan struct {
+       ConnectionId              uint64  `gorm:"primaryKey"`
+       PlanKey                   string  `json:"planKey" gorm:"primaryKey"`
+       Name                      string  `json:"name"`
+       Expand                    string  `json:"expand"`
+       ProjectKey                string  `json:"projectKey" gorm:"index"`
+       ProjectName               string  `json:"projectName"`
+       Description               string  `json:"description"`
+       ShortName                 string  `json:"shortName"`
+       BuildName                 string  `json:"buildName"`
+       ShortKey                  string  `json:"shortKey"`
+       Type                      string  `json:"type"`
+       Enabled                   bool    `json:"enabled"`
+       Href                      string  `json:"href"`
+       Rel                       string  `json:"rel"`
+       IsFavourite               bool    `json:"isFavourite"`
+       IsActive                  bool    `json:"isActive"`
+       IsBuilding                bool    `json:"isBuilding"`
+       AverageBuildTimeInSeconds float64 `json:"averageBuildTimeInSeconds"`
+       common.NoPKModel
+}
+
+func (b *BambooPlan) Convert(apiProject *ApiBambooPlan) {
+       b.PlanKey = apiProject.Key
+       b.Name = apiProject.Name
+       b.Expand = apiProject.Expand
+       b.ProjectKey = apiProject.ProjectKey
+       b.ProjectName = apiProject.ProjectName
+       b.Description = apiProject.Description
+       b.ShortName = apiProject.ShortName
+       b.BuildName = apiProject.BuildName
+       b.ShortKey = apiProject.ShortKey
+       b.Type = apiProject.Type
+       b.Enabled = apiProject.Enabled
+       b.Href = apiProject.Href
+       b.Rel = apiProject.Rel
+       b.IsFavourite = apiProject.IsFavourite
+       b.IsActive = apiProject.IsActive
+       b.IsBuilding = apiProject.IsBuilding
+       b.AverageBuildTimeInSeconds = apiProject.AverageBuildTimeInSeconds
+
+}
+
+func (b *BambooPlan) TableName() string {
+       return "_tool_bamboo_plans"
+}
+
+type ApiBambooPlan struct {
+       Expand                    string `json:"expand"`
+       Description               string `json:"description"`
+       ShortName                 string `json:"shortName"`
+       BuildName                 string `json:"buildName"`
+       ShortKey                  string `json:"shortKey"`
+       Type                      string `json:"type"`
+       Enabled                   bool   `json:"enabled"`
+       ProjectKey                string `json:"projectKey"`
+       ProjectName               string `json:"projectName"`
+       ApiBambooLink             `json:"link"`
+       IsFavourite               bool    `json:"isFavourite"`
+       IsActive                  bool    `json:"isActive"`
+       IsBuilding                bool    `json:"isBuilding"`
+       AverageBuildTimeInSeconds float64 `json:"averageBuildTimeInSeconds"`
+       Key                       string  `json:"key"`
+       Name                      string  `json:"name"`
+}
diff --git a/backend/plugins/bamboo/models/project.go 
b/backend/plugins/bamboo/models/project.go
index c621aa8bc..d8b903351 100644
--- a/backend/plugins/bamboo/models/project.go
+++ b/backend/plugins/bamboo/models/project.go
@@ -17,29 +17,10 @@ limitations under the License.
 
 package models
 
-import "github.com/apache/incubator-devlake/core/models/common"
-
-type ApiBambooProject struct {
-       Key         string            `json:"key"`
-       Expand      string            `json:"expand"`
-       Name        string            `json:"name"`
-       Description string            `json:"description"`
-       Link        ApiBambooLink     `json:"link"`
-       Plans       ApiBambooSizeData `json:"plans"`
-}
-
-type ApiBambooProjects struct {
-       ApiBambooSizeData
-       Expand   string             `json:"expand"`
-       Link     ApiBambooLink      `json:"link"`
-       Projects []ApiBambooProject `json:"project"`
-}
-
-type ApiBambooProjectResponse struct {
-       Expand   string            `json:"expand"`
-       Link     ApiBambooLink     `json:"link"`
-       Projects ApiBambooProjects `json:"projects"`
-}
+import (
+       "encoding/json"
+       "github.com/apache/incubator-devlake/core/models/common"
+)
 
 type BambooProject struct {
        ConnectionId         uint64 `json:"connectionId" 
mapstructure:"connectionId" gorm:"primaryKey"`
@@ -62,3 +43,30 @@ func (b *BambooProject) Convert(apiProject 
*ApiBambooProject) {
 func (b *BambooProject) TableName() string {
        return "_tool_bamboo_projects"
 }
+
+type ApiBambooPlans struct {
+       ApiBambooSizeData `json:"squash"`
+       Plan              []json.RawMessage `json:"plan"`
+}
+
+type ApiBambooProject struct {
+       Key         string         `json:"key"`
+       Expand      string         `json:"expand"`
+       Name        string         `json:"name"`
+       Description string         `json:"description"`
+       Link        ApiBambooLink  `json:"link"`
+       Plans       ApiBambooPlans `json:"plans"`
+}
+
+type ApiBambooProjects struct {
+       ApiBambooSizeData `json:"squash"`
+       Expand            string             `json:"expand"`
+       Link              ApiBambooLink      `json:"link"`
+       Projects          []ApiBambooProject `json:"project"`
+}
+
+type ApiBambooProjectResponse struct {
+       Expand   string            `json:"expand"`
+       Link     ApiBambooLink     `json:"link"`
+       Projects ApiBambooProjects `json:"projects"`
+}
diff --git a/backend/plugins/bamboo/tasks/project_collector.go 
b/backend/plugins/bamboo/tasks/plan_collector.go
similarity index 66%
rename from backend/plugins/bamboo/tasks/project_collector.go
rename to backend/plugins/bamboo/tasks/plan_collector.go
index 108a142bf..1c06d43d5 100644
--- a/backend/plugins/bamboo/tasks/project_collector.go
+++ b/backend/plugins/bamboo/tasks/plan_collector.go
@@ -23,45 +23,53 @@ import (
        "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/plugin"
        helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
-       "io"
+       "github.com/apache/incubator-devlake/plugins/bamboo/models"
        "net/http"
        "net/url"
 )
 
-const RAW_PROJECT_TABLE = "bamboo_project"
+const RAW_PLAN_TABLE = "bamboo_plan"
 
-var _ plugin.SubTaskEntryPoint = CollectProject
+var _ plugin.SubTaskEntryPoint = CollectPlan
 
-func CollectProject(taskCtx plugin.SubTaskContext) errors.Error {
-       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_PROJECT_TABLE)
+func CollectPlan(taskCtx plugin.SubTaskContext) errors.Error {
+       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_PLAN_TABLE)
 
        collectorWithState, err := 
helper.NewApiCollectorWithState(*rawDataSubTaskArgs, nil)
        if err != nil {
                return err
        }
-       incremental := collectorWithState.IsIncremental()
 
        err = collectorWithState.InitCollector(helper.ApiCollectorArgs{
-               Incremental: incremental,
                ApiClient:   data.ApiClient,
-               // TODO write which api would you want request
+               PageSize:    100,
                UrlTemplate: "project/{{ .Params.ProjectKey }}.json",
                Query: func(reqData *helper.RequestData) (url.Values, 
errors.Error) {
                        query := url.Values{}
                        query.Set("showEmpty", fmt.Sprintf("%v", true))
+                       query.Set("expand", "plans.plan")
+                       query.Set("max-result", fmt.Sprintf("%v", 
reqData.Pager.Size))
+                       query.Set("start-index", fmt.Sprintf("%v", 
(reqData.Pager.Page-1)*reqData.Pager.Size))
                        return query, nil
                },
                GetTotalPages: func(res *http.Response, args 
*helper.ApiCollectorArgs) (int, errors.Error) {
-                       return 1, nil
+                       var body struct {
+                               SizeInfo models.ApiBambooSizeData `json:"plans"`
+                       }
+                       err = helper.UnmarshalResponse(res, &body)
+                       if err != nil {
+                               return 0, err
+                       }
+                       return GetTotalPagesFromSizeInfo(&body.SizeInfo, args)
                },
 
                ResponseParser: func(res *http.Response) ([]json.RawMessage, 
errors.Error) {
-                       body, err := io.ReadAll(res.Body)
+                       body := &models.ApiBambooProject{}
+                       err = helper.UnmarshalResponse(res, body)
                        if err != nil {
-                               return nil, errors.Convert(err)
+                               return nil, err
                        }
-                       res.Body.Close()
-                       return []json.RawMessage{body}, nil
+                       return body.Plans.Plan, nil
                },
        })
        if err != nil {
@@ -70,10 +78,10 @@ func CollectProject(taskCtx plugin.SubTaskContext) 
errors.Error {
        return collectorWithState.Execute()
 }
 
-var CollectProjectMeta = plugin.SubTaskMeta{
-       Name:             "CollectProject",
-       EntryPoint:       CollectProject,
+var CollectPlanMeta = plugin.SubTaskMeta{
+       Name:             "CollectPlan",
+       EntryPoint:       CollectPlan,
        EnabledByDefault: true,
-       Description:      "Collect Project data from Bamboo api",
+       Description:      "Collect Plan data from Bamboo api",
        DomainTypes:      []string{plugin.DOMAIN_TYPE_CICD},
 }
diff --git a/backend/plugins/bamboo/tasks/plan_extractor.go 
b/backend/plugins/bamboo/tasks/plan_extractor.go
new file mode 100644
index 000000000..275060701
--- /dev/null
+++ b/backend/plugins/bamboo/tasks/plan_extractor.go
@@ -0,0 +1,61 @@
+/*
+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 tasks
+
+import (
+       "encoding/json"
+       "github.com/apache/incubator-devlake/core/errors"
+       "github.com/apache/incubator-devlake/core/plugin"
+       helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
+       "github.com/apache/incubator-devlake/plugins/bamboo/models"
+)
+
+var _ plugin.SubTaskEntryPoint = ExtractPlan
+
+func ExtractPlan(taskCtx plugin.SubTaskContext) errors.Error {
+       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_PLAN_TABLE)
+
+       extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
+               RawDataSubTaskArgs: *rawDataSubTaskArgs,
+
+               Extract: func(resData *helper.RawData) ([]interface{}, 
errors.Error) {
+                       body := &models.BambooPlan{}
+                       res := &models.ApiBambooPlan{}
+                       err := errors.Convert(json.Unmarshal(resData.Data, res))
+                       if err != nil {
+                               return nil, err
+                       }
+                       body.Convert(res)
+                       body.ConnectionId = data.Options.ConnectionId
+                       return []interface{}{body}, nil
+               },
+       })
+       if err != nil {
+               return err
+       }
+
+       return extractor.Execute()
+}
+
+var ExtractPlanMeta = plugin.SubTaskMeta{
+       Name:             "ExtractPlan",
+       EntryPoint:       ExtractPlan,
+       EnabledByDefault: true,
+       Description:      "Extract raw data into tool layer table bamboo_plan",
+       DomainTypes:      []string{plugin.DOMAIN_TYPE_CICD},
+}
diff --git a/backend/plugins/bamboo/tasks/projects_convertor.go 
b/backend/plugins/bamboo/tasks/project_convertor.go
similarity index 98%
rename from backend/plugins/bamboo/tasks/projects_convertor.go
rename to backend/plugins/bamboo/tasks/project_convertor.go
index 0db91aad3..36a575b85 100644
--- a/backend/plugins/bamboo/tasks/projects_convertor.go
+++ b/backend/plugins/bamboo/tasks/project_convertor.go
@@ -31,6 +31,8 @@ import (
        bambooModels "github.com/apache/incubator-devlake/plugins/bamboo/models"
 )
 
+const RAW_PROJECT_TABLE = "bamboo_project"
+
 var ConvertProjectsMeta = plugin.SubTaskMeta{
        Name:             "convertProjects",
        EntryPoint:       ConvertProjects,
diff --git a/backend/plugins/bamboo/tasks/project_extractor.go 
b/backend/plugins/bamboo/tasks/project_extractor.go
deleted file mode 100644
index 4423a6402..000000000
--- a/backend/plugins/bamboo/tasks/project_extractor.go
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-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 tasks
-
-import (
-       "encoding/json"
-
-       "github.com/apache/incubator-devlake/core/errors"
-       "github.com/apache/incubator-devlake/core/plugin"
-       helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
-       "github.com/apache/incubator-devlake/plugins/bamboo/models"
-)
-
-var _ plugin.SubTaskEntryPoint = ExtractProject
-
-func ExtractProject(taskCtx plugin.SubTaskContext) errors.Error {
-       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_PROJECT_TABLE)
-
-       extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
-               RawDataSubTaskArgs: *rawDataSubTaskArgs,
-
-               Extract: func(resData *helper.RawData) ([]interface{}, 
errors.Error) {
-                       res := &models.ApiBambooProject{}
-                       err := errors.Convert(json.Unmarshal(resData.Data, res))
-                       if err != nil {
-                               return nil, err
-                       }
-                       body := ConvertProject(res)
-                       body.ConnectionId = data.Options.ConnectionId
-                       return []interface{}{body}, nil
-               },
-       })
-       if err != nil {
-               return err
-       }
-
-       return extractor.Execute()
-}
-
-var ExtractProjectMeta = plugin.SubTaskMeta{
-       Name:             "ExtractProject",
-       EntryPoint:       ExtractProject,
-       EnabledByDefault: true,
-       Description:      "Extract raw data into tool layer table 
bamboo_project",
-       DomainTypes:      []string{plugin.DOMAIN_TYPE_CICD},
-}
-
-// Convert the API response to our DB model instance
-func ConvertProject(bambooApiProject *models.ApiBambooProject) 
*models.BambooProject {
-       bambooProject := &models.BambooProject{
-               ProjectKey:  bambooApiProject.Key,
-               Name:        bambooApiProject.Name,
-               Description: bambooApiProject.Description,
-               Href:        bambooApiProject.Link.Href,
-               Rel:         bambooApiProject.Link.Rel,
-       }
-       return bambooProject
-}
-
-//type ApiProject struct {
-//     ProjectKey         string `json:"key"`
-//     Name        string `json:"name"`
-//     Description string `json:"description"`
-//     Link        Link   `json:"link"`
-//}
-//type ApiActions struct {
-//     Size       int `json:"size"`
-//     StartIndex int `json:"start-index"`
-//     MaxResult  int `json:"max-result"`
-//}
-//type ApiStages struct {
-//     Size       int `json:"size"`
-//     StartIndex int `json:"start-index"`
-//     MaxResult  int `json:"max-result"`
-//}
-//type ApiBranches struct {
-//     Size       int `json:"size"`
-//     StartIndex int `json:"start-index"`
-//     MaxResult  int `json:"max-result"`
-//}
-//type ApiPlanKey struct {
-//     ProjectKey string `json:"key"`
-//}
-//type ApiPlan struct {
-//     Expand                    string `json:"expand"`
-//     ProjectKey                string `json:"projectKey"`
-//     ProjectName               string `json:"projectName"`
-//     Description               string `json:"description"`
-//     ShortName                 string `json:"shortName"`
-//     BuildName                 string `json:"buildName"`
-//     ShortKey                  string `json:"shortKey"`
-//     Type                      string `json:"type"`
-//     Enabled                   bool   `json:"enabled"`
-//     ApiLink                   `json:"link"`
-//     IsFavourite               bool     `json:"isFavourite"`
-//     IsActive                  bool     `json:"isActive"`
-//     IsBuilding                bool     `json:"isBuilding"`
-//     AverageBuildTimeInSeconds int      `json:"averageBuildTimeInSeconds"`
-//     Actions                   Actions  `json:"actions"`
-//     Stages                    Stages   `json:"stages"`
-//     Branches                  Branches `json:"branches"`
-//     ProjectKey                       string   `json:"key"`
-//     Name                      string   `json:"name"`
-//     PlanKey                   PlanKey  `json:"planKey"`
-//}
-//type ApiPlans struct {
-//     Size       int       `json:"size"`
-//     Expand     string    `json:"expand"`
-//     StartIndex int       `json:"start-index"`
-//     MaxResult  int       `json:"max-result"`
-//     Plan       []ApiPlan `json:"plan"`
-//}
diff --git a/backend/plugins/bamboo/tasks/shared.go 
b/backend/plugins/bamboo/tasks/shared.go
index 3e89bc80d..c49a7f339 100644
--- a/backend/plugins/bamboo/tasks/shared.go
+++ b/backend/plugins/bamboo/tasks/shared.go
@@ -18,11 +18,10 @@ limitations under the License.
 package tasks
 
 import (
-       "net/http"
-
        "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/plugin"
        "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
+       "github.com/apache/incubator-devlake/plugins/bamboo/models"
 )
 
 func CreateRawDataSubTaskArgs(taskCtx plugin.SubTaskContext, rawTable string) 
(*api.RawDataSubTaskArgs, *BambooTaskData) {
@@ -42,24 +41,10 @@ func CreateRawDataSubTaskArgs(taskCtx 
plugin.SubTaskContext, rawTable string) (*
        return rawDataSubTaskArgs, &filteredData
 }
 
-func GetTotalPagesFromResponse(res *http.Response, args *api.ApiCollectorArgs) 
(int, errors.Error) {
-       body := &BambooPagination{}
-       err := api.UnmarshalResponse(res, body)
-       if err != nil {
-               return 0, err
-       }
-       pages := body.Paging.Total / args.PageSize
-       if body.Paging.Total%args.PageSize > 0 {
+func GetTotalPagesFromSizeInfo(sizeInfo *models.ApiBambooSizeData, args 
*api.ApiCollectorArgs) (int, errors.Error) {
+       pages := sizeInfo.Size / args.PageSize
+       if sizeInfo.Size%args.PageSize > 0 {
                pages++
        }
        return pages, nil
 }
-
-type BambooPagination struct {
-       Paging Paging `json:"paging"`
-}
-type Paging struct {
-       PageIndex int `json:"pageIndex"`
-       PageSize  int `json:"pageSize"`
-       Total     int `json:"total"`
-}

Reply via email to