擷取centos6.5系統資訊指令碼

來源:互聯網
上載者:User

標籤:on()   rod   cep   sts   product   http   highlight   try   utf-8   

最近想嘗試做兩件比較重要的事情,第一是用python寫個cmdb,第二還是用python寫個小型監控系統,下面是擷取系統資訊的指令碼:

#!/usr/bin/env python# coding:utf-8import jsonimport subprocessimport psutilimport socketimport timeimport reimport platformimport requestsdevice_white = [‘eth0‘,‘eth1‘, ‘eth2‘, ‘eth3‘, ‘em1‘]headers = {"Content-Type": "application/json"}def get_hostname():    return socket.gethostname()def get_device_info():    ret = []    for device, info in psutil.net_if_addrs().iteritems():        if device in device_white:            device_info = {‘device‘: device}            for snic in info:                if snic.family == 2:                    device_info[‘ip‘] = snic.address                elif snic.family == 17:                    device_info[‘mac‘] = snic.address            ret.append(device_info)    return retdef get_cpuinfo():    ret = {"cpu": ‘‘, ‘num‘: 0}    with open(‘/proc/cpuinfo‘) as f:        for line in f:            line_list = line.strip().split(‘:‘)            key = line_list[0].rstrip()            if key == "model name":                ret[‘cpu‘] = line_list[1].lstrip()            if key == "processor":                ret[‘num‘] += 1    return retdef get_disk():    cmd = """/sbin/fdisk -l|grep Disk|egrep -v ‘identifier|mapper|Disklabel‘"""    disk_data = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)    partition_size = []    for dev in disk_data.stdout.readlines():        try:            size = int(dev.strip().split(‘, ‘)[1].split()[0]) / 1024 / 1024 / 1024            partition_size.append(str(size))        except:            pass    return " + ".join(partition_size)def get_Manufacturer():    cmd = """/usr/sbin/dmidecode | grep -A6 ‘System Information‘"""    ret = {}    manufacturer_data = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)    for line in manufacturer_data.stdout.readlines():        if "Manufacturer" in line:            ret[‘manufacturers‘] = line.split(‘: ‘)[1].strip()        elif "Product Name" in line:            ret[‘server_type‘] = line.split(‘: ‘)[1].strip()        elif "Serial Number" in line:            ret[‘st‘] = line.split(‘: ‘)[1].strip().replace(‘ ‘,‘‘)        elif "UUID" in line:            ret[‘uuid‘] = line.split(‘: ‘)[1].strip()    return ret    #return manufacturer_data.stdout.readline().split(‘: ‘)[1].strip()# 出廠日期def get_rel_date():    cmd = """/usr/sbin/dmidecode | grep -i release"""    data = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)    date = data.stdout.readline().split(‘: ‘)[1].strip()    return re.sub(r‘(\d+)/(\d+)/(\d+)‘,r‘\3-\1-\2‘,date)  def get_os_version():    return " ".join(platform.linux_distribution())def get_innerIp(ipinfo):    inner_device = ["eth0", "bond0"]    ret = {}    for info in ipinfo:        if info.has_key(‘ip‘) and info.get(‘device‘, None) in inner_device:            ret[‘ip‘] = info[‘ip‘]            ret[‘mac_address‘] = info[‘mac‘]            return  ret    return {}def get_Memtotal():    with open(‘/proc/meminfo‘) as mem_open:        a = int(mem_open.readline().split()[1])        return a / 1024     def run():     data = {}    res = {}    data[‘hostname‘] = get_hostname()    data.update(get_innerIp(get_device_info()))    cpuinfo = get_cpuinfo()    data[‘server_cpu‘] = "{cpu} {num}".format(**cpuinfo)    data[‘server_disk‘] = get_disk()    data.update( get_Manufacturer())    data[‘manufacture_date‘] = get_rel_date()    data[‘os‘] = get_os_version()    data[‘server_mem‘] = get_Memtotal()    if "VMware" in data[‘manufacturers‘]:        data[‘vm_status‘] = 0    else:        data[‘vm_status‘] = 1    res[‘params‘]=data    res[‘jsonrpc‘] = "2.0"    res["id"] = 1    res["method"]= "server.radd" #   print res  #   for k,v in data.iteritems(): #       print k, v    send(res)def send(data):    url = "http://192.168.63.182:2000/api"    r = requests.post(url, headers=headers,json=data)    print r.status_code    print r.contentif __name__ == "__main__":   run()

  

擷取centos6.5系統資訊指令碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.