PYTHON 获取多台跨平台主机的磁盘性能数据并打印到EXCEL

本功能在DJANGO 框架的WEB应用上面做过实现,可以将数据导出到EXCEL表格,具体代码如下:

#views.py

def chkdisks(request):
    if request.method=="POST":
        if request.POST.has_key('exp'):
            try:

                infolists=models.computersinfo.objects.all().values('ipaddr','uname','pwd','ostype','contact')

            except Exception:
                return render(request,"manages.html",{"DATABASE ERROR"})
            try:
                filenames=wbemtest.trywexdisk(infolists)
            except Exception:
                return render(request,"manages.html",{"login_err":"CANN'T LOAD DATA"})
            
            return render(request,"manages.html",{"login_err":"downloadlink:ftp://10.*.*.*/"+filenames})


wbemtest.py

# -*- coding: utf-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import time
import wmi
import xlsxwriter
import dj27.models
import pwden
import alert
import datetime
import unixs

#wbemtest.trywexdisk函数

def trywexdisk(infolists):

    nowtime=time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time()))+""

    bookurl="\\\\10.*.*.*\\*\\temp\\bak\\"+nowtime+'disks.xlsx'
    filenames=nowtime+'disks.xlsx'
    workbook = xlsxwriter.Workbook(bookurl)
    worksheet = workbook.add_worksheet()
    title=[u'主机IP',u'分区',u'磁盘空间G',u'已用空间G',u'剩余空间G',u'已用百分比%']
    format=workbook.add_format()
    worksheet.set_column(0,5,15)
    format.set_bold()


    worksheet.write_row('A1',title,format)
   


    row=1
    col=1
    
    for dicts in infolists:
        h=dicts["ipaddr"]
        u=dicts["uname"]
        p=dicts["pwd"]
        p=pwden.de(p)   #解密密码,因为密码以加密的方式保存在数据库
        ostype=dicts["ostype"]
   
        try:
            if ostype=="linux":
                a=unixs.get_linuxfs_info(h,u,p)
                b={}
                for b in a:
                    worksheet.write(row,0,b["hostname"])
                    worksheet.write(row,col,b["Caption"])
                    worksheet.write(row,col+1,b["DiskTotal"])
                    worksheet.write(row,col+2,b["UseSpace"])
                    worksheet.write(row,col+3,b["FreeSpace"])
                    worksheet.write(row,col+4,b["Percent"])
                    row=row+1
            else:
                a=get_fs_info(h,u,p)
                b={}
                for b in a:
                    worksheet.write(row,0,b["hostname"])
                    worksheet.write(row,col,b["Caption"])
                    worksheet.write(row,col+1,int(b["DiskTotal"]))
                    worksheet.write(row,col+2,int(b["UseSpace"]))
                    worksheet.write(row,col+3,int(b["FreeSpace"]))
                    worksheet.write(row,col+4,b["Percent"])
                    row=row+1
                
        except Exception:
            pass


        
    workbook.close()

    return filenames


unixs.py

import re
import os,sys
import paramiko
import time
reload(sys)

sys.setdefaultencoding('utf-8')


#unixs.get_linuxfs_info函数

def get_linuxfs_info(h,u,p):
    try:
        clients = session(h,u,p)
        
        tmplists=get_logicdisks(h,clients)
        return tmplists
    except Exception:
        

        pass


def session(host,uname,pwd):

    try:

        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(host,username=uname, password=pwd)
        return ssh
    except Exception as e:
        return "None"


def get_logicdisks(hosts,clients):
    try:
        stdin, stdout, stderr = clients.exec_command("df -Plh")
        diskinfo=stdout.readlines()


        tmplist=[]
        for line in diskinfo:
            tmpdict={}
            if line.startswith('/dev/'):
               
                
                alldisk=str(line.split()[1])
                tmpdict["DiskTotal"]=alldisk
               
                allusedisk=str(line.split()[2])
                tmpdict["UseSpace"]=allusedisk


                allfreedisk=str(line.split()[3])
                tmpdict["FreeSpace"]=allfreedisk
                
                usepercent=str(line.split()[4])
                tmpdict["Percent"]=usepercent
                
                logicname=str(line.split()[5])
                tmpdict["Caption"]=logicname
                
                tmpdict["hostname"]=str(hosts)
                
                tmplist.append(tmpdict)
                
        return tmplist


    except Exception:
        
        pass


#WINDOWS获取分区信息的函数     wbemtest.get_fs_info

def get_fs_info(host,uname,pwd):
    """
    获取文件系统信息
    包含分区的大小、已用量、可用量、使用率、挂载点信息
    """
    tmplist = []
    try:


        c = wmi.WMI(computer=host,user=uname,password=pwd)
        
        for physical_disk in c.Win32_DiskDrive():
            for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"):
                for logical_disk in partition.associators("Win32_LogicalDiskToPartition"):
                    tmpdict = {}
                    tmpdict["Caption"] = logical_disk.Caption
                    tmpdict["DiskTotal"] = int(logical_disk.Size)/1024/1024/1024
                    tmpdict["UseSpace"]=(int(logical_disk.Size)-int(logical_disk.FreeSpace))/1024/1024/1024
                    tmpdict["FreeSpace"]=int(logical_disk.FreeSpace)/1024/1024/1024
                    tmpdict["Percent"]=int(100.0*(int(logical_disk.Size)-int(logical_disk.FreeSpace))/int(logical_disk.Size))
                    tmpdict["hostname"]=host
                    tmplist.append(tmpdict)
        return tmplist
    except Exception:
        pass


猜你喜欢

转载自blog.csdn.net/lsysafe/article/details/80570836