示例#1
0
文件: noe.py 项目: elipe-pereira/noe
def main():
    main_file_exec_path = os.path.realpath(sys.argv[0])
    working_dir = os.path.dirname(main_file_exec_path)
    config_file = working_dir + "/config/noe/noe.conf"

    config = Config(config_file)
    backup = Backup()
    mount = Mount()
    command_exec = Services()
    log = Log()
    mail = Mail()

    sections = config.get_sections_config()
    log_file = log.get_log_file()

    os.system("echo > {0}".format(log_file))

    local_sync_onedrive_flag = 0
    send_file_onedrive_flag = 0

    log.log("Iniciando backup")

    config.set_enable_stop_services('DEFAULT', 'enable_stop_services')
    config.set_command_stop('DEFAULT', 'command_services_stop')
    config.set_command_start('DEFAULT', 'command_services_start')
    config.set_server_name('DEFAULT', 'server_name')

    enable_stop_services = config.get_enable_stop_services()
    command_stop = config.get_command_stop().split(',')
    command_start = config.get_command_start().split(',')

    if enable_stop_services == "yes":
        log.log("Parando serviços")
        for command in command_stop:
            command_exec.stop_service(command)

    for section in sections:
        if section == 'DEFAULT':
            continue

        log.log("Executando backup: " + section)
        config.set_type_config(section, 'type_backup')
        config.set_folder_config(section, 'folder_backup')
        config.set_folder_dest_config(section, 'folder_dest')
        config.set_time_keep(section, 'time_keep')
        config.set_remote_share_config(section, 'remote_share')
        config.set_host_config(section, 'host')
        config.set_user_config(section, 'user')
        config.set_password_config(section, 'password')
        config.set_database(section, 'database')
        config.set_bucket_name_config(section, 'bucket_name')
        config.set_access_key_config(section, 'access_key')
        config.set_secret_access_key(section, 'secret_access_key')
        config.set_file_name_config(section, date.today())
        config.set_exclude_list_file(section, 'exclude_list_file')

        type_backup = config.get_type_config()
        folder_backup = config.get_folder_config()
        folder_dest = config.get_folder_dest_config()
        time_keep = config.get_time_keep()
        remote_share = config.get_remote_share_config()
        host = config.get_host_config()
        user = config.get_user_config()
        password = config.get_password_config()
        database = config.get_database()
        bucket_name = config.get_bucket_name_config()
        access_key = config.get_access_key_config()
        secret_access_key = config.get_secret_access_key()
        filename = config.get_file_name_config()
        exclude_list_file = config.get_exclude_list_file()

        if not os.path.isdir(folder_dest):
            os.mkdir(folder_dest)

        os.system("tmpreaper {0} {1}".format(time_keep, folder_dest))

        if type_backup == "local":
            log.log("Backup do tipo local")
            log.log("Executando cópia e compressão dos arquivos")
            backup.run(exclude_list_file, folder_dest, filename, folder_backup)
            log.log("Fim do backup " + section)

        elif type_backup == "local-sync-onedrive":
            log.log("Backup do tipo local-sync-onedrive")
            log.log("Executando a cópia e compressão dos arquivos")
            backup.run(exclude_list_file, folder_dest, filename, folder_backup)
            log.log("Fim do backup " + section)

            local_sync_onedrive_flag = 1

        elif type_backup == "send-file-onedrive":
            log.log("Backup do tipo send-file-onedrive")
            backup.run(exclude_list_file, folder_dest, filename, folder_backup)
            log.log("Fim do backup " + section)

            send_file_onedrive_flag = 1

        elif type_backup == "samba":
            log.log("Executando backup do tipo samba")
            log.log("Montando compartilhamento")
            mount.mountSamba(host, remote_share, folder_dest, user, password)
            log.log("Executando cópia e compressão dos arquivos")
            backup.run(exclude_list_file, folder_dest, filename, folder_backup)
            log.log("Fim do backup " + section)
            log.log("Desmontando compartilhamento")
            mount.umount(folder_dest)

        elif type_backup == "bucket":
            tmp_file = "/tmp/.passwd-s3fs"
            log.log("Montando o bucket")
            mount.mountBucket(access_key, secret_access_key, tmp_file, bucket_name, folder_dest)
            log.log("Executando a cópia e compactação dos arquivos")
            backup.run(exclude_list_file, folder_dest, filename, folder_backup)
            log.log("Demontando bucket")
            mount.umount(folder_dest)

        elif type_backup == "mysql":
            log.log("Executando backup do banco de dados")
            os.system("mysqldump -u {0} -p{1} {2} -h {3} > {4}/{5}.sql".format(
                user,
                password,
                database,
                host,
                folder_dest,
                filename
            ))
            os.system("tar -zcvf {0}/{1}.tar.gz {0}/{1}.sql".format(folder_dest, filename))
            os.system("rm {0}/{1}.sql".format(folder_dest, filename))
            log.log("Backup do banco de dados concluído")

        else:
            print("Tipo de backup não válido")

    if enable_stop_services == "yes":
        log.log("Subindo serviços")
        for command in command_start:
            command_exec.start_service(command)

    if local_sync_onedrive_flag == 1:
        log.log("Sincronizando pasta de backup com a nuvem")
        folder_sync_onedrive = os.path.basename(folder_dest)
        os.system("onedrive --synchronize --upload-only --no-remote-delete")
        os.system("onedrive --synchronize --single-directory '{0}'".format(folder_sync_onedrive))
        log.log("Envio concluído")

    elif send_file_onedrive_flag == 1:
        log.log("Enviando backup via upload para o onedrive")
        os.system("onedrive --synchronize --upload-only --no-remote-delete")
        log.log("Envio concluído")


    config.set_mail_address('DEFAULT', 'mail_address')
    mail_address = config.get_mail_address()
    server_name = config.get_server_name()

    if mail_address:
        log.log("Enviando E-mail")
        mail.send("Backup NOE - {0}".format(server_name), mail_address)