lotus/cmd/lotus-shed/main.go

167 lines
3.2 KiB
Go
Raw Normal View History

2019-12-09 15:09:23 +00:00
package main
import (
"context"
"fmt"
2019-12-09 15:09:23 +00:00
"os"
"os/signal"
"runtime/pprof"
2019-12-09 15:09:23 +00:00
logging "github.com/ipfs/go-log/v2"
"github.com/urfave/cli/v2"
2019-12-09 15:09:23 +00:00
"github.com/filecoin-project/lotus/build"
)
var log = logging.Logger("lotus-shed")
func main() {
2022-11-16 23:19:59 +00:00
_ = logging.SetLogLevel("*", "INFO")
_ = logging.SetLogLevelRegex("badger*", "ERROR")
_ = logging.SetLogLevel("drand", "ERROR")
_ = logging.SetLogLevel("chainstore", "ERROR")
2019-12-09 15:09:23 +00:00
local := []*cli.Command{
2022-07-20 15:57:00 +00:00
addressCmd,
statActorCmd,
2023-06-25 23:36:21 +00:00
statSnapshotCmd,
statObjCmd,
2021-03-24 03:32:56 +00:00
base64Cmd,
2019-12-09 15:09:23 +00:00
base32Cmd,
base16Cmd,
2020-04-28 08:41:59 +00:00
bitFieldCmd,
chainwatchCmd,
2021-04-23 03:03:53 +00:00
cronWcCmd,
frozenMinersCmd,
dealLabelCmd,
2019-12-09 15:09:23 +00:00
keyinfoCmd,
jwtCmd,
noncefix,
bigIntParseCmd,
staterootCmd,
auditsCmd,
2020-04-02 03:27:06 +00:00
importCarCmd,
importObjectCmd,
commpToCidCmd,
2020-05-07 05:20:17 +00:00
fetchParamCmd,
2020-10-13 03:09:40 +00:00
postFindCmd,
proofsCmd,
verifRegCmd,
marketCmd,
2020-07-22 17:14:45 +00:00
miscCmd,
mpoolCmd,
helloCmd,
genesisVerifyCmd,
2020-09-05 00:40:57 +00:00
mathCmd,
minerCmd,
mpoolStatsCmd,
exportChainCmd,
ethCmd,
2021-01-28 02:35:28 +00:00
exportCarCmd,
consensusCmd,
syncCmd,
stateTreePruneCmd,
2020-09-30 13:17:29 +00:00
datastoreCmd,
ledgerCmd,
sectorsCmd,
2020-10-23 19:51:10 +00:00
msgCmd,
electionCmd,
2020-11-02 18:09:28 +00:00
rpcCmd,
2020-11-04 15:20:57 +00:00
cidCmd,
2020-12-15 17:46:34 +00:00
blockmsgidCmd,
2021-03-24 04:00:11 +00:00
signaturesCmd,
actorCmd,
minerTypesCmd,
minerPeeridCmd,
minerMultisigsCmd,
splitstoreCmd,
2021-09-20 11:26:05 +00:00
fr32Cmd,
chainCmd,
2021-09-30 18:18:29 +00:00
balancerCmd,
sendCsvCmd,
terminationsCmd,
2021-12-20 01:44:19 +00:00
migrationsCmd,
diffCmd,
2022-03-10 18:31:36 +00:00
itestdCmd,
2022-09-15 07:34:24 +00:00
msigCmd,
2022-09-26 12:13:00 +00:00
fip36PollCmd,
2022-10-14 20:03:28 +00:00
invariantsCmd,
2022-11-14 21:46:45 +00:00
gasTraceCmd,
2022-11-16 20:07:23 +00:00
replayOfflineCmd,
indexesCmd,
2023-03-22 00:44:34 +00:00
FevmAnalyticsCmd,
mismatchesCmd,
blockCmd,
lpUtilCmd,
2019-12-09 15:09:23 +00:00
}
app := &cli.App{
Name: "lotus-shed",
Usage: "A place for all the lotus tools",
Version: build.UserVersion(),
2019-12-09 15:09:23 +00:00
Commands: local,
2020-03-07 00:46:55 +00:00
Flags: []cli.Flag{
&cli.StringFlag{
Name: "repo",
EnvVars: []string{"LOTUS_PATH"},
Hidden: true,
Value: "~/.lotus", // TODO: Consider XDG_DATA_HOME
},
&cli.StringFlag{
Name: "miner-repo",
Aliases: []string{"storagerepo"},
EnvVars: []string{"LOTUS_MINER_PATH", "LOTUS_STORAGE_PATH"},
Value: "~/.lotusminer", // TODO: Consider XDG_DATA_HOME
Usage: fmt.Sprintf("Specify miner repo path. flag storagerepo and env LOTUS_STORAGE_PATH are DEPRECATION, will REMOVE SOON"),
},
&cli.StringFlag{
Name: "log-level",
Value: "info",
},
&cli.StringFlag{
Name: "pprof",
Usage: "specify name of file for writing cpu profile to",
},
},
Before: func(cctx *cli.Context) error {
if prof := cctx.String("pprof"); prof != "" {
profile, err := os.Create(prof)
if err != nil {
return err
}
if err := pprof.StartCPUProfile(profile); err != nil {
return err
}
}
return logging.SetLogLevel("lotus-shed", cctx.String("log-level"))
2020-03-07 00:46:55 +00:00
},
After: func(cctx *cli.Context) error {
if prof := cctx.String("pprof"); prof != "" {
pprof.StopCPUProfile()
}
return nil
},
2019-12-09 15:09:23 +00:00
}
// terminate early on ctrl+c
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
ctx, cancel := context.WithCancel(context.Background())
go func() {
<-c
cancel()
fmt.Println("Received interrupt, shutting down... Press CTRL+C again to force shutdown")
<-c
fmt.Println("Forcing stop")
os.Exit(1)
}()
if err := app.RunContext(ctx, os.Args); err != nil {
2022-11-16 23:19:59 +00:00
log.Errorf("%+v", err)
2019-12-09 15:09:23 +00:00
os.Exit(1)
return
}
}