You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by ka...@apache.org on 2023/05/25 20:07:26 UTC

[incubator-devlake] branch cherrypick/5281 created (now 94df10ff6)

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

ka94 pushed a change to branch cherrypick/5281
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


      at 94df10ff6 [fix-5278]: PagerDuty incident conversion query by service ID (#5281)

This branch includes the following new commits:

     new 94df10ff6 [fix-5278]: PagerDuty incident conversion query by service ID (#5281)

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-devlake] 01/01: [fix-5278]: PagerDuty incident conversion query by service ID (#5281)

Posted by ka...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 94df10ff60099ce33becafa267bd85bb4dd8a30b
Author: Keon Amini <ke...@merico.dev>
AuthorDate: Thu May 25 06:54:06 2023 -0500

    [fix-5278]: PagerDuty incident conversion query by service ID (#5281)
    
    * fix: PagerDuty incident converter now queries incidents by service_id as well
    
    * refactor: removed unused code
    
    ---------
    
    Co-authored-by: Louis.z <lo...@gmail.com>
---
 backend/plugins/pagerduty/api/remote.go            | 106 +--------
 backend/plugins/pagerduty/models/raw/incidents.go  |   2 +-
 backend/plugins/pagerduty/models/raw/services.go   | 248 ++++++---------------
 .../plugins/pagerduty/tasks/incidents_converter.go |   2 +-
 .../plugins/pagerduty/tasks/incidents_extractor.go |   2 +-
 5 files changed, 75 insertions(+), 285 deletions(-)

diff --git a/backend/plugins/pagerduty/api/remote.go b/backend/plugins/pagerduty/api/remote.go
index 6cb4ab064..ea2ceefad 100644
--- a/backend/plugins/pagerduty/api/remote.go
+++ b/backend/plugins/pagerduty/api/remote.go
@@ -26,10 +26,10 @@ import (
 	"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"
-	"time"
 )
 
 type RemoteScopesChild struct {
@@ -56,110 +56,16 @@ type PageData struct {
 	PerPage int `json:"per_page"`
 }
 
-type TeamResponse struct {
-	Offset int  `json:"offset"`
-	Limit  int  `json:"limit"`
-	More   bool `json:"more"`
-	Total  int  `json:"total"`
-	Teams  []struct {
-		Id   string `json:"id"`
-		Name string `json:"name"`
-	} `json:"teams"`
-}
-
-type WorkspaceItem struct {
-	//Type string `json:"type"`
-	//Uuid string `json:"uuid"`
-	Slug string `json:"slug"`
-	Name string `json:"name"`
-}
-
-type ReposResponse struct {
-	Pagelen int              `json:"pagelen"`
-	Page    int              `json:"page"`
-	Size    int              `json:"size"`
-	Values  []models.Service `json:"values"`
-}
-
 type ServiceResponse struct {
-	Offset   int  `json:"offset"`
-	Limit    int  `json:"limit"`
-	More     bool `json:"more"`
-	Total    int  `json:"total"`
-	Services []struct {
-		Id                      string    `json:"id"`
-		Summary                 string    `json:"summary"`
-		Type                    string    `json:"type"`
-		Self                    string    `json:"self"`
-		HtmlUrl                 string    `json:"html_url"`
-		Name                    string    `json:"name"`
-		AutoResolveTimeout      int       `json:"auto_resolve_timeout"`
-		AcknowledgementTimeout  int       `json:"acknowledgement_timeout"`
-		CreatedAt               time.Time `json:"created_at"`
-		Status                  string    `json:"status"`
-		AlertCreation           string    `json:"alert_creation"`
-		AlertGroupingParameters struct {
-			Type string `json:"type"`
-		} `json:"alert_grouping_parameters"`
-		Integrations []struct {
-			Id      string `json:"id"`
-			Type    string `json:"type"`
-			Summary string `json:"summary"`
-			Self    string `json:"self"`
-			HtmlUrl string `json:"html_url"`
-		} `json:"integrations"`
-		EscalationPolicy struct {
-			Id      string `json:"id"`
-			Type    string `json:"type"`
-			Summary string `json:"summary"`
-			Self    string `json:"self"`
-			HtmlUrl string `json:"html_url"`
-		} `json:"escalation_policy"`
-		Teams []struct {
-			Id      string `json:"id"`
-			Type    string `json:"type"`
-			Summary string `json:"summary"`
-			Self    string `json:"self"`
-			HtmlUrl string `json:"html_url"`
-		} `json:"teams"`
-		IncidentUrgencyRule struct {
-			Type               string `json:"type"`
-			DuringSupportHours struct {
-				Type    string `json:"type"`
-				Urgency string `json:"urgency"`
-			} `json:"during_support_hours"`
-			OutsideSupportHours struct {
-				Type    string `json:"type"`
-				Urgency string `json:"urgency"`
-			} `json:"outside_support_hours"`
-		} `json:"incident_urgency_rule"`
-		SupportHours struct {
-			Type       string `json:"type"`
-			TimeZone   string `json:"time_zone"`
-			StartTime  string `json:"start_time"`
-			EndTime    string `json:"end_time"`
-			DaysOfWeek []int  `json:"days_of_week"`
-		} `json:"support_hours"`
-		ScheduledActions []struct {
-			Type string `json:"type"`
-			At   struct {
-				Type string `json:"type"`
-				Name string `json:"name"`
-			} `json:"at"`
-			ToUrgency string `json:"to_urgency"`
-		} `json:"scheduled_actions"`
-		AutoPauseNotificationsParameters struct {
-			Enabled bool `json:"enabled"`
-			Timeout int  `json:"timeout"`
-		} `json:"auto_pause_notifications_parameters"`
-	}
+	Offset   int           `json:"offset"`
+	Limit    int           `json:"limit"`
+	More     bool          `json:"more"`
+	Total    int           `json:"total"`
+	Services []raw.Service `json:"services"`
 }
 
 const RemoteScopesPerPage int = 100
 const TypeScope string = "scope"
-const TypeGroup string = "group"
-
-//const TypeGroup string = "group"
 
 // RemoteScopes list all available scopes (services) for this connection
 // @Summary list all available scopes (services) for this connection
diff --git a/backend/plugins/pagerduty/models/raw/incidents.go b/backend/plugins/pagerduty/models/raw/incidents.go
index 464ab1072..06299858c 100644
--- a/backend/plugins/pagerduty/models/raw/incidents.go
+++ b/backend/plugins/pagerduty/models/raw/incidents.go
@@ -19,7 +19,7 @@ package raw
 
 import "time"
 
-type Incidents struct {
+type Incident struct {
 	// Acknowledgements corresponds to the JSON schema field "acknowledgements".
 	Acknowledgements []IncidentsAcknowledgementsElem `json:"acknowledgements,omitempty"`
 
diff --git a/backend/plugins/pagerduty/models/raw/services.go b/backend/plugins/pagerduty/models/raw/services.go
index c68b42f2a..d268e6dd3 100644
--- a/backend/plugins/pagerduty/models/raw/services.go
+++ b/backend/plugins/pagerduty/models/raw/services.go
@@ -19,186 +19,70 @@ package raw
 
 import "time"
 
-type Services struct {
-	// AcknowledgementTimeout corresponds to the JSON schema field
-	// "acknowledgement_timeout".
-	AcknowledgementTimeout *int `json:"acknowledgement_timeout,omitempty"`
-
-	// AlertCreation corresponds to the JSON schema field "alert_creation".
-	AlertCreation *string `json:"alert_creation,omitempty"`
-
-	// AlertGrouping corresponds to the JSON schema field "alert_grouping".
-	AlertGrouping *string `json:"alert_grouping,omitempty"`
-
-	// AlertGroupingTimeout corresponds to the JSON schema field
-	// "alert_grouping_timeout".
-	AlertGroupingTimeout *int `json:"alert_grouping_timeout,omitempty"`
-
-	// AutoResolveTimeout corresponds to the JSON schema field "auto_resolve_timeout".
-	AutoResolveTimeout *int `json:"auto_resolve_timeout,omitempty"`
-
-	// CreatedAt corresponds to the JSON schema field "created_at".
-	CreatedAt *time.Time `json:"created_at,omitempty"`
-
-	// Description corresponds to the JSON schema field "description".
-	Description *string `json:"description,omitempty"`
-
-	// EscalationPolicy corresponds to the JSON schema field "escalation_policy".
-	EscalationPolicy *ServicesEscalationPolicy `json:"escalation_policy,omitempty"`
-
-	// HtmlUrl corresponds to the JSON schema field "html_url".
-	HtmlUrl *string `json:"html_url,omitempty"`
-
-	// Id corresponds to the JSON schema field "id".
-	Id *string `json:"id,omitempty"`
-
-	// IncidentUrgencyRule corresponds to the JSON schema field
-	// "incident_urgency_rule".
-	IncidentUrgencyRule *ServicesIncidentUrgencyRule `json:"incident_urgency_rule,omitempty"`
-
-	// Integrations corresponds to the JSON schema field "integrations".
-	Integrations []ServicesIntegrationsElem `json:"integrations,omitempty"`
-
-	// LastIncidentTimestamp corresponds to the JSON schema field
-	// "last_incident_timestamp".
-	LastIncidentTimestamp *time.Time `json:"last_incident_timestamp,omitempty"`
-
-	// Name corresponds to the JSON schema field "name".
-	Name *string `json:"name,omitempty"`
-
-	// ScheduledActions corresponds to the JSON schema field "scheduled_actions".
-	ScheduledActions []ServicesScheduledActionsElem `json:"scheduled_actions,omitempty"`
-
-	// Self corresponds to the JSON schema field "self".
-	Self *string `json:"self,omitempty"`
-
-	// Status corresponds to the JSON schema field "status".
-	Status *string `json:"status,omitempty"`
-
-	// Summary corresponds to the JSON schema field "summary".
-	Summary *string `json:"summary,omitempty"`
-
-	// SupportHours corresponds to the JSON schema field "support_hours".
-	SupportHours *ServicesSupportHours `json:"support_hours,omitempty"`
-
-	// Teams corresponds to the JSON schema field "teams".
-	Teams []ServicesTeamsElem `json:"teams,omitempty"`
-
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-}
-
-type ServicesEscalationPolicy struct {
-	// HtmlUrl corresponds to the JSON schema field "html_url".
-	HtmlUrl *string `json:"html_url,omitempty"`
-
-	// Id corresponds to the JSON schema field "id".
-	Id *string `json:"id,omitempty"`
-
-	// Self corresponds to the JSON schema field "self".
-	Self *string `json:"self,omitempty"`
-
-	// Summary corresponds to the JSON schema field "summary".
-	Summary *string `json:"summary,omitempty"`
-
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-}
-
-type ServicesIncidentUrgencyRule struct {
-	// DuringSupportHours corresponds to the JSON schema field "during_support_hours".
-	DuringSupportHours *ServicesIncidentUrgencyRuleDuringSupportHours `json:"during_support_hours,omitempty"`
-
-	// OutsideSupportHours corresponds to the JSON schema field
-	// "outside_support_hours".
-	OutsideSupportHours *ServicesIncidentUrgencyRuleOutsideSupportHours `json:"outside_support_hours,omitempty"`
-
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-}
-
-type ServicesIncidentUrgencyRuleDuringSupportHours struct {
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-
-	// Urgency corresponds to the JSON schema field "urgency".
-	Urgency *string `json:"urgency,omitempty"`
-}
-
-type ServicesIncidentUrgencyRuleOutsideSupportHours struct {
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-
-	// Urgency corresponds to the JSON schema field "urgency".
-	Urgency *string `json:"urgency,omitempty"`
-}
-
-type ServicesIntegrationsElem struct {
-	// HtmlUrl corresponds to the JSON schema field "html_url".
-	HtmlUrl *string `json:"html_url,omitempty"`
-
-	// Id corresponds to the JSON schema field "id".
-	Id *string `json:"id,omitempty"`
-
-	// Self corresponds to the JSON schema field "self".
-	Self *string `json:"self,omitempty"`
-
-	// Summary corresponds to the JSON schema field "summary".
-	Summary *string `json:"summary,omitempty"`
-
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-}
-
-type ServicesScheduledActionsElem struct {
-	// At corresponds to the JSON schema field "at".
-	At *ServicesScheduledActionsElemAt `json:"at,omitempty"`
-
-	// ToUrgency corresponds to the JSON schema field "to_urgency".
-	ToUrgency *string `json:"to_urgency,omitempty"`
-
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-}
-
-type ServicesScheduledActionsElemAt struct {
-	// Name corresponds to the JSON schema field "name".
-	Name *string `json:"name,omitempty"`
-
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-}
-
-type ServicesSupportHours struct {
-	// DaysOfWeek corresponds to the JSON schema field "days_of_week".
-	DaysOfWeek []int `json:"days_of_week,omitempty"`
-
-	// EndTime corresponds to the JSON schema field "end_time".
-	EndTime *string `json:"end_time,omitempty"`
-
-	// StartTime corresponds to the JSON schema field "start_time".
-	StartTime *string `json:"start_time,omitempty"`
-
-	// TimeZone corresponds to the JSON schema field "time_zone".
-	TimeZone *string `json:"time_zone,omitempty"`
-
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
-}
-
-type ServicesTeamsElem struct {
-	// HtmlUrl corresponds to the JSON schema field "html_url".
-	HtmlUrl *string `json:"html_url,omitempty"`
-
-	// Id corresponds to the JSON schema field "id".
-	Id *string `json:"id,omitempty"`
-
-	// Self corresponds to the JSON schema field "self".
-	Self *string `json:"self,omitempty"`
-
-	// Summary corresponds to the JSON schema field "summary".
-	Summary *string `json:"summary,omitempty"`
-
-	// Type corresponds to the JSON schema field "type".
-	Type *string `json:"type,omitempty"`
+type Service struct {
+	Id                      string    `json:"id"`
+	Summary                 string    `json:"summary"`
+	Type                    string    `json:"type"`
+	Self                    string    `json:"self"`
+	HtmlUrl                 string    `json:"html_url"`
+	Name                    string    `json:"name"`
+	AutoResolveTimeout      int       `json:"auto_resolve_timeout"`
+	AcknowledgementTimeout  int       `json:"acknowledgement_timeout"`
+	CreatedAt               time.Time `json:"created_at"`
+	Status                  string    `json:"status"`
+	AlertCreation           string    `json:"alert_creation"`
+	AlertGroupingParameters struct {
+		Type string `json:"type"`
+	} `json:"alert_grouping_parameters"`
+	Integrations []struct {
+		Id      string `json:"id"`
+		Type    string `json:"type"`
+		Summary string `json:"summary"`
+		Self    string `json:"self"`
+		HtmlUrl string `json:"html_url"`
+	} `json:"integrations"`
+	EscalationPolicy struct {
+		Id      string `json:"id"`
+		Type    string `json:"type"`
+		Summary string `json:"summary"`
+		Self    string `json:"self"`
+		HtmlUrl string `json:"html_url"`
+	} `json:"escalation_policy"`
+	Teams []struct {
+		Id      string `json:"id"`
+		Type    string `json:"type"`
+		Summary string `json:"summary"`
+		Self    string `json:"self"`
+		HtmlUrl string `json:"html_url"`
+	} `json:"teams"`
+	IncidentUrgencyRule struct {
+		Type               string `json:"type"`
+		DuringSupportHours struct {
+			Type    string `json:"type"`
+			Urgency string `json:"urgency"`
+		} `json:"during_support_hours"`
+		OutsideSupportHours struct {
+			Type    string `json:"type"`
+			Urgency string `json:"urgency"`
+		} `json:"outside_support_hours"`
+	} `json:"incident_urgency_rule"`
+	SupportHours struct {
+		Type       string `json:"type"`
+		TimeZone   string `json:"time_zone"`
+		StartTime  string `json:"start_time"`
+		EndTime    string `json:"end_time"`
+		DaysOfWeek []int  `json:"days_of_week"`
+	} `json:"support_hours"`
+	ScheduledActions []struct {
+		Type string `json:"type"`
+		At   struct {
+			Type string `json:"type"`
+			Name string `json:"name"`
+		} `json:"at"`
+		ToUrgency string `json:"to_urgency"`
+	} `json:"scheduled_actions"`
+	AutoPauseNotificationsParameters struct {
+		Enabled bool `json:"enabled"`
+		Timeout int  `json:"timeout"`
+	} `json:"auto_pause_notifications_parameters"`
 }
diff --git a/backend/plugins/pagerduty/tasks/incidents_converter.go b/backend/plugins/pagerduty/tasks/incidents_converter.go
index 2c7f8895a..0713af07b 100644
--- a/backend/plugins/pagerduty/tasks/incidents_converter.go
+++ b/backend/plugins/pagerduty/tasks/incidents_converter.go
@@ -58,7 +58,7 @@ func ConvertIncidents(taskCtx plugin.SubTaskContext) errors.Error {
 		dal.From("_tool_pagerduty_incidents AS pi"),
 		dal.Join(`LEFT JOIN _tool_pagerduty_assignments AS pa ON pa.incident_number = pi.number`),
 		dal.Join(`LEFT JOIN _tool_pagerduty_users AS pu ON pa.user_id = pu.id`),
-		dal.Where("pi.connection_id = ?", data.Options.ConnectionId),
+		dal.Where("pi.connection_id = ? AND pi.service_id = ?", data.Options.ConnectionId, data.Options.ServiceId),
 	)
 	if err != nil {
 		return err
diff --git a/backend/plugins/pagerduty/tasks/incidents_extractor.go b/backend/plugins/pagerduty/tasks/incidents_extractor.go
index d5ba7eb26..8b5e6ba7a 100644
--- a/backend/plugins/pagerduty/tasks/incidents_extractor.go
+++ b/backend/plugins/pagerduty/tasks/incidents_extractor.go
@@ -39,7 +39,7 @@ func ExtractIncidents(taskCtx plugin.SubTaskContext) errors.Error {
 			Table: RAW_INCIDENTS_TABLE,
 		},
 		Extract: func(row *api.RawData) ([]interface{}, errors.Error) {
-			incidentRaw := &raw.Incidents{}
+			incidentRaw := &raw.Incident{}
 			err := errors.Convert(json.Unmarshal(row.Data, incidentRaw))
 			if err != nil {
 				return nil, err