|
|
|
@ -44,10 +44,11 @@ def mw_async(f): |
|
|
|
|
class system_api: |
|
|
|
|
setupPath = None |
|
|
|
|
pids = None |
|
|
|
|
|
|
|
|
|
cache = {} |
|
|
|
|
def __init__(self): |
|
|
|
|
self.setupPath = mw.getServerDir() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### ----- start ----- ### |
|
|
|
|
def networkApi(self): |
|
|
|
|
data = self.getNetWork() |
|
|
|
@ -254,8 +255,7 @@ class system_api: |
|
|
|
|
data['load_average'] = self.GetLoadAverage(get) |
|
|
|
|
data['title'] = self.GetTitle() |
|
|
|
|
data['network'] = self.GetNetWorkApi(get) |
|
|
|
|
data['panel_status'] = not os.path.exists( |
|
|
|
|
'/www/server/mdserver-web/data/close.pl') |
|
|
|
|
data['panel_status'] = not os.path.exists('/www/server/mdserver-web/data/close.pl') |
|
|
|
|
import firewalls |
|
|
|
|
ssh_info = firewalls.firewalls().GetSshInfo(None) |
|
|
|
|
data['enable_ssh_status'] = ssh_info['status'] |
|
|
|
@ -488,7 +488,7 @@ class system_api: |
|
|
|
|
shutil.rmtree(filename) |
|
|
|
|
else: |
|
|
|
|
os.remove(filename) |
|
|
|
|
print('mail clear ok') |
|
|
|
|
# print('mail clear ok') |
|
|
|
|
num += 1 |
|
|
|
|
total += size |
|
|
|
|
count += num |
|
|
|
@ -555,6 +555,9 @@ class system_api: |
|
|
|
|
session['otime'] = time.time() |
|
|
|
|
|
|
|
|
|
ntime = time.time() |
|
|
|
|
|
|
|
|
|
print("source",ntime - session['otime']) |
|
|
|
|
|
|
|
|
|
networkInfo = {} |
|
|
|
|
networkInfo['upTotal'] = networkIo[0] |
|
|
|
|
networkInfo['downTotal'] = networkIo[1] |
|
|
|
@ -573,12 +576,155 @@ class system_api: |
|
|
|
|
networkInfo['cpu'] = self.getCpuInfo() |
|
|
|
|
networkInfo['load'] = self.getLoadAverage() |
|
|
|
|
networkInfo['mem'] = self.getMemInfo() |
|
|
|
|
networkInfo['iostat'] = self.getDiskIostat() |
|
|
|
|
networkInfo['network'] = self.getNetWorkIostat() |
|
|
|
|
|
|
|
|
|
return networkInfo |
|
|
|
|
except Exception as e: |
|
|
|
|
print("getNetWork error:", e) |
|
|
|
|
print(mw.getTracebackInfo()) |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
def getNetWorkIostat(self): |
|
|
|
|
netInfo = {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
netInfo['ALL'] = {} |
|
|
|
|
netInfo['ALL']['up'] = 0 |
|
|
|
|
netInfo['ALL']['down'] = 0 |
|
|
|
|
netInfo['ALL']['upTotal'] = 0 |
|
|
|
|
netInfo['ALL']['downTotal'] = 0 |
|
|
|
|
netInfo['ALL']['upPackets'] = 0 |
|
|
|
|
netInfo['ALL']['downPackets'] = 0 |
|
|
|
|
|
|
|
|
|
mtime = time.time() |
|
|
|
|
iokey = 'netstat' |
|
|
|
|
netio = None |
|
|
|
|
if iokey in self.cache: |
|
|
|
|
netio = self.cache[iokey] |
|
|
|
|
|
|
|
|
|
if not netio: |
|
|
|
|
netio = {} |
|
|
|
|
netio['info'] = None |
|
|
|
|
netio['all_io'] = None |
|
|
|
|
netio['time'] = mtime |
|
|
|
|
|
|
|
|
|
stime = mtime - netio['time'] |
|
|
|
|
if not stime: stime = 1 |
|
|
|
|
|
|
|
|
|
print("new:",stime) |
|
|
|
|
|
|
|
|
|
netio_group = psutil.net_io_counters(pernic=True).keys() |
|
|
|
|
|
|
|
|
|
netio_cache = netio['info'] |
|
|
|
|
allio_cache = netio['all_io'] |
|
|
|
|
if not netio_cache: |
|
|
|
|
netio_cache = {} |
|
|
|
|
|
|
|
|
|
netio_group_t = {} |
|
|
|
|
for name in netio_group: |
|
|
|
|
netInfo[name] = {} |
|
|
|
|
|
|
|
|
|
io_data = psutil.net_io_counters(pernic=True).get(name) |
|
|
|
|
if not name in netio_cache: |
|
|
|
|
netio_cache[name] = io_data |
|
|
|
|
|
|
|
|
|
netio_group_t[name] = io_data |
|
|
|
|
|
|
|
|
|
netInfo[name]['up'] = round(float(io_data[0] - netio_cache[name][0] / stime), 2) |
|
|
|
|
netInfo[name]['down'] = round(float(io_data[1] - netio_cache[name][1] / stime), 2) |
|
|
|
|
|
|
|
|
|
netInfo[name]['upTotal'] = io_data[0] |
|
|
|
|
netInfo[name]['downTotal'] = io_data[1] |
|
|
|
|
netInfo[name]['upPackets'] = io_data[2] |
|
|
|
|
netInfo[name]['downPackets'] = io_data[3] |
|
|
|
|
|
|
|
|
|
all_io = psutil.net_io_counters()[:4] |
|
|
|
|
if not allio_cache: |
|
|
|
|
allio_cache = all_io |
|
|
|
|
|
|
|
|
|
netInfo['ALL']['up'] = round(float(all_io[0] - allio_cache[0] / stime), 2) |
|
|
|
|
netInfo['ALL']['down'] = round(float(all_io[1] - allio_cache[1] / stime), 2) |
|
|
|
|
netInfo['ALL']['upTotal'] = all_io[0] |
|
|
|
|
netInfo['ALL']['downTotal'] = all_io[1] |
|
|
|
|
netInfo['ALL']['upPackets'] = all_io[2] |
|
|
|
|
netInfo['ALL']['downPackets'] = all_io[3] |
|
|
|
|
|
|
|
|
|
self.cache[iokey] = {'info':netio_group_t,'all_io':all_io,'time':mtime} |
|
|
|
|
return netInfo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getDiskIostat(self): |
|
|
|
|
iokey = 'iostat' |
|
|
|
|
|
|
|
|
|
diskInfo = {} |
|
|
|
|
diskInfo['ALL'] = {} |
|
|
|
|
diskInfo['ALL']['read_count'] = 0 |
|
|
|
|
diskInfo['ALL']['write_count'] = 0 |
|
|
|
|
diskInfo['ALL']['read_bytes'] = 0 |
|
|
|
|
diskInfo['ALL']['write_bytes'] = 0 |
|
|
|
|
diskInfo['ALL']['read_time'] = 0 |
|
|
|
|
diskInfo['ALL']['write_time'] = 0 |
|
|
|
|
diskInfo['ALL']['read_merged_count'] = 0 |
|
|
|
|
diskInfo['ALL']['write_merged_count'] = 0 |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
diskio = None |
|
|
|
|
if iokey in self.cache: |
|
|
|
|
diskio = self.cache[iokey] |
|
|
|
|
|
|
|
|
|
mtime = int(time.time()) |
|
|
|
|
if not diskio: |
|
|
|
|
diskio = {} |
|
|
|
|
diskio['info'] = None |
|
|
|
|
diskio['time'] = mtime |
|
|
|
|
|
|
|
|
|
diskio_cache = diskio['info'] |
|
|
|
|
stime = mtime - diskio['time'] |
|
|
|
|
if not stime: stime = 1 |
|
|
|
|
|
|
|
|
|
diskio_group = psutil.disk_io_counters(perdisk=True) |
|
|
|
|
if not diskio_cache: |
|
|
|
|
diskio_cache = diskio_group |
|
|
|
|
|
|
|
|
|
for disk_name in diskio_group.keys(): |
|
|
|
|
diskInfo[disk_name] = {} |
|
|
|
|
# print('disk_name',disk_name) |
|
|
|
|
# print('diskio_group',diskio_group[disk_name]) |
|
|
|
|
# print('diskio_cache',diskio_cache[disk_name]) |
|
|
|
|
|
|
|
|
|
diskInfo[disk_name]['read_count'] = int((diskio_group[disk_name].read_count - diskio_cache[disk_name].read_count) / stime) |
|
|
|
|
diskInfo[disk_name]['write_count'] = int((diskio_group[disk_name].write_count - diskio_cache[disk_name].write_count) / stime) |
|
|
|
|
diskInfo[disk_name]['read_bytes'] = int((diskio_group[disk_name].read_bytes - diskio_cache[disk_name].read_bytes) / stime) |
|
|
|
|
diskInfo[disk_name]['write_bytes'] = int((diskio_group[disk_name].write_bytes - diskio_cache[disk_name].write_bytes) / stime) |
|
|
|
|
diskInfo[disk_name]['read_time'] = int((diskio_group[disk_name].read_time - diskio_cache[disk_name].read_time) / stime) |
|
|
|
|
diskInfo[disk_name]['write_time'] = int((diskio_group[disk_name].write_time - diskio_cache[disk_name].write_time) / stime) |
|
|
|
|
|
|
|
|
|
if 'read_merged_count' in diskio_group[disk_name] and 'read_merged_count' in diskio_cache[disk_name]: |
|
|
|
|
diskInfo[disk_name]['read_merged_count'] = int((diskio_group[disk_name].read_merged_count - diskio_cache[disk_name].read_merged_count) / stime) |
|
|
|
|
if 'write_merged_count' in diskio_group[disk_name] and 'write_merged_count' in diskio_cache[disk_name]: |
|
|
|
|
diskInfo[disk_name]['write_merged_count'] = int((diskio_group[disk_name].write_merged_count - diskio_cache[disk_name].write_merged_count) / stime) |
|
|
|
|
|
|
|
|
|
diskInfo['ALL']['read_count'] += diskInfo[disk_name]['read_count'] |
|
|
|
|
diskInfo['ALL']['write_count'] += diskInfo[disk_name]['write_count'] |
|
|
|
|
diskInfo['ALL']['read_bytes'] += diskInfo[disk_name]['read_bytes'] |
|
|
|
|
diskInfo['ALL']['write_bytes'] += diskInfo[disk_name]['write_bytes'] |
|
|
|
|
if diskInfo['ALL']['read_time'] < diskInfo[disk_name]['read_time']: |
|
|
|
|
diskInfo['ALL']['read_time'] = diskInfo[disk_name]['read_time'] |
|
|
|
|
if diskInfo['ALL']['write_time'] < diskInfo[disk_name]['write_time']: |
|
|
|
|
diskInfo['ALL']['write_time'] = diskInfo[disk_name]['write_time'] |
|
|
|
|
|
|
|
|
|
if 'read_merged_count' in diskInfo[disk_name] and 'read_merged_count' in diskInfo[disk_name]: |
|
|
|
|
diskInfo['ALL']['read_merged_count'] += diskInfo[disk_name]['read_merged_count'] |
|
|
|
|
if 'write_merged_count' in diskInfo[disk_name] and 'write_merged_count' in diskInfo[disk_name]: |
|
|
|
|
diskInfo['ALL']['write_merged_count'] += diskInfo[disk_name]['write_merged_count'] |
|
|
|
|
|
|
|
|
|
self.cache[iokey] = {'info':diskio_group,'time':mtime} |
|
|
|
|
except Exception as e: |
|
|
|
|
# print(mw.getTracebackInfo()) |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
return diskInfo |
|
|
|
|
|
|
|
|
|
def getNetWorkIoData(self, start, end): |
|
|
|
|
# 取指定时间段的网络Io |
|
|
|
|
data = mw.M('network').dbfile('system').where("addtime>=? AND addtime<=?", (start, end)).field( |
|
|
|
|