add version flag and use it for the searcher create

This commit is contained in:
lion 2025-09-04 15:42:38 +08:00
parent 34e89d3f50
commit 33beaf96c9

View File

@ -364,7 +364,7 @@ commands:
func testBench() { func testBench() {
var err error var err error
var dbFile, srcFile, logLevel = "", "", "" var dbFile, srcFile, ipVersion, logLevel = "", "", "", ""
var ignoreError = false var ignoreError = false
var fErr = iterateFlags(func(key string, val string) error { var fErr = iterateFlags(func(key string, val string) error {
switch key { switch key {
@ -372,6 +372,8 @@ func testBench() {
dbFile = val dbFile = val
case "src": case "src":
srcFile = val srcFile = val
case "version":
ipVersion = val
case "log-level": case "log-level":
logLevel = val logLevel = val
case "ignore-error": case "ignore-error":
@ -397,11 +399,23 @@ func testBench() {
fmt.Printf("options:\n") fmt.Printf("options:\n")
fmt.Printf(" --db string ip2region binary xdb file path\n") fmt.Printf(" --db string ip2region binary xdb file path\n")
fmt.Printf(" --src string source ip text file path\n") fmt.Printf(" --src string source ip text file path\n")
fmt.Printf(" --version string IP version, options: ipv4/ipv6, specify this flag so you don't get confused \n")
fmt.Printf(" --log-level string set the log level, options: debug/info/warn/error\n") fmt.Printf(" --log-level string set the log level, options: debug/info/warn/error\n")
fmt.Printf(" --ignore-error bool keep going if bench failed\n") fmt.Printf(" --ignore-error bool keep going if bench failed\n")
return return
} }
// check and define the IP version
var version *xdb.Version = nil
if len(ipVersion) < 2 {
slog.Error("please specify the ip version with flag --version, ipv4 or ipv6 ?")
return
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
slog.Error("failed to parse version name", "error", err)
} else {
version = v
}
// check and apply the log level // check and apply the log level
err = applyLogLevel(logLevel) err = applyLogLevel(logLevel)
if err != nil { if err != nil {
@ -409,7 +423,7 @@ func testBench() {
return return
} }
searcher, err := xdb.NewSearcher(xdb.V4, dbFile) searcher, err := xdb.NewSearcher(version, dbFile)
if err != nil { if err != nil {
fmt.Printf("failed to create searcher with `%s`: %s\n", dbFile, err) fmt.Printf("failed to create searcher with `%s`: %s\n", dbFile, err)
return return
@ -429,9 +443,9 @@ func testBench() {
var iErr = xdb.IterateSegments(handle, nil, func(seg *xdb.Segment) error { var iErr = xdb.IterateSegments(handle, nil, func(seg *xdb.Segment) error {
var l = fmt.Sprintf("%d|%d|%s", seg.StartIP, seg.EndIP, seg.Region) var l = fmt.Sprintf("%d|%d|%s", seg.StartIP, seg.EndIP, seg.Region)
slog.Debug("try to bench", "segment", l) slog.Debug("try to bench", "segment", l)
mip := xdb.IPMiddle(seg.StartIP, seg.EndIP) // mip := xdb.IPMiddle(seg.StartIP, seg.EndIP)
for _, ip := range [][]byte{ // for _, ip := range [][]byte{seg.StartIP, xdb.IPMiddle(seg.EndIP, mip), mip, xdb.IPMiddle(mip, seg.EndIP), seg.EndIP} {
seg.StartIP, xdb.IPMiddle(seg.EndIP, mip), mip, xdb.IPMiddle(mip, seg.EndIP), seg.EndIP} { for _, ip := range [][]byte{seg.StartIP, seg.EndIP} {
slog.Debug("|-try to bench", "ip", xdb.IP2String(ip)) slog.Debug("|-try to bench", "ip", xdb.IP2String(ip))
r, _, err := searcher.Search(ip) r, _, err := searcher.Search(ip)
if err != nil { if err != nil {