mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.5 KiB
70 lines
1.5 KiB
# -*- coding: utf-8 -*-
|
|
#
|
|
import threading
|
|
import time
|
|
|
|
from celery import shared_task
|
|
from django.core.cache import cache
|
|
from django.db.utils import ProgrammingError
|
|
|
|
from .models import Session
|
|
|
|
|
|
|
|
ASSETS_CACHE_KEY = "terminal__session__assets"
|
|
USERS_CACHE_KEY = "terminal__session__users"
|
|
SYSTEM_USER_CACHE_KEY = "terminal__session__system_users"
|
|
CACHE_REFRESH_INTERVAL = 10
|
|
RUNNING = False
|
|
|
|
|
|
# Todo: 定期清理上报history
|
|
@shared_task
|
|
def clean_terminal_history():
|
|
pass
|
|
|
|
|
|
def get_session_asset_list():
|
|
return set(list(Session.objects.values_list('asset', flat=True)))
|
|
|
|
|
|
def get_session_user_list():
|
|
return set(list(Session.objects.values_list('user', flat=True)))
|
|
|
|
|
|
def get_session_system_user_list():
|
|
return set(list(Session.objects.values_list('system_user', flat=True)))
|
|
|
|
|
|
def set_cache():
|
|
while True:
|
|
try:
|
|
assets = get_session_asset_list()
|
|
users = get_session_user_list()
|
|
system_users = get_session_system_user_list()
|
|
|
|
cache.set(ASSETS_CACHE_KEY, assets)
|
|
cache.set(USERS_CACHE_KEY, users)
|
|
cache.set(SYSTEM_USER_CACHE_KEY, system_users)
|
|
except ProgrammingError:
|
|
pass
|
|
finally:
|
|
time.sleep(10)
|
|
|
|
|
|
def main():
|
|
global RUNNING
|
|
if RUNNING:
|
|
return
|
|
threads = []
|
|
thread = threading.Thread(target=set_cache)
|
|
threads.append(thread)
|
|
|
|
for t in threads:
|
|
t.daemon = True
|
|
t.start()
|
|
RUNNING = True
|
|
|
|
# Todo: 不能migrations了
|
|
main()
|