#! /usr/bin/env python import os, sys, re, logging, glob #sys.path.append('/lfs/h1/ops/prod/packages/hwrf.v13.2.2/ush') #from produtil.run import batchexe, run if 'USHhwrf' in os.environ: sys.path.append(os.environ['USHhwrf']) elif 'HOMEhwrf' in os.environ: sys.path.append(os.path.join(os.environ['HOMEhwrf'],'ush')) else: guess_HOMEhwrf=os.path.dirname(os.path.dirname( os.path.realpath(__file__))) guess_USHhwrf=os.path.join(guess_HOMEhwrf,'ush') sys.path.append(guess_USHhwrf) import produtil.setup, produtil.log, produtil.dbnalert from produtil.run import batchexe, run def send_email(email_list,subject,email_from=None, content_text=None,content_file=None, logger=None): """!Send email function""" if content_file: #cmd='mail.py -s '+ '"' + subject + '"' + ' -v "' + email_from + '" < content_file ' cmd='mail.py -s '+ '"' + subject + '"' + ' -v "' + email_list + '" < content_file ' else: assert(content_text is not None) with open('tempfile','wt') as f: f.write(content_text) cmd='mail.py -s '+ '"' + subject + '"' + ' -v "' + email_list + '" < tempfile ' print('cmd') print(repr(cmd)) status=os.system(cmd) return status def read_alert_message(alert_file): """!Get email content from the alert file""" with open(alert_file,'rt') as f: content=f.read() return content def main(): logger=logging.getLogger('Sending_Alert_Email') email_from=os.environ.get('HWRF_EMAIL_FROM', 'nco.spa@noaa.gov') alert_email_list=os.environ.get('HWRF_SDM_EMAIL_LIST','sdm@noaa.gov') messagedir=os.environ.get('COMINmsg') print("COMINmsg=",messagedir) nhcdir=os.environ.get('COMINnhc') jtwcdir=os.environ.get('COMINjtwc') patrn=str(sys.argv[1])+" "+str(sys.argv[2]) message=0 for ff in glob.glob(os.path.join(messagedir,'message?')): content=read_alert_message(ff) print(ff + " is: " + content) if re.search(patrn, content): message=message+1 patrn=str(sys.argv[1])+" "+str(sys.argv[2]) ymd="20"+str(sys.argv[1]) hh=str(sys.argv[2])+"Z" print("number of message files for " + patrn + "Z =", message) #NHC message nhc_message=0 for ff in glob.glob(os.path.join(nhcdir,'storm?')): content=read_alert_message(ff) if re.search(patrn, content): nhc_message=nhc_message+1 print("number of NHC requested storms=",nhc_message) #JTWC message jtwc_message=0 for ff in glob.glob(os.path.join(jtwcdir,'storm?')): content=read_alert_message(ff) if re.search(patrn, content): jtwc_message=jtwc_message+1 print("number of JTWC requested storms from message=",jtwc_message) if message == 0 and nhc_message+jtwc_message > 0: subject='FATAL ERROR: No message created for active storm for cycle: '+ymd+hh alert_message='Dear SDM: There is no message created from active storms yet on WCOSS2 in ' + messagedir + ' . Please Check if setup_hurricane has been properly executed' status=send_email(alert_email_list,subject,email_from=email_from, content_text=alert_message,logger=logger) logger.error('ERROR: No message created for active storm in ',messagedir) sys.exit(2) if __name__ == '__main__': main()