#! /usr/bin/env python ##@namespace scripts.exhwrf_wrfout_archive # Archives graphics input files to tape via the "htar" command. # # To enable this script, you must set the wrfout option in the [archive] # configuration section: # @code[.conf] # [archive] # wrfout=hpss:/NCEPDEV/emc-hwrf/2year/Jane.Doe/wrfout/{out_prefix}.tar # @endcode # # The extension must be .tar, and the only archiving method supported is # hpss:/ (which uses htar) import os, sys, glob import produtil.setup, produtil.log, produtil.run, produtil.cd import hwrf.config, hwrf.numerics from produtil.log import jlogger from produtil.run import batchexe, checkrun, run def main(): CONFhwrf=os.environ['CONFhwrf'] conf=hwrf.config.from_file(CONFhwrf) ymdh=conf.getstr('config','cycle') conf.cycle=hwrf.numerics.to_datetime(ymdh) logger=conf.log('graphics_archive') com=conf.getstr('dir','com') basin1lc=conf.getstr('config','basin1lc') stnum=conf.getint('config','stnum') vitglob='%s/*%02d%c.%10s.storm_vit'%(com,stnum,basin1lc,ymdh) vitfile=None glib=glob.glob(vitglob) logger.info('globbed: %s'%(repr(glib),)) for gfile in glib: vitfile=gfile with open(vitfile,'rt') as vf: vits=hwrf.storminfo.parse_tcvitals(vf,logger=logger,raise_all=True) logger.info('%s: read in: %s'%(vitfile,repr(vits))) if vits: conf.syndat=vits[-1] logger.info('vitals: '+conf.syndat.as_tcvitals()); break else: logger.warning('%s: no vitals data in this file'%(vitfile,)) if not conf.syndat: logger.error('%s: no vitals data found'%(vitglob,)) sys.exit(1) thearchive=conf.timestrinterp('archive','{graphics}',0) if not thearchive: jlogger.info('No graphics option in [archive] section. Will ' 'not make graphics archive.') sys.exit(0) workdir=conf.strinterp('config','{WORKhwrf}/graphics-archive') comdir=conf.getdir('com') hsi_path=conf.getexe('hsi') htar_path=conf.getexe('htar') archive(comdir,logger,thearchive,hsi_path,htar_path) def archive(comdir,logger,archfile,hsi_path,htar_path): archme=set() search_str=[ 'ww3.grb2', 'ww3_ounf.nc', 'ww3_outp_bull.tar', 'ww3_outp_spec.tar', 'hwrfprs.d1.0p20','hwrfprs.d2.0p06', 'hwrfprs.d3.0p02', 'hwrfsat.d1.0p20', 'hwrfsat.d2.0p06', 'hwrfsat.d3.0p02', 'swath.ctl','swath.dat','wind10.ascii','stats.short', 'wrfdiag_d02','wrfdiag_d03','holdvars.txt','trak.','atcf','htcf', 'domain.center', '0p25', '.pom.', 'wind10m.ascii' ] with produtil.cd.NamedDir(comdir,logger=logger): comlist=os.listdir('.') for comf in comlist: for ss in search_str: if comf.find(ss)>=0: archme.add('./'+comf) break if not archme: logger.error('%s: no files to archive!'%(comdir,)) sys.exit(1) if archfile[0:5]!='hpss:': logger.error('The graphics archive path must begin with "hpss:": '+ archfile) sys.exit(1) archfile=archfile[5:] adir=os.path.dirname(archfile) mkdir=batchexe(hsi_path)['-P','mkdir','-p',adir] run(mkdir,logger=logger) cmd=batchexe(htar_path)['-vcpf',archfile][archme] checkrun(cmd,logger=logger) if __name__=='__main__': try: produtil.setup.setup() jlogger.info("HWRF graphics_archive job starting") main() jlogger.info("HWRF graphics_archive job completed") except Exception as e: jlogger.critical('HWRF graphics archive is aborting: '+str(e), exc_info=True) sys.exit(2)