This is an automated email from the ASF dual-hosted git repository.
abeizn 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 6c0163c88 feat(sonarqube): add blueprint200 (#4365)
6c0163c88 is described below
commit 6c0163c88f6ab25e589727f0672282bb11c989c8
Author: Warren Chen <[email protected]>
AuthorDate: Thu Feb 9 13:51:41 2023 +0800
feat(sonarqube): add blueprint200 (#4365)
* feat(sonarqube): add blueprint
* fix(sonarqube): modify minor issues
* fix(sonarqube): modify swagger
---
.../plugin/tasks/api_collector.go-template | 1 +
.../template/plugin/tasks/extractor.go-template | 1 +
backend/plugins/customize/api/swagger.go | 2 +-
backend/plugins/github/api/swagger.go | 2 +-
backend/plugins/gitlab/api/swagger.go | 2 +-
backend/plugins/jenkins/api/connection.go | 2 +-
backend/plugins/jira/api/swagger.go | 2 +-
backend/plugins/jira/impl/impl.go | 20 ++--
backend/plugins/sonarqube/api/blueprint_v200.go | 106 +++++++++++++++++++++
.../plugins/sonarqube/api/blueprint_v200_test.go | 98 +++++++++++++++++++
backend/plugins/{jira => sonarqube}/api/swagger.go | 41 ++++----
backend/plugins/sonarqube/impl/impl.go | 44 +++++++--
.../plugins/sonarqube/tasks/accounts_collector.go | 1 +
.../plugins/sonarqube/tasks/accounts_extractor.go | 1 +
.../sonarqube/tasks/filemetrics_collector.go | 1 +
.../sonarqube/tasks/filemetrics_extractor.go | 1 +
.../plugins/sonarqube/tasks/hotspots_collector.go | 1 +
.../plugins/sonarqube/tasks/hotspots_extractor.go | 1 +
.../plugins/sonarqube/tasks/issues_collector.go | 1 +
.../plugins/sonarqube/tasks/issues_extractor.go | 1 +
.../plugins/sonarqube/tasks/projects_collector.go | 1 +
.../plugins/sonarqube/tasks/projects_extractor.go | 1 +
backend/plugins/tapd/api/swagger.go | 2 +-
backend/plugins/zentao/api/connection.go | 10 +-
24 files changed, 291 insertions(+), 52 deletions(-)
diff --git a/backend/generator/template/plugin/tasks/api_collector.go-template
b/backend/generator/template/plugin/tasks/api_collector.go-template
index 3626fe4e5..d9eaeec53 100644
--- a/backend/generator/template/plugin/tasks/api_collector.go-template
+++ b/backend/generator/template/plugin/tasks/api_collector.go-template
@@ -71,4 +71,5 @@ var Collect{{ .CollectorDataName }}Meta = plugin.SubTaskMeta{
EntryPoint: Collect{{ .CollectorDataName }},
EnabledByDefault: true,
Description: "Collect {{ .CollectorDataName }} data from {{
.PluginName }} api",
+ DomainTypes: []string{},
}
diff --git a/backend/generator/template/plugin/tasks/extractor.go-template
b/backend/generator/template/plugin/tasks/extractor.go-template
index 73068a5dd..8059c5f37 100644
--- a/backend/generator/template/plugin/tasks/extractor.go-template
+++ b/backend/generator/template/plugin/tasks/extractor.go-template
@@ -52,4 +52,5 @@ var Extract{{ .ExtractorDataName }}Meta = plugin.SubTaskMeta{
EntryPoint: Extract{{ .ExtractorDataName }},
EnabledByDefault: true,
Description: "Extract raw data into tool layer table {{
.plugin_name }}_{{ .extractor_data_name }}",
+ DomainTypes: []string{},
}
diff --git a/backend/plugins/customize/api/swagger.go
b/backend/plugins/customize/api/swagger.go
index 9ade51e2c..81c1c35e5 100644
--- a/backend/plugins/customize/api/swagger.go
+++ b/backend/plugins/customize/api/swagger.go
@@ -36,7 +36,7 @@ type blueprintSetting []struct {
Plugin string `json:"plugin" example:"customize"`
Scope []struct {
Options tasks.Options `json:"options"`
- } `json:"scope"`
+ } `json:"scopes"`
} `json:"connections"`
}
diff --git a/backend/plugins/github/api/swagger.go
b/backend/plugins/github/api/swagger.go
index f59a69fc0..90e9ef929 100644
--- a/backend/plugins/github/api/swagger.go
+++ b/backend/plugins/github/api/swagger.go
@@ -70,6 +70,6 @@ type GithubBlueprintSetting []struct {
Since string
} `json:"options"`
Entities []string `json:"entities"`
- } `json:"scope"`
+ } `json:"scopes"`
} `json:"connections"`
}
diff --git a/backend/plugins/gitlab/api/swagger.go
b/backend/plugins/gitlab/api/swagger.go
index 03122a77a..d62ee36bc 100644
--- a/backend/plugins/gitlab/api/swagger.go
+++ b/backend/plugins/gitlab/api/swagger.go
@@ -37,7 +37,7 @@ type GitlabBlueprintSetting []struct {
Since string
} `json:"options"`
Entities []string `json:"entities"`
- } `json:"scope"`
+ } `json:"scopes"`
} `json:"connections"`
}
diff --git a/backend/plugins/jenkins/api/connection.go
b/backend/plugins/jenkins/api/connection.go
index 3f505ba2c..af9128138 100644
--- a/backend/plugins/jenkins/api/connection.go
+++ b/backend/plugins/jenkins/api/connection.go
@@ -167,7 +167,7 @@ type JenkinsBlueprintSetting []struct {
Options struct {
} `json:"options"`
Entities []string `json:"entities"`
- } `json:"scope"`
+ } `json:"scopes"`
} `json:"connections"`
}
diff --git a/backend/plugins/jira/api/swagger.go
b/backend/plugins/jira/api/swagger.go
index 2103947c9..6e8965d7c 100644
--- a/backend/plugins/jira/api/swagger.go
+++ b/backend/plugins/jira/api/swagger.go
@@ -41,7 +41,7 @@ type JiraBlueprintSetting []struct {
Since string `json:"since"`
} `json:"options"`
Entities []string `json:"entities"`
- } `json:"scope"`
+ } `json:"scopes"`
} `json:"connections"`
}
diff --git a/backend/plugins/jira/impl/impl.go
b/backend/plugins/jira/impl/impl.go
index bf43bf346..34f82dd79 100644
--- a/backend/plugins/jira/impl/impl.go
+++ b/backend/plugins/jira/impl/impl.go
@@ -33,15 +33,17 @@ import (
"time"
)
-var _ plugin.PluginMeta = (*Jira)(nil)
-var _ plugin.PluginInit = (*Jira)(nil)
-var _ plugin.PluginTask = (*Jira)(nil)
-var _ plugin.PluginApi = (*Jira)(nil)
-var _ plugin.PluginModel = (*Jira)(nil)
-var _ plugin.PluginMigration = (*Jira)(nil)
-var _ plugin.PluginBlueprintV100 = (*Jira)(nil)
-var _ plugin.CloseablePluginTask = (*Jira)(nil)
-var _ plugin.PluginSource = (*Jira)(nil)
+var _ interface {
+ plugin.PluginMeta
+ plugin.PluginInit
+ plugin.PluginTask
+ plugin.PluginModel
+ plugin.PluginMigration
+ plugin.PluginBlueprintV100
+ plugin.DataSourcePluginBlueprintV200
+ plugin.CloseablePluginTask
+ plugin.PluginSource
+} = (*Jira)(nil)
type Jira struct {
}
diff --git a/backend/plugins/sonarqube/api/blueprint_v200.go
b/backend/plugins/sonarqube/api/blueprint_v200.go
new file mode 100644
index 000000000..2f684c911
--- /dev/null
+++ b/backend/plugins/sonarqube/api/blueprint_v200.go
@@ -0,0 +1,106 @@
+/*
+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 api
+
+import (
+ "fmt"
+ "github.com/apache/incubator-devlake/core/dal"
+ "github.com/apache/incubator-devlake/core/errors"
+ "github.com/apache/incubator-devlake/core/models/domainlayer"
+ "github.com/apache/incubator-devlake/core/models/domainlayer/didgen"
+
"github.com/apache/incubator-devlake/core/models/domainlayer/securitytesting"
+ "github.com/apache/incubator-devlake/core/plugin"
+ "github.com/apache/incubator-devlake/core/utils"
+ helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
+ "github.com/apache/incubator-devlake/plugins/sonarqube/models"
+ "time"
+)
+
+func MakeDataSourcePipelinePlanV200(subtaskMetas []plugin.SubTaskMeta,
connectionId uint64, bpScopes []*plugin.BlueprintScopeV200, syncPolicy
*plugin.BlueprintSyncPolicy) (plugin.PipelinePlan, []plugin.Scope,
errors.Error) {
+ plan := make(plugin.PipelinePlan, len(bpScopes))
+ plan, err := makeDataSourcePipelinePlanV200(subtaskMetas, plan,
bpScopes, connectionId, syncPolicy)
+ if err != nil {
+ return nil, nil, err
+ }
+ scopes, err := makeScopesV200(bpScopes, connectionId)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ return plan, scopes, nil
+}
+
+func makeDataSourcePipelinePlanV200(
+ subtaskMetas []plugin.SubTaskMeta,
+ plan plugin.PipelinePlan,
+ bpScopes []*plugin.BlueprintScopeV200,
+ connectionId uint64,
+ syncPolicy *plugin.BlueprintSyncPolicy,
+) (plugin.PipelinePlan, errors.Error) {
+ for i, bpScope := range bpScopes {
+ stage := plan[i]
+ if stage == nil {
+ stage = plugin.PipelineStage{}
+ }
+ // construct task options for Sonarqube
+ options := make(map[string]interface{})
+ options["connectionId"] = connectionId
+ options["projectKey"] = bpScope.Id
+ if syncPolicy.CreatedDateAfter != nil {
+ options["createdDateAfter"] =
syncPolicy.CreatedDateAfter.Format(time.RFC3339)
+ }
+
+ subtasks, err := helper.MakePipelinePlanSubtasks(subtaskMetas,
bpScope.Entities)
+ if err != nil {
+ return nil, err
+ }
+ stage = append(stage, &plugin.PipelineTask{
+ Plugin: "sonarqube",
+ Subtasks: subtasks,
+ Options: options,
+ })
+ plan[i] = stage
+ }
+
+ return plan, nil
+}
+
+func makeScopesV200(bpScopes []*plugin.BlueprintScopeV200, connectionId
uint64) ([]plugin.Scope, errors.Error) {
+ scopes := make([]plugin.Scope, 0)
+ for _, bpScope := range bpScopes {
+ sonarqubeProject := &models.SonarqubeProject{}
+ // get repo from db
+ err := basicRes.GetDal().First(sonarqubeProject,
+ dal.Where("connection_id = ? and `key` = ?",
+ connectionId, bpScope.Id))
+ if err != nil {
+ return nil, errors.Default.Wrap(err, fmt.Sprintf("fail
to find sonarqube project %s", bpScope.Id))
+ }
+ // add board to scopes
+ if utils.StringsContains(bpScope.Entities,
plugin.DOMAIN_TYPE_SECURITY_TESTING) {
+ stProject := &securitytesting.StProject{
+ DomainEntity: domainlayer.DomainEntity{
+ Id:
didgen.NewDomainIdGenerator(&models.SonarqubeProject{}).Generate(sonarqubeProject.ConnectionId,
sonarqubeProject.Key),
+ },
+ Name: sonarqubeProject.Name,
+ }
+ scopes = append(scopes, stProject)
+ }
+ }
+ return scopes, nil
+}
diff --git a/backend/plugins/sonarqube/api/blueprint_v200_test.go
b/backend/plugins/sonarqube/api/blueprint_v200_test.go
new file mode 100644
index 000000000..ccfbe6bde
--- /dev/null
+++ b/backend/plugins/sonarqube/api/blueprint_v200_test.go
@@ -0,0 +1,98 @@
+/*
+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 api
+
+import (
+ "github.com/apache/incubator-devlake/core/models/domainlayer"
+
"github.com/apache/incubator-devlake/core/models/domainlayer/securitytesting"
+ "github.com/apache/incubator-devlake/core/plugin"
+ mockcontext "github.com/apache/incubator-devlake/mocks/core/context"
+ mockdal "github.com/apache/incubator-devlake/mocks/core/dal"
+ mockplugin "github.com/apache/incubator-devlake/mocks/core/plugin"
+ "github.com/apache/incubator-devlake/plugins/sonarqube/models"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/mock"
+ "testing"
+)
+
+func TestMakeDataSourcePipelinePlanV200(t *testing.T) {
+ mockMeta := mockplugin.NewPluginMeta(t)
+
mockMeta.On("RootPkgPath").Return("github.com/apache/incubator-devlake/plugins/sonarqube")
+ err := plugin.RegisterPlugin("sonarqube", mockMeta)
+ assert.Nil(t, err)
+ bs := &plugin.BlueprintScopeV200{
+ Entities: []string{"SECURITYTESTING"},
+ Id: "f5a50c63-2e8f-4107-9014-853f6f467757",
+ }
+ syncPolicy := &plugin.BlueprintSyncPolicy{}
+ bpScopes := make([]*plugin.BlueprintScopeV200, 0)
+ bpScopes = append(bpScopes, bs)
+ plan := make(plugin.PipelinePlan, len(bpScopes))
+ plan, err = makeDataSourcePipelinePlanV200(nil, plan, bpScopes,
uint64(1), syncPolicy)
+ assert.Nil(t, err)
+ basicRes = NewMockBasicRes()
+ scopes, err := makeScopesV200(bpScopes, uint64(1))
+ assert.Nil(t, err)
+
+ expectPlan := plugin.PipelinePlan{
+ plugin.PipelineStage{
+ {
+ Plugin: "sonarqube",
+ Subtasks: []string{},
+ Options: map[string]interface{}{
+ "connectionId": uint64(1),
+ "projectKey":
"f5a50c63-2e8f-4107-9014-853f6f467757",
+ },
+ },
+ },
+ }
+ assert.Equal(t, expectPlan, plan)
+
+ expectScopes := make([]plugin.Scope, 0)
+ sonarqubeProject := &securitytesting.StProject{
+ DomainEntity: domainlayer.DomainEntity{
+ Id:
"sonarqube:SonarqubeProject:1:f5a50c63-2e8f-4107-9014-853f6f467757",
+ },
+ Name: "aerosolve",
+ }
+
+ expectScopes = append(expectScopes, sonarqubeProject)
+ assert.Equal(t, expectScopes, scopes)
+}
+
+// NewMockBasicRes FIXME ...
+func NewMockBasicRes() *mockcontext.BasicRes {
+ sonarqubeProject := &models.SonarqubeProject{
+ ConnectionId: 1,
+ Key: "f5a50c63-2e8f-4107-9014-853f6f467757",
+ Name: "aerosolve",
+ }
+
+ mockRes := new(mockcontext.BasicRes)
+ mockDal := new(mockdal.Dal)
+
+ mockDal.On("First", mock.Anything, mock.Anything).Run(func(args
mock.Arguments) {
+ dst := args.Get(0).(*models.SonarqubeProject)
+ *dst = *sonarqubeProject
+ }).Return(nil).Once()
+
+ mockRes.On("GetDal").Return(mockDal)
+ mockRes.On("GetConfig", mock.Anything).Return("")
+
+ return mockRes
+}
diff --git a/backend/plugins/jira/api/swagger.go
b/backend/plugins/sonarqube/api/swagger.go
similarity index 55%
copy from backend/plugins/jira/api/swagger.go
copy to backend/plugins/sonarqube/api/swagger.go
index 2103947c9..4164e0fbd 100644
--- a/backend/plugins/jira/api/swagger.go
+++ b/backend/plugins/sonarqube/api/swagger.go
@@ -17,48 +17,41 @@ limitations under the License.
package api
-import (
- "github.com/apache/incubator-devlake/plugins/jira/tasks"
-)
-
-// @Summary blueprints setting for jira
-// @Description blueprint setting for jira
-// @Tags plugins/jira
+// @Summary blueprints setting for sonarqube
+// @Description blueprint setting for sonarqube
+// @Tags plugins/sonarqube
// @Accept application/json
-// @Param blueprint-setting body JiraBlueprintSetting true "json"
-// @Router /blueprints/jira/blueprint-setting [post]
+// @Param blueprint-setting body SonarqubeBlueprintSetting true "json"
+// @Router /blueprints/sonarqube/blueprint-setting [post]
func _() {}
-type JiraBlueprintSetting []struct {
+type SonarqubeBlueprintSetting []struct {
Version string `json:"version"`
Connections []struct {
Plugin string `json:"plugin"`
ConnectionID int `json:"connectionId"`
Scope []struct {
- Transformation tasks.JiraTransformationRule
`json:"transformation"`
- Options struct {
- BoardId uint64 `json:"boardId"`
- Since string `json:"since"`
+ Options struct {
+ Id int `json:"id"`
} `json:"options"`
Entities []string `json:"entities"`
- } `json:"scope"`
+ } `json:"scopes"`
} `json:"connections"`
}
-// @Summary pipelines plan for jira
-// @Description pipelines plan for jira
-// @Tags plugins/jira
+// @Summary pipelines plan for sonarqube
+// @Description pipelines plan for sonarqube
+// @Tags plugins/sonarqube
// @Accept application/json
-// @Param pipeline-plan body JiraPipelinePlan true "json"
-// @Router /pipelines/jira/pipeline-plan [post]
+// @Param pipeline-plan body SonarqubePipelinePlan true "json"
+// @Router /pipelines/sonarqube/pipeline-plan [post]
func _() {}
-type JiraPipelinePlan [][]struct {
+type SonarqubePipelinePlan [][]struct {
Plugin string `json:"plugin"`
Subtasks []string `json:"subtasks"`
Options struct {
- BoardID int
`json:"boardId"`
- ConnectionID int
`json:"connectionId"`
- TransformationRules tasks.JiraTransformationRule
`json:"transformationRules"`
+ ProjectKey string `json:"projectKey"`
+ ConnectionID int `json:"connectionId"`
} `json:"options"`
}
diff --git a/backend/plugins/sonarqube/impl/impl.go
b/backend/plugins/sonarqube/impl/impl.go
index 58f44d901..38358d462 100644
--- a/backend/plugins/sonarqube/impl/impl.go
+++ b/backend/plugins/sonarqube/impl/impl.go
@@ -19,6 +19,7 @@ package impl
import (
"fmt"
+ "github.com/apache/incubator-devlake/core/dal"
"time"
"github.com/apache/incubator-devlake/core/context"
@@ -33,12 +34,15 @@ import (
)
// make sure interface is implemented
-var _ plugin.PluginMeta = (*Sonarqube)(nil)
-var _ plugin.PluginInit = (*Sonarqube)(nil)
-var _ plugin.PluginTask = (*Sonarqube)(nil)
-var _ plugin.PluginApi = (*Sonarqube)(nil)
-var _ plugin.PluginBlueprintV100 = (*Sonarqube)(nil)
-var _ plugin.CloseablePluginTask = (*Sonarqube)(nil)
+var _ interface {
+ plugin.PluginMeta
+ plugin.PluginInit
+ plugin.PluginTask
+ plugin.PluginMigration
+ plugin.DataSourcePluginBlueprintV200
+ plugin.CloseablePluginTask
+ plugin.PluginSource
+} = (*Sonarqube)(nil)
type Sonarqube struct{}
@@ -51,6 +55,30 @@ func (p Sonarqube) Init(br context.BasicRes) errors.Error {
return nil
}
+func (p Sonarqube) Connection() interface{} {
+ return &models.SonarqubeConnection{}
+}
+
+func (p Sonarqube) Scope() interface{} {
+ return &models.SonarqubeProject{}
+}
+
+func (p Sonarqube) TransformationRule() interface{} {
+ return nil
+}
+
+func (p Sonarqube) GetTablesInfo() []dal.Tabler {
+ return []dal.Tabler{
+ &models.SonarqubeConnection{},
+ &models.SonarqubeProject{},
+ &models.SonarqubeIssue{},
+ &models.SonarqubeIssueCodeBlock{},
+ &models.SonarqubeHotspot{},
+ &models.SonarqubeFileMetrics{},
+ &models.SonarqubeAccount{},
+ }
+}
+
func (p Sonarqube) SubTaskMetas() []plugin.SubTaskMeta {
return []plugin.SubTaskMeta{
tasks.CollectProjectsMeta,
@@ -136,8 +164,8 @@ func (p Sonarqube) ApiResources()
map[string]map[string]plugin.ApiResourceHandle
}
}
-func (p Sonarqube) MakePipelinePlan(connectionId uint64, scope
[]*plugin.BlueprintScopeV100) (plugin.PipelinePlan, errors.Error) {
- return api.MakePipelinePlan(p.SubTaskMetas(), connectionId, scope)
+func (p Sonarqube) MakeDataSourcePipelinePlanV200(connectionId uint64, scopes
[]*plugin.BlueprintScopeV200, syncPolicy plugin.BlueprintSyncPolicy) (pp
plugin.PipelinePlan, sc []plugin.Scope, err errors.Error) {
+ return api.MakeDataSourcePipelinePlanV200(p.SubTaskMetas(),
connectionId, scopes, &syncPolicy)
}
func (p Sonarqube) Close(taskCtx plugin.TaskContext) errors.Error {
diff --git a/backend/plugins/sonarqube/tasks/accounts_collector.go
b/backend/plugins/sonarqube/tasks/accounts_collector.go
index 24aeff1a4..29842ac7c 100644
--- a/backend/plugins/sonarqube/tasks/accounts_collector.go
+++ b/backend/plugins/sonarqube/tasks/accounts_collector.go
@@ -72,4 +72,5 @@ var CollectAccountsMeta = plugin.SubTaskMeta{
EntryPoint: CollectAccounts,
EnabledByDefault: true,
Description: "Collect Accounts data from Sonarqube user api",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_CROSS},
}
diff --git a/backend/plugins/sonarqube/tasks/accounts_extractor.go
b/backend/plugins/sonarqube/tasks/accounts_extractor.go
index bee692751..1d139b383 100644
--- a/backend/plugins/sonarqube/tasks/accounts_extractor.go
+++ b/backend/plugins/sonarqube/tasks/accounts_extractor.go
@@ -54,4 +54,5 @@ var ExtractAccountsMeta = plugin.SubTaskMeta{
EntryPoint: ExtractAccounts,
EnabledByDefault: true,
Description: "Extract raw data into tool layer table
sonarqube_accounts",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_CROSS},
}
diff --git a/backend/plugins/sonarqube/tasks/filemetrics_collector.go
b/backend/plugins/sonarqube/tasks/filemetrics_collector.go
index bf70a0b42..4f4f5282b 100644
--- a/backend/plugins/sonarqube/tasks/filemetrics_collector.go
+++ b/backend/plugins/sonarqube/tasks/filemetrics_collector.go
@@ -72,4 +72,5 @@ var CollectFilemetricsMeta = plugin.SubTaskMeta{
EntryPoint: CollectFilemetrics,
EnabledByDefault: true,
Description: "Collect Filemetrics data from Sonarqube api",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
}
diff --git a/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
b/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
index 3ff73f8ee..6b70b399f 100644
--- a/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
+++ b/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
@@ -136,6 +136,7 @@ var ExtractFilemetricsMeta = plugin.SubTaskMeta{
EntryPoint: ExtractFilemetrics,
EnabledByDefault: true,
Description: "Extract raw data into tool layer table
sonarqube_filemetrics",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
}
type fileMetricsResponse struct {
diff --git a/backend/plugins/sonarqube/tasks/hotspots_collector.go
b/backend/plugins/sonarqube/tasks/hotspots_collector.go
index 6d733f135..97ac7d7a7 100644
--- a/backend/plugins/sonarqube/tasks/hotspots_collector.go
+++ b/backend/plugins/sonarqube/tasks/hotspots_collector.go
@@ -71,4 +71,5 @@ var CollectHotspotsMeta = plugin.SubTaskMeta{
EntryPoint: CollectHotspots,
EnabledByDefault: true,
Description: "Collect Hotspots data from Sonarqube api",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
}
diff --git a/backend/plugins/sonarqube/tasks/hotspots_extractor.go
b/backend/plugins/sonarqube/tasks/hotspots_extractor.go
index 0ba42f744..0c394cbc2 100644
--- a/backend/plugins/sonarqube/tasks/hotspots_extractor.go
+++ b/backend/plugins/sonarqube/tasks/hotspots_extractor.go
@@ -55,4 +55,5 @@ var ExtractHotspotsMeta = plugin.SubTaskMeta{
EntryPoint: ExtractHotspots,
EnabledByDefault: true,
Description: "Extract raw data into tool layer table
sonarqube_hotspots",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
}
diff --git a/backend/plugins/sonarqube/tasks/issues_collector.go
b/backend/plugins/sonarqube/tasks/issues_collector.go
index bd1b85755..57a785542 100644
--- a/backend/plugins/sonarqube/tasks/issues_collector.go
+++ b/backend/plugins/sonarqube/tasks/issues_collector.go
@@ -77,4 +77,5 @@ var CollectIssuesMeta = plugin.SubTaskMeta{
EntryPoint: CollectIssues,
EnabledByDefault: true,
Description: "Collect issues data from Sonarqube api",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
}
diff --git a/backend/plugins/sonarqube/tasks/issues_extractor.go
b/backend/plugins/sonarqube/tasks/issues_extractor.go
index 97e941797..d659c0117 100644
--- a/backend/plugins/sonarqube/tasks/issues_extractor.go
+++ b/backend/plugins/sonarqube/tasks/issues_extractor.go
@@ -108,6 +108,7 @@ var ExtractIssuesMeta = plugin.SubTaskMeta{
EntryPoint: ExtractIssues,
EnabledByDefault: true,
Description: "Extract raw data into tool layer table
sonarqube_issues",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
}
type IssuesResponse struct {
diff --git a/backend/plugins/sonarqube/tasks/projects_collector.go
b/backend/plugins/sonarqube/tasks/projects_collector.go
index da8bd87b4..422e89ebf 100644
--- a/backend/plugins/sonarqube/tasks/projects_collector.go
+++ b/backend/plugins/sonarqube/tasks/projects_collector.go
@@ -78,4 +78,5 @@ var CollectProjectsMeta = plugin.SubTaskMeta{
EntryPoint: CollectProjects,
EnabledByDefault: true,
Description: "Collect Projects data from Sonarqube api",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
}
diff --git a/backend/plugins/sonarqube/tasks/projects_extractor.go
b/backend/plugins/sonarqube/tasks/projects_extractor.go
index a07c7d7bf..3fec3ffbe 100644
--- a/backend/plugins/sonarqube/tasks/projects_extractor.go
+++ b/backend/plugins/sonarqube/tasks/projects_extractor.go
@@ -53,4 +53,5 @@ var ExtractProjectsMeta = plugin.SubTaskMeta{
EntryPoint: ExtractProjects,
EnabledByDefault: true,
Description: "Extract raw data into tool layer table
sonarqube_projects",
+ DomainTypes: []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
}
diff --git a/backend/plugins/tapd/api/swagger.go
b/backend/plugins/tapd/api/swagger.go
index 573550a93..f5782bf8e 100644
--- a/backend/plugins/tapd/api/swagger.go
+++ b/backend/plugins/tapd/api/swagger.go
@@ -39,7 +39,7 @@ type TapdBlueprintSetting []struct {
TransformationRules TransformationRules
`json:"transformationRules"`
} `json:"options"`
Entities []string `json:"entities"`
- } `json:"scope"`
+ } `json:"scopes"`
} `json:"connections"`
}
diff --git a/backend/plugins/zentao/api/connection.go
b/backend/plugins/zentao/api/connection.go
index 177011891..60a9f2169 100644
--- a/backend/plugins/zentao/api/connection.go
+++ b/backend/plugins/zentao/api/connection.go
@@ -52,7 +52,7 @@ func TestConnection(input *plugin.ApiResourceInput)
(*plugin.ApiResourceOutput,
// @Summary create zentao connection
// @Description Create zentao connection
-// @Tags pluginszentao/
+// @Tags plugins/zentao/
// @Param body body models.ZentaoConnection true "json body"
// @Success 200 {object} models.ZentaoConnection
// @Failure 400 {string} errcode.Error "Bad Request"
@@ -70,7 +70,7 @@ func PostConnections(input *plugin.ApiResourceInput)
(*plugin.ApiResourceOutput,
// @Summary patch zentao connection
// @Description Patch zentao connection
-// @Tags pluginszentao/
+// @Tags plugins/zentao/
// @Param body body models.ZentaoConnection true "json body"
// @Success 200 {object} models.ZentaoConnection
// @Failure 400 {string} errcode.Error "Bad Request"
@@ -87,7 +87,7 @@ func PatchConnection(input *plugin.ApiResourceInput)
(*plugin.ApiResourceOutput,
// @Summary delete a zentao connection
// @Description Delete a zentao connection
-// @Tags pluginszentao/
+// @Tags plugins/zentao/
// @Success 200 {object} models.ZentaoConnection
// @Failure 400 {string} errcode.Error "Bad Request"
// @Failure 500 {string} errcode.Error "Internal Error"
@@ -104,7 +104,7 @@ func DeleteConnection(input *plugin.ApiResourceInput)
(*plugin.ApiResourceOutput
// @Summary get all zentao connections
// @Description Get all zentao connections
-// @Tags pluginszentao/
+// @Tags plugins/zentao/
// @Success 200 {object} []models.ZentaoConnection
// @Failure 400 {string} errcode.Error "Bad Request"
// @Failure 500 {string} errcode.Error "Internal Error"
@@ -120,7 +120,7 @@ func ListConnections(input *plugin.ApiResourceInput)
(*plugin.ApiResourceOutput,
// @Summary get zentao connection detail
// @Description Get zentao connection detail
-// @Tags pluginszentao/
+// @Tags plugins/zentao/
// @Success 200 {object} models.ZentaoConnection
// @Failure 400 {string} errcode.Error "Bad Request"
// @Failure 500 {string} errcode.Error "Internal Error"