python-Django收集主机信息

1.创建工程simplecmdb

django-admin.py startproject simplecmdb

2.创建应用

cd simplecmdb

python manage.py startapp hostinfo

3.编辑配置文件

vim simplecmdb/setting.py

 1 INSTALLED_APPS = (
 2     'django.contrib.admin',
 3     'django.contrib.auth',
 4     'django.contrib.contenttypes',
 5     'django.contrib.sessions',
 6     'django.contrib.messages',
 7     'django.contrib.staticfiles',
 8     'hostinfo'
 9 #添加应用
10 )
11 
12 MIDDLEWARE_CLASSES = (
13     'django.contrib.sessions.middleware.SessionMiddleware',
14     'django.middleware.common.CommonMiddleware',
15 #   'django.middleware.csrf.CsrfViewMiddleware',
16 #注释csrf方便使用第三方工具curl
17     'django.contrib.auth.middleware.AuthenticationMiddleware',
18     'django.contrib.messages.middleware.MessageMiddleware',
19     'django.middleware.clickjacking.XFrameOptionsMiddleware',
20 )

4.添加model

 1 from django.db import models
 2 
 3 # Create your models here.
 4 
 5 class Host(models.Model):
 6     hostname = models.CharField(max_length=50)
 7     ip = models.IPAddressField()
 8     vendor = models.CharField(max_length=50)
 9     product = models.CharField(max_length=50)
10     sn = models.CharField(max_length=50)
11     cpu_model = models.CharField(max_length=50)
12     cpu_num = models.IntegerField()
13     memory = models.CharField(max_length=50)
14     osver = models.CharField(max_length=50)

5.初始化数据库

python manage.py sqlall hostinfo

python manage,py syncdb

6.编辑url.py,添加url

url(r'^hostinfo/collect/','hostinfo.views.collect')

7.编辑views.py

 1 from django.shortcuts import render
 2 from django.http import HttpResponse
 3 from hostinfo.models import Host
 4 
 5 # Create your views here.
 6 
 7 def collect(req):
 8     if req.POST:
 9         hostname = req.POST.get('hostname')
10         ip = req.POST.get('ip')
11         product = req.POST.get('product')
12         sn = req.POST.get('sn')
13         vendor = req.POST.get('vendor')
14         cpu_model = req.POST.get('cpu_model')
15         cpu_num = req.POST.get('cpu_num')
16         memory = req.POST.get('memory')
17         osver = req.POST.get('osver')
18 
19         host = Host()
20         host.hostname = hostname
21         host.ip = ip
22         host.product = product
23         host.sn = sn
24         host.vendor = vendor
25         host.cpu_model = cpu_model
26         host.cpu_num = cpu_num
27         host.memory = memory
28         host.osver = osver
29 
30         host.save()
31 
32         return HttpResponse('data have save into DB')
33     else:
34         return HttpResponse('there is no data from POST method')

8.注册model到admin界面

 1 from django.contrib import admin
 2 from hostinfo.models import Host
 3 
 4 # Register your models here.
 5 
 6 class HostAdmin(admin.ModelAdmin):
 7     list_display = [
 8             'hostname',
 9             'ip',
10             'product',
11             'vendor',
12             'sn',
13             'cpu_model',
14             'cpu_num',
15             'memory',
16             'osver']
17 
18 admin.site.register(Host,HostAdmin)

9.启动服务

python manage.py runserver 0.0.0.0:8000

10.访问

curl -d hostname='node02' -d ip='192.168.1.2' -d product='BL 380' -d sn='XX213' -d vendor='HP' -d cpu_model='Intel' -d cpu_num=1 -d memory='250G' -d osver='md 05c' http://192.168.1.120:8000/hostinfo/collect/

  1 #!/usr/bin/env python
  2 
  3 import urllib,urllib2
  4 from subprocess import Popen,PIPE
  5 
  6 def getIfconfig():
  7     p = Popen(['ifconfig'],stdout=PIPE)
  8     data = p.stdout.read()
  9     return data
 10 
 11 def getDmi():
 12     p = Popen(['dmidecode'],stdout=PIPE)
 13     data = p.stdout.read()
 14     return data
 15 
 16 def parseData(data):
 17     parsed_data = []
 18     new_line = ''
 19     data = [i for i in data.split('\n') if i]
 20     for line in data:
 21         if line[0].strip():
 22              parsed_data.append(new_line)
 23             new_line = line +'\n'
 24         else:        
 25             new_line += line+'\n'
 26     parsed_data.append(new_line)
 27     return [i for i in parsed_data if i]
 28 
 29 def parseIfconfig(parsed_data):
 30     parsed_data = [i for i in parsed_data if not i.startswith('lo')]
 31     for lines in parsed_data:
 32         line_list = lines.split('\n')
 33         devname = line_list[0].split()[0]
 34         macaddr = line_list[0].split()[-1]
 35         ipaddr = line_list[1].split()[1].split(':')[1]
 36         break
 37     dic['ip'] =ipaddr
 38     return dic
 39 
 40 def parseDmi(parsed_data):
 41     dic = {}
 42     parsed_data = [i for i in parsed_data if i.startswith('System Information')]
 43     parsed_data = [i for i in parsed_data[0].split('\n')[1:] if i]
 44     dmi_dic =  dict([i.strip().split(':') for i in parsed_data])
 45     dic['vendor'] = dmi_dic['Manufacturer'].strip()
 46     dic['product'] = dmi_dic['Product Name'].strip()
 47     dic['sn'] = dmi_dic['Serial Number'].strip()[:15]
 48     return dic
 49 
 50 def getHostname(f):
 51     with open(f) as fd:
 52         for line in fd:
 53             if line.startswith('HOSTNAME'):
 54                 hostname = line.split('=')[1].strip()
 55                 break
 56     return {'hostname':hostname}
 57 
 58 def getOsver(f):
 59     with open(f) as fd:
 60         for line in fd:
 61             osver = line.strip()
 62             break
 63     return {'osver':osver}
 64 
 65 def getCpu(f):
 66     num = 0
 67     with open(f) as fd:
 68         for line in fd:
 69             if line.startswith('processor'):
 70                 num +=1
 71             if line.startswith('model name'):
 72                 cpu_model = line.split(':')[1].split()
 73                 cpu_model = cpu_model[0]+' '+cpu_model[-1]
 74     return {'cpu_num':num,'cpu_model':cpu_model}
 75 
 76 def getMemory(f):
 77     with open(f) as fd:
 78         for line in fd:
 79             if line.startswith('MemTotal'):
 80                 mem = int(line.split()[1].strip())
 81                 break
 82     mem = "%d" % int(mem/1024.0)+'M'
 83     return {'memory':mem}
 84                 
 85 
 86 if __name__ == '__main__':
 87     dic = {}
 88     data_ip = getIfconfig()
 89     parsed_data_ip = parseData(data_ip)
 90     ip = parseIfconfig(parsed_data_ip)
 91     data_dmi = getDmi()
 92     parsed_data_dmi = parseData(data_dmi)
 93     dmi = parseDmi(parsed_data_dmi)
 94     hostname = getHostname('/etc/sysconfig/network')
 95     osver = getOsver('/etc/issue')
 96     cpu = getCpu('/proc/cpuinfo')
 97     mem = getMemory('/proc/meminfo')
 98     dic.update(ip)
 99     dic.update(dmi)
100     dic.update(hostname)
101     dic.update(osver)
102     dic.update(cpu)
103     dic.update(mem)
104     data = urllib.urlencode(dic)
105     req = urllib2.urlopen('http://192.168.1.120:8000/hostinfo/collect/',data)
106     print req.read()

 

转载于:https://www.cnblogs.com/Nyan-Workflow-FC/p/5699347.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值