From 33beaf96c968c988760b70fbfe66bd1cc32426bd Mon Sep 17 00:00:00 2001 From: lion Date: Thu, 4 Sep 2025 15:42:38 +0800 Subject: [PATCH] add version flag and use it for the searcher create --- maker/golang/main.go | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/maker/golang/main.go b/maker/golang/main.go index 73cd839..fde765c 100644 --- a/maker/golang/main.go +++ b/maker/golang/main.go @@ -364,7 +364,7 @@ commands: func testBench() { var err error - var dbFile, srcFile, logLevel = "", "", "" + var dbFile, srcFile, ipVersion, logLevel = "", "", "", "" var ignoreError = false var fErr = iterateFlags(func(key string, val string) error { switch key { @@ -372,6 +372,8 @@ func testBench() { dbFile = val case "src": srcFile = val + case "version": + ipVersion = val case "log-level": logLevel = val case "ignore-error": @@ -397,11 +399,23 @@ func testBench() { fmt.Printf("options:\n") fmt.Printf(" --db string ip2region binary xdb 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(" --ignore-error bool keep going if bench failed\n") 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 err = applyLogLevel(logLevel) if err != nil { @@ -409,7 +423,7 @@ func testBench() { return } - searcher, err := xdb.NewSearcher(xdb.V4, dbFile) + searcher, err := xdb.NewSearcher(version, dbFile) if err != nil { fmt.Printf("failed to create searcher with `%s`: %s\n", dbFile, err) return @@ -429,9 +443,9 @@ func testBench() { var iErr = xdb.IterateSegments(handle, nil, func(seg *xdb.Segment) error { var l = fmt.Sprintf("%d|%d|%s", seg.StartIP, seg.EndIP, seg.Region) slog.Debug("try to bench", "segment", l) - mip := xdb.IPMiddle(seg.StartIP, seg.EndIP) - for _, ip := range [][]byte{ - seg.StartIP, xdb.IPMiddle(seg.EndIP, mip), mip, xdb.IPMiddle(mip, seg.EndIP), seg.EndIP} { + // mip := xdb.IPMiddle(seg.StartIP, seg.EndIP) + // for _, ip := range [][]byte{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)) r, _, err := searcher.Search(ip) if err != nil {