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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
package main
import (
"fmt"
commonopts "github.com/mongodb/mongo-tools/common/options"
"github.com/mongodb/mongo-tools/common/util"
"github.com/mongodb/mongo-tools/mongostat"
"github.com/mongodb/mongo-tools/mongostat/options"
"os"
"strconv"
"time"
)
func main() {
// initialize command-line opts
opts := commonopts.New("mongostat", "<options>")
// add mongotop-specific options
statOpts := &options.StatOptions{}
opts.AddOptions(statOpts)
extra, err := opts.Parse()
if err != nil {
fmt.Fprintf(os.Stderr, "Invalid options: %v\n", err)
opts.PrintHelp()
util.ExitFail()
return
}
sleepInterval := 1
if len(extra) > 0 {
if len(extra) != 1 {
fmt.Fprintf(os.Stderr, "Too many positional operators\n")
opts.PrintHelp()
util.ExitFail()
return
}
sleepInterval, err = strconv.Atoi(extra[0])
if err != nil {
fmt.Fprintf(os.Stderr, "Bad sleep interval: %v\n", extra[0])
util.ExitFail()
return
}
if sleepInterval < 1 {
fmt.Fprintf(os.Stderr, "Sleep interval must be at least 1 second\n")
util.ExitFail()
return
}
}
// print help, if specified
if opts.PrintHelp() {
return
}
// print version, if specified
if opts.PrintVersion() {
return
}
var discoverChan chan string
if statOpts.Discover {
discoverChan = make(chan string, 128)
}
opts.Direct = true
stat := &mongostat.MongoStat{
Options: opts,
StatOptions: statOpts,
Nodes: map[string]*mongostat.NodeMonitor{},
Discovered: discoverChan,
SleepInterval: time.Duration(sleepInterval) * time.Second,
Cluster: &mongostat.ClusterMonitor{
ReportChan: make(chan mongostat.StatLine),
LastStatLines: map[string]mongostat.StatLine{},
NoHeaders: statOpts.NoHeaders,
},
}
seedHost := opts.Host
if opts.Port != "" {
seedHost = fmt.Sprintf("%s:%s", opts.Host, opts.Port)
}
stat.AddNewNode(seedHost)
// kick it off
err = stat.Run()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %v", err)
util.ExitFail()
return
}
}
|