Files
Jack a24f2e23c6 Update to 7.25.0
1. Added Mail Marketing Automation trigger tasks
2. Added Mail Marketing Groups Import, Export, Merge
3. Added Mail Marketing Subscribers to support paste import
4. Added Mail Marketing Template Import Export Duplicate
5. Added Mail server add timed automatic reply
6. Added HTTPS Protection function for Website (disables automatic HTTP to HTTPS redirection when enabled)
7. Optimize Website Interface Button Integration
8. Optimize the response speed of WP Toolkit interface
2025-03-13 17:52:26 +08:00

130 lines
3.9 KiB
Python

# coding: utf-8
# -------------------------------------------------------------------
# aaPanel
# -------------------------------------------------------------------
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
# -------------------------------------------------------------------
# Author: zouhw <zhw@aapanel.com>
# -------------------------------------------------------------------
# ------------------------------
# Docker模型
# ------------------------------
import sys
import threading
import time
sys.path.insert(0, "/www/server/panel/class_v2/")
sys.path.insert(1, "/www/server/panel/")
import public
from btdockerModelV2 import dk_public as dp
from btdockerModelV2 import containerModel as dc
from btdockerModelV2 import statusModel as ds
from btdockerModelV2 import imageModel as di
from public.validate import Param
class main:
__save_date = None
__day_sec = 86400
def __init__(self, save_date):
if not save_date:
self.__save_date = 30
else:
self.__save_date = save_date
def docker_client(self, url):
return dp.docker_client(url)
def get_all_host_stats(self, fun):
"""
获取所有主机信息并获取该主机下的容器状态
:param fun: 需要调用的方法,用于获取并记录容器状态
:return:
"""
hosts = dp.sql('hosts').select()
for i in hosts:
t = threading.Thread(target=fun, args=(i,))
t.setDaemon(True)
t.start()
# 获取所有docker容器的状态信息
def container_status_for_all_hosts(self):
"""
获取所有服务器的容器数量
:return:
"""
# while True:
args = public.to_dict_obj({})
container_list = dc.main().get_list(args)['message']
for c in container_list['container_list']:
args.id = c['id']
args.write = 1
args.save_date = self.__save_date
ds.main().stats(args)
# time.sleep(60)
# 获取所有服务器的容器数量
def container_count(self):
# while True:
hosts = dp.sql('hosts').select()
n = 0
for i in hosts:
args = public.to_dict_obj({})
args.url = i['url']
container_list = dc.main().get_list(args)['message']
n += len(container_list)
pdata = {
"time": int(time.time()),
"container_count": n
}
expired = time.time() - (self.__save_date * self.__day_sec)
dp.sql("container_count").where("time<?", (expired,)).delete()
dp.sql("container_count").insert(pdata)
# time.sleep(60)
def image_for_all_host(self):
# while True:
hosts = dp.sql('hosts').select()
num = 0
size = 0
for i in hosts:
args = public.to_dict_obj({})
args.url = i['url']
res = di.main().image_for_host(args)['message']
num += res['num']
size += res['size']
pdata = {
"time": int(time.time()),
"num": num,
"size": int(size)
}
expired = time.time() - (self.__save_date * self.__day_sec)
dp.sql("image_infos").where("time<?", (expired,)).delete()
dp.sql("image_infos").insert(pdata)
# time.sleep(60)
def monitor():
# 获取所有容器信息
while True:
save_date = dp.docker_conf()['SAVE']
m = main(save_date)
m.get_all_host_stats(m.container_status_for_all_hosts)
# 开始获取容器总数
t = threading.Thread(target=m.container_count)
t.setDaemon(True)
t.start()
# 获取镜像详情
t = threading.Thread(target=m.image_for_all_host)
t.setDaemon(True)
t.start()
time.sleep(60)
# condition=threading.Condition()
# condition.acquire()
# condition.wait()
if __name__ == "__main__":
monitor()