feat: miner cli: Separate proving workers command
This commit is contained in:
parent
c50b63c5f6
commit
ad684ed0ea
@ -50,8 +50,13 @@ var infoAllCmd = &cli.Command{
|
|||||||
fmt.Println("ERROR: ", err)
|
fmt.Println("ERROR: ", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("\n#: Worker List")
|
fmt.Println("\n#: Sealing Worker List")
|
||||||
if err := sealingWorkersCmd.Action(cctx); err != nil {
|
if err := workersCmd(true).Action(cctx); err != nil {
|
||||||
|
fmt.Println("ERROR: ", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("\n#: Proving Worker List")
|
||||||
|
if err := workersCmd(false).Action(cctx); err != nil {
|
||||||
fmt.Println("ERROR: ", err)
|
fmt.Println("ERROR: ", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ var provingCmd = &cli.Command{
|
|||||||
provingDeadlineInfoCmd,
|
provingDeadlineInfoCmd,
|
||||||
provingFaultsCmd,
|
provingFaultsCmd,
|
||||||
provingCheckProvableCmd,
|
provingCheckProvableCmd,
|
||||||
|
workersCmd(false),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/extern/sector-storage/sealtasks"
|
||||||
"github.com/filecoin-project/lotus/extern/sector-storage/storiface"
|
"github.com/filecoin-project/lotus/extern/sector-storage/storiface"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
@ -27,7 +28,7 @@ var sealingCmd = &cli.Command{
|
|||||||
Usage: "interact with sealing pipeline",
|
Usage: "interact with sealing pipeline",
|
||||||
Subcommands: []*cli.Command{
|
Subcommands: []*cli.Command{
|
||||||
sealingJobsCmd,
|
sealingJobsCmd,
|
||||||
sealingWorkersCmd,
|
workersCmd(true),
|
||||||
sealingSchedDiagCmd,
|
sealingSchedDiagCmd,
|
||||||
sealingAbortCmd,
|
sealingAbortCmd,
|
||||||
},
|
},
|
||||||
@ -47,107 +48,115 @@ func barString(total, y, g float64) string {
|
|||||||
return barString
|
return barString
|
||||||
}
|
}
|
||||||
|
|
||||||
var sealingWorkersCmd = &cli.Command{
|
func workersCmd(sealing bool) *cli.Command {
|
||||||
Name: "workers",
|
return &cli.Command{
|
||||||
Usage: "list workers",
|
Name: "workers",
|
||||||
Flags: []cli.Flag{
|
Usage: "list workers",
|
||||||
&cli.BoolFlag{
|
Flags: []cli.Flag{
|
||||||
Name: "color",
|
&cli.BoolFlag{
|
||||||
Usage: "use color in display output",
|
Name: "color",
|
||||||
DefaultText: "depends on output being a TTY",
|
Usage: "use color in display output",
|
||||||
|
DefaultText: "depends on output being a TTY",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
Action: func(cctx *cli.Context) error {
|
||||||
Action: func(cctx *cli.Context) error {
|
if cctx.IsSet("color") {
|
||||||
if cctx.IsSet("color") {
|
color.NoColor = !cctx.Bool("color")
|
||||||
color.NoColor = !cctx.Bool("color")
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer closer()
|
|
||||||
|
|
||||||
ctx := lcli.ReqContext(cctx)
|
|
||||||
|
|
||||||
stats, err := nodeApi.WorkerStats(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
type sortableStat struct {
|
|
||||||
id uuid.UUID
|
|
||||||
storiface.WorkerStats
|
|
||||||
}
|
|
||||||
|
|
||||||
st := make([]sortableStat, 0, len(stats))
|
|
||||||
for id, stat := range stats {
|
|
||||||
st = append(st, sortableStat{id, stat})
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Slice(st, func(i, j int) bool {
|
|
||||||
return st[i].id.String() < st[j].id.String()
|
|
||||||
})
|
|
||||||
|
|
||||||
for _, stat := range st {
|
|
||||||
gpuUse := "not "
|
|
||||||
gpuCol := color.FgBlue
|
|
||||||
if stat.GpuUsed > 0 {
|
|
||||||
gpuCol = color.FgGreen
|
|
||||||
gpuUse = ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var disabled string
|
nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx)
|
||||||
if !stat.Enabled {
|
if err != nil {
|
||||||
disabled = color.RedString(" (disabled)")
|
return err
|
||||||
|
}
|
||||||
|
defer closer()
|
||||||
|
|
||||||
|
ctx := lcli.ReqContext(cctx)
|
||||||
|
|
||||||
|
stats, err := nodeApi.WorkerStats(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Worker %s, host %s%s\n", stat.id, color.MagentaString(stat.Info.Hostname), disabled)
|
type sortableStat struct {
|
||||||
|
id uuid.UUID
|
||||||
fmt.Printf("\tCPU: [%s] %d/%d core(s) in use\n",
|
storiface.WorkerStats
|
||||||
barString(float64(stat.Info.Resources.CPUs), 0, float64(stat.CpuUse)), stat.CpuUse, stat.Info.Resources.CPUs)
|
|
||||||
|
|
||||||
ramTotal := stat.Info.Resources.MemPhysical
|
|
||||||
ramTasks := stat.MemUsedMin
|
|
||||||
ramUsed := stat.Info.Resources.MemUsed
|
|
||||||
var ramReserved uint64 = 0
|
|
||||||
if ramUsed > ramTasks {
|
|
||||||
ramReserved = ramUsed - ramTasks
|
|
||||||
}
|
}
|
||||||
ramBar := barString(float64(ramTotal), float64(ramReserved), float64(ramTasks))
|
|
||||||
|
|
||||||
fmt.Printf("\tRAM: [%s] %d%% %s/%s\n", ramBar,
|
st := make([]sortableStat, 0, len(stats))
|
||||||
(ramTasks+ramReserved)*100/stat.Info.Resources.MemPhysical,
|
for id, stat := range stats {
|
||||||
types.SizeStr(types.NewInt(ramTasks+ramUsed)),
|
if len(stat.Tasks) > 0 {
|
||||||
types.SizeStr(types.NewInt(stat.Info.Resources.MemPhysical)))
|
if (stat.Tasks[0].WorkerType() != sealtasks.WorkerSealing) == sealing {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
vmemTotal := stat.Info.Resources.MemPhysical + stat.Info.Resources.MemSwap
|
st = append(st, sortableStat{id, stat})
|
||||||
vmemTasks := stat.MemUsedMax
|
|
||||||
vmemUsed := stat.Info.Resources.MemUsed + stat.Info.Resources.MemSwapUsed
|
|
||||||
var vmemReserved uint64 = 0
|
|
||||||
if vmemUsed > vmemTasks {
|
|
||||||
vmemReserved = vmemUsed - vmemTasks
|
|
||||||
}
|
}
|
||||||
vmemBar := barString(float64(vmemTotal), float64(vmemReserved), float64(vmemTasks))
|
|
||||||
|
|
||||||
fmt.Printf("\tVMEM: [%s] %d%% %s/%s\n", vmemBar,
|
sort.Slice(st, func(i, j int) bool {
|
||||||
(vmemTasks+vmemReserved)*100/vmemTotal,
|
return st[i].id.String() < st[j].id.String()
|
||||||
types.SizeStr(types.NewInt(vmemTasks+vmemReserved)),
|
})
|
||||||
types.SizeStr(types.NewInt(vmemTotal)))
|
|
||||||
|
|
||||||
if len(stat.Info.Resources.GPUs) > 0 {
|
for _, stat := range st {
|
||||||
gpuBar := barString(float64(len(stat.Info.Resources.GPUs)), 0, stat.GpuUsed)
|
gpuUse := "not "
|
||||||
fmt.Printf("\tGPU: [%s] %.f%% %.2f/%d gpu(s) in use\n", color.GreenString(gpuBar),
|
gpuCol := color.FgBlue
|
||||||
stat.GpuUsed*100/float64(len(stat.Info.Resources.GPUs)),
|
if stat.GpuUsed > 0 {
|
||||||
stat.GpuUsed, len(stat.Info.Resources.GPUs))
|
gpuCol = color.FgGreen
|
||||||
|
gpuUse = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var disabled string
|
||||||
|
if !stat.Enabled {
|
||||||
|
disabled = color.RedString(" (disabled)")
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("Worker %s, host %s%s\n", stat.id, color.MagentaString(stat.Info.Hostname), disabled)
|
||||||
|
|
||||||
|
fmt.Printf("\tCPU: [%s] %d/%d core(s) in use\n",
|
||||||
|
barString(float64(stat.Info.Resources.CPUs), 0, float64(stat.CpuUse)), stat.CpuUse, stat.Info.Resources.CPUs)
|
||||||
|
|
||||||
|
ramTotal := stat.Info.Resources.MemPhysical
|
||||||
|
ramTasks := stat.MemUsedMin
|
||||||
|
ramUsed := stat.Info.Resources.MemUsed
|
||||||
|
var ramReserved uint64 = 0
|
||||||
|
if ramUsed > ramTasks {
|
||||||
|
ramReserved = ramUsed - ramTasks
|
||||||
|
}
|
||||||
|
ramBar := barString(float64(ramTotal), float64(ramReserved), float64(ramTasks))
|
||||||
|
|
||||||
|
fmt.Printf("\tRAM: [%s] %d%% %s/%s\n", ramBar,
|
||||||
|
(ramTasks+ramReserved)*100/stat.Info.Resources.MemPhysical,
|
||||||
|
types.SizeStr(types.NewInt(ramTasks+ramUsed)),
|
||||||
|
types.SizeStr(types.NewInt(stat.Info.Resources.MemPhysical)))
|
||||||
|
|
||||||
|
vmemTotal := stat.Info.Resources.MemPhysical + stat.Info.Resources.MemSwap
|
||||||
|
vmemTasks := stat.MemUsedMax
|
||||||
|
vmemUsed := stat.Info.Resources.MemUsed + stat.Info.Resources.MemSwapUsed
|
||||||
|
var vmemReserved uint64 = 0
|
||||||
|
if vmemUsed > vmemTasks {
|
||||||
|
vmemReserved = vmemUsed - vmemTasks
|
||||||
|
}
|
||||||
|
vmemBar := barString(float64(vmemTotal), float64(vmemReserved), float64(vmemTasks))
|
||||||
|
|
||||||
|
fmt.Printf("\tVMEM: [%s] %d%% %s/%s\n", vmemBar,
|
||||||
|
(vmemTasks+vmemReserved)*100/vmemTotal,
|
||||||
|
types.SizeStr(types.NewInt(vmemTasks+vmemReserved)),
|
||||||
|
types.SizeStr(types.NewInt(vmemTotal)))
|
||||||
|
|
||||||
|
if len(stat.Info.Resources.GPUs) > 0 {
|
||||||
|
gpuBar := barString(float64(len(stat.Info.Resources.GPUs)), 0, stat.GpuUsed)
|
||||||
|
fmt.Printf("\tGPU: [%s] %.f%% %.2f/%d gpu(s) in use\n", color.GreenString(gpuBar),
|
||||||
|
stat.GpuUsed*100/float64(len(stat.Info.Resources.GPUs)),
|
||||||
|
stat.GpuUsed, len(stat.Info.Resources.GPUs))
|
||||||
|
}
|
||||||
|
for _, gpu := range stat.Info.Resources.GPUs {
|
||||||
|
fmt.Printf("\tGPU: %s\n", color.New(gpuCol).Sprintf("%s, %sused", gpu, gpuUse))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for _, gpu := range stat.Info.Resources.GPUs {
|
|
||||||
fmt.Printf("\tGPU: %s\n", color.New(gpuCol).Sprintf("%s, %sused", gpu, gpuUse))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var sealingJobsCmd = &cli.Command{
|
var sealingJobsCmd = &cli.Command{
|
||||||
|
@ -2040,6 +2040,7 @@ COMMANDS:
|
|||||||
deadline View the current proving period deadline information by its index
|
deadline View the current proving period deadline information by its index
|
||||||
faults View the currently known proving faulty sectors information
|
faults View the currently known proving faulty sectors information
|
||||||
check Check sectors provable
|
check Check sectors provable
|
||||||
|
workers list workers
|
||||||
help, h Shows a list of commands or help for one command
|
help, h Shows a list of commands or help for one command
|
||||||
|
|
||||||
OPTIONS:
|
OPTIONS:
|
||||||
@ -2116,6 +2117,20 @@ OPTIONS:
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### lotus-miner proving workers
|
||||||
|
```
|
||||||
|
NAME:
|
||||||
|
lotus-miner proving workers - list workers
|
||||||
|
|
||||||
|
USAGE:
|
||||||
|
lotus-miner proving workers [command options] [arguments...]
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
--color use color in display output (default: depends on output being a TTY)
|
||||||
|
--help, -h show help (default: false)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
## lotus-miner storage
|
## lotus-miner storage
|
||||||
```
|
```
|
||||||
NAME:
|
NAME:
|
||||||
|
Loading…
Reference in New Issue
Block a user