#cmdb脚本程序一
#!/usr/bin/python
# coding:utf-8 """
采集机器自身信息
1 主机名
2 内存
3 ip与mac地址
4 cpu信息
5 硬盘分区信息
6 制造商信息
7 出厂日期
8 系统版本
"""
import socket
import psutil
import subprocess
import time
import platform
import json
import requests device_white = ['eth1', 'eth2', 'eth3', 'bond0', 'bond1'] def get_hostname():
return socket.gethostname() def get_meminfo():
with open("/proc/meminfo") as f:
tmp = int(f.readline().split()[1])
return tmp / 1024 def get_device_info():
ret = []
for device, device_info in psutil.net_if_addrs().iteritems():
if device in device_white:
tmp_device = {}
for sinc in device_info:
if sinc.family == 2:
tmp_device['ip'] = sinc.address
if sinc.family == 17:
tmp_device['mac'] = sinc.address
ret.append(tmp_device)
return ret def get_cpu_info():
ret = {'cpu':'','num':0}
with open('/proc/cpuinfo') as f:
for line in f:
tmp = line.split(":")
key = tmp[0].strip()
if key == "processor":
ret['num'] += 1
if key == "model name":
ret['cpu'] = tmp[1].strip()
return ret def get_disk_info():
cmd = """/sbin/fdisk -l|grep Disk|egrep -v 'identifier|mapper|Disk label'"""
disk_data = subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
patition_size = []
for dev in disk_data.stdout.readlines():
# size = int(dev.strip().split()[4]) / 1024 / 1024/ 1024
size = int(dev.strip().split(',')[1].split()[0]) / 1024 / 1024/ 1024
patition_size.append(str(size))
return " + ".join(patition_size) # 获取制造商信息
def get_manufacturer_info():
ret = {}
cmd = """/usr/sbin/dmidecode | grep -A6 'System Information'"""
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()
elif 'UUID' in line:
ret['uuid'] = line.split(':')[1].strip()
return ret # 获取出厂日期
def get_real_date():
cmd = """/usr/sbin/dmidecode | grep -i release"""
date_data = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
real_date = date_data.stdout.readline().split(':')[1].strip()
return time.strftime('%Y-%m-%d', time.strptime(real_date, "%m/%d/%Y")) def get_os_version():
return ' '.join(platform.linux_distribution()) def get_innerip(ipinfo):
inner_device = ['eth1', 'bond0']
ret = {}
for info in ipinfo:
if info.has_key('ip') and info.get('device', None) in inner_device:
ret['ip'] = info.get('ip')
ret['mac_address'] = info.get('mac')
return ret
return {} def main():
data = {}
data['hostname'] = get_hostname()
device_info = get_device_info()
data.update(get_innerip(device_info))
data['ipinfo'] = json.dumps(device_info) cpu_info = get_cpu_info()
data['server_cpu'] = "{cpu} {num}".format(**cpu_info)
data['server_disk'] = get_disk_info()
data['server_mem'] = get_meminfo()
data.update(get_manufacturer_info())
data['manufacture_date'] = get_real_date()
data['os'] = get_os_version()
if 'virtualbox' == data['server_type']:
data['vm_status'] = 0
else:
data['vm_status'] = 1
# return data
send(data) def send(data):
#通过向服务端的api接口操作写入服务数据库,因为这里我们暂时没有搭配,暂时空余
#url = "http://39.106.11.3:8000/resources/server/reporting/"
#r = requests.post(url, data = data)
#print r
print data if __name__ == "__main__":
main()

cmdb客户端服务器信息采集一的更多相关文章

  1. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  2. 【读书笔记】iOS-使用Web Service-基于客户端服务器结构的网络通信(一)

    Web Service技术是一种通过Web协议提供服务,保证不同平台的应用服务可以互操作,为客户端程序提供不同的服务. 目前3种主流的Web Service实现方案用:REST,SOAP和XML-RP ...

  3. 可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK

    LEADTOOLS Video Streaming Module控件为您创建一个自定义的视频会议应用程序和工具提供所有需要的功能.软件开发人员可以使用Video Streaming Module SD ...

  4. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  5. MySQL1:客户端/服务器架构

    一.MySQL的客户端/服务器架构 前言 之前对MySQL的认知只限于会写些SQL,本篇算是笔记,记录和整理下自己对MySQL不熟悉的地方. 大致逻辑: MySQL的服务器程序直接和我们存储的数据打交 ...

  6. 客户端-服务器通信安全 sign key

    API接口签名校验,如何安全保存appsecret? - 知乎  https://www.zhihu.com/question/40855191 要保证一般的客户端-服务器通信安全,可以使用3个密钥. ...

  7. python 异步IO-aiohttp与简单的异步HTTP客户端/服务器

    参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143209814 ...

  8. QT--TCP网络编程(客户端/服务器)

    QT -----TCP网络编程   1.主要流程 1.客户端 创建QTcpSocket对象 连接到服务器 --connectToHost() 发送数据 ---write() 读取数据 ---readA ...

  9. PostgreSQL编码格式:客户端服务器、客户端、服务器端相关影响

    关于字符编码这块,官网链接: https://www.postgresql.org/docs/current/charset.html 刚刚写了几百字的东西因为断网,导致全没有了,重头再写,我就只想记 ...

随机推荐

  1. Spring Data JPA 入门篇

    Spring Data JPA是什么 它是Spring基于ORM框架(如hibernate,Mybatis等).JPA规范(Java Persistence API)封装的一套 JPA应用框架,可使开 ...

  2. openstack ocata 的cell 和 placement api

    The Ocata openstack just released recently. The official docs is not very stable yet. Some key steps ...

  3. Cg入门6:函数2

    内建函数分为四类: 1.数学函数 2.几何函数 3.纹理函数 4.导数函数:事实上就是片段函数

  4. FPGA第一篇:SRAM工作原理

    一.SRAM概述 SRAM主要用于二级快速缓存(Level2 C ache). 它利用晶体管来存储数据.与DRAM相比,SRAM的速度快,但在同样面积中SRAM的容量要比其它类型的内存小. 大部分FP ...

  5. 设计模式 之代理(Proxy)模式

    为什么这里要定义代理呢?所谓代理代理,当然就是你不想做的事.找别人去做,这就是代理.所以,当你写代码的时候.你想保持类的简单性.重用性.你就能够把事件尽量都交给其他类去做.自己仅仅管做好自己的事.也就 ...

  6. 浅谈JavaScript的字符串的replace方法

    JavaScript字符串提供了一个replace方法.replace方法可以接受两个参数:第一个参数可以使RegExp对象或者一个字符串,第二个参数可以是一个字符串或者一个函数.如果第一个参数是字符 ...

  7. 一些java错误

    @Override must override a superclass method 问题解决 如果在使用Eclipse开发Java项目时,在使用 @Override 出现以下错误: The met ...

  8. vmware中鼠标在部分区域不能使用

    https://blog.csdn.net/dreamengsoul/article/details/80439278 方法1:重装VMware tools; 方法2:使用增强型键盘鼠标: 方法3:检 ...

  9. 什么叫强类型的DATASET

    强类型DataSet,是指需要预先定义对应表的各个字段的属性和取值方式的数据集.对于所有这些属性都需要从DataSet, DataTable, DataRow继承,生成相应的用户自定义类.强类型的一个 ...

  10. 整型变量修饰符,char类型数据存储原理,字节数,

    //------------------整型变量修饰符 修饰符(int short long longlong signed unsigned)所有修饰符都是用来修整形 int 4short %hd ...