作者 lemon

新增转移终端优化方案4

@@ -39,8 +39,8 @@ def message_receive(message): @@ -39,8 +39,8 @@ def message_receive(message):
39 for cmd in commands: 39 for cmd in commands:
40 monitor.execute(cmd) 40 monitor.execute(cmd)
41 elif type_ == 'initialize': 41 elif type_ == 'initialize':
42 - commands = json.loads(data_)  
43 - monitor.init_config = commands 42 + monitor.init_config = json.loads(data_)
  43 +
44 except: 44 except:
45 import traceback 45 import traceback
46 print(traceback.format_exc()) 46 print(traceback.format_exc())
@@ -18,7 +18,7 @@ from lib import control_server @@ -18,7 +18,7 @@ from lib import control_server
18 from lib.common import TaskStatus 18 from lib.common import TaskStatus
19 from lib.facebook import FacebookClient 19 from lib.facebook import FacebookClient
20 from lib.sqlhelper import UserList, Status, Config 20 from lib.sqlhelper import UserList, Status, Config
21 -from utils import parameter 21 +from utils import parameter, netutil, system_info
22 22
23 log = logging.getLogger(__name__) 23 log = logging.getLogger(__name__)
24 tostr = lambda x: (x) 24 tostr = lambda x: (x)
@@ -34,6 +34,8 @@ class Monitor(callback.CallBack): @@ -34,6 +34,8 @@ class Monitor(callback.CallBack):
34 self._listenlist = dict() 34 self._listenlist = dict()
35 self._imei = Config.get('imei', lambda: uuid.uuid1().hex) 35 self._imei = Config.get('imei', lambda: uuid.uuid1().hex)
36 self._name = Config.get('name', control_server.get_init_name) 36 self._name = Config.get('name', control_server.get_init_name)
  37 + self._host = None
  38 + self._version = '1.0.0'
37 self.executor = ThreadPoolExecutor(50, 'task_thread') 39 self.executor = ThreadPoolExecutor(50, 'task_thread')
38 self.init_config = {} 40 self.init_config = {}
39 41
@@ -97,12 +99,26 @@ class Monitor(callback.CallBack): @@ -97,12 +99,26 @@ class Monitor(callback.CallBack):
97 if not email: return None 99 if not email: return None
98 return self._listenlist.get(email, None) 100 return self._listenlist.get(email, None)
99 101
  102 + @property
100 def size(self): 103 def size(self):
101 return len(self._listenlist) 104 return len(self._listenlist)
102 105
103 def members(self): 106 def members(self):
104 return list(self._listenlist.keys()) 107 return list(self._listenlist.keys())
105 108
  109 + def _info_(self):
  110 + data = {
  111 + "name": self._name,
  112 + "num": self.size,
  113 + "version": self._version,
  114 + "server": self._socket.ws_url,
  115 + }
  116 + data.update(system_info.get())
  117 + if not self._host:
  118 + self._host = netutil.getip()
  119 + data['ip'] = self._host
  120 + print(data)
  121 +
106 def _heartbeat(self): 122 def _heartbeat(self):
107 if self.init_config.get("disableSync"): 123 if self.init_config.get("disableSync"):
108 return None 124 return None
@@ -125,6 +141,7 @@ class Monitor(callback.CallBack): @@ -125,6 +141,7 @@ class Monitor(callback.CallBack):
125 }), 141 }),
126 "type": "initialize", 142 "type": "initialize",
127 } 143 }
  144 + self._info_()
128 self._socket.send(payload) 145 self._socket.send(payload)
129 self._socket.payload_data = self._heartbeat # 替换心跳数据获取方式 146 self._socket.payload_data = self._heartbeat # 替换心跳数据获取方式
130 147
@@ -21,3 +21,5 @@ def get_ws_address(name, source_ws): @@ -21,3 +21,5 @@ def get_ws_address(name, source_ws):
21 except: 21 except:
22 new_ws = source_ws 22 new_ws = source_ws
23 return new_ws, not new_ws == source_ws 23 return new_ws, not new_ws == source_ws
  24 +
  25 +
@@ -5,4 +5,5 @@ tornado==4.5.3 @@ -5,4 +5,5 @@ tornado==4.5.3
5 pyyaml==5.3 5 pyyaml==5.3
6 munch==2.5.0 6 munch==2.5.0
7 furl==2.1.0 7 furl==2.1.0
8 -sqlalchemy==1.3.12  
  8 +sqlalchemy==1.3.12
  9 +psutil==5.6.7
  1 +#!/usr/bin/env python
  2 +# -*- coding: utf-8 -*-
  3 +# @Time : 2020-02-16 11:41
  4 +# @Author : Lemon
  5 +# @File : netutil.py
  6 +# @Software: PyCharm
  7 +
  8 +import requests
  9 +
  10 +
  11 +def _getip_text(url):
  12 + try:
  13 + r = requests.get(url, headers={"User-Agent": 'curl/7.54.0'}, timeout=1)
  14 + if r.status_code == 200:
  15 + return {"ip": r.text.strip()}
  16 + except:
  17 + pass
  18 + return {}
  19 +
  20 +
  21 +def getip(source=-1):
  22 + ip = None
  23 + hosts = [
  24 + 'http://icanhazip.com/',
  25 + 'http://ip.sb/',
  26 + 'http://ip.3322.net',
  27 + 'http://myip.dnsomatic.com/',
  28 + 'http://whatismyip.akamai.com/',
  29 + ]
  30 + if source == -1:
  31 + try:
  32 + r = requests.head('https://www.163.com', timeout=1)
  33 + ip = r.headers.get('cdn-user-ip', None)
  34 + except:
  35 + pass
  36 + if ip:
  37 + return ip
  38 + else:
  39 + return getip(source + 1)
  40 + else:
  41 + if source == len(hosts):
  42 + return None
  43 + ip = _getip_text(hosts[source]).get('ip', None)
  44 + if ip:
  45 + return ip
  46 + else:
  47 + return getip(source + 1)
  48 +
  49 +
  50 +if __name__ == '__main__':
  51 + ip = lambda: getip()
  52 +
  53 + for _ in range(10):
  54 + if callable(ip):
  55 + ip = ip()
  56 + print(ip)
  1 +#!/usr/bin/env python
  2 +# -*- coding: utf-8 -*-
  3 +# @Time : 2020-02-16 11:24
  4 +# @Author : Lemon
  5 +# @File : running_info.py
  6 +# @Software: PyCharm
  7 +
  8 +
  9 +import psutil
  10 +import os, datetime
  11 +
  12 +
  13 +def _get_delta(timestamp):
  14 + t = str(datetime.datetime.now() - datetime.datetime.fromtimestamp(timestamp))
  15 + try:
  16 + t = t[:-7]
  17 + except:
  18 + pass
  19 + return t
  20 +
  21 +
  22 +def get():
  23 + data = psutil.virtual_memory()
  24 + memory = "%d" % (int(round(data.percent))) + "%"
  25 + cpu = "%0.2f" % psutil.cpu_percent(1) + "%"
  26 +
  27 + p = psutil.Process(os.getpid())
  28 + process_time = _get_delta(p.create_time())
  29 + boot_time = _get_delta(psutil.boot_time())
  30 + return {
  31 + 'memory': memory,
  32 + 'cpu': cpu,
  33 + 'process_time': process_time,
  34 + 'boot_time': boot_time
  35 + }