mirror of
				https://github.com/veops/cmdb.git
				synced 2025-11-04 05:36:17 +08:00 
			
		
		
		
	perf(api): /api/v0.1/ci/adc/statistics
perf(api): /api/v0.1/ci/adc/statistics
This commit is contained in:
		@@ -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())
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
@@ -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):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user