Source code for dgi.servicos.linux

from loguru import logger
from daemonize import Daemonize

from time import sleep
from datetime import datetime, timedelta

from dgi.info import DB_PROPS
from dgi.catalogo import CatalogoDGI
from dgi.decoradores import adiciona_log
from dgi.excecoes import ErroNaExecucaoDaBuscaNoServico, ErroDePlataforma

PID = "/tmp/dgid.pid"


@adiciona_log("/tmp/servico_de_aquisicao_de_dados.log", temporal=False)
def _fnc_busca_dados(db_props = DB_PROPS) -> None:
    """Função para a busca de dados
    
    Args:
        db_props (dict): Dicionário contendo as informações para conexão com o banco de dados, contendo as seguintes chaves
            
            host: ``str``: Endereço de IP do banco de dados

            porta: ``int``: Porta do banco de dados

            usuario: ``str``: Usuário para utilizar o banco (Opcional)

            senha: ``str``: Senha para utilizar o banco (Opcional)
    
    Returns:
        None
    """
    
    logger.info("Serviço de busca de imagens inicializado")
    
    catalogo = CatalogoDGI(db_props)
    data_da_ultima_atualizacao = catalogo.recupera_data_ultima_insercao()

    data_de_busca = {"inicial": "01/01/2014", "final": datetime.today().strftime("%d/%m/%Y")}
    localizacoes = {
            "norte": "11.04024846",
            "sul": "-36.49917303", 
            "leste": "-30.77297895",
            "oeste": "-74.80618208"
    }
    
    if data_da_ultima_atualizacao == []:
        logger.info(f"Iniciando processo de listagem de 2014 até {data_de_busca['final']}")
    else:
        logger.info(f"O processo de atualização, continuará da seguinte data: {data_da_ultima_atualizacao}")
        data_de_busca["inicial"] = data_da_ultima_atualizacao.strftime("%d/%m/%Y")
        
    try:
        if data_de_busca["inicial"] != data_de_busca["final"]:
            catalogo.lista_imagens_dgi_regiao("CB4", "", data_de_busca, localizacoes)
    except RuntimeError as e:
        logger.trace(e)
        
        raise ErroNaExecucaoDaBuscaNoServico(f"Problemas ocorreram durante a busca de dados no serviço: {str(e)}")

    logger.info("Iniciando processo de busca diária dos dados")
    while True:
        try:
            # Recuperando a data de hoje
            data_atual = datetime.today()
            inicial = (data_atual - timedelta(days=3)).strftime("%d/%m/%y")
            final = data_atual.strftime("%d/%m/%y")

            data_de_busca = {"inicial": inicial, "final": final}
            
            logger.info("Listagem começou a ser realizada")
            catalogo.lista_imagens_dgi_regiao("CB4", "", data_de_busca, localizacoes)
            
            logger.info("Processo finalizado! Aguardando 3 dias para a atualização")
            sleep((3 * 24) * 60 * 60)
        except Exception as e:
            logger.trace(e)
            
            raise ErroNaExecucaoDaBuscaNoServico(f"Problemas ocorreram durante a busca de dados no serviço: {str(e)}")


[docs]def servico_dgi_linux(db_props = DB_PROPS) -> None: """Função para iniciar o serviço de busca de imagens no Linux Args: db_props (dict): Dicionário contendo as informações para conexão com o banco de dados, contendo as seguintes chaves host: ``str``: Endereço de IP do banco de dados porta: ``int``: Porta do banco de dados usuario: ``str``: Usuário para utilizar o banco (Opcional) senha: ``str``: Senha para utilizar o banco (Opcional) Returns: None """ import platform if platform.system() != "Linux": raise ErroDePlataforma("Este serviço está disponível apenas para Linux") def funcao_do_servico(): """Função do serviço DGI para Linux """ try: _fnc_busca_dados(db_props) except Exception as e: raise ErroNaExecucaoDaBuscaNoServico(str(e)) Daemonize(app="dgid", pid=PID, action=funcao_do_servico).start()