Beispiel #1
0
 def __init__(self):
     self._config = Configuracao()
     self._gestao_d = Gestao_download()
     self._loop_controle = True
     self._thread_conexao_servidores = []
     self._thread_controle = {}
     self._iniciar_threads()
Beispiel #2
0
 def __init__(self):
     self._loop_gestao = True
     self._thread_gestao = []
     self._download_em_espera = {}
     self._download_em_andamento = []
     self._download_finalizados = []
     self._iniciar_servicos()
     self._config = Configuracao()
Beispiel #3
0
 def __init__(self, arquivo, path_destino, servidor):
     '''
         arquivo - dicionario com as informacoes dos arquivos para download
         servidor - objeto com as informacoes para conexao com servidor
     '''
     self._servidor = servidor
     self._config_servidor = servidor.obj_ftp
     self._arquivo = arquivo
     self._config = Configuracao()
     self._path_destino = path_destino
Beispiel #4
0
    def __init__(self):
        self._fim_conexao = 'fim'
        self._cmd_desligar = False
        self._mensage = ''
        self._data = bytes()
        self._config = Configuracao()
        self._gestao_ftp = Gestao_ftp()
        self.ftp = Ftp()
        self._bkp_conversor = Backup_dict()
        self._loop_controle = True
        self._thread_servico = {}
        self._thread_controle = {}
        self._threads_finalizados = {}
        self._threads_ftps = {}
        self._lista_bkp_executando = []
        self._verifica_servico = 'Verifica servicos'
        self._threads_ativos = 'Threads ativos'
        self._reg_serv_finalizados = 'Registra servicos'

        self._iniciar_thread_controle()
Beispiel #5
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')
Beispiel #6
0
class Gestao_ftp:

        def __init__(self):
            self._config = Configuracao()
            self._ftp = self._config.get_server_config().config_ftp()
            self._ftp_andamento = {}
            self._ftp_finalizado = []
            self._erros = {}


        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


        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

        def get_em_andamento(self):
            return self._ftp_andamento
        '''
        def is_rodando_ftp(self):
            is_rodando = False
            keys = self._ftp_andamento.keys()
            for key in keys:
                thread = self._ftp_andamento[key]
                is_rodando = thread.is_desligado()

            return is_rodando
        '''

        def is_rodando_ftp(self):
            rodando = False
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            if sock.connect_ex((self._ftp.host, self._ftp.porta)) == 0:
                rodando = True
            sock.close()

            return rodando

        def is_erros(self):
            return (len(self._erros) > 0)

        def get_erros(self):
            return self._erros

        def get_ftp_finalizados(self):
            return self._ftp_andamento
Beispiel #7
0
 def __init__(self):
     self._config = Configuracao()
     self._ftp = self._config.get_server_config().config_ftp()
     self._ftp_andamento = {}
     self._ftp_finalizado = []
     self._erros = {}
Beispiel #8
0
from peewee import *
import datetime
from configuracao.config import Configuracao

path_db = Configuracao.config_path() + 'db/nbcliente.db'
db = SqliteDatabase(path_db)


class BaseModel(Model):
    class Meta:
        database = db


class Servidor(BaseModel):

    nome = CharField(max_length=40)
    host = CharField(max_length=100)
    porta = IntegerField()
    qtd_conexoes = IntegerField()

    def dict_servidor(self):

        json = {
            'nome': nome,
            'host': host,
            'porta': porta,
            'qtd_conexoes': qtd_conexoes
        }


class Backup(BaseModel):
Beispiel #9
0
 def __init__(self):
     config_server = Configuracao().get_server_config()
     self._os = Configuracao.os_system()
     self.config = config_server.config_ftp()
Beispiel #10
0
from peewee import *
import datetime
from configuracao.config import Configuracao

config = Configuracao()
path_db = config.get_path() + 'db/nbackup.db'
db = SqliteDatabase(path_db)

class BaseModel(Model):
    class Meta:
        database = db

class Backup(BaseModel):

    nome = CharField()
    tipo = CharField()
    backup_auto = CharField(null=True)
    tempo_execucao = FloatField(null=True)
    data_execucao = DateTimeField()
    #fonte = CharField()
    #path_origem = CharField()
    #path_destino = CharField()
    periodo = CharField()
    dia_semana = CharField()
    hora_execucao = DateTimeField()
    sc_pre_execucao = CharField(null=True)
    sc_pos_execucao = CharField(null=True)
    sc_backup = CharField(null=True)

    @staticmethod
    def is_backup_executado(nome, data_execucao, hora_execucao):
Beispiel #11
0
class Gestao_download:
    def __init__(self):
        self._loop_gestao = True
        self._thread_gestao = []
        self._download_em_espera = {}
        self._download_em_andamento = []
        self._download_finalizados = []
        self._iniciar_servicos()
        self._config = Configuracao()

    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))

    def get_downloads_executando(self):
        '''
            Quantos downloads estao executando
        '''
        return len(self._download_em_andamento)

    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))

    def _remove_download_finalizado(self):
        while self._loop_gestao:
            if len(self._download_em_andamento) > 0:
                tamanho_lista = len(self._download_em_andamento)
                for index in range(tamanho_lista):
                    thread = self._download_em_andamento[index]
                    if thread.is_executado():
                        self._download_finalizados.append(thread)
                        del self._download_em_andamento[index]

            time.sleep(10)

    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')

    def get_msg_em_espera(self):
        dicionario = None
        keys = list(self._download_em_espera.keys())
        selecao = keys[:1]

        for keys in selecao:
            thread = self._download_em_espera[keys]
            dicionario = {
                'servidor': thread.get_download_ftp().get_servidor(),
                'mensagem': thread.get_download_ftp().msg_abrir_ftp()
            }

        return dicionario

    def get_msg_finalizados(self):
        lista_msg = []

        for thread in self._download_finalizados:
            download_ftp = thread.get_download_ftp()
            mensagem = {
                'servidor': download_ftp.get_servidor(),
                'comando': download_ftp.msg_fechar_ftp()
            }

            lista_msg.append(mensagem)

        return lista_msg

    def remove_finalizado(self, nome_backup):
        for thread in self._download_finalizados:
            if nome_backup == thread.name:
                self._download_finalizados.remove(thread)

    def is_executando(self):
        return self._loop_gestao

    def parar_servicos(self):
        self._loop_gestao = False

    def is_download(self):
        is_espera = False
        if len(self._download_em_espera) > 0 or len(
                self._download_em_andamento) > 0 or len(
                    self._download_finalizados) > 0:
            is_espera = True

        return is_espera

    def is_servidos_exec(self):
        resposta = False
        for thread in self._thread_gestao:
            resposta = thread.is_alive()

        return resposta
Beispiel #12
0
from configuracao.config import Configuracao
from comunicacao.servidor import SelectorServer
from db.modelos import Persistir
from util.util import Log

Persistir.criar_db()
config = Configuracao()
config_servidor = config.get_servidor()
servidor = SelectorServer(config_servidor.host, config_servidor.porta,
                          config_servidor.qtd_conexoes)
servidor.serve_forever()
Log.info('iniciando servidor')
Beispiel #13
0
 def _reinicia_threads_controle(self):
     self._loop_controle = False
     time.sleep(65)
     self._config = Configuracao()
     self._iniciar_thread_controle()
     Log.info('reiniciando threads')
Beispiel #14
0
class Controle:
    def __init__(self):
        self._fim_conexao = 'fim'
        self._cmd_desligar = False
        self._mensage = ''
        self._data = bytes()
        self._config = Configuracao()
        self._gestao_ftp = Gestao_ftp()
        self.ftp = Ftp()
        self._bkp_conversor = Backup_dict()
        self._loop_controle = True
        self._thread_servico = {}
        self._thread_controle = {}
        self._threads_finalizados = {}
        self._threads_ftps = {}
        self._lista_bkp_executando = []
        self._verifica_servico = 'Verifica servicos'
        self._threads_ativos = 'Threads ativos'
        self._reg_serv_finalizados = 'Registra servicos'

        self._iniciar_thread_controle()

    def set_data(self, data):
        self._data = data
        self._decode_data(self._data)

    def _decode_data(self, data):
        if data:
            self._mensagem = data.decode('utf-8')

    def is_data(self):
        is_data = True
        if not self._data:
            is_data = False

        return is_data

    def processar_mensagem(self):
        data_json = json.loads(self._data)
        print('processar_mensagem:data_json: {}'.format(data_json))
        comando = data_json['comando']
        del data_json['comando']

        if comando == 'bkp_list':
            self._resposta = self._lista_backups()

        elif comando == 'update_lst_bkp':
            self._resposta = self._atualizar_config_bkps(data_json)

        elif comando == 'list_bkps_prontos':
            self._resposta = self._backups_prontos()

        elif comando == 'iniciar_ftp':
            self._resposta = self._iniciar_ftp(data_json)

        elif comando == 'fechar_ftp':
            self._resposta = self._fechar_ftp(data_json)

        elif comando == 'desligar':
            self._resposta = 'desligando'
            self._desligar_servidor()

        elif comando == 'reiniciar':
            self._resposta = 'reiniciando servicos'
            self._reinicia_threads_controle()

        elif comando == 'teste':
            self._resposta = 'ok'

        else:
            self._resposta = "comando_nao_encontrado"

        self._data = None

    def _atualizar_config_bkps(self, comando):
        Log.info('salvando configuracoes recebidas pelo ncliente')
        self._config.salvar_config_bkps(comando)
        resposta = {'resposta': 'salvar_bkps_ok'}

        return json.dumps(resposta)

    def _lista_backups(self):
        list_backup = self._config.get_backups()
        size_list = len(list_backup)
        list_str = []
        for i in range(size_list):
            list_str.append(list_backup[i].get_dict())

        backup_json = json.dumps(list_str)

        return backup_json

    def _add_backup(self, lista_para_add):
        pass

    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)

#    def _iniciar_ftp(self, comando):
#        print('iniciar_ftp:comando: {}'.format(comando))
#        if not self._gestao_ftp.is_rodando_ftp():
#            resposta = self._gestao_ftp.adicionar(comando['backup'])
#            Log.info('nao foi possivel iniciar ftp: {}, existe um rodando'.format(comando['backup']))
#        else:
#            resposta = {
#                'resposta':'ftp_rodando',
#                'conteudo':'ftp_ocupado'
#            }
#            Log.info('iniciando ftp {}.'.format(comando['backup']))
#
#        return json.dumps(resposta)

    def _iniciar_ftp(self, comando):
        self.ftp.iniciar()
        resposta = {'resposta': 'ftp_pronto_download'}
        Log.info('iniciando ftp {}.'.format(comando['backup']))

        return json.dumps(resposta)

#    def _fechar_ftp(self, comando):
#        is_desligado = self._gestao_ftp.desligar(comando['nome'])
#        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)

    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)

    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))

    def _reinicia_threads_controle(self):
        self._loop_controle = False
        time.sleep(65)
        self._config = Configuracao()
        self._iniciar_thread_controle()
        Log.info('reiniciando threads')

    def _desligar_servidor(self):
        self._loop_controle = False
        time.sleep(65)
        self._cmd_desligar = True
        Log.info('desligando servidor')

    def _verifica_servicos(self):
        dict_servicos = self._criar_servicos_diario()
        while self._loop_controle:
            lista_nome_servicos = list(dict_servicos.keys())
            for key in lista_nome_servicos:
                servico = dict_servicos[key]
                if servico.verifica_integridade_config():
                    if self._verifica_servico_executado(servico.get_backup()):
                        del dict_servicos[key]
                    elif servico.verifica_execucao():
                        self._add_servico_thread(servico)
                        del dict_servicos[key]
                else:
                    del dict_servicos[key]

            time.sleep(600)

    def _verifica_servico_executado(self, backup):
        '''
        Verrifica se o backup já foi executado no dia corrente
        Caso o servidor seja reiniciado nao executar os servicos de backup novamente
        '''
        resultado = False
        data = Conv_data.get_date_now()
        hora = Conv_data.str_to_time(backup.hora_execucao)
        bkp = Backup_db.is_backup_executado(backup.nome, data, hora)

        if bkp != None:
            resultado = True

        return resultado

    def _add_servico_thread(self, serv):
        thread = ServicoThread(serv)
        self._thread_servico[serv.get_nome()] = thread
        thread.set_inicio_thread(time.time())
        thread.start()
        print('thread iniciado: {}'.format(thread.get_nome()))

    def _verifica_thread_ativos(self):
        while self._loop_controle:
            lista_thread_ativos = list(self._thread_servico.keys())
            for key in lista_thread_ativos:
                thread = self._thread_servico.get(key)
                if not thread.is_alive():
                    print('backup finalizado: {}'.format(thread.get_nome()))
                    thread.set_final_thread(time.time())
                    self._threads_finalizados[thread.get_nome()] = thread
                    del self._thread_servico[key]

            time.sleep(60)

    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)

    def _criar_servicos_diario(self):
        lista_backup = self._config.get_backups()
        self._dict_servicos = {}
        for backup in lista_backup:
            if backup.periodo == 'diario':
                servico_diario = Servico_diario(backup)
                self._dict_servicos[backup.nome] = servico_diario

        return self._dict_servicos

    def get_shutdown(self):
        return 'desligando'.encode('utf-8')

    def get_running(self):
        return self._cmd_desligar

    def enviar_resposta(self):
        print('self._resposta: {}'.format(self._resposta))
        return self._resposta.encode('utf-8')
Beispiel #15
0
#!/usr/bin/env python3
from registro.registro import Registro
from configuracao.config import Configuracao
from servidor.server import SelectorServer
from util.util import Log

Registro.criar_banco()
config = Configuracao()
config_server = config.get_server_config()

server = SelectorServer(config_server.host, config_server.porta, config_server.qtd_conexoes)
server.run_server()
Log.info('iniciando aplicacao')
Beispiel #16
0
from peewee import *
import datetime
from util.util import Log
from configuracao.config import Configuracao
from util.util import Log

config = Configuracao()
path = config.config_path() + 'db/dbcliente.db'
db = SqliteDatabase(path)

class Persistir:

    @staticmethod
    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')

    @staticmethod
    def criar_db():
        try:
            arquivo = open(path)
            arquivo.close()
        except FileNotFoundError:
            Transacoes.create_table()
            Log.info('criando banco de dados')
Beispiel #17
0
from configuracao.config import Configuracao
from comunicacao.nbservidor import ConexaoThread
import json
import time

config = Configuracao()
servidor = config.get_servidores()[0]
lista_bkps = {'comando': 'list_bkps_prontos'}

thread1 = ConexaoThread(servidor, lista_bkps)
thread1.start()

iniciar_ftp = {
    'comando': 'iniciar_ftp',
    'backup': {
        'path': '/home/marcelo/backup/backup1',
        'arquivo': 'backup_1_terca_0745.zip',
        'nome': 'backup_1'
    }
}
thread2 = ConexaoThread(servidor, iniciar_ftp)
thread2.start()

loop = True

while loop:
    if not thread1.is_alive():
        print('if 1')
        conteudo = thread1.get_conteudo()
        print('conteudo: {}'.format(conteudo))
Beispiel #18
0
class ControleApp:

    TIPO_ERRO = 'erro'
    TIPO_SUCESSO = 'sucesso'

    def __init__(self):
        self._config = Configuracao()
        self._gestao_d = Gestao_download()
        self._loop_controle = True
        self._thread_conexao_servidores = []
        self._thread_controle = {}
        self._iniciar_threads()

    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))

    def _reiniciar_threads(self):
        Log.info('reiniciando thread')
        self._loop_controle = False
        time.sleep(60)
        self._iniciar_threads()

    def set_data(self, data):
        self._data = data
        self._decode_data(self._data)

    def _decode_data(self, data):
        if data:
            self._mensagem = data.decode('utf-8')

    def is_data(self):
        is_data = True
        if not self._data:
            is_data = False

        return is_data

    def processar_mensagem(self):
        data_json = json.loads(self._data.decode('utf-8'))
        print('data_json: {}'.format(data_json))
        comando = data_json['comando']
        del data_json['comando']

        if comando == 'lst_bkps_update':
            self._atualizar_lst_bkps(data_json)
            self._atualizar_servidores(data_json)
        else:
            print('comando nao encontrado')

    def _atualizar_lst_bkps(self, data_json):

        if self._config.salvar_servidores(data_json):
            self._resposta = self._criar_resposta(TIPO_SUCESSO, 'sucesso')
        else:
            self._resposta = self._criar_resposta(TIPO_ERRO, 'erro')

    def _atualizar_servidores(self, data_json):
        keys = data_json.keys()
        for key in keys:
            str_servidor = data_json[key]
            servidor = Servidor(str_servidor)
            mensagem = {
                'comando': 'update_lst_bkp',
                'backups': servidor.backups
            }

            self._enviar_mensagem_servidor(servidor, mensagem)

    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')

    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)

    def _monitor_conexao_servidores(self):
        while self._loop_controle:
            range_lista = len(self._thread_conexao_servidores)
            for thread in self._thread_conexao_servidores:
                if thread.is_comunicacao():
                    self._tratamento_resposta(thread.get_resposta(),
                                              thread.get_conteudo(),
                                              thread.get_servidor())
                    self._thread_conexao_servidores.remove(thread)
            time.sleep(5)

    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()

    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'])

    def _monitor_execucao_download(self):
        while self._loop_controle:
            if self._gestao_d.get_downloads_executando() == 0:
                comando = self._gestao_d.get_msg_em_espera()
                if comando != None:
                    servidor = comando['servidor']
                    mensagem = comando['mensagem']
                    self._enviar_mensagem_servidor(servidor, mensagem)
            time.sleep(90)

    def _adicionar_download_fila(self, servidor, conteudo):
        self._gestao_d.adicionar(servidor, conteudo)

    def _monitor_download_concluido(self):
        while self._loop_controle:
            for mensagem in self._gestao_d.get_msg_finalizados():
                self._enviar_mensagem_servidor(mensagem['servidor'],
                                               mensagem['comando'])
                self._gestao_d.remove_finalizado(mensagem['comando']['nome'])

            time.sleep(5)

    def _byte_to_json(self):

        return json.loads(self._data.decode('utf-8'))

    def _criar_resposta(self, tipo, mensagem):
        dict = {tipo: mensagem}

        return json.dumps(dict)

    def enviar_resposta(self):
        return self._resposta.encode('utf-8')