From 7ca5ae55b9bad2107903064f7b87e6c4ce1b26fe Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@fe.uni-lj.si> Date: Tue, 15 Mar 2016 16:22:04 +0000 Subject: [PATCH] Starting working on the master python file --- python/trisurf/trisurf.py | 184 +++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 167 insertions(+), 17 deletions(-) diff --git a/python/trisurf/trisurf.py b/python/trisurf/trisurf.py index d777610..82c5c15 100644 --- a/python/trisurf/trisurf.py +++ b/python/trisurf/trisurf.py @@ -5,8 +5,11 @@ import base64 import zlib import io - - +import os +from itertools import islice +import mmap +import shlex +import psutil ''' This is a trisurf instance manager written in python @@ -32,7 +35,6 @@ except: print("Error reading or parsing tape file!\n") exit(1) - def setTape(self, string): self.config=configobj.ConfigObj(io.StringIO(string)) @@ -41,12 +43,127 @@ def getValue(self,key): return self.config[key] + def __str__(self): + retval="" + for key,val in self.config.iteritems(): + retval=retval+str(key)+" = "+str(val)+"\n" + return retval + + + +class Directory: + def __init__(self, maindir=".", simdir=""): + self.maindir=maindir + self.simdir=simdir + return + + def fullpath(self): + return os.path.join(self.maindir,self.simdir) + + def exists(self): + path=self.fullpath() + if(os.path.exists(path)): + return 1 + else: + return 0 + + def make(self): + try: + os.makedirs(self.fullpath()) + except: + print("Cannot make directory "+self.fullpath()+"\n") + exit(1) + return + + def makeifnotexist(self): + if(self.exists()==0): + self.make() + return + + def remove(self): + if(self.exists()): + try: + os.rmdir(self.fullpath()) + except: + print("Cannot remove directory "+self.fullpath()+ "\n") + exit(1) + return + + def goto(self): + try: + os.chdir(self.fullpath()) + except: + print("Cannot go to directory "+self.fullpath()+"\n") + return + + +class Statistics: + def __init__(self,path,filename="statistics.csv"): + self.path=path + self.filename=filename + self.fullname=os.path.join(path,filename) + self.read() + return + + def __str__(self): + return(str(self.fullname)) + + def exists(self): + if(os.path.isfile(self.fullname)): + return True + else: + return False + + def mapcount(self): + f = open(self.fullname, "r+") + buf = mmap.mmap(f.fileno(), 0) + lines = 0 + readline = buf.readline + while readline(): + lines += 1 + return lines + + def read(self): + if(self.exists()): + nlines=self.mapcount() + try: + with open(self.fullname, "r+") as fin: + i=0; + for line in fin: + if(i==1): + #print (line) + fields=shlex.split(line) + epoch1=fields[0] + n1=fields[1] + if(i==nlines-1): + fields=shlex.split(line) + epoch2=fields[0] + n2=fields[1] + i=i+1 + except: + print("Cannot read statistics file in "+self.fullname+"\n") + return(False) + else: + print("File "+self.fullname+" does not exists.\n") + return(False) + + self.dT=(int(epoch2)-int(epoch1))/(int(n2)-int(n1)) + return(True) class Runner: ''' Class Runner consists of a single running or terminated instance of the trisurf ''' + def __init__(self, subdir='run0', tape='', snapshot=''): + self.subdir=subdir + if(tape!=''): + self.initFromTape(tape) + if(snapshot!=''): + self.initFromSnapshot(snapshot) + return + + def initFromTape(self, tape): self.tape=Tape() self.tape.readTape(tape) @@ -61,29 +178,62 @@ root = tree.getroot() tapetxt=root.find('tape') version=root.find('trisurfversion') - #print("Reading snapshot made from: "+version.text) self.tape=Tape() - #print(tapetxt.text) self.tape.setTape(tapetxt.text) - def __init__(self, subdir='run0', tape='', snapshot=''): - self.subdir=subdir - if(tape!=''): - self.initFromTape(tape) - if(snapshot!=''): - self.initFromSnapshot(snapshot) - - return - def getStatus(self): - pass + self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) + self.Dir.makeifnotexist() +# self.Dir.goto() + try: + fp = open(os.path.join(self.Dir.fullpath(),'.lock')) + except IOError as e: + return 0 #file probably does not exist. e==2?? + pid=fp.readline(); + fp.close(); + if(psutil.pid_exists(int(pid))): + return 1 + else: + return 0 def start(self): - pass + if(self.getStatus()==0): + self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) + self.Dir.makeifnotexist() +# self.Dir.goto() + print("Starting trisurf-ng executable at "+self.Dir.fullpath()+"\n") + else: + print("Process already running. Not starting\n") + return def stop(self): pass + def setMaindir(self,prefix,variables): + maindir="./" + for p,v in zip(prefix,variables): + if(v=="xk0"): + tv=str(round(float(self.tape.config[v]))) + else: + tv=self.tape.config[v] + maindir=maindir+p+tv + self.maindir=maindir + return + + def setSubdir(self, subdir="run0"): + self.subdir=subdir + return + + def getStatistics(self, statfile="statistics.csv"): + self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) + self.statistics=Statistics(self.Dir.fullpath(), statfile) + return + def __str__(self): - return("Running instance") + if(self.getStatus()==0): + str=" not running." + else: + str=" running." + return(self.Dir.fullpath()+str) + -- Gitblit v1.9.3