Merge branch 'feature/clean-cdn'
Showing
4 changed files
with
68 additions
and
5 deletions
@@ -9,19 +9,50 @@ const Model = require('./model'); | @@ -9,19 +9,50 @@ const Model = require('./model'); | ||
9 | const utils = require('utility'); | 9 | const utils = require('utility'); |
10 | const rp = require('request-promise'); | 10 | const rp = require('request-promise'); |
11 | const ws = require('../../lib/ws'); | 11 | const ws = require('../../lib/ws'); |
12 | +const Capi = require('qcloudapi-sdk') | ||
13 | + | ||
14 | +const capi = new Capi({ | ||
15 | + SecretId: 'AKID6dwpKadiQgbDpXDtyNhppIHPO5qPv5GK', | ||
16 | + SecretKey: 'ACJkH9mg0DBA1PYpf0E7f3g534wBsQaW', | ||
17 | + serviceType: 'cdn' | ||
18 | +}); | ||
12 | 19 | ||
13 | class CdnCache extends Model { | 20 | class CdnCache extends Model { |
14 | constructor() { | 21 | constructor() { |
15 | super('cdn_page'); | 22 | super('cdn_page'); |
16 | } | 23 | } |
17 | - async removeCache(queryUris, objectType) { | 24 | + async removeCache(queryUris, objectType, cloud) { |
18 | let self = this; | 25 | let self = this; |
26 | + | ||
27 | + if (cloud === 'qcloud') { | ||
28 | + self._cleanQcloudCache({ | ||
29 | + ObjectPath: queryUris, | ||
30 | + ObjectType: objectType | ||
31 | + }) | ||
32 | + } else { | ||
19 | self._requestApi({ | 33 | self._requestApi({ |
20 | Action: 'RefreshObjectCaches', | 34 | Action: 'RefreshObjectCaches', |
21 | ObjectPath: queryUris, | 35 | ObjectPath: queryUris, |
22 | ObjectType: objectType | 36 | ObjectType: objectType |
23 | }) | 37 | }) |
24 | } | 38 | } |
39 | + } | ||
40 | + async _cleanQcloudCache(params) { | ||
41 | + let self = this; | ||
42 | + let qCloudParams = self._getQcloudParams(params); | ||
43 | + | ||
44 | + if (!Object.keys(qCloudParams).length) { | ||
45 | + return; | ||
46 | + } | ||
47 | + | ||
48 | + capi.request(qCloudParams, function(err, res) { | ||
49 | + if (err || res.code) { | ||
50 | + return self._broadcast(`清理腾讯云失败:${res && res.message}`) | ||
51 | + } | ||
52 | + | ||
53 | + self._broadcast(`清理腾讯云提交成功,RefreshTaskId:${res.data.task_id}`) | ||
54 | + }) | ||
55 | + } | ||
25 | async _requestApi(params) { | 56 | async _requestApi(params) { |
26 | let self = this; | 57 | let self = this; |
27 | let cdns = await self.findAll(); | 58 | let cdns = await self.findAll(); |
@@ -46,12 +77,28 @@ class CdnCache extends Model { | @@ -46,12 +77,28 @@ class CdnCache extends Model { | ||
46 | json: true | 77 | json: true |
47 | }) | 78 | }) |
48 | .then(function (res) { | 79 | .then(function (res) { |
49 | - self._broadcast(`清理提交成功,RefreshTaskId:${res.RefreshTaskId}`) | 80 | + self._broadcast(`清理阿里云提交成功,RefreshTaskId:${res.RefreshTaskId}`) |
50 | }) | 81 | }) |
51 | .catch(function (err) { | 82 | .catch(function (err) { |
52 | - self._broadcast(`清理失败:${err.response.body}`) | 83 | + self._broadcast(`清理阿里云失败:${err.response.body}`) |
84 | + }); | ||
85 | + | ||
86 | + } | ||
87 | + _getUrlList(str = '') { | ||
88 | + return str.split('\n'); | ||
89 | + } | ||
90 | + _getQcloudParams(params) { | ||
91 | + let param = {}; | ||
92 | + let type = params.ObjectType === 'File' ? 'urls' : 'dirs'; | ||
93 | + let list = this._getUrlList(params.ObjectPath); | ||
94 | + | ||
95 | + param.Action = params.ObjectType === 'File' ? 'RefreshCdnUrl' : 'RefreshCdnDir'; | ||
96 | + | ||
97 | + list.forEach((url, index) => { | ||
98 | + param[`${type}.${index}`] = url; | ||
53 | }); | 99 | }); |
54 | 100 | ||
101 | + return param; | ||
55 | } | 102 | } |
56 | _getUtcTime(date) { | 103 | _getUtcTime(date) { |
57 | let year = date.getUTCFullYear(); | 104 | let year = date.getUTCFullYear(); |
@@ -22,6 +22,13 @@ const cdnCache = { | @@ -22,6 +22,13 @@ const cdnCache = { | ||
22 | }, { | 22 | }, { |
23 | name: '目录', | 23 | name: '目录', |
24 | typeName: 'Directory', | 24 | typeName: 'Directory', |
25 | + }], | ||
26 | + cloudList: [{ | ||
27 | + name: '阿里云', | ||
28 | + cloudName: 'aliyun', | ||
29 | + }, { | ||
30 | + name: '腾讯云', | ||
31 | + cloudName: 'qcloud', | ||
25 | }] | 32 | }] |
26 | } | 33 | } |
27 | await ctx.render('action/cdn_cache', date); | 34 | await ctx.render('action/cdn_cache', date); |
@@ -29,8 +36,9 @@ const cdnCache = { | @@ -29,8 +36,9 @@ const cdnCache = { | ||
29 | async clear(ctx) { | 36 | async clear(ctx) { |
30 | let queryUris = ctx.request.body.query_uri; | 37 | let queryUris = ctx.request.body.query_uri; |
31 | let objectType = ctx.request.body.object_type; | 38 | let objectType = ctx.request.body.object_type; |
39 | + let cloud = ctx.request.body.cloud || 'aliyun'; // aliyun or qcloud | ||
32 | if (queryUris.trim() && objectType) { | 40 | if (queryUris.trim() && objectType) { |
33 | - CdnCache.removeCache(queryUris, objectType); | 41 | + CdnCache.removeCache(queryUris, objectType, cloud); |
34 | } | 42 | } |
35 | return ctx.body = { | 43 | return ctx.body = { |
36 | code: 200 | 44 | code: 200 |
@@ -45,6 +45,11 @@ | @@ -45,6 +45,11 @@ | ||
45 | <option value="{{typeName}}">{{name}}</option> | 45 | <option value="{{typeName}}">{{name}}</option> |
46 | {{/each}} | 46 | {{/each}} |
47 | </select> | 47 | </select> |
48 | + <select id="cloud" class="form-control input-sm selcet-auto pull-left mr20"> | ||
49 | + {{#each cloudList}} | ||
50 | + <option value="{{cloudName}}">{{name}}</option> | ||
51 | + {{/each}} | ||
52 | + </select> | ||
48 | <button class="btn btn-warning btn-clear pull-left">清除</button> | 53 | <button class="btn btn-warning btn-clear pull-left">清除</button> |
49 | <div class="result pull-left ml20"></div> | 54 | <div class="result pull-left ml20"></div> |
50 | </div> | 55 | </div> |
@@ -58,11 +63,13 @@ | @@ -58,11 +63,13 @@ | ||
58 | $('.btn-clear').click(function() { | 63 | $('.btn-clear').click(function() { |
59 | var typeName = $('#objectType').val(); | 64 | var typeName = $('#objectType').val(); |
60 | var uri = $('#uri').val(); | 65 | var uri = $('#uri').val(); |
66 | + var cloud = $('#cloud').val(); | ||
61 | if (uri && typeName) { | 67 | if (uri && typeName) { |
62 | $logs.empty(); | 68 | $logs.empty(); |
63 | $.post('/cdn_cache/clear', { | 69 | $.post('/cdn_cache/clear', { |
64 | query_uri: uri, | 70 | query_uri: uri, |
65 | - object_type: typeName | 71 | + object_type: typeName, |
72 | + cloud: cloud | ||
66 | }, function(res) { | 73 | }, function(res) { |
67 | }); | 74 | }); |
68 | } | 75 | } |
@@ -54,6 +54,7 @@ | @@ -54,6 +54,7 @@ | ||
54 | "node-zookeeper-client": "^0.2.2", | 54 | "node-zookeeper-client": "^0.2.2", |
55 | "nodemailer": "^3.1.8", | 55 | "nodemailer": "^3.1.8", |
56 | "npm": "^3.10.9", | 56 | "npm": "^3.10.9", |
57 | + "qcloudapi-sdk": "^0.1.5", | ||
57 | "qn": "^1.3.0", | 58 | "qn": "^1.3.0", |
58 | "qs": "^6.2.0", | 59 | "qs": "^6.2.0", |
59 | "request-promise": "^4.1.1", | 60 | "request-promise": "^4.1.1", |
-
Please register or login to post a comment