// Copyright (C) 2019 The Syncthing Authors. // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at https://mozilla.org/MPL/2.0/. package cli import ( "errors" "fmt" "strings" "github.com/urfave/cli" ) var errorsCommand = cli.Command{ Name: "errors", HideHelp: true, Usage: "Error command group", Subcommands: []cli.Command{ { Name: "show", Usage: "Show pending errors", Action: expects(0, indexDumpOutput("system/error")), }, { Name: "push", Usage: "Push an error to active clients", ArgsUsage: "[error message]", Action: expects(1, errorsPush), }, { Name: "clear", Usage: "Clear pending errors", Action: expects(0, emptyPost("system/error/clear")), }, }, } func errorsPush(c *cli.Context) error { client := c.App.Metadata["client"].(*APIClient) errStr := strings.Join(c.Args(), " ") response, err := client.Post("system/error", strings.TrimSpace(errStr)) if err != nil { return err } if response.StatusCode != 200 { errStr = fmt.Sprint("Failed to push error\nStatus code: ", response.StatusCode) bytes, err := responseToBArray(response) if err != nil { return err } body := string(bytes) if body != "" { errStr += "\nBody: " + body } return errors.New(errStr) } return nil }