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
예제 #2
0
    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
    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