Beispiel: SYSINFO


#!/usr/bin/python

import os,sys

if (sys.version[0] < '1') or \
   ((sys.version[0] == '1') and (sys.version[2] < '5')) :
    print "You need at least Python 1.5 !"
    sys.exit()

import time
import string,re
import socket
import stat

FALSE,TRUE = range(2)

##############################################################################

def readpipe(name) :
    try :
	f = os.popen(name, "r")
	l = f.readlines()
	f.close()
    except IOError :
	return FALSE
    return l

def readfile(name) :
    try :
	f = open(name, "r")
	l = f.readlines()
	f.close()
    except IOError :
	return FALSE
    return l
	
def file_exist(name) :
    try :
	s = os.stat(name)
    except os.error :
	return FALSE
    return TRUE
    
def print_file(name) :
    f = open(name, "r")
    s = f.readlines()
    f.close()
    for l in s : 
	while (len(l) > 0) and (l[-1] == '\012') :
	    l = l[:-1]
	print l

def print_file_if_exist(name) :
    if file_exist(name) :
	print_file(name)
	return TRUE
    else :
	return FALSE

##############################################################################

def begin_do(name) :
    print name, ":"
    l = ""
    for i in range(len(name)+2) :
	l = l + "="
    print l

def end_do(name) :
    print

def _timeperiod(t) :
    day = t / (60*60*24)
    t = t % (60*60*24)
    hou = t / (60*60)
    t = t % (60*60)
    min = t / 60
    t = t % 60
    sec = t
    return (day,hou,min,sec)

#######################################

def do_issue() :
    begin_do("Issue")
    if print_file_if_exist("/etc/issue") == FALSE :
	print "( /etc/issue not found, skipping )"
    end_do("Issue")
	
#######################################

def do_system() :
    begin_do("System info")
    ##### uptime
    l = readfile("/proc/uptime")
    now = time.time()
    (uptime,idletime) = string.split(l[0]) 
    uptime = int(eval(uptime))
    idletime = int(eval(idletime))
    sysstart = now - uptime
    print "System start : %s" % (time.strftime("%c", time.localtime(sysstart)))
    d,h,m,s = _timeperiod(uptime)
    print "System uptime: %d days  %d hours  %d minutes" % (d,h,m)
    if idletime != 0 :
	d,h,m,s = _timeperiod(idletime)
	p = (100*idletime)/uptime
	print "Idle uptime  : %d days  %d hours  %d minutes   (%d%%)" % (d,h,m, p)
    else :
	print "Idle uptime  : ( no information due to kernel bug )"

    ##### load
    l = readfile("/proc/loadavg")
    l1m,l5m,l15m,t,d = string.split(l[0])
    rt,nt = string.split(t, "/")
    print "System load  : %s (1min)  %s (5min)  %s (15min)" % (l1m,l5m,l15m)
    print "Task info    : %s tasks  %s running" % (nt,rt)

    ##### user
    l = readpipe("/usr/bin/who --count")
    x,y = string.split(l[1], "=")
    nu = eval(y)
    print "Users        : %d" % (nu)
    
    end_do("System info")

#######################################

def do_kernel() :
    begin_do("Kernel info")
    ##### image
    l = readfile("/proc/1/environ")
    print "Lilo image   :",
    if l :
	l = string.split(l[0], "\0")
	for i in l :
	    x,y = string.split(i, "=")
	    if x == "BOOT_IMAGE" :
		print y
    else :
	print "( access denied )"

    ##### version
    l = readfile("/proc/version")
    r = re.match("^(.*) \((.*)\) \((.*)\) (#.*)$", l[0])
    print "OS Release   :", r.groups()[0]
    print "   Version   :", r.groups()[3]
    print "   built by  :", r.groups()[1]
    print "   built with:", r.groups()[2]
   
    ##### filesystems
    l = readfile("/proc/filesystems")
    print "Filesystems  :",
    for i in l : 
	x = string.split(i)
	print x[-1],
    print

    ##### devices
    l = readfile("/proc/devices")
    i = 0
    while l[i] == "Character devices:\012" : 
	i = i + 1
    print "Char devices :",
    while l[i] != "Block devices:\012" : 
	s = string.split(l[i])
	if len(s) == 2 :
	    print "%s=%s" % (s[1], s[0]) ,
	i = i + 1
    print
    print "Block devices:",
    for i in range(i+1,len(l)) :
	s = string.split(l[i])
	if len(s) == 2 :
	    print "%s=%s" % (s[1], s[0]) ,
    print

    end_do("Kernel info")
    
#######################################

def do_network() :
    begin_do("Network info")
    ##### hostname
    print "Hostname     :", socket.gethostname()

    ##### domainname (NIS)
    l = readfile("/proc/sys/kernel/domainname")
    print "Domainname   :", l[0][:-1]

    ##### interfaces
    l = readfile("/proc/net/dev")
    for i in range(2,len(l)) :
	s = string.split(l[i],":")
	n = string.strip(s[0])
	print "Interface    :", n
	cmd = "/sbin/ifconfig " + n
	l2 = readpipe(cmd)
	print "    type     :", l2[0][21:-1]
	r = re.match(" *inet addr:(.*)  Bcast:(.*)  Mask:(.*)", l2[1])
	n = r.groups()[0]
	print "    IP       : %s  (%s)" % (n, socket.gethostbyaddr(n)[0])
	r = re.match(" *(.*)  MTU.*", l2[2])
	print "    state    :", r.groups()[0]

    end_do("Network info")

#######################################

def do_cpu() :
    begin_do("CPU info")
 
    l = readfile("/proc/cpuinfo")
    cpus = []
    info = {}
    for i in range(len(l)) :
	s = string.split(l[i],":")
	for j in range(len(s)) :
	    s[j] = string.strip(s[j])
	if s[0] == "" :
	    continue
	if (s[0] == "processor") and (len(info) > 0) :
	    cpus.append(info)
	    info = {}
	info[s[0]] = s[1]
    cpus.append(info)

    print "Nr of CPUs   :", len(cpus)

    ni = 0
    for i in cpus :
	print "CPU %d        : %s" % (ni, i["cpu"])
	print "    type     : %s stepping %s" % (i["model"], i["stepping"])
	print "    vendor   : %s" % (i["vendor_id"])
	print "    speed    : %s Bogomips" % (i["bogomips"])
	print "    bugs     :",
	for s in ["fdiv_bug", "hlt_bug", "f00f_bug"] :
	    if i[s] == "yes" :
		print s,
	print 
	print "    flags    : %s" % (i["flags"])
	ni = ni + 1

    end_do("CPU info")
    
#######################################

def do_hardware() :
    begin_do("Hardware info")
    ##### meminfo
    l = readfile("/proc/meminfo")
    x = string.split(l[1])
    total = eval(x[1])
    used = eval(x[2])
    free = eval(x[3])
    shared = eval(x[4])
    buffers = eval(x[5])
    cached = eval(x[6])

    x = string.split(l[2])
    stotal = eval(x[1])
    sused = eval(x[2])
    sfree = eval(x[3])

    memtotal = os.stat("/proc/kcore")[stat.ST_SIZE]

    m = 1024*1024
    print "Memory RAM   : %d MB  (%d MB kernel, %d MB free)" % (memtotal/m, (memtotal-total)/m, free/m)
    print "    usage    : %d MB shared   %d MB buffers   %d MB cached" % (shared/m, buffers/m, cached/m)
    print "Swap area    : %d MB  (%d MB used)" % (stotal/m, sused/m)
   
    ##### vga
    l = readfile("/proc/pci")
    for i in l :
	r = re.match(".*VGA compatible controller: (.*)\.$", i)
	if r :
	    print "Graphic      :", r.groups()[0]

    ##### ethernet
    # l = readfile("/proc/pci")
    for i in l :
	r = re.match(".*Ethernet controller: (.*)\.$", i)
	if r :
	    print "Ethernet     :", r.groups()[0]

    ##### usb
    # l = readfile("/proc/pci")
    for i in l :
	r = re.match(".*USB Controller: (.*)\.$", i)
	if r :
	    print "USB          :", r.groups()[0]

    ##### ide
    # l = readfile("/proc/pci")
    for i in l :
	r = re.match(".*IDE interface: (.*)\.$", i)
	if r :
	    print "IDE          :", r.groups()[0]

    ##### host bridge
    # l = readfile("/proc/pci")
    for i in l :
	r = re.match(".*Host bridge: (.*)\.$", i)
	if r :
	    print "Host bridge  :", r.groups()[0]


    end_do("Hardware info")

##############################################################################

def header() :
    t = time.time()
    lt = time.localtime(t)
    lts = time.strftime("%c" ,lt)
    print "+-----------------------------------------------------------------------------+"
    print "| SYSINFO    kapet@informatik.tu-chemnitz.de",
    for i in range(32-len(lts)) :
	print "",
    print lts,"|"
    print "+-----------------------------------------------------------------------------+"
    print

def main() :
    l = readpipe("/bin/uname -s")
    if l[0] != "Linux\012" :
	print "ERROR: This does not seem to be a linux system and is currently"
	print "       not supported!"
	sys.exit()
#    l = readpipe("/bin/uname -r")
#    if l[0][0:5] != "2.0.3" :
#	print "ERROR: Only Linux versions 2.0.3x have been tested!"
#	sys.exit()
    header()
    do_issue()
    do_system()
    do_kernel()
#    do_network()
#    do_cpu()
    do_hardware()
    
if __name__ == '__main__' :
    main()