Skip to content

Commit 609a80a

Browse files
authoredOct 12, 2023
Merge branch 'master' into update-service-tags
2 parents b5f7049 + b54d8bd commit 609a80a

File tree

8 files changed

+168
-13
lines changed

8 files changed

+168
-13
lines changed
 

‎incident/incident.go

+9
Original file line numberDiff line numberDiff line change
@@ -178,3 +178,12 @@ func (c *Client) ListNotes(context context.Context, request *ListNotesRequest) (
178178
}
179179
return result, nil
180180
}
181+
182+
func (c *Client) GetResponderAlerts(context context.Context, request *GetResponderAlertsRequest) (*GetResponderAlertsResult, error) {
183+
result := &GetResponderAlertsResult{}
184+
err := c.client.Exec(context, request, result)
185+
if err != nil {
186+
return nil, err
187+
}
188+
return result, nil
189+
}

‎incident/incident_test.go

+38-6
Original file line numberDiff line numberDiff line change
@@ -475,13 +475,12 @@ func TestResponders_Validate(t *testing.T) {
475475
{Type: User},
476476
}
477477
err = validateResponders(Responders)
478-
assert.Equal(t, err.Error(), errors.New("For responder either name"+
479-
" or id must be provided.").Error())
478+
assert.Equal(t, err.Error(), errors.New("For responder type user either username or id must be provided.").Error())
480479

481480
Responders = []Responder{
482481
{
483-
Type: User,
484-
Name: "cem",
482+
Type: User,
483+
Username: "cem@example.com",
485484
},
486485
}
487486
err = validateResponders(Responders)
@@ -492,8 +491,7 @@ func TestResponders_Validate(t *testing.T) {
492491
Type: Team},
493492
}
494493
err = validateResponders(Responders)
495-
assert.Equal(t, err.Error(), errors.New("For responder either name"+
496-
" or id must be provided.").Error())
494+
assert.Equal(t, err.Error(), errors.New("For responder type team either team name or id must be provided.").Error())
497495

498496
Responders = []Responder{
499497
{
@@ -504,3 +502,37 @@ func TestResponders_Validate(t *testing.T) {
504502
err = validateResponders(Responders)
505503
assert.Nil(t, err)
506504
}
505+
506+
func TestGetResponderAlertsRequest_Endpoint(t *testing.T) {
507+
request := &GetResponderAlertsRequest{
508+
Id: "adea9e79-5527-4e49-b345-e55ae180ae59",
509+
Identifier: Id,
510+
}
511+
endpoint := request.ResourcePath()
512+
params := request.RequestParams()
513+
assert.Equal(t, "/v1/incidents/adea9e79-5527-4e49-b345-e55ae180ae59/responder-alert-ids", endpoint)
514+
assert.Equal(t, "id", params["identifierType"])
515+
}
516+
517+
func TestGetResponderAlertsRequest_GetParams(t *testing.T) {
518+
request := &GetResponderAlertsRequest{
519+
Limit: 10,
520+
Offset: 30,
521+
Order: "desc",
522+
Direction: "next",
523+
}
524+
params := request.RequestParams()
525+
assert.Equal(t, "10", params["limit"])
526+
assert.Equal(t, "30", params["offset"])
527+
assert.Equal(t, "next", params["direction"])
528+
assert.Equal(t, "desc", params["order"])
529+
}
530+
531+
func TestGetResponderAlertsRequest_Validate(t *testing.T) {
532+
request := &GetResponderAlertsRequest{}
533+
err := request.Validate()
534+
assert.Equal(t, err.Error(), errors.New("Incident ID cannot be blank.").Error())
535+
request.Id = "adea9e79-5527-4e49-b345-e55ae180ae59"
536+
err = request.Validate()
537+
assert.Nil(t, err)
538+
}

‎incident/request.go

+61-2
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,61 @@ func (r *ListNotesRequest) RequestParams() map[string]string {
772772
return params
773773
}
774774

775+
type GetResponderAlertsRequest struct {
776+
client.BaseRequest
777+
Identifier IdentifierType
778+
Id string
779+
Limit int
780+
Offset int
781+
Order Order
782+
Direction string
783+
}
784+
785+
func (r *GetResponderAlertsRequest) Validate() error {
786+
if r.Id == "" {
787+
return errors.New("Incident ID cannot be blank.")
788+
}
789+
if r.Identifier != "" && r.Identifier != Id && r.Identifier != Tiny {
790+
return errors.New("Identifier type should be one of these: 'Id', 'Tiny' or empty.")
791+
}
792+
return nil
793+
}
794+
795+
func (r *GetResponderAlertsRequest) ResourcePath() string {
796+
return "/v1/incidents/" + r.Id + "/responder-alert-ids"
797+
}
798+
799+
func (r *GetResponderAlertsRequest) Method() string {
800+
return http.MethodGet
801+
}
802+
803+
func (r *GetResponderAlertsRequest) RequestParams() map[string]string {
804+
805+
params := make(map[string]string)
806+
807+
if r.Identifier == Tiny {
808+
params["identifierType"] = "tiny"
809+
} else {
810+
params["identifierType"] = "id"
811+
}
812+
813+
if r.Limit != 0 {
814+
params["limit"] = strconv.Itoa(r.Limit)
815+
}
816+
if r.Offset != 0 {
817+
params["offset"] = strconv.Itoa(r.Offset)
818+
}
819+
if r.Direction != "" {
820+
params["direction"] = r.Direction
821+
822+
}
823+
if r.Order != "" {
824+
params["order"] = string(r.Order)
825+
}
826+
827+
return params
828+
}
829+
775830
type IdentifierType string
776831
type ResponderType string
777832
type Priority string
@@ -806,6 +861,7 @@ type Responder struct {
806861
Type ResponderType `json:"type,omitempty"`
807862
Name string `json:"name,omitempty"`
808863
Id string `json:"id,omitempty"`
864+
Username string `json:"username,omitempty"`
809865
}
810866

811867
func validateResponders(responders []Responder) error {
@@ -816,8 +872,11 @@ func validateResponders(responders []Responder) error {
816872
if !(responder.Type == User || responder.Type == Team) {
817873
return errors.New("Responder type should be one of these: 'User', 'Team'.")
818874
}
819-
if responder.Name == "" && responder.Id == "" {
820-
return errors.New("For responder either name or id must be provided.")
875+
if responder.Type == User && responder.Username == "" && responder.Id == "" {
876+
return errors.New("For responder type user either username or id must be provided.")
877+
}
878+
if responder.Type == Team && responder.Name == "" && responder.Id == "" {
879+
return errors.New("For responder type team either team name or id must be provided.")
821880
}
822881
}
823882
return nil

‎incident/result.go

+5
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,8 @@ type Paging struct {
8080
First string `json:"first"`
8181
Last string `json:"last"`
8282
}
83+
84+
type GetResponderAlertsResult struct {
85+
client.ResultMetadata
86+
AlertIds []string `json:"data"`
87+
}

‎integration/integration.go

+4
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,15 @@ func (c *Client) ForceUpdateAllFields(context context.Context, request *UpdateIn
7575
request.OtherFields["ignoreRespondersFromPayload"] = request.IgnoreRespondersFromPayload
7676
request.OtherFields["suppressNotifications"] = request.SuppressNotifications
7777
request.OtherFields["responders"] = request.Responders
78+
request.OtherFields["recipients"] = request.Responders
7879
request.OtherFields["emailUsername"] = request.EmailUsername
7980
request.OtherFields["url"] = request.WebhookUrl
8081
request.OtherFields["addAlertDescription"] = request.AddAlertDescription
8182
request.OtherFields["addAlertDetails"] = request.AddAlertDetails
8283
request.OtherFields["headers"] = request.Headers
84+
request.OtherFields["assignedTeam"] = request.OwnerTeam
85+
request.OtherFields["ownerTeam"] = request.OwnerTeam
86+
8387
err := c.client.Exec(context, request.OtherFields, result)
8488
if err != nil {
8589
return nil, err

‎integration/request.go

+2
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ type UpdateIntegrationRequest struct {
153153
Responders []Responder
154154
AddAlertDescription *bool
155155
AddAlertDetails *bool
156+
OwnerTeam *og.OwnerTeam `json:"ownerTeam,omitempty"`
156157
Headers map[string]string
157158
OtherFields
158159
}
@@ -396,6 +397,7 @@ type IntegrationAction struct {
396397
Responders []Responder `json:"responders,omitempty"`
397398
Tags []string `json:"tags,omitempty"`
398399
ExtraProperties map[string]string `json:"extraProperties,omitempty"`
400+
Recipients []Responder `json:"recipients,omitempty"`
399401
}
400402

401403
func (r *UpdateAllIntegrationActionsRequest) Validate() error {

‎policy/policy_test.go

+46-2
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,14 @@ func TestCreateAlertPolicy_Validate(t *testing.T) {
126126

127127
req.Responders = &[]alert.Responder{
128128
{
129-
Type: alert.ScheduleResponder,
129+
Type: "",
130130
Name: "",
131131
Id: "",
132132
Username: "",
133133
},
134134
}
135135
err = req.Validate()
136-
assert.Equal(t, err.Error(), errors.New("responder type for alert policy should be one of team or user").Error())
136+
assert.Equal(t, err.Error(), errors.New("responder type for alert policy should be one of team, user, escalation or schedule").Error())
137137

138138
req.Responders = &[]alert.Responder{
139139
{
@@ -179,6 +179,50 @@ func TestCreateAlertPolicy_Validate(t *testing.T) {
179179
err = req.Validate()
180180
assert.Nil(t, err)
181181

182+
req.Responders = &[]alert.Responder{
183+
{
184+
Type: alert.EscalationResponder,
185+
Name: "",
186+
Id: "",
187+
Username: "user1",
188+
},
189+
}
190+
err = req.Validate()
191+
assert.Equal(t, err.Error(), errors.New("responder id should be provided").Error())
192+
193+
req.Responders = &[]alert.Responder{
194+
{
195+
Type: alert.EscalationResponder,
196+
Name: "",
197+
Id: "teamId",
198+
Username: "",
199+
},
200+
}
201+
err = req.Validate()
202+
assert.Nil(t, err)
203+
204+
req.Responders = &[]alert.Responder{
205+
{
206+
Type: alert.ScheduleResponder,
207+
Name: "",
208+
Id: "",
209+
Username: "user1",
210+
},
211+
}
212+
err = req.Validate()
213+
assert.Equal(t, err.Error(), errors.New("responder id should be provided").Error())
214+
215+
req.Responders = &[]alert.Responder{
216+
{
217+
Type: alert.ScheduleResponder,
218+
Name: "",
219+
Id: "teamId",
220+
Username: "",
221+
},
222+
}
223+
err = req.Validate()
224+
assert.Nil(t, err)
225+
182226
req.Priority = "asd"
183227
err = req.Validate()
184228
assert.Equal(t, err.Error(), errors.New("Priority should be one of these: 'P1', 'P2', 'P3', 'P4' and 'P5'").Error())

‎policy/request.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ type UpdateAlertPolicyRequest struct {
210210
Message string `json:"message,omitempty"`
211211
Continue *bool `json:"continue,omitempty"`
212212
Alias string `json:"alias,omitempty"`
213-
AlertDescription string `json:"alertDescription,omitempty"`
213+
AlertDescription string `json:"description,omitempty"`
214214
Entity string `json:"entity,omitempty"`
215215
Source string `json:"source,omitempty"`
216216
IgnoreOriginalDetails *bool `json:"ignoreOriginalDetails,omitempty"`
@@ -681,8 +681,8 @@ func ValidateDelayAction(action DelayAction) error {
681681

682682
func ValidateResponders(responders *[]alert.Responder) error {
683683
for _, responder := range *responders {
684-
if responder.Type != alert.UserResponder && responder.Type != alert.TeamResponder {
685-
return errors.New("responder type for alert policy should be one of team or user")
684+
if responder.Type != alert.UserResponder && responder.Type != alert.TeamResponder && responder.Type != alert.EscalationResponder && responder.Type != alert.ScheduleResponder {
685+
return errors.New("responder type for alert policy should be one of team, user, escalation or schedule")
686686
}
687687
if responder.Id == "" {
688688
return errors.New("responder id should be provided")

0 commit comments

Comments
 (0)
Please sign in to comment.