|
|
|
package configr
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bufio"
|
|
|
|
"harmony-benchmark/p2p"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Gets all the validator peers
|
|
|
|
func GetValidators(config string) []p2p.Peer {
|
|
|
|
file, _ := os.Open(config)
|
|
|
|
fscanner := bufio.NewScanner(file)
|
|
|
|
var peerList []p2p.Peer
|
|
|
|
for fscanner.Scan() {
|
|
|
|
p := strings.Split(fscanner.Text(), " ")
|
|
|
|
ip, port, status := p[0], p[1], p[2]
|
|
|
|
if status == "leader" || status == "client" {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
peer := p2p.Peer{Port: port, Ip: ip}
|
|
|
|
peerList = append(peerList, peer)
|
|
|
|
}
|
|
|
|
return peerList
|
|
|
|
}
|
|
|
|
|
|
|
|
// Gets all the leader peers and corresponding shard Ids
|
|
|
|
func GetLeadersAndShardIds(config *[][]string) ([]p2p.Peer, []uint32) {
|
|
|
|
var peerList []p2p.Peer
|
|
|
|
var shardIds []uint32
|
|
|
|
for _, node := range *config {
|
|
|
|
ip, port, status, shardId := node[0], node[1], node[2], node[3]
|
|
|
|
if status == "leader" {
|
|
|
|
peerList = append(peerList, p2p.Peer{Ip: ip, Port: port})
|
|
|
|
val, err := strconv.Atoi(shardId)
|
|
|
|
if err == nil {
|
|
|
|
shardIds = append(shardIds, uint32(val))
|
|
|
|
} else {
|
|
|
|
log.Print("[Generator] Error parsing the shard Id ", shardId)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return peerList, shardIds
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetClientPeer(config *[][]string) *p2p.Peer {
|
|
|
|
for _, node := range *config {
|
|
|
|
ip, port, status := node[0], node[1], node[2]
|
|
|
|
if status != "client" {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
peer := p2p.Peer{Port: port, Ip: ip}
|
|
|
|
return &peer
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Gets the port of the client node in the config
|
|
|
|
func GetClientPort(config *[][]string) string {
|
|
|
|
for _, node := range *config {
|
|
|
|
_, port, status, _ := node[0], node[1], node[2], node[3]
|
|
|
|
if status == "client" {
|
|
|
|
return port
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
// Parse the config file and return a 2d array containing the file data
|
|
|
|
func ReadConfigFile(filename string) ([][]string, error) {
|
|
|
|
file, err := os.Open(filename)
|
|
|
|
defer file.Close()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal("Failed to read config file ", filename)
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
fscanner := bufio.NewScanner(file)
|
|
|
|
|
|
|
|
result := [][]string{}
|
|
|
|
for fscanner.Scan() {
|
|
|
|
p := strings.Split(fscanner.Text(), " ")
|
|
|
|
result = append(result, p)
|
|
|
|
}
|
|
|
|
log.Println(result)
|
|
|
|
return result, nil
|
|
|
|
}
|