prysm-pulse/beacon-chain/main.go

158 lines
3.9 KiB
Go
Raw Normal View History

// Package beacon-chain defines all the utilities needed for a beacon chain node.
package main
import (
"fmt"
"os"
"runtime"
runtimeDebug "runtime/debug"
golog "github.com/ipfs/go-log"
joonix "github.com/joonix/log"
"github.com/prysmaticlabs/prysm/beacon-chain/flags"
"github.com/prysmaticlabs/prysm/beacon-chain/node"
"github.com/prysmaticlabs/prysm/shared/cmd"
"github.com/prysmaticlabs/prysm/shared/debug"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
Persistent logs (#2660) * added file log feature * moved the logic to one central location (shared/logutil/logutil.go), removed new line chars from file logs * removed a resdundant temp file refrences that went into beachon-chain/BUILD.bazel by mistake * Update shared/cmd/flags.go Co-Authored-By: shayzluf <thezluf@gmail.com> * Update shared/cmd/flags.go Co-Authored-By: shayzluf <thezluf@gmail.com> * manually added loguitl dep to the go image target * Manaully added the logutil dep to the go image target * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: terence tsao <terence@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: terence tsao <terence@prysmaticlabs.com> * syntax and styling changes required by code reviewers * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * changed the return type of 'ConfigurePersistentLogging' from bool, error to error based on recommendation from code review * ran goimports in beacon-chain/main.go after tests have failed * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Changes requested by code reviewer * Added a mandatory comment (linter required) to the 'Fire' event * Changed the beacon-chain and validator to support only same format stdout and file logging due to complications in the outputs when using different formats. * Had to run gazelle --fix due to check failure
2019-05-22 13:22:11 +00:00
"github.com/prysmaticlabs/prysm/shared/logutil"
"github.com/prysmaticlabs/prysm/shared/version"
2019-06-13 14:53:42 +00:00
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
gologging "github.com/whyrusleeping/go-logging"
prefixed "github.com/x-cray/logrus-prefixed-formatter"
2019-06-13 14:53:42 +00:00
_ "go.uber.org/automaxprocs"
)
2019-06-02 15:33:44 +00:00
var appFlags = []cli.Flag{
flags.NoCustomConfigFlag,
flags.DepositContractFlag,
flags.Web3ProviderFlag,
flags.HTTPWeb3ProviderFlag,
flags.RPCPort,
flags.CertFlag,
flags.KeyFlag,
flags.GRPCGatewayPort,
[Interop] Improve RPC Codebase + Start Beacon Chain With Mock ETH1 Values (#3407) * add main.go * interop readme * proper visibility * standardize and abstract into simpler funcs * formatting * no os pkg * add test * no panics anywhere, properly and nicely handle errors * proper comments * fix broken test * readme * comment * recommend ssz * install * tool now works * README * build * readme * 64 validators * rem print * register the no powchain flag * work on mock eth1 start * common interface * getting closer with the interface defs * only two uses of powchain * remove powchain dependency * remove powchain dependency * common powchain interface * proper comment in case of flag * proper args into rpc services * rename fields * pass in mock flag into RPC * conforms to iface * use client instead of block fetcher iface * broken tests * block fetcher * finalized * resolved broken build * fix build * comment * fix tests * tests pass * resolved confs * took them out * rename into smaller interfaces * resolve some confs * ensure tests pass * properly utilize mock instead of localized mock * res lint * lint * finish test for mock eth1data * run gazelle * include flag again * fix broken build * disable powchain * dont dial eth1 nodes * reenable pow * use smaller interfaces, standardize naming * abstract mock into its own package * faulty mock lint * fix stutter in lint * rpc tests all passing * use mocks for operations * no more mocks in the entire rpc package * no mock * viz * testonly
2019-09-09 21:13:50 +00:00
flags.InteropMockEth1DataVotesFlag,
flags.InteropGenesisStateFlag,
flags.InteropNumValidatorsFlag,
flags.InteropGenesisTimeFlag,
flags.ArchiveEnableFlag,
flags.ArchiveValidatorSetChangesFlag,
flags.ArchiveBlocksFlag,
flags.ArchiveAttestationsFlag,
2019-06-02 15:33:44 +00:00
cmd.BootstrapNode,
cmd.NoDiscovery,
cmd.StaticPeers,
cmd.RelayNode,
cmd.P2PUDPPort,
cmd.P2PTCPPort,
2019-06-02 15:33:44 +00:00
cmd.P2PHost,
cmd.P2PMaxPeers,
cmd.P2PPrivKey,
cmd.P2PWhitelist,
cmd.P2PEncoding,
2019-06-02 15:33:44 +00:00
cmd.DataDirFlag,
cmd.VerbosityFlag,
cmd.EnableTracingFlag,
cmd.TracingProcessNameFlag,
cmd.TracingEndpointFlag,
cmd.TraceSampleFractionFlag,
cmd.MonitoringPortFlag,
cmd.DisableMonitoringFlag,
cmd.ClearDB,
cmd.ForceClearDB,
2019-06-02 15:33:44 +00:00
cmd.LogFormat,
cmd.MaxGoroutines,
debug.PProfFlag,
debug.PProfAddrFlag,
debug.PProfPortFlag,
debug.MemProfileRateFlag,
debug.CPUProfileFlag,
debug.TraceFlag,
cmd.LogFileName,
cmd.EnableUPnPFlag,
2019-06-02 15:33:44 +00:00
}
2019-06-02 15:33:44 +00:00
func init() {
appFlags = append(appFlags, featureconfig.BeaconChainFlags...)
}
func main() {
log := logrus.WithField("prefix", "main")
app := cli.NewApp()
app.Name = "beacon-chain"
app.Usage = "this is a beacon chain implementation for Ethereum 2.0"
app.Action = startNode
app.Version = version.GetVersion()
2019-06-02 15:33:44 +00:00
app.Flags = appFlags
app.Before = func(ctx *cli.Context) error {
format := ctx.GlobalString(cmd.LogFormat.Name)
switch format {
case "text":
formatter := new(prefixed.TextFormatter)
formatter.TimestampFormat = "2006-01-02 15:04:05"
formatter.FullTimestamp = true
Persistent logs (#2660) * added file log feature * moved the logic to one central location (shared/logutil/logutil.go), removed new line chars from file logs * removed a resdundant temp file refrences that went into beachon-chain/BUILD.bazel by mistake * Update shared/cmd/flags.go Co-Authored-By: shayzluf <thezluf@gmail.com> * Update shared/cmd/flags.go Co-Authored-By: shayzluf <thezluf@gmail.com> * manually added loguitl dep to the go image target * Manaully added the logutil dep to the go image target * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: terence tsao <terence@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: terence tsao <terence@prysmaticlabs.com> * syntax and styling changes required by code reviewers * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * changed the return type of 'ConfigurePersistentLogging' from bool, error to error based on recommendation from code review * ran goimports in beacon-chain/main.go after tests have failed * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Changes requested by code reviewer * Added a mandatory comment (linter required) to the 'Fire' event * Changed the beacon-chain and validator to support only same format stdout and file logging due to complications in the outputs when using different formats. * Had to run gazelle --fix due to check failure
2019-05-22 13:22:11 +00:00
// If persistent log files are written - we disable the log messages coloring because
// the colors are ANSI codes and seen as gibberish in the log files.
formatter.DisableColors = ctx.GlobalString(cmd.LogFileName.Name) != ""
logrus.SetFormatter(formatter)
break
case "fluentd":
2019-10-04 03:56:10 +00:00
f := joonix.NewFormatter()
if err := joonix.DisableTimestampFormat(f); err != nil {
panic(err)
}
logrus.SetFormatter(f)
break
case "json":
logrus.SetFormatter(&logrus.JSONFormatter{})
break
default:
return fmt.Errorf("unknown log format %s", format)
}
Persistent logs (#2660) * added file log feature * moved the logic to one central location (shared/logutil/logutil.go), removed new line chars from file logs * removed a resdundant temp file refrences that went into beachon-chain/BUILD.bazel by mistake * Update shared/cmd/flags.go Co-Authored-By: shayzluf <thezluf@gmail.com> * Update shared/cmd/flags.go Co-Authored-By: shayzluf <thezluf@gmail.com> * manually added loguitl dep to the go image target * Manaully added the logutil dep to the go image target * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: terence tsao <terence@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: terence tsao <terence@prysmaticlabs.com> * syntax and styling changes required by code reviewers * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * changed the return type of 'ConfigurePersistentLogging' from bool, error to error based on recommendation from code review * ran goimports in beacon-chain/main.go after tests have failed * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update beacon-chain/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update shared/logutil/logutil.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/main.go Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com> * Changes requested by code reviewer * Added a mandatory comment (linter required) to the 'Fire' event * Changed the beacon-chain and validator to support only same format stdout and file logging due to complications in the outputs when using different formats. * Had to run gazelle --fix due to check failure
2019-05-22 13:22:11 +00:00
logFileName := ctx.GlobalString(cmd.LogFileName.Name)
if logFileName != "" {
if err := logutil.ConfigurePersistentLogging(logFileName); err != nil {
log.WithError(err).Error("Failed to configuring logging to disk.")
}
}
runtime.GOMAXPROCS(runtime.NumCPU())
return debug.Setup(ctx)
}
defer func() {
if x := recover(); x != nil {
log.Errorf("Runtime panic: %v\n%v", x, string(runtimeDebug.Stack()))
panic(x)
}
}()
if err := app.Run(os.Args); err != nil {
log.Error(err.Error())
os.Exit(1)
}
}
2019-06-02 15:33:44 +00:00
func startNode(ctx *cli.Context) error {
verbosity := ctx.GlobalString(cmd.VerbosityFlag.Name)
level, err := logrus.ParseLevel(verbosity)
if err != nil {
return err
}
logrus.SetLevel(level)
if level == logrus.TraceLevel {
golog.SetAllLoggers(gologging.DEBUG)
}
2019-06-02 15:33:44 +00:00
beacon, err := node.NewBeaconNode(ctx)
if err != nil {
return err
}
beacon.Start()
return nil
}