Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/cli. OpenStatus CLI www.openstatus.dev
cli cli-app synthetic-monitoring
Something went wrong. Try again.
4.1 kB · 126 lines
Go
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127package maintenance
import ( "context" "fmt" "net/http" "os" "strings"
"buf.build/gen/go/openstatus/api/connectrpc/gosimple/openstatus/maintenance/v1/maintenancev1connect" maintenancev1 "buf.build/gen/go/openstatus/api/protocolbuffers/go/openstatus/maintenance/v1" "github.com/urfave/cli/v3"
"github.com/openstatusHQ/cli/internal/auth" output "github.com/openstatusHQ/cli/internal/cli")
func UpdateMaintenance(ctx context.Context, client maintenancev1connect.MaintenanceServiceClient, id, title, message, from, to string, componentIds []string, hasTitle, hasMessage, hasFrom, hasTo, hasComponents bool) error { if id == "" { fmt.Fprintln(os.Stderr, "Usage: openstatus maintenance update <maintenance-id> [--title ...] [--message ...] [--from ...] [--to ...]") fmt.Fprintln(os.Stderr, "") fmt.Fprintln(os.Stderr, "Example: openstatus maintenance update 12345 --title \"Updated title\"") return fmt.Errorf("maintenance ID is required") }
if !hasTitle && !hasMessage && !hasFrom && !hasTo && !hasComponents { return fmt.Errorf("at least one of --title, --message, --from, --to, or --component-ids must be provided") }
req := &maintenancev1.UpdateMaintenanceRequest{ Id: id, }
if hasTitle { req.SetTitle(title) } if hasMessage { req.SetMessage(message) } if hasFrom { req.SetFrom(from) } if hasTo { req.SetTo(to) } if hasComponents { req.SetPageComponentIds(componentIds) }
_, err := client.UpdateMaintenance(ctx, req) if err != nil { return output.FormatError(err, "maintenance", id) }
return nil}
func UpdateMaintenanceWithHTTPClient(ctx context.Context, httpClient *http.Client, apiKey string, id, title, message, from, to string, componentIds []string, hasTitle, hasMessage, hasFrom, hasTo, hasComponents bool) error { client := NewMaintenanceClientWithHTTPClient(httpClient, apiKey) return UpdateMaintenance(ctx, client, id, title, message, from, to, componentIds, hasTitle, hasMessage, hasFrom, hasTo, hasComponents)}
func GetMaintenanceUpdateCmd() *cli.Command { return &cli.Command{ Name: "update", Usage: "Update a maintenance window", UsageText: "openstatus maintenance update <MaintenanceID> [--title \"New title\"] [--message \"New message\"] [--from ...] [--to ...]", Flags: []cli.Flag{ &cli.StringFlag{ Name: "access-token", Usage: "OpenStatus API Access Token", Aliases: []string{"t"}, Sources: cli.EnvVars("OPENSTATUS_API_TOKEN"), }, &cli.StringFlag{ Name: "title", Usage: "New title for the maintenance", }, &cli.StringFlag{ Name: "message", Usage: "New message for the maintenance", }, &cli.StringFlag{ Name: "from", Usage: "New start time (RFC 3339 format)", }, &cli.StringFlag{ Name: "to", Usage: "New end time (RFC 3339 format)", }, &cli.StringFlag{ Name: "component-ids", Usage: "Comma-separated page component IDs (replaces existing list)", }, }, Action: func(ctx context.Context, cmd *cli.Command) error { apiKey, err := auth.ResolveAccessToken(cmd) if err != nil { return cli.Exit(err.Error(), 1) } maintenanceId := cmd.Args().Get(0)
hasTitle := cmd.IsSet("title") hasMessage := cmd.IsSet("message") hasFrom := cmd.IsSet("from") hasTo := cmd.IsSet("to") hasComponents := cmd.IsSet("component-ids") && cmd.String("component-ids") != ""
var componentIds []string if ids := cmd.String("component-ids"); ids != "" { componentIds = strings.Split(ids, ",") }
client := NewMaintenanceClient(apiKey) s := output.StartSpinner("Updating maintenance...") err = UpdateMaintenance(ctx, client, maintenanceId, cmd.String("title"), cmd.String("message"), cmd.String("from"), cmd.String("to"), componentIds, hasTitle, hasMessage, hasFrom, hasTo, hasComponents) output.StopSpinner(s) if err != nil { return cli.Exit(err.Error(), 1) } fmt.Printf("Maintenance %s updated successfully\n", maintenanceId) fmt.Println("Run 'openstatus maintenance info " + maintenanceId + "' to see the maintenance") return nil }, }}