获取centos6.5系统信息脚本

最近想尝试做两件比较重要的事情,第一是用python写个cmdb,第二还是用python写个小型监控系统,下面是获取系统信息的脚本:

#!/usr/bin/env python
# coding:utf-8

import json
import subprocess
import psutil
import socket
import time
import re
import platform
import requests

device_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 ret

def 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 ret

def 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.content

if __name__ == "__main__":
   run()

  

时间: 2024-12-14 23:27:31

获取centos6.5系统信息脚本的相关文章

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭

自动获取公网ip的脚本

随手写了一个获取公网IP的脚本,其实主要是区分""和``的区别 #!/bin/bash ip_add=`curl -s -4 icanhazip.com` echo "public IP:$ip_add " 在/bin/bash中以上赋值""是取一个字符串的,而``取得是指令运行后的字符串的,当然也可以在此基础上可以运用到iptables,DNS等等的一些脚本里

[转]获取当前执行主脚本的方法

python __file__ 与argv[0] 在python下,获取当前执行主脚本的方法有两个:sys.argv[0]和__file__. sys.argv[0] 获取主执行文件路径的最佳方法是用sys.argv[0],它可能是一个相对路径,所以再取一下abspath是保险的做法,像这样: import os,sys dirname, filename = os.path.split(os.path.abspath(sys.argv[0])) print "running from"

java web 获取客户端操作系统信息

package com.java.basic.pattern; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 获取客户端操作系统信息 * 从http的header中获取到user-agent,然后利用正则表达式判断是哪一种操作系统 * * 暂只匹配Win 7.WinXP.Win2003.Win2000.MAC.WinNT.Linux.Mac68k.Win9x * * @param userAgent r

一键获取数据库整体信息脚本

一键获取数据库整体信息脚本将脚本内容放spooldb.sql中,在sqlplus中执行,相关信息会自动生成5个文件,其中addm是最近一小时文件,ash是最近半小时文件,而awr文件是最近一小时和最近7天的两个文件. SET markup html ON spool ON pre off entmap off set term off set heading on set verify off set feedback off set linesize 2000 set pagesize 300

CentOS6系统初始化脚本

#!/bin/bash ### Usage: This script use to config linux system #获取IP地址 172.16.100.100 outip=`ifconfig eth1 |grep inet|cut -f 2 -d ":" |cut -f 1 -d " "|awk -F "." '{print $4}'` #定义系统主机名 hostname=dbbak$outip.mstuc.cn1 #修改yum源  #

运用Python语言编写获取Linux基本系统信息(一):获得Linux版本、内核、当前时间

申请博客有一段时间了,然而到现在还一篇没有写过..... 主要因为没有想到需要写些什么,最近在学习Python语言,照着书上看了看最基础的东西,发现根本看不进去,而且光看的话今天看了觉得都理解懂了,过两天自己回顾这部分内容的时候发现就又忘了,于是自己就想到自己边学边写一些小程序,以便能更好的让自己记住语法. 一.开发环境以及测试环境 Python2.7.10.pycharm.VM虚拟机.CentOS6.3 二.代码实现 代码结构: commands.py —> os_info_in.py —>

[脚本实例]——统计系统信息脚本

#!/bin/bash #title:统计系统信息 #author:Jelly_lyj #date:2016-08-05 #version:V0.01 #other:此脚本仅用于Linux系统的系统信息统计 #===================================================== #Fuction System_info()-->收集和输出 系统|硬件相关信息 #=================================================

CentOS6开机优化脚本

最近看了下公司之前的CentOS6的开机配置脚本,简单调整了下: #!/bin/bash #created by molewan #set env export PATH=$PATH:/bin:/sbin:/usr/sbin hostname=$1 if [ $UID != "0" ];then echo "Please run as root" exit 1 fi Usage(){ echo $"USAGRE:/bin/bash $0 hostname&