From de74eb2462ef92c2ece9472433ad301932dc9c76 Mon Sep 17 00:00:00 2001 From: Nathan Beals Date: Fri, 17 Nov 2023 12:54:07 -0500 Subject: [PATCH] Add Incident resolving --- cmd/incidents/resolve.go | 31 +++++++++++++++++++++++++++++++ pkg/betteruptime/incidents.go | 21 +++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 cmd/incidents/resolve.go diff --git a/cmd/incidents/resolve.go b/cmd/incidents/resolve.go new file mode 100644 index 0000000..06bfa8d --- /dev/null +++ b/cmd/incidents/resolve.go @@ -0,0 +1,31 @@ +package incidents + +import ( + "github.com/spf13/cobra" + + "github.com/uptime-cli/uptimectl/pkg/betteruptime" +) + +// deleteCmd represents the get command +var resolveCmd = &cobra.Command{ + Use: "resolve", + Short: "Resolve an incident", + Aliases: []string{"res"}, + Args: cobra.MinimumNArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + client := betteruptime.NewClient() + + for _, incidentID := range args { + err := client.ResolveIncident(incidentID, acknowledgedBy) + if err != nil { + return err + } + } + return nil + }, +} + +func init() { + IncidentsCmd.AddCommand(resolveCmd) + resolveCmd.Flags().StringVar(&acknowledgedBy, "acknowledged-by", "uptimectl", "User e-mail or a custom identifier of the entity that acknowledged the incident") +} diff --git a/pkg/betteruptime/incidents.go b/pkg/betteruptime/incidents.go index 591e06d..ecc0cb9 100644 --- a/pkg/betteruptime/incidents.go +++ b/pkg/betteruptime/incidents.go @@ -95,6 +95,27 @@ func (c *client) AcknowledgeIncident(ctx context.Context, incidentID, acknowledg return nil } +func (c *client) ResolveIncident(incidentID string, acknowledgedBy string) error { + endpoint := fmt.Sprintf("%s/%s/%s/resolve", contextmanager.APIEndpoint(), incidentsEndpoint, incidentID) + + resp, err := c.rest.R(). + SetBody(Acknowledge{ + AcknowledgedBy: acknowledgedBy, + }). + Post(endpoint) + if err != nil { + return err + } + if resp.StatusCode() == http.StatusNotFound { + return fmt.Errorf("incident not found") + } + + if resp.StatusCode() != http.StatusOK { + return fmt.Errorf("incorrect status response from api") + } + return nil +} + type Acknowledge struct { AcknowledgedBy string `json:"acknowledged_by"` }