Cache.py
2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# coding=utf-8
#author: 4N
#createtime: 2021/10/18
#email: nheweijun@sina.com
from kazoo.client import KazooClient
import configure
import time
from app.modules.service.image.models import ImageService,Image
from app.models import TileScheme
import json
class Cache:
@classmethod
def cache_data(cls,guid):
from app import GLOBAL_DIC
# 缓存zookeeper
zoo = GLOBAL_DIC.get("zookeeper")
if zoo is None:
zoo: KazooClient = KazooClient(hosts=configure.zookeeper, timeout=100)
zoo.start()
GLOBAL_DIC["zookeeper"] = zoo
else:
if not zoo.connected:
zoo.start()
# 缓存数据服务器
servers = GLOBAL_DIC.get("servers")
if servers is None:
servers = zoo.get_children("/rpc")
servers.append("本地服务器")
GLOBAL_DIC["servers"] = servers
GLOBAL_DIC["servers_updatetime"] = time.time()
else:
servers = GLOBAL_DIC.get("servers")
# 更新缓存
if time.time() - GLOBAL_DIC["servers_updatetime"] > 10:
servers = zoo.get_children("/rpc")
servers.append("本地服务器")
GLOBAL_DIC["servers"] = servers
GLOBAL_DIC["servers_updatetime"] = time.time()
# 缓存服务信息
if guid:
image_service_info = GLOBAL_DIC.get(guid)
if image_service_info is None or time.time() - GLOBAL_DIC.get("service_updatetime") > 20:
image_service: ImageService = ImageService.query.filter_by(guid=guid).one_or_none()
images = image_service.images.all()
if image_service.scheme_guid:
scheme: TileScheme = TileScheme.query.filter_by(guid=image_service.scheme_guid).one_or_none()
GLOBAL_DIC[guid] = {"service": image_service, "images": images,
"scheme": json.loads(scheme.parameter)}
else:
GLOBAL_DIC[guid] = {"service": image_service, "images": images}
GLOBAL_DIC["service_updatetime"] = time.time()
image_service_info = GLOBAL_DIC[guid]
else:
image_service_info = GLOBAL_DIC[guid]
else:
image_service_info = None
return image_service_info,zoo,servers