
| Current Path : /var/www/web-klick.de/dsh/10_customer2017/1215__continental/procpy/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/10_customer2017/1215__continental/procpy/rtemulti.py |
# -*- coding: utf-8 -*-
import os
import re
import sys
import base64
import pickle
import dyndb
import time
import random
import traceback
class Runtime (object):
def __init__ (self,dbfile,params):
self.dbfile = dbfile
self.item = params[0]
params = params[1:]
if type ( self.start(self.item,params) ) == type(None):
md5key = self.item
datafield = ""
m = re.search(r"^(.*)\:(.*)$",self.item)
if m:
md5key = m.group(2)
datafield = m.group(1)
self.proceed(md5key,datafield)
#*************************************************************************
def start (self,testcase,params):
print params
m = re.search(r"^(.*)\.(.*)$",testcase)
if not m:
return(None)
try:
exec('import ' + m.group(1) + '\ntestrun = ' + testcase + '(params)\n')
except:
return(None)
return( self.sync(testrun) )
#*************************************************************************
def sync (self,dumpobj):
entry_fields = []
entry_values = []
waketime = time.time()
try:
waketime = waketime + float(dumpobj._sleep)
except Exception as e:
print str(e)
pass
waketime = unicode(waketime)
self.testrun = ''
for var in dir(dumpobj):
if not var.upper() == var:
continue
if var == "TESTRUN":
self.testrun = 'x'
entry_fields.append(var)
exec('entry_values.append(str(dumpobj.'+var+'))')
exec('del dumpobj.' + var)
o = re.sub(r"^b\'(.*)\'$", r"\1", str(base64.b64encode(pickle.dumps(dumpobj))))
text = ""
while not o == "":
text = text + o[:80] + "\n";
o = o[80:]
entry_fields.append('OBJ')
entry_values.append(text)
entry_fields.append('WAKETIME')
entry_values.append(waketime)
procstore = dyndb.DBObj(self.dbfile)
if self._testrun == '':
entry_fields.append('TESTRUN')
entry_values.append('')
testclass = re.sub(r"^(.*)\'(.*)\'(.*)$","\\2",str(dumpobj.__class__))
zaehler = 0
while (0 == 0):
zaehler = zaehler + 1
try:
entry_values[-1] = testclass + "." + dumpobj.next_testrun(zaehler)
except:
entry_values[-1] = testclass + "." + "t" + ("%03u" % zaehler)
if entry_values[-1] == "":
return(None)
try:
md5key = procstore.importdata(entry_fields[:],entry_values[:])
break
except Exception as e:
# print str(e)
pass
self.testrun = entry_values[-1]
else:
md5key = procstore.importdata(entry_fields[:],entry_values[:])
procstore.dbh.commit()
return(md5key)
#*************************************************************************
def proceed (self,md5key="",datafield=""):
procstore = dyndb.DBObj(self.dbfile)
cursor = procstore.dbh.cursor()
if md5key == "":
cursor.execute("select * from entries where not OBJ = 'None'" +
" and WAKETIME < " + str(time.time()) + " and WAKETIME > 0")
else:
if datafield == "":
if re.search(r"\.",md5key):
datafield = "TESTRUN"
else:
datafield = "MD5KEY"
cursor.execute("select * from entries where " + datafield.upper() + " ='" + md5key + "'")
entry_fields = cursor.description[:]
entry_values = cursor.fetchone()
if type(entry_values) == type(None):
return("No process found for restart")
zaehler = 0
for f in entry_fields:
if f[0] == "OBJ":
dumped_obj = entry_values[zaehler]
if f[0] == "WAKETIME":
if float(entry_values[zaehler]) < 0:
return("Process is running")
# print entry_values[zaehler]
o = float(entry_values[zaehler]) - time.time()
if o > 0:
return("Awake time not yet reached. " + str(int(o)) + " sec. to wait ...")
zaehler = zaehler + 1
o = bytes(re.sub(r"\n", r"", dumped_obj))
o = base64.b64decode(o)
o = pickle.loads(o)
zaehler = 0
for f in entry_fields:
if not f[0] == "OBJ":
exec("o."+f[0] + " = '" + unicode(entry_values[zaehler]) + "'")
if f[0] == "MD5KEY":
cursor = procstore.dbh.cursor()
cursor.execute("update entries set WAKETIME='-" + str(os.getpid()) +
"' where WAKETIME > 0 and MD5KEY='" + entry_values[zaehler] + "'")
procstore.dbh.commit()
if cursor.rowcount != 1:
return(None)
md5key = entry_values[zaehler]
if f[0] == "TESTRUN":
testrun = entry_values[zaehler]
zaehler = zaehler + 1
try:
exec("o." + o.JUMP + "()")
self.sync(o)
return("Process executed")
except Exception as e:
errmsg = ( '\nERROR in object ' + md5key + ", " + testrun +
':\n' + '\n'.join(traceback.format_tb(sys.exc_info()[2])) )
cursor = procstore.dbh.cursor()
cursor.execute("update entries set ERROR=? where MD5KEY='" + md5key + "'",[errmsg])
procstore.dbh.commit()
return(errmsg)