You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by mi...@apache.org on 2023/05/31 07:18:57 UTC
[incubator-devlake] branch main updated: refactor: rename transformation rule to scope config - pagerduty (#5326)
This is an automated email from the ASF dual-hosted git repository.
mintsweet 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 a44656bbf refactor: rename transformation rule to scope config - pagerduty (#5326)
a44656bbf is described below
commit a44656bbfe9bd51dd1d28f139d98026f66430b0d
Author: Klesh Wong <zh...@merico.dev>
AuthorDate: Wed May 31 15:18:52 2023 +0800
refactor: rename transformation rule to scope config - pagerduty (#5326)
---
.../helpers/pluginhelper/api/mapstructure_test.go | 24 ++++++-
.../pluginhelper/api/scope_config_helper.go | 2 +-
backend/helpers/pluginhelper/api/scope_helper.go | 3 +-
backend/plugins/pagerduty/api/blueprint.go | 65 ------------------
backend/plugins/pagerduty/api/blueprint_v200.go | 24 ++++---
backend/plugins/pagerduty/api/init.go | 10 +--
backend/plugins/pagerduty/api/remote.go | 15 ++--
backend/plugins/pagerduty/api/scope_config.go | 79 ++++++++++++++++++++++
.../transformation_rules.go => api/swagger.go} | 20 +++---
.../plugins/pagerduty/api/transformation_rules.go | 79 ----------------------
backend/plugins/pagerduty/e2e/incident_test.go | 29 ++++----
backend/plugins/pagerduty/impl/impl.go | 18 ++---
.../migrationscripts/20230531_scope_config.go | 56 +++++++++++++++
.../models/migrationscripts/archived/service.go | 2 +-
.../models/migrationscripts/archived/user.go | 2 +-
.../pagerduty/models/migrationscripts/register.go | 1 +
.../{transformation_rules.go => scope_config.go} | 12 ++--
backend/plugins/pagerduty/models/service.go | 10 +--
backend/plugins/pagerduty/models/user.go | 2 +-
backend/plugins/pagerduty/tasks/task_data.go | 5 +-
20 files changed, 240 insertions(+), 218 deletions(-)
diff --git a/backend/helpers/pluginhelper/api/mapstructure_test.go b/backend/helpers/pluginhelper/api/mapstructure_test.go
index ff02761a8..ac2f10668 100644
--- a/backend/helpers/pluginhelper/api/mapstructure_test.go
+++ b/backend/helpers/pluginhelper/api/mapstructure_test.go
@@ -20,9 +20,10 @@ package api
import (
"encoding/json"
"fmt"
- "github.com/apache/incubator-devlake/core/errors"
"testing"
+ "github.com/apache/incubator-devlake/core/errors"
+
"github.com/stretchr/testify/assert"
)
@@ -57,3 +58,24 @@ func TestDecodeMapStructJsonRawMessage(t *testing.T) {
assert.Equal(t, settings["version"], "1.0.0")
assert.Equal(t, decoded.Existing, json.RawMessage(`{"hello", "world"}`))
}
+
+type StringSliceField struct {
+ Entities []string `gorm:"type:json;serializer:json" mapstructure:"entities"`
+}
+
+func TestStringSliceFieldShouldBeOverwrited(t *testing.T) {
+ decoded := &StringSliceField{
+ Entities: []string{"hello", "world"},
+ }
+ input := map[string]interface{}{
+ "entities": []string{"foo"},
+ }
+ err := DecodeMapStruct(input, decoded, true)
+ assert.Nil(t, err)
+ assert.Equal(t, decoded.Entities, []string{"foo"})
+
+ input = map[string]interface{}{}
+ err = DecodeMapStruct(input, decoded, true)
+ assert.Nil(t, err)
+ assert.Equal(t, decoded.Entities, []string{"foo"})
+}
diff --git a/backend/helpers/pluginhelper/api/scope_config_helper.go b/backend/helpers/pluginhelper/api/scope_config_helper.go
index f2ad2d004..4425091ad 100644
--- a/backend/helpers/pluginhelper/api/scope_config_helper.go
+++ b/backend/helpers/pluginhelper/api/scope_config_helper.go
@@ -90,7 +90,7 @@ func (t ScopeConfigHelper[Tr]) Update(input *plugin.ApiResourceInput) (*plugin.A
if err != nil {
return nil, errors.Default.Wrap(err, "error on saving ScopeConfig")
}
- err = DecodeMapStruct(input.Body, &old, false)
+ err = DecodeMapStruct(input.Body, &old, true)
if err != nil {
return nil, errors.Default.Wrap(err, "error decoding map into scopeConfig")
}
diff --git a/backend/helpers/pluginhelper/api/scope_helper.go b/backend/helpers/pluginhelper/api/scope_helper.go
index d5f79a7d5..c26c661df 100644
--- a/backend/helpers/pluginhelper/api/scope_helper.go
+++ b/backend/helpers/pluginhelper/api/scope_helper.go
@@ -18,11 +18,12 @@ limitations under the License.
package api
import (
+ "net/http"
+
"github.com/apache/incubator-devlake/core/context"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/plugin"
"github.com/go-playground/validator/v10"
- "net/http"
)
type (
diff --git a/backend/plugins/pagerduty/api/blueprint.go b/backend/plugins/pagerduty/api/blueprint.go
deleted file mode 100644
index a0235d70d..000000000
--- a/backend/plugins/pagerduty/api/blueprint.go
+++ /dev/null
@@ -1,65 +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 api
-
-import (
- "encoding/json"
- "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/pagerduty/models"
- "github.com/apache/incubator-devlake/plugins/pagerduty/tasks"
-)
-
-func MakePipelinePlan(subtaskMetas []plugin.SubTaskMeta, connectionId uint64, scope []*plugin.BlueprintScopeV100) (plugin.PipelinePlan, errors.Error) {
- var err errors.Error
- plan := make(plugin.PipelinePlan, len(scope))
- for i, scopeElem := range scope {
- taskOptions := make(map[string]interface{})
- err = errors.Convert(json.Unmarshal(scopeElem.Options, &taskOptions))
- if err != nil {
- return nil, errors.Default.Wrap(err, "error unmarshalling task options")
- }
- var transformationRules models.PagerdutyTransformationRule
- if len(scopeElem.Transformation) > 0 {
- err = errors.Convert(json.Unmarshal(scopeElem.Transformation, &transformationRules))
- if err != nil {
- return nil, errors.Default.Wrap(err, "unable to unmarshal transformation rule")
- }
- }
- taskOptions["connectionId"] = connectionId
- taskOptions["transformationRules"] = transformationRules
- _, err = tasks.DecodeAndValidateTaskOptions(taskOptions)
- if err != nil {
- return nil, err
- }
- // subtasks
- subtasks, err := api.MakePipelinePlanSubtasks(subtaskMetas, scopeElem.Entities)
- if err != nil {
- return nil, err
- }
- plan[i] = plugin.PipelineStage{
- {
- Plugin: "pagerduty",
- Subtasks: subtasks,
- Options: taskOptions,
- },
- }
- }
- return plan, nil
-}
diff --git a/backend/plugins/pagerduty/api/blueprint_v200.go b/backend/plugins/pagerduty/api/blueprint_v200.go
index 8c257cb4d..f45f55109 100644
--- a/backend/plugins/pagerduty/api/blueprint_v200.go
+++ b/backend/plugins/pagerduty/api/blueprint_v200.go
@@ -19,6 +19,8 @@ package api
import (
"fmt"
+ "time"
+
"github.com/apache/incubator-devlake/core/dal"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/models/domainlayer"
@@ -30,7 +32,6 @@ import (
"github.com/apache/incubator-devlake/plugins/pagerduty/models"
"github.com/apache/incubator-devlake/plugins/pagerduty/tasks"
"github.com/go-playground/validator/v10"
- "time"
)
func MakeDataSourcePipelinePlanV200(subtaskMetas []plugin.SubTaskMeta, connectionId uint64, bpScopes []*plugin.BlueprintScopeV200, syncPolicy *plugin.BlueprintSyncPolicy,
@@ -71,10 +72,10 @@ func makeDataSourcePipelinePlanV200(
if err != nil {
return nil, errors.Default.Wrap(err, fmt.Sprintf("fail to find service %s", bpScope.Id))
}
- transformationRule := &models.PagerdutyTransformationRule{}
- // get transformation rules from db
+ scopeConfig := &models.PagerdutyScopeConfig{}
+ // get scope configs from db
db := basicRes.GetDal()
- err = db.First(transformationRule, dal.Where(`id = ?`, service.TransformationRuleId))
+ err = db.First(scopeConfig, dal.Where(`id = ?`, service.ScopeConfigId))
if err != nil && !db.IsErrorNotFound(err) {
return nil, err
}
@@ -93,7 +94,7 @@ func makeDataSourcePipelinePlanV200(
return nil, err
}
var subtasks []string
- subtasks, err = api.MakePipelinePlanSubtasks(subtaskMetas, bpScope.Entities)
+ subtasks, err = api.MakePipelinePlanSubtasks(subtaskMetas, scopeConfig.Entities)
if err != nil {
return nil, err
}
@@ -112,14 +113,21 @@ func makeDataSourcePipelinePlanV200(
func makeScopesV200(bpScopes []*plugin.BlueprintScopeV200, connection *models.PagerDutyConnection) ([]plugin.Scope, errors.Error) {
scopes := make([]plugin.Scope, 0)
for _, bpScope := range bpScopes {
- service := &models.Service{}
+ db := basicRes.GetDal()
// get service from db
- err := basicRes.GetDal().First(service, dal.Where(`connection_id = ? AND id = ?`, connection.ID, bpScope.Id))
+ service := &models.Service{}
+ err := db.First(service, dal.Where(`connection_id = ? AND id = ?`, connection.ID, bpScope.Id))
if err != nil {
return nil, errors.Default.Wrap(err, fmt.Sprintf("failed to find service: %s", bpScope.Id))
}
+ // get scope configs from db
+ scopeConfig := &models.PagerdutyScopeConfig{}
+ err = db.First(scopeConfig, dal.Where(`id = ?`, service.ScopeConfigId))
+ if err != nil && !db.IsErrorNotFound(err) {
+ return nil, err
+ }
// add board to scopes
- if utils.StringsContains(bpScope.Entities, plugin.DOMAIN_TYPE_TICKET) {
+ if utils.StringsContains(scopeConfig.Entities, plugin.DOMAIN_TYPE_TICKET) {
scopeTicket := &ticket.Board{
DomainEntity: domainlayer.DomainEntity{
Id: didgen.NewDomainIdGenerator(&models.Service{}).Generate(connection.ID, service.Id),
diff --git a/backend/plugins/pagerduty/api/init.go b/backend/plugins/pagerduty/api/init.go
index 84729850c..18b66be6d 100644
--- a/backend/plugins/pagerduty/api/init.go
+++ b/backend/plugins/pagerduty/api/init.go
@@ -27,9 +27,9 @@ import (
var vld *validator.Validate
var connectionHelper *api.ConnectionApiHelper
-var scopeHelper *api.ScopeApiHelper[models.PagerDutyConnection, models.Service, models.PagerdutyTransformationRule]
+var scopeHelper *api.ScopeApiHelper[models.PagerDutyConnection, models.Service, models.PagerdutyScopeConfig]
-var trHelper *api.TransformationRuleHelper[models.PagerdutyTransformationRule]
+var scHelper *api.ScopeConfigHelper[models.PagerdutyScopeConfig]
var basicRes context.BasicRes
func Init(br context.BasicRes) {
@@ -44,16 +44,16 @@ func Init(br context.BasicRes) {
ScopeIdColumnName: "id",
RawScopeParamName: "ScopeId",
}
- scopeHelper = api.NewScopeHelper[models.PagerDutyConnection, models.Service, models.PagerdutyTransformationRule](
+ scopeHelper = api.NewScopeHelper[models.PagerDutyConnection, models.Service, models.PagerdutyScopeConfig](
basicRes,
vld,
connectionHelper,
- api.NewScopeDatabaseHelperImpl[models.PagerDutyConnection, models.Service, models.PagerdutyTransformationRule](
+ api.NewScopeDatabaseHelperImpl[models.PagerDutyConnection, models.Service, models.PagerdutyScopeConfig](
basicRes, connectionHelper, params),
params,
&api.ScopeHelperOptions{},
)
- trHelper = api.NewTransformationRuleHelper[models.PagerdutyTransformationRule](
+ scHelper = api.NewScopeConfigHelper[models.PagerdutyScopeConfig](
basicRes,
vld,
)
diff --git a/backend/plugins/pagerduty/api/remote.go b/backend/plugins/pagerduty/api/remote.go
index ea2ceefad..f592bda2e 100644
--- a/backend/plugins/pagerduty/api/remote.go
+++ b/backend/plugins/pagerduty/api/remote.go
@@ -22,14 +22,15 @@ import (
"encoding/base64"
"encoding/json"
"fmt"
+ "net/http"
+ "net/url"
+ "strconv"
+
"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/pagerduty/models"
"github.com/apache/incubator-devlake/plugins/pagerduty/models/raw"
- "net/http"
- "net/url"
- "strconv"
)
type RemoteScopesChild struct {
@@ -130,10 +131,10 @@ func RemoteScopes(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, er
Id: service.Id,
Name: service.Name,
Data: models.Service{
- Url: service.HtmlUrl,
- Id: service.Id,
- TransformationRuleId: 0, // this is not determined here
- Name: service.Name,
+ Url: service.HtmlUrl,
+ Id: service.Id,
+ ScopeConfigId: 0, // this is not determined here
+ Name: service.Name,
},
}
outputBody.Children = append(outputBody.Children, child)
diff --git a/backend/plugins/pagerduty/api/scope_config.go b/backend/plugins/pagerduty/api/scope_config.go
new file mode 100644
index 000000000..2d91e074e
--- /dev/null
+++ b/backend/plugins/pagerduty/api/scope_config.go
@@ -0,0 +1,79 @@
+/*
+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/errors"
+ "github.com/apache/incubator-devlake/core/plugin"
+)
+
+// CreateScopeConfig create scope config for PagerDuty
+// @Summary create scope config for PagerDuty
+// @Description create scope config for PagerDuty
+// @Tags plugins/pagerduty
+// @Accept application/json
+// @Param scopeConfig body models.PagerdutyScopeConfig true "scope config"
+// @Success 200 {object} models.PagerdutyScopeConfig
+// @Failure 400 {object} shared.ApiBody "Bad Request"
+// @Failure 500 {object} shared.ApiBody "Internal Error"
+// @Router /plugins/pagerduty/connections/:connectionId/scope_configs [POST]
+func CreateScopeConfig(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
+ return scHelper.Create(input)
+}
+
+// UpdateScopeConfig update scope config for Github
+// @Summary update scope config for Github
+// @Description update scope config for Github
+// @Tags plugins/pagerduty
+// @Accept application/json
+// @Param id path int true "id"
+// @Param scopeConfig body models.PagerdutyScopeConfig true "scope config"
+// @Success 200 {object} models.PagerdutyScopeConfig
+// @Failure 400 {object} shared.ApiBody "Bad Request"
+// @Failure 500 {object} shared.ApiBody "Internal Error"
+// @Router /plugins/pagerduty/connections/:connectionId/scope_configs/{id} [PATCH]
+func UpdateScopeConfig(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
+ return scHelper.Update(input)
+}
+
+// GetScopeConfig return one scope config
+// @Summary return one scope config
+// @Description return one scope config
+// @Tags plugins/pagerduty
+// @Param id path int true "id"
+// @Success 200 {object} models.PagerdutyScopeConfig
+// @Failure 400 {object} shared.ApiBody "Bad Request"
+// @Failure 500 {object} shared.ApiBody "Internal Error"
+// @Router /plugins/pagerduty/connections/:connectionId/scope_configs/{id} [GET]
+func GetScopeConfig(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
+ return scHelper.Get(input)
+}
+
+// GetScopeConfigList return all scope configs
+// @Summary return all scope configs
+// @Description return all scope configs
+// @Tags plugins/pagerduty
+// @Param pageSize query int false "page size, default 50"
+// @Param page query int false "page size, default 1"
+// @Success 200 {object} []models.PagerdutyScopeConfig
+// @Failure 400 {object} shared.ApiBody "Bad Request"
+// @Failure 500 {object} shared.ApiBody "Internal Error"
+// @Router /plugins/pagerduty/connections/:connectionId/scope_configs [GET]
+func GetScopeConfigList(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
+ return scHelper.List(input)
+}
diff --git a/backend/plugins/pagerduty/models/transformation_rules.go b/backend/plugins/pagerduty/api/swagger.go
similarity index 63%
copy from backend/plugins/pagerduty/models/transformation_rules.go
copy to backend/plugins/pagerduty/api/swagger.go
index 6d83916ac..3d8f2a554 100644
--- a/backend/plugins/pagerduty/models/transformation_rules.go
+++ b/backend/plugins/pagerduty/api/swagger.go
@@ -15,18 +15,18 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package models
+package api
import (
- "github.com/apache/incubator-devlake/core/models/common"
+ "github.com/apache/incubator-devlake/plugins/pagerduty/tasks"
)
-type PagerdutyTransformationRule struct {
- common.Model `mapstructure:"-"`
- Name string `mapstructure:"name" json:"name" gorm:"type:varchar(255);index:idx_name_github,unique" validate:"required"`
- ConnectionId uint64
-}
+type PagerdutyTaskOptions tasks.PagerDutyOptions
-func (PagerdutyTransformationRule) TableName() string {
- return "_tool_pagerduty_transformation_rules"
-}
+// @Summary pagerduty task options for pipelines
+// @Description This is a dummy API to demonstrate the available task options for pagerduty pipelines
+// @Tags plugins/pagerduty
+// @Accept application/json
+// @Param pipeline body PagerDutyTaskOptions true "json"
+// @Router /pipelines/pagerduty/pipeline-task [post]
+func _() {}
diff --git a/backend/plugins/pagerduty/api/transformation_rules.go b/backend/plugins/pagerduty/api/transformation_rules.go
deleted file mode 100644
index 860f0c490..000000000
--- a/backend/plugins/pagerduty/api/transformation_rules.go
+++ /dev/null
@@ -1,79 +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 api
-
-import (
- "github.com/apache/incubator-devlake/core/errors"
- "github.com/apache/incubator-devlake/core/plugin"
-)
-
-// CreateTransformationRule create transformation rule for PagerDuty
-// @Summary create transformation rule for PagerDuty
-// @Description create transformation rule for PagerDuty
-// @Tags plugins/pagerduty
-// @Accept application/json
-// @Param transformationRule body models.PagerdutyTransformationRule true "transformation rule"
-// @Success 200 {object} models.PagerdutyTransformationRule
-// @Failure 400 {object} shared.ApiBody "Bad Request"
-// @Failure 500 {object} shared.ApiBody "Internal Error"
-// @Router /plugins/pagerduty/connections/:connectionId/transformation_rules [POST]
-func CreateTransformationRule(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
- return trHelper.Create(input)
-}
-
-// UpdateTransformationRule update transformation rule for Github
-// @Summary update transformation rule for Github
-// @Description update transformation rule for Github
-// @Tags plugins/pagerduty
-// @Accept application/json
-// @Param id path int true "id"
-// @Param transformationRule body models.PagerdutyTransformationRule true "transformation rule"
-// @Success 200 {object} models.PagerdutyTransformationRule
-// @Failure 400 {object} shared.ApiBody "Bad Request"
-// @Failure 500 {object} shared.ApiBody "Internal Error"
-// @Router /plugins/pagerduty/connections/:connectionId/transformation_rules/{id} [PATCH]
-func UpdateTransformationRule(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
- return trHelper.Update(input)
-}
-
-// GetTransformationRule return one transformation rule
-// @Summary return one transformation rule
-// @Description return one transformation rule
-// @Tags plugins/pagerduty
-// @Param id path int true "id"
-// @Success 200 {object} models.PagerdutyTransformationRule
-// @Failure 400 {object} shared.ApiBody "Bad Request"
-// @Failure 500 {object} shared.ApiBody "Internal Error"
-// @Router /plugins/pagerduty/connections/:connectionId/transformation_rules/{id} [GET]
-func GetTransformationRule(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
- return trHelper.Get(input)
-}
-
-// GetTransformationRuleList return all transformation rules
-// @Summary return all transformation rules
-// @Description return all transformation rules
-// @Tags plugins/pagerduty
-// @Param pageSize query int false "page size, default 50"
-// @Param page query int false "page size, default 1"
-// @Success 200 {object} []models.PagerdutyTransformationRule
-// @Failure 400 {object} shared.ApiBody "Bad Request"
-// @Failure 500 {object} shared.ApiBody "Internal Error"
-// @Router /plugins/pagerduty/connections/:connectionId/transformation_rules [GET]
-func GetTransformationRuleList(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
- return trHelper.List(input)
-}
diff --git a/backend/plugins/pagerduty/e2e/incident_test.go b/backend/plugins/pagerduty/e2e/incident_test.go
index 1a77bd268..6076b8a0b 100644
--- a/backend/plugins/pagerduty/e2e/incident_test.go
+++ b/backend/plugins/pagerduty/e2e/incident_test.go
@@ -19,6 +19,8 @@ package e2e
import (
"fmt"
+ "testing"
+
"github.com/apache/incubator-devlake/core/models/common"
"github.com/apache/incubator-devlake/core/models/domainlayer/ticket"
"github.com/apache/incubator-devlake/helpers/e2ehelper"
@@ -26,36 +28,35 @@ import (
"github.com/apache/incubator-devlake/plugins/pagerduty/models"
"github.com/apache/incubator-devlake/plugins/pagerduty/tasks"
"github.com/stretchr/testify/require"
- "testing"
)
func TestIncidentDataFlow(t *testing.T) {
var plugin impl.PagerDuty
dataflowTester := e2ehelper.NewDataFlowTester(t, "pagerduty", plugin)
- rule := models.PagerdutyTransformationRule{
+ scopeConfig := models.PagerdutyScopeConfig{
Name: "rule1",
}
options := tasks.PagerDutyOptions{
- ConnectionId: 1,
- ServiceId: "PIKL83L",
- ServiceName: "DevService",
- Tasks: nil,
- PagerdutyTransformationRule: &rule,
+ ConnectionId: 1,
+ ServiceId: "PIKL83L",
+ ServiceName: "DevService",
+ Tasks: nil,
+ PagerdutyScopeConfig: &scopeConfig,
}
taskData := &tasks.PagerDutyTaskData{
Options: &options,
}
- dataflowTester.FlushTabler(&models.PagerdutyTransformationRule{})
+ dataflowTester.FlushTabler(&models.PagerdutyScopeConfig{})
dataflowTester.FlushTabler(&models.Service{})
// tx-rule
- require.NoError(t, dataflowTester.Dal.CreateOrUpdate(&rule))
+ require.NoError(t, dataflowTester.Dal.CreateOrUpdate(&scopeConfig))
service := models.Service{
- ConnectionId: options.ConnectionId,
- Url: fmt.Sprintf("https://keon-test.pagerduty.com/service-directory/%s", options.ServiceId),
- Id: options.ServiceId,
- TransformationRuleId: rule.ID,
- Name: options.ServiceName,
+ ConnectionId: options.ConnectionId,
+ Url: fmt.Sprintf("https://keon-test.pagerduty.com/service-directory/%s", options.ServiceId),
+ Id: options.ServiceId,
+ ScopeConfigId: scopeConfig.ID,
+ Name: options.ServiceName,
}
// scope
require.NoError(t, dataflowTester.Dal.CreateOrUpdate(&service))
diff --git a/backend/plugins/pagerduty/impl/impl.go b/backend/plugins/pagerduty/impl/impl.go
index 35a1cd828..b3f1da041 100644
--- a/backend/plugins/pagerduty/impl/impl.go
+++ b/backend/plugins/pagerduty/impl/impl.go
@@ -39,7 +39,7 @@ var _ plugin.PluginTask = (*PagerDuty)(nil)
var _ plugin.PluginApi = (*PagerDuty)(nil)
var _ plugin.PluginModel = (*PagerDuty)(nil)
-var _ plugin.PluginBlueprintV100 = (*PagerDuty)(nil)
+var _ plugin.DataSourcePluginBlueprintV200 = (*PagerDuty)(nil)
var _ plugin.CloseablePluginTask = (*PagerDuty)(nil)
type PagerDuty struct{}
@@ -148,21 +148,17 @@ func (p PagerDuty) ApiResources() map[string]map[string]plugin.ApiResourceHandle
"PATCH": api.UpdateScope,
"DELETE": api.DeleteScope,
},
- "connections/:connectionId/transformation_rules": {
- "POST": api.CreateTransformationRule,
- "GET": api.GetTransformationRuleList,
+ "connections/:connectionId/scope_configs": {
+ "POST": api.CreateScopeConfig,
+ "GET": api.GetScopeConfigList,
},
- "connections/:connectionId/transformation_rules/:id": {
- "PATCH": api.UpdateTransformationRule,
- "GET": api.GetTransformationRule,
+ "connections/:connectionId/scope_configs/:id": {
+ "PATCH": api.UpdateScopeConfig,
+ "GET": api.GetScopeConfig,
},
}
}
-func (p PagerDuty) MakePipelinePlan(connectionId uint64, scope []*plugin.BlueprintScopeV100) (plugin.PipelinePlan, errors.Error) {
- return api.MakePipelinePlan(p.SubTaskMetas(), connectionId, scope)
-}
-
func (p PagerDuty) MakeDataSourcePipelinePlanV200(connectionId uint64, scopes []*plugin.BlueprintScopeV200, syncPolicy plugin.BlueprintSyncPolicy,
) (plugin.PipelinePlan, []plugin.Scope, errors.Error) {
return api.MakeDataSourcePipelinePlanV200(p.SubTaskMetas(), connectionId, scopes, &syncPolicy)
diff --git a/backend/plugins/pagerduty/models/migrationscripts/20230531_scope_config.go b/backend/plugins/pagerduty/models/migrationscripts/20230531_scope_config.go
new file mode 100644
index 000000000..ad39e0708
--- /dev/null
+++ b/backend/plugins/pagerduty/models/migrationscripts/20230531_scope_config.go
@@ -0,0 +1,56 @@
+/*
+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/errors"
+ "github.com/apache/incubator-devlake/helpers/migrationhelper"
+)
+
+type renameTr2ScopeConfig struct {
+}
+
+type scopeConfig20230531 struct {
+ Entities []string `gorm:"type:json" json:"entities"`
+}
+
+func (scopeConfig20230531) TableName() string {
+ return "_tool_pagerduty_scope_configs"
+}
+
+func (u *renameTr2ScopeConfig) Up(baseRes context.BasicRes) errors.Error {
+ db := baseRes.GetDal()
+ err := db.RenameColumn("_tool_pagerduty_services", "transformation_rule_id", "scope_config_id")
+ if err != nil {
+ return err
+ }
+ err = db.RenameTable("_tool_pagerduty_transformation_rules", "_tool_pagerduty_scope_configs")
+ if err != nil {
+ return err
+ }
+ return migrationhelper.AutoMigrateTables(baseRes, &scopeConfig20230531{})
+}
+
+func (*renameTr2ScopeConfig) Version() uint64 {
+ return 20230531130109
+}
+
+func (*renameTr2ScopeConfig) Name() string {
+ return "rename transformation rule to scope config for pagerduty"
+}
diff --git a/backend/plugins/pagerduty/models/migrationscripts/archived/service.go b/backend/plugins/pagerduty/models/migrationscripts/archived/service.go
index 36d404d4d..065aab1e4 100644
--- a/backend/plugins/pagerduty/models/migrationscripts/archived/service.go
+++ b/backend/plugins/pagerduty/models/migrationscripts/archived/service.go
@@ -25,7 +25,7 @@ type (
Service struct {
common.NoPKModel
ConnectionId uint64 `gorm:"primaryKey"`
- Id string `gorm:"primaryKey"`
+ Id string `gorm:"primaryKey;autoIncremental:false"`
Url string
Name string
}
diff --git a/backend/plugins/pagerduty/models/migrationscripts/archived/user.go b/backend/plugins/pagerduty/models/migrationscripts/archived/user.go
index 0d7eb72e1..af8033f83 100644
--- a/backend/plugins/pagerduty/models/migrationscripts/archived/user.go
+++ b/backend/plugins/pagerduty/models/migrationscripts/archived/user.go
@@ -24,7 +24,7 @@ import (
type User struct {
common.NoPKModel
ConnectionId uint64 `gorm:"primaryKey"`
- Id string `gorm:"primaryKey"`
+ Id string `gorm:"primaryKey;autoIncremental:false"`
Url string
Name string
}
diff --git a/backend/plugins/pagerduty/models/migrationscripts/register.go b/backend/plugins/pagerduty/models/migrationscripts/register.go
index 75aa89265..a52ffebd4 100644
--- a/backend/plugins/pagerduty/models/migrationscripts/register.go
+++ b/backend/plugins/pagerduty/models/migrationscripts/register.go
@@ -28,5 +28,6 @@ func All() []plugin.MigrationScript {
new(addEndpointAndProxyToConnection),
new(addPagerdutyConnectionFields20230123),
new(addTransformationRulesToService20230303),
+ new(renameTr2ScopeConfig),
}
}
diff --git a/backend/plugins/pagerduty/models/transformation_rules.go b/backend/plugins/pagerduty/models/scope_config.go
similarity index 70%
rename from backend/plugins/pagerduty/models/transformation_rules.go
rename to backend/plugins/pagerduty/models/scope_config.go
index 6d83916ac..93c403cfb 100644
--- a/backend/plugins/pagerduty/models/transformation_rules.go
+++ b/backend/plugins/pagerduty/models/scope_config.go
@@ -21,12 +21,12 @@ import (
"github.com/apache/incubator-devlake/core/models/common"
)
-type PagerdutyTransformationRule struct {
- common.Model `mapstructure:"-"`
- Name string `mapstructure:"name" json:"name" gorm:"type:varchar(255);index:idx_name_github,unique" validate:"required"`
- ConnectionId uint64
+type PagerdutyScopeConfig struct {
+ common.ScopeConfig `mapstructure:",squash" json:",inline" gorm:"embedded"`
+ Name string `mapstructure:"name" json:"name" gorm:"type:varchar(255);index:idx_name_github,unique" validate:"required"`
+ ConnectionId uint64
}
-func (PagerdutyTransformationRule) TableName() string {
- return "_tool_pagerduty_transformation_rules"
+func (PagerdutyScopeConfig) TableName() string {
+ return "_tool_pagerduty_scope_configs"
}
diff --git a/backend/plugins/pagerduty/models/service.go b/backend/plugins/pagerduty/models/service.go
index 6c5cfb3ee..114a6ac62 100644
--- a/backend/plugins/pagerduty/models/service.go
+++ b/backend/plugins/pagerduty/models/service.go
@@ -23,11 +23,11 @@ import (
type Service struct {
common.NoPKModel
- ConnectionId uint64 `json:"connection_id" mapstructure:"connectionId,omitempty" gorm:"primaryKey" `
- Url string `json:"url" mapstructure:"url"`
- Id string `json:"id" mapstructure:"id" gorm:"primaryKey" `
- TransformationRuleId uint64 `json:"transformation_rule_id" mapstructure:"transformation_rule_id,omitempty"` //keys to PagerdutyTransformationRules.ID
- Name string `json:"name" mapstructure:"name"`
+ ConnectionId uint64 `json:"connection_id" mapstructure:"connectionId,omitempty" gorm:"primaryKey" `
+ Id string `json:"id" mapstructure:"id" gorm:"primaryKey;autoIncrement:false" `
+ Url string `json:"url" mapstructure:"url"`
+ ScopeConfigId uint64 `json:"scopeConfigId" mapstructure:"scopeConfigId,omitempty"` //keys to PagerdutyScopeConfigs.ID
+ Name string `json:"name" mapstructure:"name"`
}
func (Service) TableName() string {
diff --git a/backend/plugins/pagerduty/models/user.go b/backend/plugins/pagerduty/models/user.go
index 130b0d913..36799dff6 100644
--- a/backend/plugins/pagerduty/models/user.go
+++ b/backend/plugins/pagerduty/models/user.go
@@ -24,7 +24,7 @@ import (
type User struct {
common.NoPKModel
ConnectionId uint64 `gorm:"primaryKey"`
- Id string `gorm:"primaryKey"`
+ Id string `gorm:"primaryKey;autoIncrement:false"`
Url string
Name string
}
diff --git a/backend/plugins/pagerduty/tasks/task_data.go b/backend/plugins/pagerduty/tasks/task_data.go
index b223a167e..b1a42c211 100644
--- a/backend/plugins/pagerduty/tasks/task_data.go
+++ b/backend/plugins/pagerduty/tasks/task_data.go
@@ -18,10 +18,11 @@ limitations under the License.
package tasks
import (
+ "time"
+
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/helpers/pluginhelper/api"
"github.com/apache/incubator-devlake/plugins/pagerduty/models"
- "time"
)
type PagerDutyOptions struct {
@@ -30,7 +31,7 @@ type PagerDutyOptions struct {
ServiceId string `json:"service_id,omitempty"`
ServiceName string `json:"service_name,omitempty"`
Tasks []string `json:"tasks,omitempty"`
- *models.PagerdutyTransformationRule
+ *models.PagerdutyScopeConfig
}
type PagerDutyTaskData struct {