如何让新网站快速收录,自己的网站怎么做关键词优化,深圳服装外贸网站建设,wordpress代理管理多站点实现的细节和引用的文件和以前博客记录的基本一致
https://shaka.blog.csdn.net/article/details/106927633
差别在于,这次是通过跳板机登陆获取的主机信息,只记录差异的部份
1.需要在跳板机相应的路径放置PYTHON的脚本resc.py
resc.py这个脚本中有引用的文件(pm.sh,diskpn…实现的细节和引用的文件和以前博客记录的基本一致
https://shaka.blog.csdn.net/article/details/106927633
差别在于,这次是通过跳板机登陆获取的主机信息,只记录差异的部份
1.需要在跳板机相应的路径放置PYTHON的脚本resc.py
resc.py这个脚本中有引用的文件(pm.sh,diskpnum.sh)和以前的记录一样,不再重复列出
这个脚本接受一个参数,IP地址,django一端的服务器将通过SSH连接,并将参数传递给脚本执行
脚本将返回包含CPU,内存,磁盘信息的字典,因为不同主机的磁盘分区名称和数量的不一致性,带有磁盘信息的这个KEY的值,将是一个LIST
# -*- coding: utf-8 -*-
import os,sys
import paramiko
import time
import sys
reload(sys)
import os
import json
import multiprocessing
import signal
sys.setdefaultencoding(utf-8)class TimeoutException(Exception):passdef timeout_handler(signum, frame):raise TimeoutException(error)def sshreinfos(ips):try:redict {}paramiko.util.log_to_file(/yourreexecpath/paramiko.log)ssh paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())pkey paramiko.RSAKey.from_private_key_file(/home/user/.ssh/id_rsa)ssh.connect(hostnameips, port22, usernamesshuser, pkeypkey, timeout5)t ssh.get_transport()sftpparamiko.SFTPClient.from_transport(t)sftp.put(/yourreexecpath/pm.sh,/tmp/pm.sh)sftp.put(/yourreexecpath/diskpnum.sh, /tmp/diskpnum.sh)stdindcpu, stdoutcpu, stderrcpu ssh.exec_command(top -bn1 | awk /Cpu/{print $2,$3,$4} | sed s/[a-z]//g | sed s/ //g | awk -F, {print $1$2$3})stdinmomeryall, stdoutmomeryall, stderrmomeryall ssh.exec_command(free -m | awk {print $2} | awk NR2{print})stdinmomery, stdoutmomery, stderrmomery ssh.exec_command(sh /tmp/pm.sh)musep (stdoutmomery.read()).replace(\n, )cpuusep (stdoutcpu.read()).replace(\n, )memoryall (stdoutmomeryall.read()).replace(\n, )remark 正常try:b round(float(musep))if int(b) 80:remark 评估是否扩内存except Exception:remark NONEredict[ips] ipsredict[stdoutcpu] cpuusepredict[stdoutmomeryall] memoryallredict[musep] musepredict[remark] remarkymdhms time.strftime(%Y%m%d%H%M%S, time.localtime(time.time()))stdindps, stdoutdps, stderrdps ssh.exec_command(sh /tmp/diskpnum.sh ymdhms)dpnums (stdoutdps).read().replace(\n, )# print 1.5$sftp.get(/tmp/diskusetmp ymdhms .txt, /yourreexecpath/ips diskusetmp ymdhms .txt)diskinfos open(/yourreexecpath/ips diskusetmp ymdhms .txt, r)disklists []for lines in diskinfos:diskitems {}cons lines.split()diskitems[pt] cons[0].strip()diskitems[pttotal] cons[1].strip()diskitems[ptuse] cons[2].strip()disklists.append(diskitems)diskinfos.close()os.remove(/yourreexecpath/ips diskusetmp ymdhms .txt)redict[disklists] disklistsssh.close()return redictexcept:#print errorreturn errorif __name__ __main__:if len(sys.argv) ! 2:print argv must be oneexit()ips sys.argv[1]signal.signal(signal.SIGALRM, timeout_handler)signal.alarm(10) # set timeout to 10 secondstry:print sshreinfos(ips)except TimeoutException:print(error) 2.django一端的实现如下:
views.py对应的方法
用户点击不同的按钮选择是打印到WEB页面,还是打印到WEB页面下载巡检报告的EXCEL表格
request.POST.has_key(chkaproc)或request.POST.has_key(chkonlylists)
def chkosinfos(request):if request.methodPOST:sqlstr request.POST.get(sqlstr)filenamesif request.POST.has_key(chkaproc):try:import f5.sysinfos#filenames,relistsf5.sysinfos.receivewebsqlstr(sqlstr)relistsf5.sysinfos.remoterelists(sqlstr)filenamesf5.sysinfos.remotereexcel(relists)except Exception:return render(request,exportsysinfos.html,{login_err:SYSINFOSFAILSTEP1})return render(request,exportsysinfos.html,{login_err:downloadlink:http://web服务器IP地址(存放文件用,程序将文件生成到指定的web虚拟目录):9999/filenames,templist:relists})if request.POST.has_key(chkonlylists):try:import f5.sysinfosrelistsf5.sysinfos.remoterelists(sqlstr)except Exception:return render(request,exportsysinfos.html,{login_err:SYSINFOSFAILSTEP1})return render(request,exportsysinfos.html,{login_err:OKAYfilenames,templist:relists})else:return render(request,exportsysinfos.html,{login_err:no set}) views.py引用的两个方法
remoterelists返回多个服务器巡检信息的list remotereexcel将信息写入excel
# -*- coding: utf-8 -*-
import os,sys
#sys.setdefaultencoding(utf8)
import paramiko
import xlsxwriter
import time
import sys
reload(sys)
sys.setdefaultencoding(utf-8)
from multiprocessing import Process,Manager
import multiprocessing
import os
import jsondef sshconn():try:ssh paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#ssh.connect(hostnameself.f5ips, port22, usernameself.usernames, passwordself.passwords)pkey paramiko.RSAKey.from_private_key_file(D:\\idrsapath\\id_rsa)ssh.connect(hostnameserveripaddress, port22, usernamesshuser, pkeypkey, timeout5)#连接跳板机return sshexcept Exception:return errordef remoterelists(sqlstrs):relists[]iplists []for line in sqlstrs.splitlines():con line.split()names con[0].strip()iplists.append(names)try:sshsshconn()for ips in iplists:print ipsstart_time time.time()try:stdindcmd, stdoutcmd, stderrcmdssh.exec_command(/usr/bin/python /yourreexecpath/resc.py ips)ipsdictstdoutcmd.read().replace(\n, )#.decode(utf-8)end_time time.time()if end_time - start_time 10:continueif ipsdict ! error:relists.append(eval(ipsdict))except:print error remotecmdspassssh.close()return relistsexcept:print connect sshserver errorreturn errordef remotereexcel(excellists):nowtimetime.strftime(%Y-%m-%d-%H-%M-%S,time.localtime(time.time()))filenamesnowtimesysteminfo.xlsxworkbook1 xlsxwriter.Workbook(.\\uploads\\filenames)worksheet workbook1.add_worksheet()t1服务器运行情况formatworkbook1.add_format()#worksheet.set_column(0,15,20)format.set_bold()yellowworkbook1.add_format({align:center,valign:vcenter,font_size:22,fg_color:FFC1C1})yellow.set_bold()# worksheet.merge_range(0,0,0,4,t1,yellow)worksheet.merge_range(A1:I1,t1,yellow)worksheet.set_row(0, 38)worksheet.set_column(A:A,20)worksheet.set_column(B:B,11)worksheet.set_column(C:C,12)worksheet.set_column(D:D,12)worksheet.set_column(E:E,20)title[uIP地址,uCPU使用率%,u内存总量,u内存使用率%,u巡检结果]formatworkbook1.add_format()formatworkbook1.add_format({align:center,valign:vcenter})format.set_bold()worksheet.write_row(A2,title,format)worksheet.set_row(1, 25)row2try:for lines in excellists:try:worksheet.write(row,0,lines[ips])worksheet.write(row,1,lines[stdoutcpu])worksheet.write(row,2,lines[stdoutmomeryall])worksheet.write(row,3,lines[musep])remark正常try:bround(lines[musep])if int(b)80:remark评估是否扩内存except Exception:remarkNONEworksheet.write(row,4,remark)ymdhmstime.strftime(%Y%m%d%H%M%S,time.localtime(time.time()))n5for diskpts in lines[disklists]:worksheet.set_column(n,n,20)worksheet.write(row,n,分区 diskpts[pt].strip())worksheet.set_column(n1,n1,20)worksheet.write(row,n1,分区大小 diskpts[pttotal].strip())worksheet.set_column(n2,n2,20)try:dpsround(float(diskpts[ptuse].strip()))if int(dps)80:formatmred workbook1.add_format({bold: True, font_color: red})worksheet.write(row,n2,分区使用率 diskpts[ptuse].strip(),formatmred)else:worksheet.write(row,n2,分区使用率 diskpts[ptuse].strip())except Exception:worksheet.write(row,n2,分区使用率未获取数据)nn3except Exception:print lines[ips] errorworksheet.write(row,0,lines[ips])worksheet.write(row,1,none)worksheet.write(row,2,none)worksheet.write(row,3,none)rowrow1except Exception:print cannot get datasreturn errorreturn filenames
3.HTML页面将用户需要巡检的IP列表粘贴到输入框,一行一个IP html的写法,不怎么会写,只是先写个实现
!DOCTYPE html
html langen
headmeta charsetutf-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleEXPORTHISTORYVALUES/title
/head
bodydiv idcontainer classcls-containerdiv idbg-overlay /divdiv classcls-header cls-header-lgdiv classcls-brandh3主机巡检并导出信息/h3每行一个IP/div/divdiv classcls-contentdiv classcls-content-sm paneldiv classpanel-bodyform idloginForm action{% url chkosinfos %} methodPOST {% csrf_token %}div classform-groupdiv classinput-groupdiv classinput-group-addoni classfa fa-user/i/divtextarea typetext classform-control namesqlstr placeholder主机巡检并导出信息,每行一个IP stylewidth:600px;height:111px/textarea/br/div/div/br/br
button classbtn btn-success btn-block typesubmit namechkaprocbCHKEXCEL下载链接/b/button/br/brbutton classbtn btn-success btn-block typesubmit namechkonlylistsbCHK不需要EXCEL,仅网页展示/b/buttonh4 stylecolor: #ff0000b{{ login_err }}/b/h4{% for row in templist %}
tdIP:{{ row.ips }}/td/br
tddiv stylecolor:{% if row.stdoutcpu|floatformat:0|add:0 50 %}red{% else %}black{% endif %}CPU使用率:{{ row.stdoutcpu }}/div/td/br
td内存总量M:{{ row.stdoutmomeryall }}/td/br
tddiv stylecolor:{% if row.musep|floatformat:0|add:0 90 %}red{% else %}black{% endif %} 内存使用率:{{ row.musep }} /div /td/br
{% if disklists in row %}
{% for diskrows in row.disklists %}
tddiv stylecolor:{% if diskrows.ptuse|floatformat:0|add:0 90 %}red{% else %}black{% endif %} 分区名称:{{ diskrows.pt }} 分区容量:{{ diskrows.pttotal }} 分区
{# h4 stylecolor: redb{{ login_err }}/b/h4#}/form/div/div/div/div
/body
/html