open-nomad/command/eval_monitor.go
Ivo Verberk 427d3d650d Refactoring of full-id argument and id length constants
* full-id argument is now called verbose to be more future-proof
* constants for identifier length are a little more concise
2016-01-15 23:32:38 +01:00

82 lines
1.9 KiB
Go

package command
import (
"fmt"
"strings"
)
type EvalMonitorCommand struct {
Meta
}
func (c *EvalMonitorCommand) Help() string {
helpText := `
Usage: nomad eval-monitor [options] <evaluation>
Start an interactive monitoring session for an existing evaluation.
The monitor command periodically polls for information about the
provided evaluation, including status updates, new allocations,
updates to allocations, and failures. Status is printed in near
real-time to the terminal.
The command will exit when the given evaluation reaches a terminal
state (completed or failed). Exit code 0 is returned on successful
evaluation, and if there are no scheduling problems. If there are
job placement issues encountered (unsatisfiable constraints,
resource exhaustion, etc), then the exit code will be 2. Any other
errors, including client connection issues or internal errors, are
indicated by exit code 1.
General Options:
` + generalOptionsUsage() + `
Eval Monitor Options:
-verbose
Show full information.
`
return strings.TrimSpace(helpText)
}
func (c *EvalMonitorCommand) Synopsis() string {
return "Monitor an evaluation interactively"
}
func (c *EvalMonitorCommand) Run(args []string) int {
var verbose bool
flags := c.Meta.FlagSet("eval-monitor", FlagSetClient)
flags.Usage = func() { c.Ui.Output(c.Help()) }
flags.BoolVar(&verbose, "verbose", false, "")
if err := flags.Parse(args); err != nil {
return 1
}
// Truncate the id unless full length is requested
length := shortId
if verbose {
length = fullId
}
// Check that we got exactly one eval ID
args = flags.Args()
if len(args) != 1 {
c.Ui.Error(c.Help())
return 1
}
evalID := args[0]
// Get the HTTP client
client, err := c.Meta.Client()
if err != nil {
c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err))
return 1
}
// Start monitoring
mon := newMonitor(c.Ui, client, length)
return mon.monitor(evalID, true)
}