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)
# -*- 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)
# 刷新目录需要联系七牛技术支持开通权限 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)
# -*- 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)
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