package command import ( "fmt" "strings" ) type EvalMonitorCommand struct { Meta } func (c *EvalMonitorCommand) Help() string { helpText := ` Usage: nomad eval-monitor [options] 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) }