Proton Autorun Plugin Example Code ================================== .. code-block:: python #!/usr/bin/python # Copyright (C) 2013 Ion Torrent Systems, Inc. All Rights Reserved import datetime import os import sys import simplejson as json from subprocess import * from ion.plugin import * from django.utils.datastructures import SortedDict class protonAutoBlockProcessEx(IonPlugin): version = '0.5' # Define when this plugin will automatically run. # In this case, we only want it to run on composite (proton) runs. # The run levels are: (RunLevel.) # PRE: run once all block jobs have been submitted. # BLOCK: run after each individual block finishes. (So, up to 96 times.) # POST: run after everything is done. # The run types are: (RunType.) # FULLCHIP: PGM full chip analysis. # THUMB: Thumbnail analysis. # COMPOSITE: Proton analysis. runtypes = [ RunType.COMPOSITE ] runlevels = [ RunLevel.PRE, RunLevel.BLOCK, RunLevel.POST ] envDict = dict(os.environ) # The launch script will check what run level we are on and act appropriately. # NOTE: this plugin is designed to be run in automatic mode, and it assumes that the run is composite due to the runtypes filter. def launch(self, data=None): # Read json data. json_file = open('%s/startplugin.json'%self.envDict['TSP_FILEPATH_PLUGIN_DIR'], 'r') json_dat = json.loads(json_file.read()) json_file.close() # Define the run level. runlevel = json_dat['runplugin']['runlevel'] print '----------\nRUN LEVEL: %s\nPLUGIN DIR: %s\n-----------'%(runlevel, self.envDict['TSP_FILEPATH_PLUGIN_DIR']) # Open the html block file for appending and reading. htmlPath = '%s/plugin_out/protonAutoBlockProcessEx_out/protonAutoBlockProcessEx_block.html'%self.envDict['ANALYSIS_DIR'] htmlOut = open(htmlPath, 'a+') if os.path.getsize(htmlPath) == 0: htmlOut.write('') # Take action based on run level. if runlevel == 'pre': print ' PRE-run launch @%s'%datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") htmlOut.write('
PRE-run "analysis" launch. Time=%s'%datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) elif runlevel == 'block': # Determine the block's X & Y coord's from its filepath. bDir = self.envDict['TSP_FILEPATH_PLUGIN_DIR'] bX = bDir[bDir.find('_X')+2:bDir.find('_Y')] bY = bDir[bDir.find('_Y')+2:bDir.find('/', bDir.find('_Y'))] print ' BLOCK X%s_Y%s launch @%s'%(bX, bY, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) htmlOut.write('
BLOCK X%s_Y%s "analysis" launch. Time=%s'%(bX, bY, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) elif runlevel == 'post': print ' POST-run launch @%s'%datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") htmlOut.write('
POST-run "analysis" launch. Time=%s'%datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) htmlOut.write('') elif runlevel == 'default': print ' DEFAULT launch @%s'%datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") htmlOut.write('
DEFAULT "analysis" launch. Time=%s'%datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) htmlOut.write('') else: print ' \**Unrecognized run level.' # Exit gracefully. htmlOut.close() return True if __name__ == '__main__': PluginCLI(protonAutoBlockProcessEx())