Esempio n. 1
0
print_result(refresh_url_result)

# 刷新目录需要联系七牛技术支持开通权限
print('刷新目录')
refresh_dir_result = cdn_manager.refresh_dirs(dirs)
print_result(refresh_dir_result)

# 同时刷新文件和目录
print('刷新文件和目录')
refresh_all_result = cdn_manager.refresh_urls_and_dirs(urls, dirs)
print_result(refresh_all_result)
"""预取文件"""

# 预取文件链接
print('预取文件链接')
prefetch_url_result = cdn_manager.prefetch_urls(urls)
print_result(prefetch_url_result)
"""获取带宽和流量数据"""

domains = ['if-pbl.qiniudn.com', 'qdisk.qiniudn.com']

start_date = '2017-01-01'
end_date = '2017-01-02'

# 5min or hour or day
granularity = 'day'

# 获取带宽数据
print('获取带宽数据')
bandwidth_data = cdn_manager.get_bandwidth_data(domains, start_date, end_date,
                                                granularity)
Esempio n. 2
0
# -*- coding: utf-8 -*-
"""
预取资源到cdn节点

https://developer.qiniu.com/fusion/api/1227/file-prefetching
"""

import qiniu
from qiniu import CdnManager

# 账户ak,sk
access_key = '...'
secret_key = '...'

auth = qiniu.Auth(access_key=access_key, secret_key=secret_key)
cdn_manager = CdnManager(auth)

# 需要刷新的文件链接
urls = ['http://aaa.example.com/doc/img/', 'http://bbb.example.com/doc/video/']

# 刷新链接
refresh_dir_result = cdn_manager.prefetch_urls(urls)
Esempio n. 3
0
# 刷新目录需要联系七牛技术支持开通权限
print('刷新目录')
refresh_dir_result = cdn_manager.refresh_dirs(dirs)
print_result(refresh_dir_result)

# 同时刷新文件和目录
print('刷新文件和目录')
refresh_all_result = cdn_manager.refresh_urls_and_dirs(urls, dirs)
print_result(refresh_all_result)

"""预取文件"""

# 预取文件链接
print('预取文件链接')
prefetch_url_result = cdn_manager.prefetch_urls(urls)
print_result(prefetch_url_result)

"""获取带宽和流量数据"""

domains = ['if-pbl.qiniudn.com', 'qdisk.qiniudn.com']

start_date = '2017-01-01'
end_date = '2017-01-02'

# 5min or hour or day
granularity = 'day'

# 获取带宽数据
print('获取带宽数据')
bandwidth_data = cdn_manager.get_bandwidth_data(domains, start_date, end_date, granularity)
Esempio n. 4
0
# -*- coding: utf-8 -*-

"""
预取资源到cdn节点

https://developer.qiniu.com/fusion/api/1227/file-prefetching
"""


import qiniu
from qiniu import CdnManager


# 账户ak,sk
access_key = '...'
secret_key = '...'

auth = qiniu.Auth(access_key=access_key, secret_key=secret_key)
cdn_manager = CdnManager(auth)

# 需要刷新的文件链接
urls = [
    'http://aaa.example.com/doc/img/',
    'http://bbb.example.com/doc/video/'
]


# 刷新链接
refresh_dir_result = cdn_manager.prefetch_urls(urls)
Esempio n. 5
0
class QN(CDN):
    def __init__(self, **kwargs):
        CDN.__init__(self, **kwargs)
        self.auth = Auth(self.ak, self.sk)
        self.bucket_mgr = BucketManager(self.auth)
        self.cdn_mgr = CdnManager(self.auth)
        self.old_etags = dict()

    def _pull(self, bucket):
        try:
            eof = False
            marker = None
            while not eof:
                if marker is not None:
                    log.debug("more files on CDN")
                ret, eof, info = self.bucket_mgr.list(bucket,
                                                      prefix=None,
                                                      marker=marker,
                                                      limit=None,
                                                      delimiter=None)
                marker = ret.get("marker")
                self._process_data(ret)
        except Exception as e:
            log.error("QN:_pull error: {error}".format(error=str(e)))
            raise Exception(
                "Distribute_QN_pull_error: {error}".format(error=str(e)))
        log.debug("{d} items on QINIU CDN".format(d=len(self.old_etags)))

    def _process_data(self, ret):
        try:
            if ret.get("items") is None:
                return
            items = ret.get("items")
            for dic in items:
                rname = dic["key"]
                if rname == "":
                    log.warning("illegal name: null")
                    continue
                self.online_files.add(self.to_unicode(rname))
                self.old_etags[rname] = dic["hash"]
        except Exception as e:
            log.error("QN:_process_data error: {error}".format(error=str(e)))
            raise Exception("Distribute_QN_process_data_error: {error}".format(
                error=str(e)))

    def _set_file_info(self, parent, rpath, bucket, rname):
        return QN_FileInfo(parent, rpath, bucket, rname)

    def _filter_push_file(self, fi):
        # log.debug("filter_push_file {fi}".format(fi=fi))
        if fi.rname in self.old_etags:
            if self.kwargs.get("check_prefix_filter"):
                fb, fn = os.path.split(fi.rname)
                if fn.startswith(self.kwargs.get("check_prefix_filter")):
                    return not fi.etag == self.old_etags[fi.rname]
                else:
                    if self.kwargs.get("no_check_overwrite"):
                        return True
                    if self.kwargs.get("no_check_no_overwrite"):
                        return False
                    return False
            else:
                if self.kwargs.get("no_check_overwrite"):
                    return True
                if self.kwargs.get("no_check_no_overwrite"):
                    return False
                return not fi.etag == self.old_etags[fi.rname]
        return True

    def _push(self, fi):
        try:
            token = self.auth.upload_token(fi.bucket, fi.rname, 7200)
            ret, info = put_file(token, fi.rname, fi.rpath, check_crc=True)
            log.debug("{ret} check".format(ret=ret, info=info))
            if ret is None:
                log.error("QN:_push: {file} error".format(file=fi.rpath))
                raise Exception("QN:_push: {file} error".format(file=fi.rpath))
            if ret["key"] != fi.rname or ret["hash"] != fi.etag:
                log.error("QN:_push check: {file} error".format(file=fi.rpath))
                raise Exception(
                    "QN:_push check: {file} error".format(file=fi.rpath))
            log.info("{fi} distributed".format(fi=fi))
            self.upload_files.add(fi.rname)
        except Exception as e:
            log.error("QN:_push error: {error}".format(error=str(e)))
            raise Exception(
                "Distribute_QN_push_error :{error}".format(error=str(e)))

    def _refresh(self, fi):
        try:
            urls = [os.path.join(self.cdn_uri, fi.rpath)]
            ret, info = self.cdn_mgr.refresh_urls(urls)
            if ret["code"] == 200:
                log.info("QN:_refresh success:{0}--{1}".format(
                    ret["urlSurplusDay"], ret["requestId"]))
            else:
                log.warn("QN:_refresh failed:{0}--{1}".format(
                    ret["code"], ret["error"]))
        except Exception as e:
            log.error("QN:_refresh error: {error}".format(error=str(e)))
            raise Exception(
                "Distribute_QN_refresh_error :{error}".format(error=str(e)))

    def _prefetch(self, fi):
        try:
            urls = [os.path.join(self.cdn_uri, fi.rpath)]
            ret, info = self.cdn_mgr.prefetch_urls(urls)
            if ret["code"] == 200:
                log.info("QN:_prefetch success:{0}--{1}".format(
                    ret["urlSurplusDay"], ret["requestId"]))
            else:
                log.warn("QN:_prefetch failed:{0}--{1}".format(
                    ret["code"], ret["error"]))
        except Exception as e:
            log.error("QN:_prefetch error: {error}".format(error=str(e)))
            raise Exception(
                "Distribute_QN_prefetch_error :{error}".format(error=str(e)))

    def _filter_delete_files(self, rname):
        fb, fn = os.path.split(rname)
        if self.kwargs.get("delete_filter_dir") and fb.startswith(
                self.kwargs.get("delete_filter_dir")):
            return True
        if self.kwargs.get("delete_filter") and fn.startswith(
                self.kwargs.get("delete_filter")):
            return True
        if fn.startswith(".") or " " in fn or fb.startswith("/"):
            return True
        return False

    def _delete_online_files(self, fi):
        self.bucket_mgr.delete(self.bucket, fi.rname)
        log.info("{bucket} {rname} removed".format(bucket=self.bucket,
                                                   rname=fi.rname))
        pass