Пример #1
0
class QiNiuCDNTool(QiNiuTool):
    def __init__(self):
        self.manager = CdnManager(
            Auth(access_key=settings.QINIU_ACCESSKEY,
                 secret_key=settings.QINIU_ACCESSSECRET))

    def get_log_data(self):
        pass

    def check(self, url):
        if 'http' in url:
            index = url.find('//')
            header = url.find('/', index + 2)
            if '.' in url[header + 1:]:  # uri
                return 'FILE'
            else:
                return 'DIR'
        else:
            index = url.find('/')
            if '.' in url[index + 1:]:
                return 'FILE'
            else:
                return 'DIR'

    def sort(self, urls):
        file_urls = []
        dir_urls = []
        for url in urls:
            if self.check(url) == 'FILE':
                file_urls.append(url)
            else:
                dir_urls.append(url)

        return file_urls, dir_urls

    def refreshs(self, urls):
        file_urls, dir_urls = self.sort(urls)
        print(file_urls, dir_urls)
        if file_urls:
            ret, info = self.manager.refresh_dirs(dir_urls)
            print(ret, 'AAA', info)

        if dir_urls:
            ret, info = self.manager.refresh_urls(file_urls)
            print(ret, 'BBB', info)

    def refresh(self, url):
        ret = None
        info = None
        if self.check(url) == 'FILE':
            ret, info = self.manager.refresh_urls([url])
        else:
            ret, info = self.manager.refresh_dirs([url])

        if ret['code'] == 200:
            return True
        else:
            return False
Пример #2
0
    def publish(self, target_url, credentials=None, **extra):

        # read auth keys from config file which they name shoudl be "qiniu.ini"
        config = self.get_config('qiniu.ini')
        access_key = config.get('auth.Access_Key')
        secret_key = config.get('auth.Secret_Key')
        bucket_name, key_prefix = self.split_bucket_uri(target_url)

        # prepare local files and upload status variables
        local = self.list_local()
        qn = Auth(access_key, secret_key)
        start_time = datetime.now()
        yield "### start to upload to bucket %s %s " % (bucket_name, key_prefix)
        counter = 0
        num_files = len(local)

        ### upload files
        for filename in local:
            counter = counter+1
            abs_path = os.path.join(self.output_path, filename)
            yield '### uploading %s  ###' % filename
            key_name = key_prefix+filename
            token = qn.upload_token(bucket_name,key_name,120)
            ret,info=put_file(token,key_name,abs_path)
            if info.status_code ==200:
                yield '-- Successfully uploaded %s of %s files --' % (str(counter),num_files)
            else:
                yield 'something wrong %s' % info.status_code
                yield 'Full error message: %s' % info
        last_time = datetime.now()-start_time
        yield "$$$ Upload Done in %s seconds!" % last_time.seconds

        ##start to refresh cdn dir
        if config.get('cdn.refresh_enable') == "yes":
            yield "start to refresh"
            cdn_namager = CdnManager(qn)
            refresh_url = config.get('cdn.refresh_url')
            if refresh_url[-1]!='/':
                refresh_url = refresh_url+"/"
            dir = [refresh_url]
            refresh_dir_result = cdn_namager.refresh_dirs(dir)
            print(refresh_dir_result)
            if refresh_dir_result[0]['code'] ==200:
                yield "refresh complete!"
            else:
                yield "Error refreshing:  %s" % refresh_dir_result[0]
        yield "ALL TASK ARE COMPLETED!"
Пример #3
0
    'http://if-pbl.qiniudn.com/qiniu.jpg',
    'http://if-pbl.qiniudn.com/qiniu2.jpg'
]

# 注意链接最后的斜杠表示目录
dirs = ['http://if-pbl.qiniudn.com/test1/', 'http://if-pbl.qiniudn.com/test2/']
"""刷新文件,目录"""

# 刷新链接
print('刷新文件')
refresh_url_result = cdn_manager.refresh_urls(urls)
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']
Пример #4
0
# -*- coding: utf-8 -*-
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)

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


# 刷新链接
refresh_dir_result = cdn_manager.refresh_dirs(dirs)
Пример #5
0
    if res.status_code != 200:
        raise Exception("upload failed")
    return ret, res


if __name__ == "__main__":
    # 不要开代理
    access_key = sys.argv[1]
    secret_key = sys.argv[2]

    sync = Sync(
        access_key=access_key,  # access_key
        secret_key=secret_key,  # secret_key
        bucket_name="bi-she",  # bucket_name
        sync_dir="./",  # 静态文件目录(后面必须有斜杠/)
        exclude=[".DS_Store"],
        cover=True,
        remove_redundant=True,
    )
    # 刷新缓存
    cdn_manager = CdnManager(sync.q)

    # 需要刷新的文件链接
    urls = ['http://aaa.example.com/a.gif', 'http://bbb.example.com/b.jpg']

    # URL刷新链接
    refresh_url_result = cdn_manager.refresh_urls(urls)

    # 目录刷新链接
    refresh_dir_result = cdn_manager.refresh_dirs(['xxx'])
Пример #6
0
class QiNiuCDNTool(QiNiuTool):
    def __init__(self):
        self.manager = CdnManager(Auth(access_key=settings.QINIU_ACCESSKEY,
                                                 secret_key=settings.QINIU_ACCESSSECRET))
    @staticmethod
    def get_status(status):
        if status == 'success':
            return settings.STATUS_CDN_DONE
        elif status == 'processing':
            return settings.STATUS_CDN_RUN
        elif status == 'failure':
            return settings.STATUS_CDN_ERROR

    @staticmethod
    def get_models(result):
        return {
            'process': result['progress'],
            'status': QiNiuCDNTool.get_status(result['state']),
        }

    def get_log_data(self):
        pass


    def check(self, url):
        if 'http' in url:
            index = url.find('//')
            header = url.find('/', index + 2)
            if '.' in url[header + 1:]: # uri
                return 'FILE'
            else:
                return 'DIR'
        else:
            index = url.find('/')
            if '.' in url[index+1:]:
                return 'FILE'
            else:
                return 'DIR'


    def sort(self, urls):
        file_urls = []
        dir_urls = []
        for url in urls:
            if self.check(url) == 'FILE':
                file_urls.append(url)
            else:
                dir_urls.append(url)

        return file_urls, dir_urls


    def refreshs(self, urls):
        file_urls, dir_urls = self.sort(urls)
        print(file_urls,dir_urls)
        if file_urls:
            ret, info= self.manager.refresh_dirs(dir_urls)
            print(ret, 'AAA',info)

        if dir_urls:
            ret, info =self.manager.refresh_urls(file_urls)
            print(ret, 'BBB',info)

    def tool_flush_cdn(self, url):
        ret = None
        info = None
        if self.check(url) == 'FILE':
            ret, info = self.manager.refresh_urls([url])
        else:
            ret, info = self.manager.refresh_dirs([url])

        return {
            'RefreshTaskId': ret['requestId'],
            'urlSurplusDay': ret['urlSurplusDay'],
            'dirQuotaDay': ret['dirQuotaDay'],
            'dirSurplusDay': ret['dirSurplusDay'],
            'urlQuotaDay': ret['urlQuotaDay'],
        }

    def tool_get_task(self, request_id):
        req = {}
        req['requestId'] = request_id
        body = json.dumps(req)
        url = '{0}/v2/tune/refresh/list'.format(self.manager.server)
        headers = {'Content-Type': 'application/json'}
        ret, info = http._post_with_auth_and_headers(url, body, self.manager.auth, headers)
        yield QiNiuCDNTool.get_models(ret['items'][0])