阿里云CDN刷新项目

 

 

aliyun_cdn刷新项目

背景:公司正处于发展期,IOS 安卓 还有前端等项目频繁发布 时间不固定 运维人员人手不够

所有每次发布都要刷新CDN相关目录 况且如果让开发人员等操作刷新CDN还要登录aliyun相关帐号

这样导致帐号不安全和流程不合适

所以诞生自主研发CDN刷新功能

系统环境:

centos7.4

python 3.7

flask 框架

aliyun核心sdk和cdn sdk

bootstrap框架

系统安全上面

只限open登录访问内网才可以操作

项目截图:

阿里云CDN刷新项目_第1张图片

/templates/index.html




   
   cdn
   
   
   
   
   
   


    

刷新上限2000-----目录上限100

{% if urlcount < 500 %} {% else %} {% endif %}
{% if urlcount < 50 %} {% else %} {% endif %}

CDN刷新操作

操作记录

{% for k in info %} {% if k.ObjectType == "file" %} {% else %} {% endif %} {% if k.Status == "Complete" %} {% else %} {% endif %} {% if k.ObjectType == "file" %} {% else %} {% endif %} {% endfor %}
执行时间 URL 操作 结果 类型 进度 TaskID
{ { k.CreationTime }} { { k.ObjectPath }}完成异常URL刷新目录刷新{ { k.Process }} { { k.TaskId }}

 

/templates/shuaxin.html





跳转页面
 


    

 

app.py

from flask import Flask,render_template
from flask import request
from aliyunsdkcore import client
import json
import datetime
from dateutil.parser import parse
from aliyunsdkcdn.request.v20141111 import DescribeRefreshTasksRequest  # 引入获取CDN刷新操作日志类
from aliyunsdkcdn.request.v20141111 import RefreshObjectCachesRequest   # 引入刷新CDN的类
from aliyunsdkcdn.request.v20141111 import DescribeRefreshQuotaRequest  # 引入获取剩余刷新次数的类
Client=client.AcsClient('xxxxxxxxx','xxxxxxxxxxxxxxxxxxxxxxx','cn-hangzhou')
app = Flask(__name__)

def get_aliyun_cdn_log():
    request = DescribeRefreshTasksRequest.DescribeRefreshTasksRequest()
    request.set_accept_format('json')
    request.set_PageNumber(1)  # 取得第几页 取值范围为:1~100000
    request.set_PageSize(50)  # 分页大小,默认20,最大50 取值:1~50之前的任意整数
    data = json.loads(Client.do_action(request)).get("Tasks").get("CDNTask")
    # 处理时间:阿里云返回的时间格式是UTC,现处理成北京时间,把字符格式转换成时间格式,并+8小时
    for i in data:
        i['CreationTime'] = (parse(i['CreationTime']) + datetime.timedelta(hours=8)).strftime('%Y-%m-%d %H:%M:%S')
    return json.dumps(data)
def shuaxin_cdn(url_path,s_type):
    request = RefreshObjectCachesRequest.RefreshObjectCachesRequest()
    request.set_ObjectPath(url_path)  # 刷新地址
    request.set_ObjectType(s_type)  # 地址类型
    request.set_accept_format('json')
    Client.do_action(request)  # 刷新
    return "刷新完成,稍等会即生效"
def shengyu_count():
    request = DescribeRefreshQuotaRequest.DescribeRefreshQuotaRequest()
    request.set_accept_format('json')
    result = json.loads(Client.do_action(request))
    result['UrlPer'] = format(float(result.get('UrlRemain')) / float(result.get('UrlQuota')), '.2%')  # 统计URL当日可刷新量百分比
    result['DirPer'] = format(float(result.get('DirRemain')) / float(result.get('DirQuota')), '.2%')  # 统计目录当日可刷新量百分比
    return result
@app.route('/')
def hello_world():
    count=shengyu_count()
    urlcount=count['UrlRemain']
    dircount=count['DirRemain']
    # return 'Hello World!'
    return render_template('index.html',info=json.loads(get_aliyun_cdn_log()),urlcount=int(urlcount),dircount=int(dircount))
@app.route('/test')
def test():
    # return 'Hello World!'
    return render_template('shuaxin.html')
@app.route('/shuaxin', methods=['post','get'])
def shuaxin():
    url = request.args.get('url')
    type = request.args.get('type')
    s_type=''
    if type=="URL刷新":
        s_type='file'
    elif type=="目录刷新":
        s_type='directory'

    info=shuaxin_cdn(url, type)
    # info=url+'   '+s_type
    return render_template('shuaxin.html', info=info)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=10101)

 

你可能感兴趣的:(aliyun,阿里云,cdn)