Ejemplo n.º 1
0
def get_list_file_local(path):
    ret = dict()
    try:
        # path = 'c:\\pytest\\'
        files = []
        # r=root, d=directories, f = files
        for r, d, f in os.walk(path):
            for file in f:
                files.append({
                    'name': os.path.join(r, file).replace(path, '', 1),
                    'last_modified': time.mktime(datetime.strptime(
                        time.strftime('%d/%m/%Y', time.gmtime(os.path.getmtime(os.path.join(r, file)))),
                        "%d/%m/%Y").timetuple()),
                    'create_time': time.mktime(datetime.strptime(
                        time.strftime('%d/%m/%Y', time.gmtime(os.path.getctime(os.path.join(r, file)))),
                        "%d/%m/%Y").timetuple()),
                    'size': os.path.getsize(os.path.join(r, file)),
                })
                print(files)
        ret['status'] = True
        ret['data'] = files
    except Exception as e:
        save_log_agent(e, 'get_list_file_local(' + path + ')', 0)
        ret['status'] = False
        ret['data'] = []
    return ret
Ejemplo n.º 2
0
def delete_file_blob(connection_string,source_container_name,blob_name):
    try:
        # Create client
        blob_service_client = BlobServiceClient.from_connection_string(connection_string)
        # # delete blob
        container_client = blob_service_client.get_container_client(source_container_name)
        # await container_client.delete_blobs(blob_name)
        container_client.delete_blobs(blob_name)
    except Exception as e:
        save_log_agent(e, 'delete_file_blob(' + connection_string + ','+source_container_name+','+blob_name+')', 0)
    return
Ejemplo n.º 3
0
def upload_file_to_blob(path_file,file_name, container_name, connect_string):
    ret = dict()
    try:
        blob_service_client = BlobServiceClient.from_connection_string(connect_string)
        blob_client = blob_service_client.get_blob_client(container=container_name, blob=file_name)
        with open(path_file, "rb") as data:
            blob_client.upload_blob(data, blob_type="BlockBlob", length=None, metadata=None, overwrite=True)
        ret['status'] = True
    except Exception as e:
        save_log_agent(e, 'upload_file_to_blob('+path_file + ',' + file_name + ',' + container_name +','+connect_string +')',0)
        ret['status'] = False
    return ret
Ejemplo n.º 4
0
def get_list_name_file_cloud(list_cloud):
    ret = dict()
    try:
        files = []
        for blob in list_cloud:
            files.append(blob['name'])
        ret['status'] = True
        ret['data'] = files
    except Exception as e:
        save_log_agent( e, 'get_list_name_file_cloud(' + list_cloud + ')', 0)
        ret['status'] = True
        ret['data'] = []
    return ret
Ejemplo n.º 5
0
def move_blob_to_lastversion(connection_string, source_container_name, blob_name):
    try:
        # Create client
        blob_service_client = BlobServiceClient.from_connection_string(connection_string)
        # Create blob client for source blob
        source_blob = BlobClient(
            blob_service_client.url,
            container_name=source_container_name,
            blob_name=blob_name,
        )
        # Create new blob and start copy operation.
        new_blob = blob_service_client.get_blob_client(source_container_name, '.LastVersion/' + blob_name)
        new_blob.start_copy_from_url(source_blob.url)
        return True
    except Exception as e:
        save_log_agent(e, 'move_blob_to_lastversion(' +connection_string+','+source_container_name +','+blob_name+ ')', 0)
        return False
Ejemplo n.º 6
0
def get_list_file_cloud(connect_string, container_name):
    ret = dict()
    try:
        files = []
        blob_service_client = BlobServiceClient.from_connection_string(connect_string)
        container_client = blob_service_client.get_container_client(container_name)
        blob_list = container_client.list_blobs()
        for blob in blob_list:
            if blob['name'].split('/')[0] != '.LastVersion':
                files.append({
                    'name': blob.name.replace('/', '\\'),
                    'last_modified': blob.last_modified.timestamp(),
                    'create_time': blob.creation_time.timestamp(),
                    'size': blob.size,
                })
        ret['status'] = True
        ret['data'] = files
    except Exception as e:
        save_log_agent(e, 'get_list_file_cloud('+connect_string+','+container_name+')', 0)
        ret['status'] = True
        ret['data'] = []
    return ret
Ejemplo n.º 7
0
def is_allow(str_timer):
    try:
        # timer_array = str_timer.Split('|')
        timer_array = str_timer.split('|')
        day_of_week = timer_array[0].split(',')
        today_of_week = int(datetime.today().weekday())
        print(today_of_week)
        print(day_of_week)
        print(timer_array)
        if str(today_of_week) in day_of_week:
            list_hour = timer_array[1].split(',')
            print(list_hour)
            for item in list_hour:
                now = datetime.now()
                hour = item.split(':')[0]
                minute = item.split(':')[1]
                print(now.hour)
                print(now.minute)
                if int(hour) == now.hour and int(minute) == now.minute:
                    return True
    except Exception as e:
        save_log_agent( e,'is_allow(' + str_timer +')',0)
        print(e)
    return False
Ejemplo n.º 8
0
def main_process():
    print('start service')
    logger.info("main_process")
    while True:
        # rets = is_allow('1,2,3,4,5,6,0|17:28,17:29,17:30,17:31')
        try:
            check_time_ex = get_time_ex()
            if check_time_ex == 'false':
                continue
            list_backup = get_list_backup()
            # loop = asyncio.get_event_loop()
            # tasks = [
            if list_backup[
                    'status'] == True and list_backup['data']['countdata'] > 0:
                print('start job')
                for item in list_backup['data']['data']:
                    rets = is_allow(item['time'])
                    rets = True
                    if rets == True:
                        list_file_upload = []
                        detail_connection = get_detail_connecttion(
                            item['id_connect_bytesave'])
                        list_file_cloud = get_list_file_cloud(
                            detail_connection['data']['data'][0]
                            ['metric_service_information_connect'],
                            item['container_name'])
                        list_name_file_cloud = get_list_name_file_cloud(
                            list_file_cloud['data'])
                        if item['is_folder'] == 1:  # local path là folder
                            list_file_local = get_list_file_local(
                                item['local_path'])
                            for item_file_local in list_file_local['data']:
                                if len(
                                        item_file_local['name']
                                ) > 10 and item_file_local['name'].split('\\')[
                                        len(item_file_local['name'].split(
                                            '\\')) - 1][0:10] == '[DelCloud]':
                                    continue
                                else:
                                    # Kiểm tra xem file đã có trên Blob hay chưa?
                                    is_exist_file_in_cloud = item_file_local[
                                        'name'] in list_name_file_cloud['data']
                                    if is_exist_file_in_cloud == True:  # Đã có file trên Blob
                                        enumber_rate = list_name_file_cloud[
                                            'data'].index(
                                                item_file_local['name'])
                                        file_cloud = list_file_cloud['data'][
                                            enumber_rate]
                                        # Kiểm tra xem có sự thay đổi của file mới hay không?
                                        if file_cloud[
                                                'size'] != item_file_local[
                                                    'size']:
                                            # loop2 = asyncio.get_event_loop()
                                            # tasks2 = [
                                            # Chuyển file cũ sang folder .LastVersion khi file backup lên đã có trên Blob
                                            move_blob_to_lastversion(
                                                detail_connection['data']
                                                ['data'][0]
                                                ['metric_service_information_connect'],
                                                item['container_name'],
                                                item_file_local['name']),
                                            # Backup file lên Blob
                                            upload_file_to_blob(
                                                item['local_path'] +
                                                item_file_local['name'],
                                                item_file_local['name'],
                                                item['container_name'],
                                                detail_connection['data']
                                                ['data'][0]
                                                ['metric_service_information_connect']
                                            )
                                            # ]
                                            # loop2.run_until_complete(asyncio.wait(tasks2))
                                            # loop2.close()
                                            list_file_upload.append(
                                                item_file_local['name'])
                                        else:
                                            if item['time_delete'] > 0:
                                                if file_cloud[
                                                        'last_modified'] + (
                                                            item['time_delete']
                                                            * 86400
                                                        ) < datetime.now(
                                                        ).timestamp():
                                                    rename_file(
                                                        path_file=item[
                                                            'local_path'],
                                                        file_name=
                                                        item_file_local['name']
                                                    )  # rename file local when delete file in cloud
                                                    delete_file_blob(
                                                        detail_connection[
                                                            'data']['data'][0]
                                                        ['metric_service_information_connect'],
                                                        item['container_name'],
                                                        item_file_local['name']
                                                    )
                                                else:
                                                    a = 0
                                            else:
                                                a = 0
                                    else:  # Chưa có file trên Blob thì Upload lên Blob luôn
                                        # loop2 = asyncio.get_event_loop()
                                        # tasks2 = [
                                        upload_file_to_blob(
                                            item['local_path'] +
                                            item_file_local['name'],
                                            item_file_local['name'],
                                            item['container_name'],
                                            detail_connection['data']['data']
                                            [0]
                                            ['metric_service_information_connect']
                                        )
                                        # ]
                                        # loop2.run_until_complete(asyncio.wait(tasks2))
                                        # loop2.close()
                                        list_file_upload.append(
                                            item_file_local['name'])
                            if list_file_upload.__len__() > 0:
                                send_mail(item['is_folder'], item['name'],
                                          list_file_upload.__len__(),
                                          item['local_path'], list_file_upload,
                                          item['email'])

                        else:  # local path is file
                            file_name = item['local_path'].split('\\')[
                                len(item['local_path'].split('\\')) - 1]
                            # Kiểm tra xem file đã có trên Blob hay chưa?
                            is_exist_file_in_cloud = file_name in list_name_file_cloud[
                                'data']
                            size_file_local = os.path.getsize(
                                item['local_path'])
                            if is_exist_file_in_cloud == True:  # FIle đã có trên Blob
                                enumber_rate = list_name_file_cloud[
                                    'data'].index(file_name)
                                file_cloud = list_file_cloud['data'][
                                    enumber_rate]
                                if file_cloud['size'] != size_file_local:
                                    # loop2 = asyncio.get_event_loop()
                                    # tasks2 = [
                                    # Chuyển file cũ sang folder .LastVersion khi file backup lên đã có trên Blob
                                    move_blob_to_lastversion(
                                        detail_connection['data']['data'][0]
                                        ['metric_service_information_connect'],
                                        item['container_name'], file_name),
                                    upload_file_to_blob(
                                        item['local_path'], file_name,
                                        item['container_name'],
                                        detail_connection['data']['data'][0]
                                        ['metric_service_information_connect']
                                    ),
                                    send_mail(item['is_folder'], item['name'],
                                              '1', item['local_path'], [],
                                              item['email'])
                                # ]
                                # loop2.run_until_complete(asyncio.wait(tasks2))
                                # loop2.close()

                                else:
                                    if item['time_delete'] > 0:
                                        if file_cloud['last_modified'] + (
                                                item['time_delete'] * 86400
                                        ) < datetime.now().timestamp():
                                            # loop2 = asyncio.get_event_loop()
                                            # tasks2 = [
                                            rename_file(
                                                path_file=item['local_path'],
                                                file_name=item_file_local[
                                                    'name']
                                            ),  # rename file local when delete file in cloud
                                            delete_file_blob(
                                                detail_connection['data']
                                                ['data'][0]
                                                ['metric_service_information_connect'],
                                                item['container_name'],
                                                item['local_path'])
                                        # ]
                                        # loop2.run_until_complete(asyncio.wait(tasks2))
                                        # loop2.close()

                            else:
                                # loop2 = asyncio.get_event_loop()
                                # tasks2 = [
                                upload_file_to_blob(
                                    path_file=item['local_path'],
                                    file_name=file_name,
                                    container_name=item['container_name'],
                                    connect_string=detail_connection['data']
                                    ['data'][0]
                                    ['metric_service_information_connect']),
                                send_mail(item['is_folder'], item['name'], '1',
                                          item['local_path'], [],
                                          item['email'])
                            # ]
                            # loop2.run_until_complete(asyncio.wait(tasks2))
                            # loop2.close()

                            # if item['time_delete'] > 0:
                            #     if item['time_create_at'] + (
                            #             item['time_delete'] * 86400) < datetime.now().timestamp():
                            #         rename_file(path_file=item['local_path'], file_name=item_file_local[
                            #             'name'])  # rename file local when delete file in cloud
                            #         delete_file_blob(detail_connection['data']['data'][0][
                            #                              'metric_service_information_connect'],
                            #                          item['container_name'], item['local_path'])
                        list_file_cloud_in_LastVersion = get_list_file_cloud_in_LastVersion(
                            connect_string=detail_connection['data']['data'][0]
                            ['metric_service_information_connect'],
                            container_name=item['container_name'])
                        if item['time_delete_file_in_LastVersion'] > 0:
                            for item_file in list_file_cloud_in_LastVersion[
                                    'data']:
                                if (item_file['last_modified'] +
                                    (item['time_delete_file_in_LastVersion'] *
                                     86400)) < datetime.now().timestamp():
                                    delete_file_blob(
                                        detail_connection['data']['data'][0]
                                        ['metric_service_information_connect'],
                                        item['container_name'],
                                        item_file['name'])
                    else:
                        print('Job chưa đến thời gian thực hiện!')
        except Exception as e:
            save_log_agent(e, 'main()', 0)
            continue

    # ]
    # loop.run_until_complete(asyncio.wait(tasks))
    # loop.close()

    print('khong phai luc nay!')