|
|
|
import pymysql
|
|
|
|
from pymysql.cursors import DictCursor
|
|
|
|
from multiprocessing import cpu_count
|
|
|
|
from update.models import Cinema, CinemaUser
|
|
|
|
import queue
|
|
|
|
import threading
|
|
|
|
from django.utils import timezone
|
|
|
|
import datetime
|
|
|
|
|
|
|
|
|
|
|
|
class GetVersion(object):
|
|
|
|
def __init__(self, cinema_ip_list=None):
|
|
|
|
self.cinema_ip_list = cinema_ip_list
|
|
|
|
self.queue = queue.Queue() # 注册队列
|
|
|
|
self.th_num = 0 # 获取CPU核心数量,-1后座位处理逻辑的线程数量
|
|
|
|
|
|
|
|
def get_all_cinema(self):
|
|
|
|
print('get_all_cinema')
|
|
|
|
if self.cinema_ip_list is None:
|
|
|
|
all_cinema_obj = Cinema.objects.all()
|
|
|
|
else:
|
|
|
|
all_cinema_obj = Cinema.objects.filter(ip__in=self.cinema_ip_list)
|
|
|
|
for cinema_obj in all_cinema_obj:
|
|
|
|
print(cinema_obj)
|
|
|
|
data = {
|
|
|
|
'ip': cinema_obj.ip,
|
|
|
|
'db_user': cinema_obj.db_user,
|
|
|
|
'db_pwd': cinema_obj.db_pwd
|
|
|
|
}
|
|
|
|
self.queue.put(data)
|
|
|
|
cpu_num = cpu_count() - 1 if cpu_count() > 1 else 1
|
|
|
|
cinema_num = len(all_cinema_obj)
|
|
|
|
self.th_num = cpu_num if cpu_num < cinema_num else cinema_num
|
|
|
|
|
|
|
|
def main_process(self):
|
|
|
|
print('main_process')
|
|
|
|
self.get_all_cinema()
|
|
|
|
while self.queue.qsize() > 0:
|
|
|
|
threads = []
|
|
|
|
for i in range(self.th_num):
|
|
|
|
t = threading.Thread(target=self.get_cinema_ver, args=(self.queue,))
|
|
|
|
threads.append(t)
|
|
|
|
for i in range(self.th_num):
|
|
|
|
threads[i].start()
|
|
|
|
for i in range(self.th_num):
|
|
|
|
threads[i].join()
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get_cinema_ver(q):
|
|
|
|
if q.empty():
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
cinema_config = q.get()
|
|
|
|
sql_str = "SELECT cs.*, cv.server_version, cv.client_version FROM cinema_set cs LEFT JOIN cinema_version cv ON 1=1;"
|
|
|
|
ip = cinema_config.get('ip')
|
|
|
|
db_config = {
|
|
|
|
'host': ip,
|
|
|
|
'user': cinema_config.get('db_user'),
|
|
|
|
'password': cinema_config.get('db_pwd'),
|
|
|
|
'database': 'cine',
|
|
|
|
'connect_timeout': 5,
|
|
|
|
}
|
|
|
|
db_conn = pymysql.Connect(**db_config)
|
|
|
|
db_cursor = db_conn.cursor(cursor=DictCursor)
|
|
|
|
db_cursor.execute(sql_str)
|
|
|
|
res = db_cursor.fetchone()
|
|
|
|
update_data = {
|
|
|
|
'name': res['cinema_name'],
|
|
|
|
'zz_num': res['cinema_num'],
|
|
|
|
'inner_id': res['cinema_id'],
|
|
|
|
'sys_ver': res['server_version'],
|
|
|
|
'client_ver': res['client_version'],
|
|
|
|
# 'update_time': datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')
|
|
|
|
'update_time': timezone.now(),
|
|
|
|
'is_cloud': '云版本' if res.get('dx_sys_version', '--') == 'CLOUD' else '--',
|
|
|
|
'remote_label': res.get('cinema_label', '--') if res.get('cinema_label', '--') != '' else '--',
|
|
|
|
'ver_id': int(res['server_version'][7:11])
|
|
|
|
}
|
|
|
|
print(ip, update_data, db_config)
|
|
|
|
cinema_obj = Cinema.objects.filter(ip=ip).update(**update_data)
|
|
|
|
|
|
|
|
|
|
|
|
def get_cinema_ver_by_ip(ip):
|
|
|
|
sql_str = "SELECT cv.server_version FROM cinema_version cv WHERE 1=1;"
|
|
|
|
db_config = {
|
|
|
|
'host': ip,
|
|
|
|
'user': Cinema.objects.get(ip=ip).db_user,
|
|
|
|
'password': Cinema.objects.get(ip=ip).db_pwd,
|
|
|
|
'database': 'cine',
|
|
|
|
'connect_timeout': 5,
|
|
|
|
}
|
|
|
|
print(db_config)
|
|
|
|
db_conn = pymysql.Connect(**db_config)
|
|
|
|
db_cursor = db_conn.cursor(cursor=DictCursor)
|
|
|
|
db_cursor.execute(sql_str)
|
|
|
|
res = db_cursor.fetchone()
|
|
|
|
return res.get('server_version')
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
v = GetVersion()
|
|
|
|
v.get_all_cinema()
|