def setCurrentModelAvailability(self, parms, config): """ Change availability status when appropriate by looking at disk Parameters ---------- parms : Parms parameters config : str Config file name Returns ------- none """ if (self._layered): # no need to do more, already layered return if (self._empty): WhfLog.error("Empty when not expected") return # make note if going from nothing to something nothing = True for f in self._step: if (f._layered): nothing = False #if (nothing): #WhfLog.debug("Nothing, so trying to get stuff") # first time only, try the -1 and -2 steps, force with what we have if (self._first): self._step[2].forceLayer(parms, config, self._issue) self._step[1].forceLayer(parms, config, self._issue) self._first = False self._step[0].layerIfReady(parms, config, self._issue) self._layered = self._step[0]._layered if (not self._layered): tnow = datetime.datetime.utcnow() diff = tnow - self._clockTime idiff = (diff.microseconds + (diff.seconds + diff.days*24*3600)*10**6)/10**6 if (idiff > parms._veryLateSeconds): WhfLog.warning("WARNING: Inputs for layering timeout Issue:%s", self._issue.strftime("%Y%m%d%H")) s = self._step[0].debugPrintString() WhfLog.warning("WARNING: 0, state=%s", s) self._step[0].forceLayer(parms, config, self._issue) self._layered = True
def setCurrentModelAvailability(self, parms, config): """ Change availability status when appropriate by looking at disk Parameters ---------- parms : Parms parameters config : str Config file name Returns ------- none """ if (self._layered): # no need to do more, already layered return if (self._empty): WhfLog.error("Empty when not expected") return # make note if going from nothing to something nothing = True for f in self._step: if (f._layered): nothing = False #if (nothing): #WhfLog.debug("Nothing, so trying to get stuff") # first time only, try the -1 and -2 steps, force with what we have if (self._first): self._step[2].forceLayer(parms, config, self._issue) self._step[1].forceLayer(parms, config, self._issue) self._first = False self._step[0].layerIfReady(parms, config, self._issue) self._layered = self._step[0]._layered if (not self._layered): tnow = datetime.datetime.utcnow() diff = tnow - self._clockTime idiff = (diff.microseconds + (diff.seconds + diff.days * 24 * 3600) * 10**6) / 10**6 if (idiff > parms._veryLateSeconds): WhfLog.warning("WARNING: Inputs for layering timeout Issue:%s", self._issue.strftime("%Y%m%d%H")) s = self._step[0].debugPrintString() WhfLog.warning("WARNING: 0, state=%s", s) self._step[0].forceLayer(parms, config, self._issue) self._layered = True
def setCurrentModelAvailability(self, parms, model): """ Change availability status when appropriate by looking at disk Parameters ---------- parms : Parms parameters model : Model overall status for this model run, used for clock time Returns ------- none """ if (self._layered): # no need to do more, already layered return # make note if going from nothing to something nothing = (not self._hrrr) and (not self._rap) #if (nothing): #WhfLog.debug("Nothing, so trying to get stuff") if (not self._hrrr): # update HRRR status self._hrrr = self._forecastExists(parms._hrrrDir) if (not self._rap): # update RAP status self._rap = self._forecastExists(parms._rapDir) if (nothing and (self._hrrr or self._rap)): # went from nothing to something, so start the clock WhfLog.debug("Starting clock now, hrrr=%d, rap=%d", df.boolToInt(self._hrrr), df.boolToInt(self._rap)) self._clockTime = datetime.datetime.utcnow() else: if (nothing and ((not self._hrrr) and (not self._rap))): # nothing to nothing, compare current time to time from # model input, and squeaky wheel if too long tnow = datetime.datetime.utcnow() diff = tnow - model._clockTime idiff = diff.total_seconds() if (idiff > parms._veryLateSeconds): WhfLog.warning( "Inputs for short range layering are very late Issue:%s Valid:%s", self._issue.strftime("%Y%m%d%H"), self._valid.strftime("%Y%m%d%H"))
def setCurrentModelAvailability(self, parms, model): """ Change availability status when appropriate by looking at disk Parameters ---------- parms : Parms parameters model : Model overall status for this model run, used for clock time Returns ------- none """ if (self._layered): # no need to do more, already layered return # make note if going from nothing to something nothing = (not self._hrrr) and (not self._rap) #if (nothing): #WhfLog.debug("Nothing, so trying to get stuff") if (not self._hrrr): # update HRRR status self._hrrr = self._forecastExists(parms._hrrrDir) if (not self._rap): # update RAP status self._rap = self._forecastExists(parms._rapDir) if (nothing and (self._hrrr or self._rap)): # went from nothing to something, so start the clock WhfLog.debug("Starting clock now, hrrr=%d, rap=%d", df.boolToInt(self._hrrr), df.boolToInt(self._rap)) self._clockTime = datetime.datetime.utcnow() else: if (nothing and ((not self._hrrr) and (not self._rap))): # nothing to nothing, compare current time to time from # model input, and squeaky wheel if too long tnow = datetime.datetime.utcnow() diff = tnow - model._clockTime idiff = diff.total_seconds() if (idiff > parms._veryLateSeconds): WhfLog.warning("Inputs for short range layering are very late Issue:%s Valid:%s", self._issue.strftime("%Y%m%d%H"), self._valid.strftime("%Y%m%d%H"))
def forceLayer(self, parms, config, itime): """ Perform layering if state is partially ready enough Parameters ---------- parms : Parms Parameters itime : datetime Returns ------- bool True if layering was done, or had previously been done """ if (self._layered): return True self.setAvailability(parms, itime) if (self._rap0 and self._rap3): if (self._hrrr0 and self._hrrr3): self._layered = True if (self._mrms == True): WhfLog.setData('RAP/HRRR/MRMS') layer(parms, itime, self._step, "RAP_HRRR_MRMS", config) else: WhfLog.setData('RAP/HRRR') layer(parms, itime, self._step, "RAP_HRRR", config) WhfLog.setData('RAP/HRRR/MRMS') else: self._layered = True WhfLog.setData('RAP') layer(parms, itime, self._step, "RAP", config) WhfLog.setData('RAP/HRRR/MRMS') else: self._layered = True WhfLog.warning("WARNING, no layering of %s, step=-%d", itime.strftime("%Y%m%d%h"), self._step) return True