Mini Shell
#!/usr/bin/python
import sys, subprocess, os, signal, re
LVE_FILE = '/proc/lve/list'
# GET VERSION from /proc/lve/list
def get_lve_version():
try:
f = open(LVE_FILE,'r')
lines = f.readlines()
try:
LVE_VERSION = [int(lines[0][0]),'OK']
except IndexError:
LVE_VERSION = [None,'clcommon: get_lve_version: Can`t get data from ' + LVE_FILE]
if LVE_VERSION[0] > 6:
LVE_VERISON = [6,'OK']
except IOError:
LVE_VERSION = [None,'clcommon: get_lve_version: Can`t open file ' + LVE_FILE]
return LVE_VERSION
BYTES_CONVERSION_TABLE = {
'K': 1,
'M': 1024,
'G': 1024 * 1024,
'T': 1024 * 1024 * 1024
}
def validate_cpu(val):
''' check that val is a valid CPU limit (0-100 int or speed (% or MHZ\GHZ))
return val if ok a
'''
data = str(val)
regexp_int = re.compile(r'\d{1,2}0?$') # old cpu limit
regexp_speedp = re.compile(r'\d+(?:\.\d+)?%$') # speed %
regexp_speedf = re.compile(r'\d+(?:\.\d+)?(mhz|ghz)+$', re.IGNORECASE) # speed freq
p1 = regexp_int.match(data)
p2 = regexp_speedp.match(data)
p3 = regexp_speedf.match(data)
if p1 != None or p2 != None or p3 != None:
return val
return None
def validate_int(val, min_val = 0, max_val = sys.maxint):
'''
Check that val - is a string number
return val as a string
'''
try:
dig_val = int(val)
except ValueError:
return None
if max_val >= dig_val >= min_val:
return val
def memory_to_page(val, min_val=0, max_val=sys.maxint):
try:
suffix = val[-1]
if suffix.isdigit():
suffix = 'K'
val = val+suffix
result = int(float(val[:-1]) * BYTES_CONVERSION_TABLE[suffix.upper()] / 4)
if max_val >= result >= min_val:
return result
except (IndexError, ValueError, KeyError):
pass
return None
def page_to_memory(pages):
if pages < 256: # KB
return str(pages*4)+'K'
if pages < 262144: #MB
return str(round(float(pages)*4/1024,2))+'M'
return str(round(float(pages)*4/(1024*1024),2))+'G' #GB
def reload_processes( item, username ):
ps = subprocess.Popen(['/bin/ps','-U',username,'-u',username],stdout=subprocess.PIPE)
lines = ps.communicate()[0].split("\n")
for row in lines:
parts = row.rstrip().split()
try:
parts[-1].index(item)
os.kill( int(parts[0]), signal.SIGHUP )
except (IndexError, ValueError, OSError):
continue
Zerion Mini Shell 1.0