From 3fc0ef33e7a09a04a9f9055f9085e64255e62299 Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Wed, 04 Jan 2017 21:35:46 +0000 Subject: [PATCH] Added even more readability in using the trisurf.py's runner class --- python/trisurf/trisurf.py | 75 ++++++++++++++++++++++--------------- 1 files changed, 44 insertions(+), 31 deletions(-) diff --git a/python/trisurf/trisurf.py b/python/trisurf/trisurf.py index 3a1689e..b1dc092 100644 --- a/python/trisurf/trisurf.py +++ b/python/trisurf/trisurf.py @@ -2,7 +2,7 @@ import xml.etree.ElementTree as ET import base64 import zlib -import io +import sys,io import os from itertools import islice import mmap @@ -236,14 +236,19 @@ try: self.dT=int(epoch2)-int(epoch1) self.last=n2 - print(epoch1) - print(epoch2) - print(self.dT) - print(self.last) + #print(epoch1) + #print(epoch2) + #print(self.dT) + #print(self.last) self.startDate=os.path.getmtime(os.path.join(self.path,'.lock')) except: return(False) return(True) + + def readText(self): + with open(self.fullname, 'r+') as fin: + cont=fin.read() + return cont def read_old(self): ''' @@ -297,6 +302,16 @@ ''' Class Runner consists of a single running or terminated instance of the trisurf. It manages starting, stopping, verifying the running process and printing the reports of the configured instances. ''' + + @property + def Dir(self): + return Directory(maindir=self.maindir,simdir=self.subdir) + + + @property + def Statistics(self): + return Statistics(self.Dir.fullpath(), "statistics.csv") + def __init__(self, subdir='run0', tape=None, snapshot=None, runArgs=[]): self.subdir=subdir self.runArgs=runArgs @@ -309,9 +324,9 @@ def initFromTape(self, tape): - self.tape=Tape() - self.tape.readTape(tape) - self.tapeFile=tape + self.Tape=Tape() + self.Tape.readTape(tape) + self.tapeFilename=tape def initFromSnapshot(self, snapshotfile): try: @@ -324,12 +339,10 @@ root = tree.getroot() tapetxt=root.find('tape') version=root.find('trisurfversion') - self.tape=Tape() - self.tape.setTape(tapetxt.text) + self.Tape=Tape() + self.Tape.setTape(tapetxt.text) def getPID(self): - self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) - #self.Dir.makeifnotexist() try: fp = open(os.path.join(self.Dir.fullpath(),'.lock')) except IOError as e: @@ -339,8 +352,6 @@ return int(pid) def getLastIteration(self): - self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) - #self.Dir.makeifnotexist() try: fp = open(os.path.join(self.Dir.fullpath(),'.status')) except IOError as e: @@ -350,7 +361,7 @@ return int(status) def isCompleted(self): - if (int(self.tape.getValue("iterations"))==self.getLastIteration()+1): + if int(self.Tape.getValue("iterations"))+int(self.Tape.getValue("inititer"))==self.getLastIteration()+1: return True else: return False @@ -386,20 +397,19 @@ if(shutil.which('trisurf')==None): print("Error. Trisurf executable not found in PATH. Please install trisurf prior to running trisurf manager.") exit(1) - self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) #Symlinks tape file to the directory or create tape file from snapshot in the direcory... if(self.Dir.makeifnotexist()): if(self.fromSnapshot==False): try: - os.symlink(os.path.abspath(self.tapeFile), self.Dir.fullpath()+"/tape") + os.symlink(os.path.abspath(self.tapeFilename), self.Dir.fullpath()+"/tape") except: - print("Error while symlinking "+os.path.abspath(self.tapeFile)+" to "+self.Dir.fullpath()+"/tape") + print("Error while symlinking "+os.path.abspath(self.tapeFilename)+" to "+self.Dir.fullpath()+"/tape") exit(1) else: try: with open (os.path.join(self.Dir.fullpath(),"tape"), "w") as myfile: #myfile.write("#This is automatically generated tape file from snapshot") - myfile.write(str(self.tape.rawText)) + myfile.write(str(self.Tape.rawText)) except: print("Error -- cannot make tapefile "+ os.path.join(self.Dir.fullpath(),"tape")+" from the snapshot in the running directory") exit(1) @@ -442,9 +452,11 @@ maindir="" for p,v in zip(prefix,variables): if(v=="xk0"): - tv=str(round(float(self.tape.config[v]))) + tv=str(round(float(self.Tape.config[v]))) + if sys.version_info<(3,0): + tv=str(int(float(self.Tape.config[v]))) else: - tv=self.tape.config[v] + tv=self.Tape.config[v] maindir=maindir+p+tv self.maindir=maindir return @@ -454,13 +466,11 @@ return def getStatistics(self, statfile="statistics.csv"): - self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) - self.statistics=Statistics(self.Dir.fullpath(), statfile) self.Comment=FileContent(os.path.join(self.Dir.fullpath(),".comment")) pid=self.getPID() status=self.getStatus() - if(self.statistics.fileOK): - ETA=str(datetime.timedelta(microseconds=(int(self.tape.config['iterations'])-int(self.statistics.last))*self.statistics.dT)*1000000) + if(self.Statistics.fileOK): + ETA=str(datetime.timedelta(microseconds=(int(self.Tape.config['iterations'])-int(self.Statistics.last))*self.Statistics.dT)*1000000) if(status==TS_NONEXISTANT or status==TS_NOLOCK): statustxt="Not running" pid="" @@ -475,25 +485,28 @@ else: statustxt="Running" - if(self.statistics.fileOK): - report=[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(self.statistics.startDate))),ETA, statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()] + if(self.Statistics.fileOK): + report=[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(self.Statistics.startDate))),ETA, statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()] else: report=["N/A","N/A",statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()] return report def stop(self): - p=psutil.Process(self.getPID()) - p.kill() + try: + p=psutil.Process(self.getPID()) + p.kill() + except: + print("Could not stop the process. Is the process running? Do you have sufficient privileges?") + def writeComment(self, data, mode='w'): - self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) self.Comment=FileContent(os.path.join(self.Dir.fullpath(),".comment")) self.Comment.writefile(data,mode=mode) def getLastVTU(self): - vtuidx=self.getLastIteration() + vtuidx=self.getLastIteration()-int(self.Tape.getValue("inititer")) if vtuidx<0: return None else: -- Gitblit v1.9.3