Skip to content

Commit

Permalink
Add helptext, default logic to ipfs stats
Browse files Browse the repository at this point in the history
I've added: Synopsis, shortDescription, and longDescription for stats and stats bw.
I also added default(false) for poll and default("1s") for interval, and modified the logic to make it fit.

Part of #2484 and #2647.

License: MIT
Signed-off-by: Richard Littauer <richard.littauer@gmail.com>
  • Loading branch information
RichardLitt committed May 12, 2016
1 parent a2bcec4 commit fbba4d6
Showing 1 changed file with 56 additions and 21 deletions.
77 changes: 56 additions & 21 deletions core/commands/stat.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ import (

var StatsCmd = &cmds.Command{
Helptext: cmds.HelpText{
Tagline: "Query IPFS statistics.",
ShortDescription: ``,
Tagline: "Query ipfs statistics.",
Synopsis: "ipfs stats <command>",
ShortDescription: `'ipfs stats' is a set of commands to help look at statistics for your ipfs node.`,
LongDescription: `'ipfs stats' is a set of commands to help look at statistics for your ipfs node.`,
},

Subcommands: map[string]*cmds.Command{
Expand All @@ -30,13 +32,49 @@ var StatsCmd = &cmds.Command{
var statBwCmd = &cmds.Command{
Helptext: cmds.HelpText{
Tagline: "Print ipfs bandwidth information.",
ShortDescription: ``,
Synopsis: "ipfs stats bw [-p, --peer <peerId>] [-t, --proto <protocol>] [--poll] [-i, --interval <timeInterval>]",
ShortDescription: `'ipfs stats bw' prints bandwidth information for the ipfs daemon.
It displays: TotalIn, TotalOut, RateIn, RateOut.
`,
LongDescription: `'ipfs stats bw' prints bandwidth information for the ipfs daemon.
It displays: TotalIn, TotalOut, RateIn, RateOut.
By default, overall bandwidth and all protocols are shown. To limit bandwidth to
a particular peer, use the 'peer' option along with that peer's multihash id. To
specify a specific protocol, use the 'proto' option. The 'peer' and 'proto'
options cannot be specified simultaneously. The protocols that be queried using
this method are outlined in the specification: https://github.com/ipfs/specs/blob/master/libp2p/7-properties.md#757-protocol-multicodecs
Example protocol options:
- /ipfs/id/1.0.0
- /ipfs/bitswap
- /ipfs/dht
Example:
> ipfs stats bw -t /ipfs/bitswap
Bandwidth
TotalIn: 5.0MB
TotalOut: 0B
RateIn: 343B/s
RateOut: 0B/s
> ipfs stats bw -p QmepgFW7BHEtU4pZJdxaNiv75mKLLRQnPi1KaaXmQN4V1a
Bandwidth
TotalIn: 4.9MB
TotalOut: 12MB
RateIn: 0B/s
RateOut: 0B/s
`,
},
Options: []cmds.Option{
cmds.StringOption("peer", "p", "Specify a peer to print bandwidth for."),
cmds.StringOption("proto", "t", "Specify a protocol to print bandwidth for."),
cmds.BoolOption("poll", "Print bandwidth at an interval. Default: false."),
cmds.StringOption("interval", "i", "Time interval to wait between updating output, if 'poll' is true."),
cmds.BoolOption("poll", "Print bandwidth at an interval.").Default(false),
cmds.StringOption("interval", "i", `Time interval to wait between updating output, if 'poll' is true.
This accepts durations such as "300s", "1.5h" or "2h45m". Valid time units are:
"ns", "us" (or "µs"), "ms", "s", "m", "h".
`).Default("1s"),
},

Run: func(req cmds.Request, res cmds.Response) {
Expand Down Expand Up @@ -78,20 +116,17 @@ var statBwCmd = &cmds.Command{
pid = checkpid
}

interval := time.Second
timeS, found, err := req.Option("interval").String()
timeS, _, err := req.Option("interval").String()
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
if found {
v, err := time.ParseDuration(timeS)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
interval = v
v, err := time.ParseDuration(timeS)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
interval := v

doPoll, _, err := req.Option("poll").Bool()
if err != nil {
Expand All @@ -116,14 +151,14 @@ var statBwCmd = &cmds.Command{
totals := nd.Reporter.GetBandwidthTotals()
out <- &totals
}
if !doPoll {
return
}
select {
case <-time.After(interval):
case <-req.Context().Done():
return
if doPoll {
select {
case <-time.After(interval):
case <-req.Context().Done():
return
}
}
return
}
}()
},
Expand Down

0 comments on commit fbba4d6

Please sign in to comment.