shed command to unpack miner info dumps
This commit is contained in:
parent
a373fc4c4c
commit
88b0d551b9
@ -37,6 +37,7 @@ func main() {
|
||||
mpoolCmd,
|
||||
genesisVerifyCmd,
|
||||
mathCmd,
|
||||
minerCmd,
|
||||
mpoolStatsCmd,
|
||||
exportChainCmd,
|
||||
consensusCmd,
|
||||
|
112
cmd/lotus-shed/miner.go
Normal file
112
cmd/lotus-shed/miner.go
Normal file
@ -0,0 +1,112 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"github.com/mitchellh/go-homedir"
|
||||
"github.com/urfave/cli/v2"
|
||||
"golang.org/x/xerrors"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var minerCmd = &cli.Command{
|
||||
Name: "miner",
|
||||
Usage: "miner-related utilities",
|
||||
Subcommands: []*cli.Command{
|
||||
minerUnpackInfoCmd,
|
||||
},
|
||||
}
|
||||
|
||||
var minerUnpackInfoCmd = &cli.Command{
|
||||
Name: "unpack-info",
|
||||
Usage: "unpack miner info all dump",
|
||||
ArgsUsage: "[allinfo.txt] [dir]",
|
||||
Action: func(cctx *cli.Context) error {
|
||||
if cctx.Args().Len() != 2 {
|
||||
return xerrors.Errorf("expected 2 args")
|
||||
}
|
||||
|
||||
src, err := homedir.Expand(cctx.Args().Get(0))
|
||||
if err != nil {
|
||||
return xerrors.Errorf("expand src: %w", err)
|
||||
}
|
||||
|
||||
f, err := os.Open(src)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("open file: %w", err)
|
||||
}
|
||||
defer f.Close() // nolint
|
||||
|
||||
dest, err := homedir.Expand(cctx.Args().Get(1))
|
||||
if err != nil {
|
||||
return xerrors.Errorf("expand dest: %w", err)
|
||||
}
|
||||
|
||||
var outf *os.File
|
||||
|
||||
r := bufio.NewReader(f)
|
||||
for {
|
||||
l, _ ,err := r.ReadLine()
|
||||
if err == io.EOF {
|
||||
if outf != nil {
|
||||
return outf.Close()
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return xerrors.Errorf("read line: %w", err)
|
||||
}
|
||||
sl := string(l)
|
||||
|
||||
if strings.HasPrefix(sl, "#") {
|
||||
if strings.Contains(sl, "..") {
|
||||
return xerrors.Errorf("bad name %s", sl)
|
||||
}
|
||||
|
||||
if strings.HasPrefix(sl, "#: ") {
|
||||
if outf != nil {
|
||||
if err := outf.Close(); err != nil {
|
||||
return xerrors.Errorf("close out file: %w", err)
|
||||
}
|
||||
}
|
||||
p := filepath.Join(dest, sl[len("#: "):])
|
||||
if err := os.MkdirAll(filepath.Dir(p), 0775); err != nil {
|
||||
return xerrors.Errorf("mkdir: %w", err)
|
||||
}
|
||||
outf, err = os.Create(p)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("create out file: %w", err)
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
if strings.HasPrefix(sl, "##: ") {
|
||||
if outf != nil {
|
||||
if err := outf.Close(); err != nil {
|
||||
return xerrors.Errorf("close out file: %w", err)
|
||||
}
|
||||
}
|
||||
p := filepath.Join(dest, "Per Sector Infos", sl[len("##: "):])
|
||||
if err := os.MkdirAll(filepath.Dir(p), 0775); err != nil {
|
||||
return xerrors.Errorf("mkdir: %w", err)
|
||||
}
|
||||
outf, err = os.Create(p)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("create out file: %w", err)
|
||||
}
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if outf != nil {
|
||||
if _, err := outf.Write(l); err != nil {
|
||||
return xerrors.Errorf("write line: %w", err)
|
||||
}
|
||||
if _, err := outf.Write([]byte("\n")); err != nil {
|
||||
return xerrors.Errorf("write line end: %w", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
Loading…
Reference in New Issue
Block a user