(ctx *cli.Context)
| 61 | ) |
| 62 | |
| 63 | func crawlNodes(ctx *cli.Context) error { |
| 64 | var inputSet common.NodeSet |
| 65 | var geoipDB *geoip2.Reader |
| 66 | |
| 67 | nodesFile := ctx.String(nodeFileFlag.Name) |
| 68 | |
| 69 | if nodesFile != "" && gethCommon.FileExist(nodesFile) { |
| 70 | inputSet = common.LoadNodesJSON(nodesFile) |
| 71 | } |
| 72 | |
| 73 | var db *sql.DB |
| 74 | if ctx.IsSet(crawlerDBFlag.Name) { |
| 75 | name := ctx.String(crawlerDBFlag.Name) |
| 76 | shouldInit := false |
| 77 | if _, err := os.Stat(name); os.IsNotExist(err) { |
| 78 | shouldInit = true |
| 79 | } |
| 80 | |
| 81 | var err error |
| 82 | db, err = openSQLiteDB( |
| 83 | name, |
| 84 | ctx.String(autovacuumFlag.Name), |
| 85 | ctx.Uint64(busyTimeoutFlag.Name), |
| 86 | ) |
| 87 | if err != nil { |
| 88 | panic(err) |
| 89 | } |
| 90 | log.Info("Connected to db") |
| 91 | if shouldInit { |
| 92 | log.Info("DB did not exist, init") |
| 93 | if err := crawlerdb.CreateDB(db); err != nil { |
| 94 | panic(err) |
| 95 | } |
| 96 | } |
| 97 | } |
| 98 | |
| 99 | nodeDB, err := enode.OpenDB(ctx.String(nodedbFlag.Name)) |
| 100 | if err != nil { |
| 101 | panic(err) |
| 102 | } |
| 103 | |
| 104 | if geoipFile := ctx.String(geoipdbFlag.Name); geoipFile != "" { |
| 105 | geoipDB, err = geoip2.Open(geoipFile) |
| 106 | if err != nil { |
| 107 | return err |
| 108 | } |
| 109 | defer func() { _ = geoipDB.Close() }() |
| 110 | } |
| 111 | |
| 112 | crawler := crawler.Crawler{ |
| 113 | NetworkID: ctx.Uint64(utils.NetworkIdFlag.Name), |
| 114 | NodeURL: ctx.String(nodeURLFlag.Name), |
| 115 | ListenAddr: ctx.String(listenAddrFlag.Name), |
| 116 | NodeKey: ctx.String(nodekeyFlag.Name), |
| 117 | Bootnodes: ctx.StringSlice(bootnodesFlag.Name), |
| 118 | Timeout: ctx.Duration(timeoutFlag.Name), |
| 119 | Workers: ctx.Uint64(workersFlag.Name), |
| 120 | Sepolia: ctx.Bool(utils.SepoliaFlag.Name), |
nothing calls this directly
no test coverage detected