-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rpc crawler #18
base: main
Are you sure you want to change the base?
Rpc crawler #18
Changes from all commits
27c4180
4c5e74a
ae1b8cd
3c4128e
c8e6d4d
2b11cf4
f00271b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
on: [push, pull_request] | ||
name: Test | ||
jobs: | ||
test-nocache: | ||
strategy: | ||
matrix: | ||
go-version: [1.22.x] | ||
os: [ubuntu-latest, macos-latest, windows-latest] | ||
runs-on: ${{ matrix.os }} | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-go@v4 | ||
with: | ||
go-version: ${{ matrix.go-version }} | ||
- run: go test ./... | ||
|
||
run: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-go@v4 | ||
with: | ||
go-version: 1.22.x | ||
- run: go install ./... | ||
- run: rpc-crawler https://rpc-cosmoshub.goldenratiostaking.net:443 |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -12,40 +12,84 @@ import ( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
earliestBlock map[string]int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
earliestBlockMu sync.RWMutex | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcAddr map[string]bool | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcAddrMu sync.RWMutex | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grpcAddr map[string]bool | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grpcAddrMu sync.RWMutex | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
apiAddr map[string]bool | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
apiAddrMu sync.RWMutex | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
moniker map[string]string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
monikerMu sync.RWMutex | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
initialNode string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nodeAddrGRPC string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
totalNodesChecked int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
initialChainID string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
archiveNodes map[string]bool | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
archiveNodesMu sync.RWMutex | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func CheckNode(nodeAddr string) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcAddrMu.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
defer rpcAddrMu.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if _, exists := rpcAddr[nodeAddr]; exists { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return // Node already processed | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Proceed with processing | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcAddr[nodeAddr] = true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if IsNodeVisited(nodeAddr) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MarkNodeAsVisited(nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Check if the node is the initial node | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if initialNode == "" { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
earliestBlockMu.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
earliestBlock = map[string]int{} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
earliestBlockMu.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcAddrMu.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcAddr = map[string]bool{} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcAddrMu.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grpcAddrMu.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grpcAddr = map[string]bool{} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grpcAddrMu.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
apiAddrMu.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
apiAddr = map[string]bool{} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
apiAddrMu.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
archiveNodesMu.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
archiveNodes = map[string]bool{} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
archiveNodesMu.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
monikerMu.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
moniker = map[string]string{} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
monikerMu.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
initialNode = nodeAddr | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client, err := FetchClient(nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Failed to fetch status from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if client == nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Client is nil for %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ctx := context.TODO() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
status, err := client.Status(ctx) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] cannot fetch status\n", time.Now().Format("2006-01-02 15:04:05")) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if status == nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Status is nil for %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
initialChainID = status.NodeInfo.Network | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
moniker[nodeAddr] = status.NodeInfo.Moniker | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -61,17 +105,26 @@ func CheckNode(nodeAddr string) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Failed to fetch status from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if client == nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Client is nil for %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
netinfo, err := FetchNetInfo(client) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err == nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Green("[%s] Got net info from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CheckNodeGRPC(nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// CheckNodeGRPC(nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ctx := context.TODO() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
status, err := client.Status(ctx) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
moniker[nodeAddr] = status.NodeInfo.Moniker | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Failed to fetch client from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if status == nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Status is nil for %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+108
to
+124
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure proper error handling and user feedback when client operations fail. Similar to previous comment, consider using structured logging. - color.Red("[%s] Status is nil for %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr)
+ log.Errorf("Status is nil for %s at %s", nodeAddr, time.Now().Format("2006-01-02 15:04:05")) Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
moniker[nodeAddr] = status.NodeInfo.Moniker | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Verify chain_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if status.NodeInfo.Network != initialChainID { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Node %s is on a different chain_id\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -95,25 +148,25 @@ func CheckNode(nodeAddr string) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
wg.Wait() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Failed to fetch net_info from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CheckNodeGRPC(nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// CheckNodeGRPC(nodeAddr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Add to unsuccessful nodes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rpcAddr[nodeAddr] = false | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func CheckNodeGRPC(nodeAddr string) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nodeAddrGRPC = strings.Replace(nodeAddr, "26657", "9090", 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nodeAddrGRPC = strings.Replace(nodeAddrGRPC, "http://", "", 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nodeAddrGRPC = strings.Replace(nodeAddrGRPC, "https://", "", 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
err := FetchNodeInfoGRPC(nodeAddrGRPC) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err == nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Green("[%s] Got node info GRPC from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddrGRPC) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Add to successful nodes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grpcAddr[nodeAddr] = true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.Red("[%s] Failed to fetch node info GRPC from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddrGRPC) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Add to unsuccessful nodes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grpcAddr[nodeAddr] = false | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// func CheckNodeGRPC(nodeAddr string) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// nodeAddrGRPC = strings.Replace(nodeAddr, "26657", "9090", 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// nodeAddrGRPC = strings.Replace(nodeAddrGRPC, "http://", "", 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// nodeAddrGRPC = strings.Replace(nodeAddrGRPC, "https://", "", 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// err := FetchNodeInfoGRPC(nodeAddrGRPC) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// if err == nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// color.Green("[%s] Got node info GRPC from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddrGRPC) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// // Add to successful nodes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// grpcAddr[nodeAddr] = true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// } else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// color.Red("[%s] Failed to fetch node info GRPC from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddrGRPC) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// // Add to unsuccessful nodes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// grpcAddr[nodeAddr] = false | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Proper error handling and user feedback when client operations fail. However, consider using a more structured logging approach instead of direct user feedback for better maintainability.
Committable suggestion