forked from philips/focaccia
/
status.go
48 lines (39 loc) · 943 Bytes
/
status.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package main
import (
"fmt"
"os"
"github.com/philips/focaccia/lock"
)
var (
cmdStatus = &Command{
Name: "status",
Summary: "Get the status of the cluster wide reboot lock.",
Description: `Status will return the number of locks that are held and available and a list of the holders.`,
Run: runStatus,
}
)
func printHolders(sem *lock.Semaphore) {
fmt.Fprintln(out, "MACHINE ID")
for _, h := range sem.Holders {
fmt.Fprintln(out, h)
}
}
func runStatus(args []string) (exit int) {
elc, err := lock.NewEtcdLockClient(nil)
if err != nil {
fmt.Fprintln(os.Stderr, "Error initializing etcd client:", err)
return 1
}
l := lock.New("", elc)
sem, err := l.Get()
if err != nil {
fmt.Fprintln(os.Stderr, "Error setting value:", err)
}
fmt.Println("Available:", sem.Semaphore)
fmt.Println("Max:", sem.Semaphore)
if len(sem.Holders) > 0 {
fmt.Fprintln(out, "")
printHolders(sem)
}
return
}