예제 #1
0
 def restore_email(self, resp, fresh_true_list,vendor_dict):
     '''send out the restored email'''
     subject=""
     resp.response.out.write("-------------------------<h3>Restored Email Part</h3>---------------------------")
     latest_email_id_list = [data.station_id for data in database.EmailRecord.all().filter("latest_email", True).run()]
     resp.response.out.write("<h4>Latest Email Station List</h4>")
     resp.response.out.write(latest_email_id_list)
     logging.info(latest_email_id_list)
     #build restore station list
     restore_station_list = [data for data in fresh_true_list if data['station_id'] in latest_email_id_list]
     #build restore email list
     restore_email_list = MonitorHelper.buildInfoList(restore_station_list,vendor_dict)
     resp.response.out.write("<h4>Restored Station List</h4>")
     resp.response.out.write(restore_email_list)
     
     #build restore email content and send out email
     if len(restore_email_list) !=0:
         for info in restore_email_list:
             q_result = database.EmailRecord.all().filter("station_id",info[0]).get()
             time = q_result.email_time.strftime("%Y-%m-%d %H:%M:%S")
             html = MonitorHelper.buildRestoreEmailContent(self,info,time)
             self.response.out.write(html)
             self.response.out.write("<br />")
             #logging.info(html)
             recipient=self.__class__.default_email_list[:]
             if info[2] == "Ag-tronix":
                 recipient.append("*****@*****.**")
                 recipient.append("*****@*****.**")
             elif info[2] == "Spectrum Technologies Inc":
                 recipient.append("*****@*****.**")
             elif info[2] == "McCrometer":
                 recipient.append("*****@*****.**")
             else:
                 recipient.append(info[4])
             recipient.append(info[5])
             logging.info("<b>Email to: %s</b>" % ",".join(recipient))
             self.response.write("<b>Email to: %s</b><br />" % ",".join(recipient))                    
             subject = "%s weather station data issue resolved" % info[6]
             #MonitorHelper.emailFdacsInfo(recipient,self,subject,html)
         
     #update email record in the database
     for data in restore_station_list:
         station_id = data["station_id"]
         record = database.EmailRecord.all().filter("station_id",station_id).get()
         record.latest_email = False
         record.put()
예제 #2
0
    def getInfo(self,result):

        '''get Fdacs station information'''
        #parse json
        decoded = MonitorHelper.parseJson(self,result)
        logging.info("Getting fresh status")
        total_stns_num = len(decoded)
        logging.info("There are total %d stations.<br />" % total_stns_num)
        #fresh status
        fresh_false_list = [data for data in decoded if data['fresh'] == False]
        fresh_true_list = [data for data in decoded if data['fresh'] == True]
        false_stns_num = len(fresh_false_list)
        logging.info("There are %d false fresh status stations.<br />" % false_stns_num)
        #report no update stations
        if false_stns_num != 0:
            alert_time = datetime.datetime.now() - self.__class__.record_time_delta
            #subject = "Weather Station Notification @ %s" %(str(alert_time)[:-7])
            #logging.info(subject + "<br />")
            #set email list
            ##if false_stns_num >= total_stns_num / 2:
               ## [email protected]("*****@*****.**")
            vendor_lists= json.loads(urlfetch.fetch(self.__class__.vendor_url).content)
            vendor_dict = {}
            for vendor in vendor_lists:
                vendor_dict[vendor['id']] = vendor
                ##resp.response.out.write(vendor_dict[vendor['id']])
            #build no update list
            no_update_list = MonitorHelper.buildInfoList(fresh_false_list, vendor_dict)
            #build fawn email content and insert record into fdacs record database
            record_sql = "SELECT * FROM FdacsRecord \
                          WHERE error_code = '200'\
                          ORDER BY record_time DESC"
            logging.info(record_sql)
            record_q = db.GqlQuery(record_sql)
                            
            #query last 4 recordsin the database
            records_lists=[]
            for q_result in record_q.run(limit = 4):
                if q_result is not None :
                    records_lists.append(q_result.error_details)
            message = ",".join([data[0] for data in no_update_list])
            message_time = ",".join([data[7] for data in no_update_list])
            self.response.out.write("Check last record in the database<br/>")
            
            #find four consecutive observations for stations
            no_update_filter_list = []
            if len(records_lists) == 4:
                for data in no_update_list:
                    put_in = True
                    for record in records_lists:
                        if data[0] not in record:
                            put_in = False
                            break
                    if put_in :
                        no_update_filter_list.append(data)
            self.response.out.write("<h4>Four Consecutive Alert Obeservations List</h4>")
            self.response.out.write([data[0] for data in no_update_filter_list])
            no_update_email_list=[]
            #filter no update list
            email_record_id_list = [obj.station_id for obj in database.EmailRecord.all()]
            for data in no_update_filter_list:
                if data[0] in email_record_id_list:
                    record = database.EmailRecord.all().filter("station_id", data[0]).get()
                    if record.latest_email is not True:
                        no_update_email_list.append(data)
                        record.email_time = alert_time
                        record.latest_email = True
                        record.put()
                else:
                    no_update_email_list.append(data)
                    record = database.EmailRecord(station_id = data[0],email_time = alert_time, latest_email = True)
                    record.put()
                        
            
            '''
            for data in no_update_filter_list: 
                #self.response.out.write("%s <br/>" % data[0])
                if data[0] in email_record_id_list:
                    record = database.EmailRecord.all().filter("station_id",data[0]).get()
                    #self.response.out.write(record.email_time)
                    ## time_delta = alert_time - record.email_time
                    #self.response.out.write("%s,  %s<br />" % (record.station_id, time_delta))
                    if alert_time -  record.email_time < self.__class__.email_time_delta:
                        pass
                    else:
                        no_update_email_list.append(data)
                        record.email_time= alert_time
                        record.latest_email = True
                        record.put()
                else:
                    no_update_email_list.append(data)
                    record = database.EmailRecord(station_id = data[0], email_time = alert_time, latest_email=True)
                    record.put()
            '''        
            self.response.out.write("<h4>Final Email Station List</h4>")
            self.response.out.write([data[0] for data in no_update_email_list])
            ##self.response.out.write(no_update_email_list)
            #update record in the database
            record = database.FdacsRecord(error_code = str(result.status_code),error_details = message)
            MonitorHelper.updateRecord(self, record, alert_time,message_time)
            #build email content and send out email 
            self.response.out.write('------------------------<h3>DATA OUTAGE EMAIL PART</h3>-------------------------')
            if len(no_update_email_list) != 0:
                for info in no_update_email_list:
                    html = MonitorHelper.buildEmailContent(self,[info])
                    self.response.out.write(html)
                    self.response.out.write("<br />")
                    #logging.info(html)
                    recipient=self.__class__.default_email_list[:]
                    
                    if info[2] == "Ag-tronix":
                        recipient.append("*****@*****.**")
                        recipient.append("*****@*****.**")
                    elif info[2] == "Spectrum Technologies Inc":
                    	recipient.append("*****@*****.**")
                    elif info[2] == "McCrometer":
                        recipient.append("*****@*****.**")
                    else:
                        recipient.append(info[4])
                    recipient.append(info[5])
                    logging.info("<b>Email to: %s</b>" % ",".join(recipient))
                    self.response.write("<b>Email to: %s</b><br />" % ",".join(recipient))                    
                    subject = "%s weather station data issue" % info[6]
                    #MonitorHelper.emailFdacsInfo(recipient,self,subject,html)
            
            '''
            #build email content
            if len(no_update_email_list) != 0:
                
                html = MonitorHelper.buildEmailContent(self,no_update_email_list)
                self.response.out.write("<b>Email to: %s</b>" % ",".join(self.__class__.email_list))
                self.response.out.write(html)
                MonitorHelper.emailInfo(self.__class__.email_list,self,subject,html) 
            
            #build vendor_email_list and grow_email_list dict for no_update_options
            vendor_email_dict = {}
            grower_email_dict = {}
            
            for data in no_update_email_list:
                #build vendor_email_list dict
                if data[5] in vendor_email_dict.keys():
                    vendor_email_dict[data[5]].append(data)
                else:
                    vendor_email_dict[data[5]] = [data]

                #build grower_email_list dict
                if data[6] in grower_email_dict.keys():
                    grower_email_dict[data[6]].append(data)
                else:
                    grower_email_dict[data[6]] = [data]
            logging.info(vendor_email_dict.items())
            logging.info(grower_email_dict.items())
            logging.info("<h3>Email to Grower </h3>")7
            self.response.out.write("<h3>Email to Grower </h3>")
            #email grower
            for k,v in grower_email_dict.items():
                html = MonitorHelper.buildEmailContent(self,v)
                logging.info("<b>Email to: %s</b>" % k)
                self.response.write("<b>Email to: %s</b>" % k)
                self.response.out.wzhu shirite(html)
                logging.info(html)
                MonitorHelper.emailInfo([k],self,subject,html)
            logging.info("<h3>Email to Vendor </h3>")
            self.response.out.write("<h3>Email to Vendor </h3>")
            #email vendor
            for k,v in vendor_email_dict.items():
                html = MonitorHelper.buildEmailContent(self,v)
                self.response.write("<b>Email to: %s</b>" % k)
                self.response.out.write(html)
                logging.info("<b>Email to: %s</b>" % k)
                logging.info(html)
                MonitorHelper.emailInfo([k],self,subject,html)
                
            '''    
            #restored email options
            self.restore_email(self, fresh_true_list,vendor_dict)            
            #latest_email_id_list = database.EmailRecord.all().filter("latest_email", True).run()
            #logging.info(latest_email_id_list)
            #self.response.out.write(latest_email_id_list)
            #q_result = database.EmailRecord.all().run()
            #for result in q_result:
                #self.response.out.write(result.email_time.strftime("%Y-%m-%d %H:%M:%S"))
                #self.response.out.write("<br />")
        else:
            #all stations are good
            MonitorHelper.allGoodInfo(self)