···2323 DelegateCur uint8
2424}
25252626+func (am *AgentMember) StatusPretty() string {
2727+ result := "unknown"
2828+ switch am.Status {
2929+ case 0:
3030+ result = "none"
3131+ case 1:
3232+ result = "alive"
3333+ case 2:
3434+ result = "leaving"
3535+ case 3:
3636+ result = "left"
3737+ case 4:
3838+ result = "failed"
3939+ }
4040+ return result
4141+}
4242+2643// XXX: this may be needed for consul compatability, but I'm leaving it
2744// out for now in case it isn't.
2845const AllSegments = "_all"
+24
command/list/list.go
···11+package list
22+33+import (
44+ "fmt"
55+ "os"
66+77+ "git.j3s.sh/cascade/command/list/members"
88+)
99+1010+const usage = `cascade ls nodes
1111+cascade ls members
1212+cascade ls services
1313+`
1414+1515+func Run(args []string) {
1616+ if len(args) == 0 {
1717+ fmt.Printf(usage)
1818+ os.Exit(1)
1919+ }
2020+ switch args[0] {
2121+ case "members":
2222+ members.Run(args[1:])
2323+ }
2424+}
+57
command/list/members/members.go
···11+package members
22+33+import (
44+ "flag"
55+ "fmt"
66+ "os"
77+88+ "git.j3s.sh/cascade/api"
99+)
1010+1111+const usage = `cascade ls members [options]
1212+1313+ this command lists the members of the cascade serf
1414+ cluster.
1515+1616+options:
1717+1818+ -api
1919+ address of the api to target (default = 127.0.0.1:8500)
2020+2121+ -l | -details
2222+ show more details (default = nil)
2323+`
2424+2525+type Flags struct {
2626+ apiAddr string
2727+ details bool
2828+}
2929+3030+var membersFlags Flags
3131+3232+func Run(args []string) {
3333+ flags := flag.NewFlagSet("agent", flag.ContinueOnError)
3434+ flags.Usage = func() { fmt.Printf(usage) }
3535+ flags.StringVar(&membersFlags.apiAddr, "api", "", "")
3636+ flags.BoolVar(&membersFlags.details, "l", false, "")
3737+ flags.BoolVar(&membersFlags.details, "details", false, "")
3838+ flags.Parse(args)
3939+4040+ cfg := api.DefaultNonPooledConfig()
4141+ client, err := api.NewClient(cfg)
4242+ if err != nil {
4343+ fmt.Println(err)
4444+ os.Exit(1)
4545+ }
4646+ members, err := client.Agent().Members()
4747+ for _, m := range members {
4848+ if membersFlags.details {
4949+ fmt.Printf("%s ", m.Name)
5050+ fmt.Printf("%s:%d ", m.Addr, m.Port)
5151+ fmt.Printf("%s", m.StatusPretty())
5252+ fmt.Printf("\n")
5353+ } else {
5454+ fmt.Printf("%s\n", m.Name)
5555+ }
5656+ }
5757+}
···99)
10101111const usage = `cascade agent start a cascade agent
1212-cascade list|ls list nodes, services, or members
1212+cascade ls list nodes, services, or members
1313cascade rtt estimate latency between nodes
1414`
1515