Skip to content

Commit 4c52810

Browse files
committed
add cache api updateCheck
1 parent 24dd646 commit 4c52810

File tree

6 files changed

+78
-5
lines changed

6 files changed

+78
-5
lines changed

config/config.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,10 @@ config.development = {
4545
diffNums: 3,
4646
// data dir for caclulate diff files. it's optimization.
4747
dataDir: "/Users/tablee/workspaces/data",
48-
//storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3")
49-
storageType: "local"
48+
// storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3")
49+
storageType: "local",
50+
// options value is (true | false), when it's true, it will cache updateCheck results in redis.
51+
updateCheckCache: false
5052
},
5153
//config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer
5254
smtpConfig:{

config/config.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ config.test = {
1919
tryLoginTimes: 10,
2020
diffNums: 3,
2121
dataDir: os.tmpdir(),
22-
storageType: "local"
22+
storageType: "local",
23+
updateCheckCache: true
2324
},
2425
smtpConfig: false,
2526
redis: {

config/config.testwin.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ config.test = {
1919
tryLoginTimes: 10,
2020
diffNums: 3,
2121
dataDir: os.tmpdir(),
22-
storageType: "local"
22+
storageType: "local",
23+
updateCheckCache: true
2324
},
2425
smtpConfig: false,
2526
redis: {

core/services/client-manager.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ var Promise = require('bluebird');
33
var models = require('../../models');
44
var _ = require('lodash');
55
var common = require('../utils/common');
6+
var factory = require('../utils/factory');
67

78
var proto = module.exports = function (){
89
function ClientManager() {
@@ -12,6 +13,56 @@ var proto = module.exports = function (){
1213
return ClientManager;
1314
};
1415

16+
const UPDATE_CHECK = "UPDATE_CHECK";
17+
const EXPIRED = 600;
18+
19+
proto.getUpdateCheckCacheKey = function(deploymentKey, appVersion, label, packageHash) {
20+
return [UPDATE_CHECK, deploymentKey, appVersion, label, packageHash].join(':');
21+
}
22+
23+
proto.clearUpdateCheckCache = function(deploymentKey, appVersion, label, packageHash) {
24+
let redisCacheKey = this.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash);
25+
var client = factory.getRedisClient("default");
26+
return client.keysAsync(redisCacheKey)
27+
.then(function(data) {
28+
if (_.isArray(data)) {
29+
return Promise.map(data, function(key){
30+
return client.delAsync(key);
31+
});
32+
}
33+
return null;
34+
});
35+
}
36+
37+
proto.updateCheckFromCache = function(deploymentKey, appVersion, label, packageHash) {
38+
const self = this;
39+
let redisCacheKey = self.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash);
40+
var updateCheckCache = _.get(require('../config'), 'common.updateCheckCache', false);
41+
if (updateCheckCache === false) {
42+
return self.updateCheck(deploymentKey, appVersion, label, packageHash);
43+
}
44+
var client = factory.getRedisClient("default");
45+
return client.getAsync(redisCacheKey)
46+
.then(function(data){
47+
if (data) {
48+
try {
49+
var obj = JSON.parse(data);
50+
return obj;
51+
} catch (e) {
52+
}
53+
}
54+
return self.updateCheck(deploymentKey, appVersion, label, packageHash)
55+
.then(function(rs){
56+
try {
57+
var strRs = JSON.stringify(rs);
58+
client.setexAsync(redisCacheKey, EXPIRED, strRs);
59+
} catch (e) {
60+
}
61+
return rs;
62+
});
63+
})
64+
}
65+
1566
proto.updateCheck = function(deploymentKey, appVersion, label, packageHash) {
1667
var rs = {
1768
downloadURL: "",

routes/apps.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,15 @@ router.post('/:appName/deployments/:deploymentName/release',
240240
});
241241
});
242242
}
243+
//clear cache if exists.
244+
if (_.get(config, 'common.updateCheckCache', false) !== false) {
245+
Promise.delay(2500)
246+
.then(function () {
247+
var ClientManager = require('../core/services/client-manager');
248+
var clientManager = new ClientManager();
249+
clientManager.clearUpdateCheckCache(deploymentInfo.deployment_key, '*', '*', '*');
250+
});
251+
}
243252
return null;
244253
});
245254
});
@@ -274,6 +283,15 @@ router.post('/:appName/deployments/:sourceDeploymentName/promote/:destDeployment
274283
if (!destDeploymentInfo) {
275284
throw new Error(`${destDeploymentName} does not exist.`);
276285
}
286+
//clear cache if exists.
287+
if (_.get(config, 'common.updateCheckCache', false) !== false) {
288+
Promise.delay(2500)
289+
.then(function () {
290+
var ClientManager = require('../core/services/client-manager');
291+
var clientManager = new ClientManager();
292+
clientManager.clearUpdateCheckCache(destDeploymentInfo.deployment_key, '*', '*', '*');
293+
});
294+
}
277295
return [sourceDeploymentInfo.id, destDeploymentInfo.id];
278296
})
279297
.spread(function (sourceDeploymentId, destDeploymentId) {

routes/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ router.get('/updateCheck', function(req, res){
3636
var label = _.get(req, "query.label");
3737
var packageHash = _.get(req, "query.packageHash")
3838
var clientManager = new ClientManager();
39-
clientManager.updateCheck(deploymentKey, appVersion, label, packageHash)
39+
clientManager.updateCheckFromCache(deploymentKey, appVersion, label, packageHash)
4040
.then(function (rs) {
4141
res.send({"updateInfo":rs});
4242
})

0 commit comments

Comments
 (0)