diff --git a/cmdb-api/api/commands/click_cmdb.py b/cmdb-api/api/commands/click_cmdb.py index 54c8c91..eb662ac 100644 --- a/cmdb-api/api/commands/click_cmdb.py +++ b/cmdb-api/api/commands/click_cmdb.py @@ -1,14 +1,13 @@ # -*- coding:utf-8 -*- +import click import copy import datetime import json +import requests import time import uuid - -import click -import requests from flask import current_app from flask.cli import with_appcontext from flask_login import login_user @@ -185,11 +184,19 @@ def cmdb_counter(): UserCRUD.add(username='worker', password=uuid.uuid4().hex, email='worker@xxx.com') login_user(UserCache.get('worker')) + + i = 0 while True: try: db.session.remove() CMDBCounterCache.reset() + + if i % 5 == 0: + CMDBCounterCache.flush_adc_counter() + i = 0 + + i += 1 except: import traceback print(traceback.format_exc()) diff --git a/cmdb-api/api/lib/cmdb/cache.py b/cmdb-api/api/lib/cmdb/cache.py index c19812f..6795b5a 100644 --- a/cmdb-api/api/lib/cmdb/cache.py +++ b/cmdb-api/api/lib/cmdb/cache.py @@ -5,8 +5,10 @@ from __future__ import unicode_literals from flask import current_app from api.extensions import cache +from api.extensions import db from api.lib.cmdb.custom_dashboard import CustomDashboardManager from api.models.cmdb import Attribute +from api.models.cmdb import CI from api.models.cmdb import CIType from api.models.cmdb import CITypeAttribute from api.models.cmdb import RelationType @@ -227,6 +229,7 @@ class CITypeAttributeCache(object): class CMDBCounterCache(object): KEY = 'CMDB::Counter' + KEY2 = 'CMDB::Counter2' @classmethod def get(cls): @@ -429,3 +432,21 @@ class CMDBCounterCache(object): return return numfound + + @classmethod + def flush_adc_counter(cls): + res = db.session.query(CI.type_id, CI.is_auto_discovery) + result = dict() + for i in res: + result.setdefault(i.type_id, dict(total=0, auto_discovery=0)) + result[i.type_id]['total'] += 1 + if i.is_auto_discovery: + result[i.type_id]['auto_discovery'] += 1 + + cache.set(cls.KEY2, result, timeout=0) + + return result + + @classmethod + def get_adc_counter(cls): + return cache.get(cls.KEY2) or cls.flush_adc_counter() diff --git a/cmdb-api/api/lib/cmdb/ci.py b/cmdb-api/api/lib/cmdb/ci.py index 3aed0d7..eeeb67a 100644 --- a/cmdb-api/api/lib/cmdb/ci.py +++ b/cmdb-api/api/lib/cmdb/ci.py @@ -5,7 +5,6 @@ import copy import datetime import json import threading - from flask import abort from flask import current_app from flask_login import current_user @@ -16,6 +15,7 @@ from api.extensions import rd from api.lib.cmdb.cache import AttributeCache from api.lib.cmdb.cache import CITypeAttributesCache from api.lib.cmdb.cache import CITypeCache +from api.lib.cmdb.cache import CMDBCounterCache from api.lib.cmdb.ci_type import CITypeAttributeManager from api.lib.cmdb.ci_type import CITypeManager from api.lib.cmdb.ci_type import CITypeRelationManager @@ -218,15 +218,7 @@ class CIManager(object): @classmethod def get_ad_statistics(cls): - res = CI.get_by(to_dict=False) - result = dict() - for i in res: - result.setdefault(i.type_id, dict(total=0, auto_discovery=0)) - result[i.type_id]['total'] += 1 - if i.is_auto_discovery: - result[i.type_id]['auto_discovery'] += 1 - - return result + return CMDBCounterCache.get_adc_counter() @staticmethod def ci_is_exist(unique_key, unique_value, type_id):