Пример #1
0
def report_server_status():
    init_server_status_bucket()
    configs = get_server_status_bucket_configs()
    bucket = configs.get('bucket')
    if not bucket:
        return
    system_status = get_system_status(includes_processes=True,
                                      mini=True,
                                      extra_disk_path='/mt/web/data')
    create_record(bucket, record_data=system_status)
Пример #2
0
def update_record_directly(bucket, record):
    # 通过 record 来更新 record,不需要额外的编译
    # 如果有 path 路径,不要去更改它
    if not isinstance(record, dict):
        return False
    if not has_bucket(bucket):
        return False
    record['_auto_clean_bucket'] = True

    # 创建新的 record
    create_record(bucket, record)

    object_id = record.get("_id")
    if object_id:
        update_path_related_when_record_changed(bucket, object_id, record)

    return True
Пример #3
0
    def upload_file(self):
        path = self.raw_json_data.get('path')
        if not path:
            return json_with_status_code(400, 'path required')

        accepted = False
        info = storage.accept_upload_file_from_client(
            self.bucket,
            self.raw_json_data,
            get_raw_content_func=get_file_content_in_request)
        if info == 'ok':
            accepted = True

        if accepted:
            # 没有路径对应的 record,直接进行上传的行为, 创建一个 record
            record_id = get_record_id_by_path(self.bucket, path)
            if not record_id:
                create_record(self.bucket, record_data=self.raw_json_data)
            return json_with_status_code(200, 'ok')
        else:
            return json_with_status_code(400, info)
Пример #4
0
def sync_file_by_server_side(bucket,
                             relative_path,
                             content=None,
                             is_dir=False,
                             is_deleted=False,
                             return_record=False,
                             real_relative_path=None):
    utc_offset = get_bucket_utc_offset(bucket=bucket)
    data = get_compiler_data_directly(relative_path,
                                      content=content,
                                      is_dir=is_dir,
                                      is_deleted=is_deleted,
                                      real_relative_path=real_relative_path,
                                      utc_offset=utc_offset)
    if content:
        data["size"] = len(content)
        if not data["version"]:
            data["version"] = get_md5(content)
    file_version = data.get("version")
    if file_version:
        old_record = get_record_by_path(bucket=bucket,
                                        path=relative_path,
                                        force_dict=True)
        if old_record:
            old_file_version = old_record.get("version")
            if file_version == old_file_version:
                # 路径 & 内容一致,不做处理
                return
    if not data:
        result = 'no data to create a record'
    else:
        result = create_record(bucket=bucket,
                               record_data=data,
                               file_content=content,
                               return_record=return_record)
    # error_info/ None / record_data(dict)
    if return_record and not isinstance(result, dict):
        return None
    else:
        return result
Пример #5
0
    def create_record(self):
        # the default action
        version = self.raw_json_data.get("version")
        path = self.raw_json_data.get("path")
        if path and path.endswith(".md"):
            pass
        if version and path:
            old_record = get_record_by_path(bucket=self.bucket, path=path)
            if old_record and old_record.get("version") == version:
                if DEBUG:
                    print("same file for %s" % path)
                return json_with_status_code(200, 'ok')
        elif path and self.raw_json_data.get(
                "is_dir") and not self.raw_json_data.get("is_deleted", False):
            # folder 不需要重新处理
            old_record = get_record_by_path(bucket=self.bucket, path=path)
            if old_record:
                return json_with_status_code(200, 'ok')

        error_info = create_record(self.bucket, self.raw_data)
        if error_info:
            return json_with_status_code(400, error_info)
        else:
            # record 已经创建成功了:
            # 1. visits & comments 这些动态的数据要到数据库里
            # 2. 把 private_key_md5 进行存储,可以对一些数据进行加密、解密
            json_data = self.raw_json_data
            if isinstance(json_data, dict):
                record_type = json_data.get('_type')
                path = json_data.get('path')
                if not isinstance(path, string_types):
                    path = ''
                path = path.strip('/').lower()
                if record_type == 'visits' and path == '_data/visits.csv':
                    load_all_posts_visits_from_csv(self.bucket, json_data)

            return json_with_status_code(200, 'ok')