Example #1
0
    def executa_download(self, nome_backup):

        thread = self._download_em_espera[nome_backup]
        self._download_em_andamento.append(thread)
        del self._download_em_espera[nome_backup]
        thread.start()
        Log.info('iniciando thread {}'.format(nome_backup))
Example #2
0
 def criar_db():
     try:
         arquivo = open(path)
         arquivo.close()
     except FileNotFoundError:
         Transacoes.create_table()
         Log.info('criando banco de dados')
Example #3
0
    def close_connection(self, conn):

        peername = self.current_peers[conn.fileno()]
        Log.info('conexao fechada: {}'.format(peername))
        del self.current_peers[conn.fileno()]
        self.selector.unregister(conn)
        conn.close()
Example #4
0
    def registrar(self):
        mbackup = Backup()
        mbackup.nome = self._backup.nome
        mbackup.tipo = self._backup.tipo
        mbackup.data_execucao = Conv_data.get_date_now()
        mbackup.periodo = self._backup.periodo
        if self._tempo_execucao != None:
            mbackup.tempo_execucao = self._tempo_execucao
        mbackup.dia_semana = self._backup.dia_semana
        split_hora = self._backup.hora_execucao.split(':')
        int_hora = int(split_hora[0])
        int_minutos = int(split_hora[1])
        _hora_execucao = datetime.time(hour=int_hora, minute=int_minutos)
        mbackup.hora_execucao = _hora_execucao
        mbackup.sc_pre_execucao = self._resultado_execucao['executa_sc_pre']
        mbackup.sc_pos_execucao = self._resultado_execucao['executa_sc_pos']
        mbackup.backup_auto = self._backup.backup_auto
        if self._backup.backup_auto == 'Sim':
            mbackup.sc_backup = self._resultado_execucao['executa_backup_auto']
        else:
            mbackup.sc_backup = self._resultado_execucao['executa_sc_nativo']

        mbackup.save()

        if self._arquivo != None:
            m_arquivo = Arquivo()
            m_arquivo.nome = self._arquivo.nome
            m_arquivo.path = self._arquivo.path
            m_arquivo.hash_verificacao = self._arquivo.hash_verificacao
            m_arquivo.data_criacao = self._arquivo.data_criacao
            m_arquivo.tamanho = self._arquivo.tamanho
            m_arquivo.backup = mbackup

            m_arquivo.save()
        Log.info('registrando no banco de dados')
Example #5
0
 def _enviar_mensagem_servidor(self, servidor, mensagem):
     print('---enviar_mensagem----')
     print('servidor: {}'.format(servidor.nome))
     print('mensagem: {}'.format(mensagem))
     thread = ConexaoThread(servidor, mensagem)
     thread.start()
     self._thread_conexao_servidores.append(thread)
     Log.info('enviando mensagem')
Example #6
0
    def _set_servidor(self):
        path = self.config_path() + 'json_modelos/config_servidor.json'
        with open(path) as servidor:
            _json = json.load(servidor)
            s = _json['servidor_local']
            self._servidor = Servidor_local(s)

        Log.info('leitura do arquivo: config_servidores.json')
Example #7
0
 def transacoes(nome_servidor, status, descricao):
     config = Transacoes()
     config.data_envio = datetime.datetime.now()
     config.nome_servidor = nome_servidor
     config.descricao = descricao
     config.status = status
     config.save()
     Log.info('transacao salva')
Example #8
0
 def _fecha_ftp_servidor(self):
     lista_finalizados = self._gestao_d.get_msg_finalizados()
     for mensagem in lista_finalizados:
         servidor = mensagem['servidor']
         Log.info('fechando ftp, servidor {}'.format(servidor))
         del mensagem['servidor']
         self._enviar_mensagem_servidor(servidor, mensagem)
         self._gestao_d.remove_finalizado(mensagem['nome'])
Example #9
0
    def _iniciar_servicos(self):
        self._loop_gestao = True

        monitor_finalizado = Thread(target=self._remove_download_finalizado,
                                    name='monitor_finalizados')
        monitor_finalizado.start()
        self._thread_gestao.append(monitor_finalizado)
        Log.info('iniciando thread: monitor finalizados')
Example #10
0
 def _set_backup(self):
     with open(self._path + 'configuracao/backup_list.json') as backup_json:
         data = json.load(backup_json)
         b = data['backups']
         self._backup_list = []
         for i in b:
             backup = Backup(i)
             self._backup_list.append(backup)
     Log.info('[configuracao] leitura do arquivo backup_list.json')
Example #11
0
    def _set_usuario(self):

        with open(self._path + 'configuracao/login.json') as login_json:
            _json = json.load(login_json)
            self._usuarios = []
            for u in _json['login']:
                usuario = Usuario(u)
                self._usuarios.append(usuario)
        Log.info('[configuracao] leitura do arquivo login.json')
Example #12
0
 def iniciar_servidor(self):
     authorizer = DummyAuthorizer()
     authorizer.add_user(self._config.usuario, self._config.senha, self._dir, perm=self._config.permissao)
     handler = FTPHandler        
     handler.authorizer = authorizer
     try:
         self._server = FTPServer((self._config.host, self._config.porta), handler)
         self._server.serve_forever(timeout=5)
     except OSError:
         Log.error('Erro ao iniciar FTP')
Example #13
0
    def criar_banco():
        try:
            if Configuracao.os_system() == 'Windows':
                path_db = 'c:/nbackup/db/nbackup.db'
            else:
                path_db = '/home/marcelo/python/nbackup/db/nbackup.db'

            arquivo = open(path_db)
        except FileNotFoundError:
            Backup.create_table()
            Arquivo.create_table()
            Log.info('criando banco de dados')
Example #14
0
    def _verificar_bkps_prontos(self):
        lista_servidores = self._config.get_servidores()
        while self._loop_controle:
            for servidor in lista_servidores:
                tratamento = Tratamento_Servidor(servidor)
                if tratamento.is_execucao(
                ) and not self._gestao_d.is_download():
                    mensagem = {'comando': 'list_bkps_prontos'}
                    self._enviar_mensagem_servidor(servidor, mensagem)

            Log.info('verificação de backups prontos')
            time.sleep(300)
Example #15
0
        def adicionar(self, info_ftp):
            self._info_ftp = info_ftp
            thread = Ftp_thread(self._ftp, info_ftp['path'], info_ftp['nome'])
            self._ftp_andamento[info_ftp['nome']] = thread
            thread.start()

            resposta = {
                'resposta':'ftp_pronto_download',
                'conteudo':self._info_ftp['nome']
            }
            Log.info('adicionando e iniciando thread ftp: {}'.format(info_ftp['nome']))

            return resposta
Example #16
0
        def desligar(self, nome_backup):
            is_desligado = False
            try:
                thread = self._ftp_andamento[nome_backup]
                thread.desligar_servidor()
                self._ftp_finalizado.append(thread)
                del self._ftp_andamento[nome_backup]
                is_desligado = thread.is_desligado()
                Log.info('desligando ftp: {}'.format(nome_backup))
            except KeyError:
                Log.error('KeyError: ftp: {} nao encontrado'.format(nome_backup))
                self._erros['KeyError'] = 'ftp {} nao encontrado'.format(nome_backup)

            return is_desligado
Example #17
0
 def _tratamento_resposta(self, resposta, conteudo, servidor):
     print('---_tratamento_resposta---')
     print('conteudo: {}'.format(conteudo))
     print('servidor: {}'.format(servidor.nome))
     if resposta == 'ok' and resposta == 'ftp_rodando':
         Persistir.transacoes(servidor.nome, resposta, conteudo)
     elif resposta == 'lst_bkps_prontos':
         self._adicionar_download_fila(servidor, conteudo)
     elif resposta == 'salvar_bkps_ok':
         Persistir.transacoes(servidor.nome, resposta)
     elif resposta == 'ftp_pronto_download':
         print('ftp_pronto_download')
         Log.info('ftp pronto para download, servidor {}'.format(
             servidor.nome))
         self._gestao_d.executa_download()
Example #18
0
    def _set_servidores(self):
        path = self.config_path() + 'json_modelos/servidores.json'
        self._lista_servidores = []
        if os.path.exists(path):
            arquivo = open(path)
            servidores = json.load(arquivo)
            keys = servidores.keys()
            for k in keys:
                dict_server = servidores[k]
                serv = Servidor(dict_server)
                self._lista_servidores.append(serv)
        else:
            self._lista_servidores = None

        Log.info('leitura do arquivo: servidores.json')
Example #19
0
    def serve_forever(self):
        last_report_time = time.time()
        Log.info('Iniciando servidor')
        while self._server_on_running:

            events = self.selector.select(timeout=0.2)

            for key, mask in events:
                handler = key.data
                handler(key.fileobj, mask)

            cur_time = time.time()

            if cur_time - last_report_time > 1:
                last_report_time = cur_time
Example #20
0
    def _fechar_ftp(self, comando):
        self.ftp.parar()
        Log.info('desligando ftp: {}.'.format(comando['nome']))
        str_id = comando['id_arquivo']
        id = int(str_id)
        Arquivo.set_enviado(id)
        Log.info(
            'salvando alteracoes no banco de dados, arquivo id: {}'.format(
                str_id))

        resposta = {
            'resposta': 'ok',
            'conteudo': 'download arquivo executado com sucesso'
        }

        return json.dumps(resposta)
Example #21
0
 def iniciar(self):
     resultado = False
     try:
         time.sleep(5)
         self._ftp = ftplib.FTP('')
         self._ftp.connect(self._config_servidor.host,
                           self._config_servidor.porta)
         self._ftp.login(user=self._config_servidor.usuario,
                         passwd=self._config_servidor.senha)
         destino = self._path_destino + '/' + self._arquivo['arquivo']
         self._ftp.retrbinary("RETR " + self._arquivo['arquivo'],
                              open(destino, 'wb').write)
         resultado = True
     except ftplib.all_errors as msg:
         Log.info('[download_ftp] erro ftp: {}'.format(msg))
         resultado = False
Example #22
0
    def on_read(self, conn, mask):
        try:
            data = conn.recv(1024)
            self._controle.set_data(data)

            if self._controle.is_data():
                self._controle.processar_mensagem()
                conn.send(self._controle.enviar_resposta())
                if self._controle.get_running():
                    Log.info('desligando servidor')
                    self._set_is_running(False)
            else:
                self.close_connection(conn)

        except ConnectionResetError:
            self.close_connection(conn)
Example #23
0
    def adicionar(self, servidor, lista_arquivos):
        print('servidor: {}'.format(servidor))
        print('lista_arquivos: {}'.format(lista_arquivos))
        '''
        servidor -  configuracao do servidor remoto
        arquivos - lista de arquivos para download
        '''
        path_destino = self._config.get_backup_dir(servidor.nome)
        arquivos = lista_arquivos['conteudo']
        for arquivo in arquivos:
            download_ftp = Download_ftp(arquivo, path_destino, servidor)
            thread = Download_thread(download_ftp, arquivo['backup'])
            self._download_em_espera[arquivo['backup']] = thread

        Log.info('Gestao download bkps adicionados, servidor: {}'.format(
            servidor.nome))
Example #24
0
    def _iniciar_threads(self):
        self._loop_controle = True

        self._verificacao_servidores = 'verificacao_servidores'
        verf_conex_serv = Thread(target=self._monitor_conexao_servidores,
                                 name=self._verificacao_servidores)
        verf_conex_serv.start()
        self._thread_controle[self._verificacao_servidores] = verf_conex_serv
        Log.info('Iniciando Thread: {}'.format(self._verificacao_servidores))

        self._verifica_bkps_prontos = 'verifica_bkps_prontos'
        verifica_bkps_prontos = Thread(target=self._verificar_bkps_prontos,
                                       name=self._verifica_bkps_prontos)
        verifica_bkps_prontos.start()
        self._thread_controle[
            self._verifica_bkps_prontos] = verifica_bkps_prontos
        Log.info('Iniciando Thread: {}'.format(self._verifica_bkps_prontos))

        self._verifica_download_concluido = 'monitor_bkps_finalizados'
        monitor_download_concluido = Thread(
            target=self._monitor_download_concluido,
            name=self._verifica_download_concluido)
        monitor_download_concluido.start()
        self._thread_controle[
            self._verifica_download_concluido] = monitor_download_concluido
        Log.info('Iniciando Thread:{}'.format(
            self._verifica_download_concluido))

        self._monitor_download_finalizado = 'monitor_download_finalizados'
        monitor_download_finalizados = Thread(
            target=self._fecha_ftp_servidor,
            name=self._monitor_download_finalizado)
        monitor_download_finalizados.start()
        self._thread_controle[
            self._monitor_download_finalizado] = monitor_download_finalizados
        Log.info('Iniciando Thread: {}'.format(
            self._monitor_download_finalizado))

        self._monitor_download_andamento = 'monitor_download_andamento'
        monitor_download_andamento = Thread(
            target=self._monitor_execucao_download,
            name=self._monitor_download_andamento)
        monitor_download_andamento.start()
        self._thread_controle[
            self._monitor_download_andamento] = monitor_download_andamento
        Log.info('Iniciando Thread: {}'.format(
            self._monitor_download_andamento))
Example #25
0
    def salvar_servidores(self, servidores):
        resposta = False
        path = config_path() + 'json_modelos/servidores.json'

        try:
            arquivo = open(path, 'w')
            arquivo.write(servidores)
            arquivo.close()
            resposta = True
            Log.info('escrita no arquivo servidores.json')
        except FileNotFoundError:
            Log.error(
                'erro ao escrever no arquivo servidores.json, FileNotFoundError'
            )
            resposta = False

        return resposta
Example #26
0
    def executa_thread_download(self):
        print("executa_thread_download")
        print('len download_em_espera: {}'.format(len(
            self._download_em_espera)))
        print('len download_em_andamento: {}'.format(
            len(self._download_em_andamento)))

        loop = (len(self._download_em_espera) > 0)

        while loop:
            time.sleep(30)
            if len(self._download_em_andamento) == 0:
                thread = self._download_em_espera.pop()
                self._download_em_andamento.append(thread)
                thread.start()
                Log.info('iniciando thread {}'.format(thread.name))
            loop = (len(self._download_em_espera) > 0)
Example #27
0
    def _backups_prontos(self):
        arquivos = Arquivo.get_nao_enviados()
        lista_arquivos = []
        for arquivo in arquivos:
            d = {
                'id': arquivo.id,
                'arquivo': arquivo.nome,
                'path': arquivo.path,
                'hash_verificacao': arquivo.hash_verificacao,
                'data_criacao': arquivo.data_criacao,
                'tamanho': arquivo.tamanho,
                'backup': arquivo.backup.nome,
                'is_enviado': arquivo.is_enviado
            }
            lista_arquivos.append(d)

        resposta = {'resposta': 'lst_bkps_prontos', 'conteudo': lista_arquivos}

        Log.info('criando lista de arquivos preparados para backup')

        return json.dumps(resposta)
Example #28
0
    def _registar_servicos_finalizados(self):
        while self._loop_controle:
            lista_finalizados = list(self._threads_finalizados.keys())
            for key in lista_finalizados:
                thread = self._threads_finalizados[key]
                t_execucao = (thread.get_final_thread() -
                              thread.get_inicio_thread())
                servico = thread.get_servico()
                backup = servico.get_backup()
                arq = None
                if servico.verifica_backup_existe():
                    print('_registar_servicos_finalizados:if:')
                    arq = servico.get_info_arquivo_backup()
                print('_registar_servicos_finalizados:fim if:')

                self._registro = Registro(backup,
                                          servico.get_resultado(),
                                          tempo_execucao=t_execucao,
                                          arquivo=arq)
                self._registro.registrar()
                Log.info('registando servico finalizado: {}'.format(arq.nome))
                del self._threads_finalizados[key]

            time.sleep(60)
Example #29
0
    def _iniciar_thread_controle(self):
        self._loop_controle = True

        thread_verificacao = threading.Thread(target=self._verifica_servicos,
                                              name=self._verifica_servico)
        self._thread_controle[self._verifica_servico] = thread_verificacao
        thread_verificacao.start()
        Log.info('iniciando thread: {}'.format(self._verifica_servico))

        thread_ativos = threading.Thread(target=self._verifica_thread_ativos,
                                         name=self._threads_ativos)
        self._thread_controle[self._threads_ativos] = thread_ativos
        thread_ativos.start()
        Log.info('iniciando thread: {}'.format(self._verifica_thread_ativos))

        thread_reg_finalizado = threading.Thread(
            target=self._registar_servicos_finalizados,
            name=self._reg_serv_finalizados)
        self._thread_controle[
            self._reg_serv_finalizados] = thread_reg_finalizado
        thread_reg_finalizado.start()
        Log.info('iniciando thread: {}'.format(self._reg_serv_finalizados))
Example #30
0
 def desligar_servidor(self):
     self._servidor_ftp.desligar_servidor()
     self._is_desligado = True
     Log.info('desligando thread ftp: {}'.format(self._nome))