def updateInstancePages(self, toupdate, outputDirectory=""):
        j = 0
        for i in toupdate:
            j+=1
            print j,
            filesize = os.path.getsize(i)
            dontskip = True
            if i not in self.filesizes:
                self.filesizes[i]=filesize
            else:
                if self.filesizes[i]==filesize: dontskip=False
            if dontskip:
#                 print j
                pnopickle = i.replace(".pickle", "")
                try:
#                     print i
                    data = InstanceData(pnopickle, "None", i)
                    if data.status()=="complete": self.finished.add(i)
                    page = InstancePage(data, i, outputDirectory, self.instanceTemplate)
                    if page.patient_id not in self.instancePagesByPatient:
                        self.instancePagesByPatient[page.patient_id] = {}
                    self.instancePagesByPatient[page.patient_id][page.name] = page
                    self.patients.add(page.patient_id)
                    self.printFile(page.generateHTML(), page.full_filename)
                except:
                    print "possible pickle error:", i, 
        self.printFile(self.PatientPage(self.instancePagesByPatient), os.path.join(outputDirectory, "index.html"))
        for patient in self.patients:
#             print outputDirectory
#             print os.path.join(outputDirectory, patient+".html")
#             print patient
            self.printFile(self.MainPage(self.instancePagesByPatient[patient].values()), os.path.join(outputDirectory, "patients/"+patient+".html"))
 def printInstanceDataToCSV(self, pickleDirectory, filenamebase):
     perf_csvfile = open("performance_"+filenamebase+".csv", 'wb')
     perf_datawriter = csv.writer(perf_csvfile)
     com_csvfile = open("commands_"+filenamebase+".csv", 'wb')
     com_datawriter = csv.writer(com_csvfile)
     pickleFiles=[]
     for p in os.listdir(pickleDirectory):
         if ".pickle" in p: pickleFiles.append(p)
     first=True
     for p in pickleFiles:
         i = InstanceData(p.strip(".pickle"), "None", p)
         lines= i.performance_to_table(first)
         for line in lines: perf_datawriter.writerow(line)
         lines= i.commands_to_table(first)
         for line in lines: com_datawriter.writerow(line)
         first=False
     perf_csvfile.close()
     com_csvfile.close()
    def run(self):
        self.instanceData=InstanceData.InstanceData(self.name, self.script_file, self.history_file)
        self.shutdownData=InstanceData.InstanceData(self.name, self.shutdown_file, self.history_file)

        # run commands
        task1 = monitorPerformance(self.instanceData, period=self.period)
        task2 = runCommands(self.instanceData, self.shutdownData)
        task1.daemon=True
        task2.daemon=True
        print "starting tasks"
        task1.start()
        task2.start()
        print "waiting for join"
        task1.join()
        task2.join()
        print "joined"
        print self.instanceData.summary()
        print "status:", self.instanceData.status()
        self.instanceData.writeSummaryToFile(self.performanceDataFile)
    def getInstanceData(self, pickleDirectory):
        result={}
        for p in os.listdir(pickleDirectory):
            if ".pickle" in p: 
                pnopickle = p.replace(".pickle", "")
                result[pnopickle] = {'data':InstanceData(pnopickle, "None", os.path.join(pickleDirectory,p))}
                result[pnopickle]["data"].update_status()
        self.instanceDataDict=result
#         print result.keys()
        return self.instanceDataDict.keys()
 def printInstanceDataToCSV(self, pickleDirectory, filenamebase):
     perf_csvfile = open("performance_" + filenamebase + ".csv", 'wb')
     perf_datawriter = csv.writer(perf_csvfile)
     com_csvfile = open("commands_" + filenamebase + ".csv", 'wb')
     com_datawriter = csv.writer(com_csvfile)
     pickleFiles = []
     for p in os.listdir(pickleDirectory):
         if ".pickle" in p: pickleFiles.append(p)
     first = True
     for p in pickleFiles:
         i = InstanceData(p.strip(".pickle"), "None", p)
         lines = i.performance_to_table(first)
         for line in lines:
             perf_datawriter.writerow(line)
         lines = i.commands_to_table(first)
         for line in lines:
             com_datawriter.writerow(line)
         first = False
     perf_csvfile.close()
     com_csvfile.close()
 def loadInstanceData(self, instance_name):
     return InstanceData(instance_name, "None",
                         self.instanceInfo[instance_name])