rendered paste body__module_name__ = "Sysinfo"
__module_version__ = "0.1"
__module_description__ = "foo"
import commands
import xchat
print 'Loaded Sysinfo'
title = '\x02'
endtitle = '\x02'
separator = '\x0305 | \x03'
data = ''
enddata = ''
def getVersion():
lsb = open('/etc/lsb-release')
distro, release, codename = '', '', ''
for line in lsb.readlines():
if line.startswith('DISTRIB_ID'):
distro = line.split('=')[1][:-1]
if line.startswith('DISTRIB_RELEASE'):
release = line.split('=')[1][:-1]
if line.startswith('DISTRIB_CODENAME'):
codename = line.split('=')[1][:-1]
raw = open('/proc/version').read()
kernel = raw.split()[2]
return distro, release, codename, kernel
def getCPU():
raw = open('/proc/cpuinfo')
speed = ''
computer = ''
processor = 0
for line in raw.readlines():
if line.startswith('clock'):
mhz = float(line.split(':')[1].replace('MHz', '').strip())
if mhz < 1000:
speed = ('%.2f' % mhz) + 'Mhz'
else:
speed = ('%.2f' % (mhz/1000)) + 'Ghz'
if line.startswith('detected as'):
computer = line.split(':')[1].strip().split(' ', 1)[1][1:-1]
if line.startswith('cpu MHz'):
mhz = float(line.split(':')[1].strip())
if mhz < 1000:
speed = ('%.2f' % mhz) + 'Mhz'
else:
speed = ('%.2f' % (mhz/1000)) + 'Ghz'
if line.startswith('model name'):
computer = line.split(':')[1].strip()
while computer.find(' ') != -1:
computer = computer.replace(' ', ' ')
computer = computer.replace('Genuine ', '')
computer = computer.replace('(R)', '')
computer = computer.replace('(tm)', '')
computer = computer.replace('(TM)', '')
if line.startswith('processor'):
processor += 1
try:
raw = int(open('/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq').read())
temp = ('%.2f' % (raw/1000000)) + 'Ghz'
if temp != '0.00Ghz':
speed = temp
except:
pass
return speed, computer, processor
def getMemory():
raw = open('/proc/meminfo')
total, free = '', ''
kbfree = 0
for line in raw.readlines():
if line.startswith('MemTotal'):
kbtotal = int(line.split(':')[1].replace('kB', '').strip())
total = str(kbtotal/1024) + 'MB'
if line.startswith('Cached'):
kbfree += int(line.split(':')[1].replace('kB', '').strip())
if line.startswith('MemFree'):
kbfree += int(line.split(':')[1].replace('kB', '').strip())
if line.startswith('Buffers'):
kbfree += int(line.split(':')[1].replace('kB', '').strip())
free = str(kbfree/1024) + 'MB'
freelines = int(float('%.1f' % (float(kbfree)/kbtotal)) * 14)
if freelines == 14:
freelines -= 1
memgraph = '\x02[\x02' + '\x0303' + ''▀' * freelines + '\x0304' + ''▀' * (14 - freelines) + '\x03\x02]\x02'
return total, free, memgraph
def getVideoCard():
raw = commands.getoutput('lspci | grep -i vga').split('\n')[0]
card = raw.split('controller:', 1)[1].strip()
card = card.replace('Corporation ', '')
card = card.replace('Technologies ', '')
card = card.replace('Inc ', '')
final = ''
for item in card.split('('):
item = item.strip()
if ')' in item:
item = item.split(')')[1].strip()
final += item + ' '
card = final.strip()
if len(card) > 45:
card = card[:45 - len(card)].rsplit(' ', 1)[0]
return card
def getVideoRes():
raw = commands.getoutput('xdpyinfo | grep dimensions')
res = raw.split(':')[1].strip().split()[0]
raw = commands.getoutput('xdpyinfo | grep depth\ of\ root\ window')
depth = raw.split(':')[1].strip().split()[0]
return res, depth
def getDisk():
raw = commands.getoutput('df -h').split('\n')
size = 0
avail = 0
for line in raw:
if line.startswith('/dev/hd') or line.startswith('/dev/sd'):
temp = line.split()
total = temp[1].replace(',', '.')
free = temp[3].replace(',', '.')
if total[-1] == 'G':
size += float(total[:-1]) * 1024
elif total[-1] == 'M':
size += float(total[:-1])
if free[-1] == 'G':
avail += float(free[:-1]) * 1024
elif free[-1] == 'M':
avail += float(free[:-1])
return '%.2f' % (size/1024) + 'GB', '%.2f' % (avail/1024) + 'GB', '%.0f' % (avail/size*100) + '%'
def getNet():
raw = commands.getoutput('cat /proc/net/dev').split('\n')[2:]
in_bytes = 0.0
out_bytes = 0.0
for line in raw:
temp = line.split(':')[1].split()
in_bytes += float(temp[0].replace(',', '.'))
out_bytes += float(temp[8].replace(',', '.'))
if (in_bytes/1024/1024) > 500:
in_output = '%.2f' % (in_bytes/1024/1024/1024) + 'GB'
else:
in_output = '%.2f' % (in_bytes/1024/1024) + 'MB'
if (out_bytes/1024/1024) > 500:
out_output = '%.2f' % (out_bytes/1024/1024/1024) + 'GB'
else:
out_output = '%.2f' % (out_bytes/1024/1024) + 'MB'
return in_output, out_output
def getSensors():
raw = commands.getoutput('sensors').split('\n')
cpu, case = '', ''
for line in raw:
if line.startswith('CPU'):
cpu = line.split(':')[1].strip().split('(')[0].strip()
if line.startswith('Case'):
case = line.split(':')[1].strip().split('(')[0].strip()
return cpu, case
def getHost():
return commands.getoutput('hostname').strip()
def getBattery():
mode = 'ac'
battery = None
if commands.getstatusoutput('/usr/sbin/laptop-detect')[0] == 0:
raw = commands.getoutput('acpi -V').split('\n')
for line in raw:
line = line.strip()
if line.startswith('Battery'):
battery = line.split(',')[1].strip()
if line.startswith('AC Adapter'):
temp = line.split(':')[1].strip()
if temp == 'off-line':
mode = 'battery'
return mode, battery
def sysinfo_cb(word, word_eol, userdata):
hostname = getHost()
distro, release, codename, kernel = getVersion()
speed, computer, processors = getCPU()
total, free, memgraph = getMemory()
videocard = getVideoCard()
res, depth = getVideoRes()
total_disk, avail_disk, percent_free = getDisk()
down, up = getNet()
power_mode, battery = getBattery()
output = '%sComputador:%s %s%s%s%s' % (title, endtitle, data, hostname, enddata, separator)
output += '%sDistro:%s %s%s %s "%s"%s%s' % (title, endtitle, data, distro, release, codename, enddata, separator)
output += '%sProcesador:%s %s' % (title, endtitle, data)
if processors > 1:
output += '%sx @ ' % str(processors)
output += speed + enddata + separator
output += '%sModelo:%s %s%s%s%s' % (title, endtitle, data, computer, enddata, separator)
output += '%sMemoria:%s %s%s%s %sLibre:%s %s%s %s%s%s' % (title, endtitle, data, total, enddata, title, endtitle, data, free, memgraph, enddata, separator)
output += '%sEspacio en Disco:%s %s%s%s %sLibre:%s %s%s%s%s' % (title, endtitle, data, total_disk, enddata, title, endtitle, data, avail_disk, enddata, separator)
output += '%sVideo:%s %s%s @ %s (%s bpp)%s%s' % (title, endtitle, data, videocard, res, depth, enddata, separator)
output += '%sRed:%s %sDown: %s Up: %s%s' % (title, endtitle, data, down, up, enddata)
if power_mode == 'battery' and battery != None:
output += '%s%sBattery:%s %s%s%s' % (separator, title, endtitle, data, battery, enddata)
xchat.command('say %s' % output)
if len(word) == 2 and word[1] == 'sensors':
cpu_temp, case_temp = getSensors()
output = '%sSensors:%s %sCPU Temp: %s Case Temp: %s%s' % (title, endtitle, data, cpu_temp, case_temp, enddata)
xchat.command('say %s' % output)
return xchat.EAT_ALL
xchat.hook_command('sysinfo', sysinfo_cb, help='')