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 <[email protected]> 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 <[email protected]> --- 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
