mirror of https://github.com/veops/cmdb.git
fix(api): ci relation search
fix(api): ci relation search
This commit is contained in:
parent
9ed1108c20
commit
ffae57642c
|
@ -28,7 +28,8 @@ class Search(object):
|
||||||
count=None,
|
count=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
reverse=False,
|
reverse=False,
|
||||||
ancestor_ids=None):
|
ancestor_ids=None,
|
||||||
|
has_m2m=None):
|
||||||
self.orig_query = query
|
self.orig_query = query
|
||||||
self.fl = fl
|
self.fl = fl
|
||||||
self.facet_field = facet_field
|
self.facet_field = facet_field
|
||||||
|
@ -45,7 +46,8 @@ class Search(object):
|
||||||
level[0] if isinstance(level, list) and level else level)
|
level[0] if isinstance(level, list) and level else level)
|
||||||
|
|
||||||
self.ancestor_ids = ancestor_ids
|
self.ancestor_ids = ancestor_ids
|
||||||
self.has_m2m = False
|
self.has_m2m = has_m2m or False
|
||||||
|
if not self.has_m2m:
|
||||||
if self.ancestor_ids:
|
if self.ancestor_ids:
|
||||||
self.has_m2m = True
|
self.has_m2m = True
|
||||||
else:
|
else:
|
||||||
|
@ -90,12 +92,12 @@ class Search(object):
|
||||||
key = list(set(["{},{}".format(i, j) for idx, i in enumerate(key) for j in _tmp[idx]]))
|
key = list(set(["{},{}".format(i, j) for idx, i in enumerate(key) for j in _tmp[idx]]))
|
||||||
prefix = REDIS_PREFIX_CI_RELATION2
|
prefix = REDIS_PREFIX_CI_RELATION2
|
||||||
|
|
||||||
if not key:
|
|
||||||
return []
|
|
||||||
|
|
||||||
_tmp = list(map(lambda x: json.loads(x).keys() if x else [], rd.get(key, prefix) or []))
|
_tmp = list(map(lambda x: json.loads(x).keys() if x else [], rd.get(key, prefix) or []))
|
||||||
ids = [j for i in _tmp for j in i]
|
ids = [j for i in _tmp for j in i]
|
||||||
|
|
||||||
|
if not key:
|
||||||
|
return []
|
||||||
|
|
||||||
if level in self.level:
|
if level in self.level:
|
||||||
merge_ids.extend(ids)
|
merge_ids.extend(ids)
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,11 @@ class CIRelationSearchView(APIView):
|
||||||
facet = handle_arg_list(request.values.get("facet", ""))
|
facet = handle_arg_list(request.values.get("facet", ""))
|
||||||
sort = request.values.get("sort")
|
sort = request.values.get("sort")
|
||||||
reverse = request.values.get("reverse") in current_app.config.get('BOOL_TRUE')
|
reverse = request.values.get("reverse") in current_app.config.get('BOOL_TRUE')
|
||||||
|
has_m2m = request.values.get("has_m2m") in current_app.config.get('BOOL_TRUE')
|
||||||
|
|
||||||
start = time.time()
|
start = time.time()
|
||||||
s = Search(root_id, level, query, fl, facet, page, count, sort, reverse, ancestor_ids=ancestor_ids)
|
s = Search(root_id, level, query, fl, facet, page, count, sort, reverse,
|
||||||
|
ancestor_ids=ancestor_ids, has_m2m=has_m2m)
|
||||||
try:
|
try:
|
||||||
response, counter, total, page, numfound, facet = s.search()
|
response, counter, total, page, numfound, facet = s.search()
|
||||||
except SearchError as e:
|
except SearchError as e:
|
||||||
|
@ -69,9 +71,10 @@ class CIRelationStatisticsView(APIView):
|
||||||
level = request.values.get('level', 1)
|
level = request.values.get('level', 1)
|
||||||
type_ids = set(map(int, handle_arg_list(request.values.get('type_ids', []))))
|
type_ids = set(map(int, handle_arg_list(request.values.get('type_ids', []))))
|
||||||
ancestor_ids = request.values.get('ancestor_ids') or None # only for many to many
|
ancestor_ids = request.values.get('ancestor_ids') or None # only for many to many
|
||||||
|
has_m2m = request.values.get("has_m2m") in current_app.config.get('BOOL_TRUE')
|
||||||
|
|
||||||
start = time.time()
|
start = time.time()
|
||||||
s = Search(root_ids, level, ancestor_ids=ancestor_ids)
|
s = Search(root_ids, level, ancestor_ids=ancestor_ids, has_m2m=has_m2m)
|
||||||
try:
|
try:
|
||||||
result = s.statistics(type_ids)
|
result = s.statistics(type_ids)
|
||||||
except SearchError as e:
|
except SearchError as e:
|
||||||
|
|
Loading…
Reference in New Issue