Beispiel #1
0
def find_last_phase():
    """
    Return last processed ChaudiereMinute entry.dt or None
    """
    # if no ChaudiereMinute entry exists, return None
    if ChaudiereMinute.last(ChaudiereMinute) == None:
        return None

    # if some ChaudiereMinute entry exists but phase is None
    # (first call of this script since db creation) :
    # return first ChaudiereMinute dt
    try_first = ChaudiereMinute.first(ChaudiereMinute)
    if try_first is not None and try_first.phase is None:
        logger.debug('returning first entry')
        return try_first.dt

    # else search for lat processed entry
    dt = ChaudiereMinute.last(ChaudiereMinute).dt
    phase = None
    while (phase is None):
        dt = dt - timedelta(minutes=1)
        entry = ChaudiereMinute.get_by_datetime(ChaudiereMinute, dt)
        if entry is not None:
            phase = ChaudiereMinute.get_by_datetime(ChaudiereMinute, dt).phase
    logger.debug('last phase found is at : ' + str(dt))
    return dt
Beispiel #2
0
def process_phase(mode='normal', hours=None, date=None):
    """ 
    Détermine la date de début (begin) et de fin (end) des minutes à traiter en fonction du `mode`
    """
    TEMP_CHAUDIERE_FAILURE = admin_config.temp_chaudiere_failure
    logger.info("TEMP_CHAUDIERE_FAILURE " + str(TEMP_CHAUDIERE_FAILURE))
    rework_mode_disable_alert = False
    if mode is 'normal':
        begin = find_last_phase() # begin = last processed ChaudiereMinute entry.dt
        if begin is None: 
            # Si begin = None alors il n'y a aucun reord dans la table ChaudiereMinute. Aucun traitement ne peut être effectué
            return
        end = ChaudiereMinute.last(ChaudiereMinute).dt # end = last existing ChaudiereMinute entry.dt
    elif mode is 'rework_from_now':
        rework_mode_disable_alert = True
        end = ChaudiereMinute.last(ChaudiereMinute).dt
        begin = end - timedelta(hours=hours)
    elif mode is 'rework_from_date':
        rework_mode_disable_alert = True
        end = find_date_end(date)
        begin = end - timedelta(hours=hours)
    else:
        logger.error('wrong arguments')
        return
    if begin is None:
        logger.info('No records')
        return
    
    if ((begin + timedelta(minutes=1)) >= end):
        logger.info('Strating from '+str(begin)+' ...Waiting more records')
    else:
        logger.info('processing phase From ' + str(begin) + ' To ' + str(end))

    # Progress bar Init (for console mode)
    bar_items = timedelta_in_minute(begin, end)
    bar_item = 0
    
    # while some entries to process
    while ((begin + timedelta(minutes=1)) <= end):
        entry = ChaudiereMinute.get_by_datetime(ChaudiereMinute, begin) 
        # entry should not be missing, test just in case and create missing entry
        if entry is None:
            logger.warning('create missing ChaudiereMinute entry (should not be the case')
            ChaudiereMinute.create(ChaudiereMinute, begin, None, None, None, None, None, None, None, None, None, None)
        entry = ChaudiereMinute.get_by_datetime(ChaudiereMinute, begin)
        
        # Progress bar Print (for console mode)
        bar_item += 1
        # print_bar(bar_item, bar_items, prefix=str(entry.dt))
        
        update_phase(entry)
        update_change(entry)
        process_alerts(entry, rework_mode_disable_alert)
        begin = begin + timedelta(minutes=1)
def process_archive_minute(mode='normal', hours=None, date=None): 
    """ Defini date de debut et de fin 
    begin = (date du dernier record de la base Archive) + 1 minute
    end = (maintenant) - 1 minute
    Appelle la fonction record_minute() autant de fois que nécessaire
    """
    if mode is 'normal':
        # if ChaudiereMinute is empty then we start with the first Chaudiere record (oldest)
        if ChaudiereMinute.last(ChaudiereMinute) == None:
            logger.debug('ChaudiereMinute.last(ChaudiereMinute) == None:')
            begin = Chaudiere.first(Chaudiere).dt

        # else ChaudiereMinute is NOT empty then we start with the last ChaudiereMinute record (newest)
        else:
            logger.debug('ChaudiereMinute.last(ChaudiereMinute) != None:')
            begin = (ChaudiereMinute.last(ChaudiereMinute).dt + timedelta(minutes=1))

        # we finish with the last Chaudiere record (replace second to zero to avoid incomplete current minute)
        end = Chaudiere.last(Chaudiere).dt
    elif mode is 'rework_from_now':
        #begin is last existing Chaudiere - N hours
        dt = Chaudiere.last(Chaudiere).dt 
        begin = dt - timedelta(hours=hours)
        # we finish with the last Chaudiere record (replace second to zero to avoid incomplete current minute)
        end = Chaudiere.last(Chaudiere).dt
    elif mode is 'rework_from_date':
        end = find_datetime_end(date)
        begin = end - timedelta(hours=hours)
    else:
        logger.error('wrong arguments')
        return
    if begin is None:
        logger.info('No records')
        return
    
    begin = begin.replace(second=0, microsecond=0)
    end = end.replace(second=0, microsecond=0)
    
    if ((begin + timedelta(minutes=1)) > end):
        logger.info('Starting From '+ str(begin) + ' ...Waiting more records')
    else:
        logger.info('Archiving From '+ str(begin) +' To ' + str(end))

    # while some old Logs to Archive, call function record_minute()
    while ((begin + timedelta(minutes=1)) <= end):
        record_minute(begin)
        begin = begin + timedelta(minutes=1)
Beispiel #4
0
def find_date_end(date):
    """
    return the datetime of an existing Chaudiere entry close to the given *date* parameter
    """
    last_ch_minute_date = ChaudiereMinute.last(ChaudiereMinute).dt
    entry = ChaudiereMinute.get_by_datetime(ChaudiereMinute, date)
    while ((entry is None) and (date < last_ch_minute_date)):
        date = date + timedelta(minutes=1)
        entry = ChaudiereMinute.get_by_datetime(ChaudiereMinute, date)
    logger.debug('found ChaudiereMinute at (dt end):' + str(entry.dt))
    return entry.dt
Beispiel #5
0
def test_alerts():
    logger.debug('test_alerts()')
    entry = ChaudiereMinute.last(ChaudiereMinute)
    send_email_sms.Send_Mail_Chaudiere_Alert(entry.dt)
    send_email_sms.Send_SMS_Chaudiere_Alert(entry.dt)
Beispiel #6
0
def print_last_entry():
    print(ChaudiereMinute.last(ChaudiereMinute))