#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. 【转】c++内存管理学习纲要

    http://blog.csdn.net/zhanghefu/article/details/5003407 转自:http://blog.csdn.net/wdzxl198/article/deta ...

  2. discuz的php7版本号

    php7的安装 wget http://am1.php.net/get/php-7.0.4.tar.gz/from/this/mirror tar zvxf php-7.0.4.tar.gz cd p ...

  3. vue 自定义 移动端筛选条件

    1.创建组件 components/FilterBar/FilterBar.vue <template> <div class="filterbar" :styl ...

  4. Native进程之Trace原理(转)——可直接输出某进程的栈帧——debuggerd

    一. 概述 当发生ANR(Application Not Response,对于Java进程可通过kill -3向目标进程发送信号SIGNAL_QUIT, 输出相应的traces信息保存到目录/dat ...

  5. Redis 命令行 常用总结

    http://www.redis.cn/commands.html# 1 Keys * 列出所有的keys redis > keys * ) "s:0" ) "o: ...

  6. 我的第一个开源控件-DragGridView

    我的第一个开源控件出炉了,希望各个小伙伴给个star,支持下.项目地址 1. 前言 因为项目须要,要做一个相似腾讯视频.频道管理.拖拽排序的效果.这个控件是在原地址 之上改造出来的.先看下效果图. 1 ...

  7. JS日历控件 灵活设置: 精确的时分秒.

     在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时仅仅支持 年月日 的日历控件,如今优化例如以下:      1. 在原基础上 支持 yyyy-mm-dd 的年月 ...

  8. 生成随机string

    转自:http://blog.csdn.net/yaodong_y/article/details/8115250 字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码,是由美国国家标 ...

  9. Part1-Redefining your data-access strategy 重新定义你的数据访问策略

    欢迎来到Entity Framework 4 In Action,EF是微软3.5 SP1推出的ORM工具,现在已经更新到4.0版本(...)本书能确保你in a  robust and model- ...

  10. 2016/3/31 拾遗 php字符串中 转义字符 “ ’‘ ” ’ “” ‘ " \’ ' ' \‘ " " \" '' \ " " 使用

    <?php echo $str_string1='甲问:"你在哪里学的PHP?"'; echo "<br />"; echo $str_str ...