mirror of
https://github.com/netfun2000/ip2region.git
synced 2026-02-27 09:44:31 +08:00
1.增加bench_test
2.增加search_test 3.修改ip2Region.py及类名,改为xdbSearcher Signed-off-by: 厉害的花花 <117415792@qq.com>
This commit is contained in:
120
binding/python/bench_test.py
Normal file
120
binding/python/bench_test.py
Normal file
@@ -0,0 +1,120 @@
|
||||
#
|
||||
# bench_test.py
|
||||
# bench_test
|
||||
#
|
||||
# Created by luckydog on 2022/7/1.
|
||||
# Copyright © 2022年 luckydog. All rights reserved.
|
||||
#
|
||||
from ast import main
|
||||
import io
|
||||
|
||||
from xdbSearcher import XdbSearcher
|
||||
import argparse
|
||||
import time
|
||||
import sys
|
||||
|
||||
|
||||
def printHelp():
|
||||
print("python bench_test.py [command options]")
|
||||
print("options: ")
|
||||
print(" --db string ip2region binary xdb file path")
|
||||
print(" --src string source ip text file path")
|
||||
print(" --cache-policy string cache policy: file/vectorIndex/content")
|
||||
|
||||
def trim(string):
|
||||
if string[:1] != ' ' and string[-1:] != ' ':
|
||||
return string
|
||||
elif string[:1] == ' ':
|
||||
return trim(string[1:])
|
||||
else:
|
||||
return trim(string[:-1])
|
||||
|
||||
def start_bench(dbFile="", srcFile="", cachePolicy="vectorIndex"):
|
||||
if cachePolicy == "file":
|
||||
try:
|
||||
searcher = XdbSearcher(dbfile=dbFile)
|
||||
except Exception as err:
|
||||
print(err)
|
||||
return
|
||||
elif cachePolicy == "vectorIndex":
|
||||
try:
|
||||
vi = XdbSearcher.loadVectorIndexFromFile(dbfile=dbFile)
|
||||
if vi is None:
|
||||
print(f"failed to load vector index from {dbFile}\n")
|
||||
searcher = XdbSearcher(dbfile=dbFile, vectorIndex=vi)
|
||||
|
||||
except Exception as err:
|
||||
print(err)
|
||||
return
|
||||
else:
|
||||
try:
|
||||
cb = XdbSearcher.loadContentFromFile(dbfile=dbFile)
|
||||
if cb is None:
|
||||
print(f"failed to load xdb content from {dbFile}\n")
|
||||
searcher = XdbSearcher(contentBuff=cb)
|
||||
|
||||
except Exception as err:
|
||||
print(err)
|
||||
return
|
||||
# do the bench test
|
||||
|
||||
try:
|
||||
count = 0
|
||||
costs = 0
|
||||
sTime = time.time()
|
||||
f = io.open(srcFile, "rb")
|
||||
while True:
|
||||
line = trim(f.readline(1024)).decode("utf-8").replace("\n", "")
|
||||
if len(line) < 1:
|
||||
break
|
||||
|
||||
ps = line.split("|",2)
|
||||
if len(ps) != 3:
|
||||
print(f"invalid ip segment line :{line}")
|
||||
return
|
||||
sip = XdbSearcher.ip2long(None, ps[0])
|
||||
eip = XdbSearcher.ip2long(None, ps[1])
|
||||
|
||||
if sip > eip:
|
||||
print(f"start ip({ps[0]}) should not be greater than end ip({ps[1]})")
|
||||
return
|
||||
|
||||
mip = (sip + eip) >> 1
|
||||
|
||||
for ip in [sip, (sip + mip) >> 1, mip, (mip + eip) >> 1, eip]:
|
||||
try:
|
||||
cTime = time.time()
|
||||
region = searcher.search(ip)
|
||||
costs = costs + (time.time() - cTime)
|
||||
except Exception as error:
|
||||
print(f"failed to search ip :{ip}")
|
||||
return
|
||||
|
||||
if region is None:
|
||||
print(f"failed to search ip :{ip}")
|
||||
return
|
||||
if region != ps[2]:
|
||||
print(f"failed search({ip}) with ({region} != {ps[2]})")
|
||||
return
|
||||
count = count + 1
|
||||
|
||||
# close the searcher at last
|
||||
f.close()
|
||||
searcher.close()
|
||||
print(f"Bench finished, [cachePolicy: {cachePolicy}, total: {count}, took: {round(time.time() - sTime, 2)} s, cost: {round(costs/count*1000, 4)} ms/op]")
|
||||
except Exception as err:
|
||||
print(f"failed to open source text file :{err}")
|
||||
return
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) < 2:
|
||||
printHelp()
|
||||
exit(0)
|
||||
parse = argparse.ArgumentParser()
|
||||
parse.add_argument("--db", help="ip2region binary xdb file path")
|
||||
parse.add_argument("--src", help="source ip text file path")
|
||||
parse.add_argument("--cache-policy", choices=["file", "vectorIndex", "content"],
|
||||
help="cache policy: file/vectorIndex/content")
|
||||
args = parse.parse_args()
|
||||
start_bench(dbFile=args.db, srcFile=args.src, cachePolicy=args.cache_policy)
|
||||
Reference in New Issue
Block a user