kopia lustrzana https://github.com/c9/core
only consider VFS servers from the same region
rodzic
d620d8db6f
commit
aee50cfda9
|
@ -6,6 +6,7 @@ define(function(require, exports, module) {
|
||||||
"db",
|
"db",
|
||||||
"c9.login",
|
"c9.login",
|
||||||
"preview.handler",
|
"preview.handler",
|
||||||
|
"vfs.serverlist",
|
||||||
"user-content.redirect",
|
"user-content.redirect",
|
||||||
"connect.remote-address"
|
"connect.remote-address"
|
||||||
];
|
];
|
||||||
|
@ -13,21 +14,18 @@ define(function(require, exports, module) {
|
||||||
return main;
|
return main;
|
||||||
|
|
||||||
function main(options, imports, register) {
|
function main(options, imports, register) {
|
||||||
var maxVfsAge = options.maxVfsAge || 20 * 1000;
|
|
||||||
var region = options.region;
|
|
||||||
|
|
||||||
var session = imports.session;
|
var session = imports.session;
|
||||||
var db = imports.db;
|
var db = imports.db;
|
||||||
var ensureLoggedIn = imports["c9.login"].ensureLoggedIn();
|
var ensureLoggedIn = imports["c9.login"].ensureLoggedIn();
|
||||||
var handler = imports["preview.handler"];
|
var handler = imports["preview.handler"];
|
||||||
var userContent = imports["user-content.redirect"];
|
var userContent = imports["user-content.redirect"];
|
||||||
|
var getVfsServers = imports["vfs.serverlist"].getServers;
|
||||||
|
|
||||||
var frontdoor = require("frontdoor");
|
var frontdoor = require("frontdoor");
|
||||||
var error = require("http-error");
|
var error = require("http-error");
|
||||||
var requestTimeout = require("c9/request_timeout");
|
var requestTimeout = require("c9/request_timeout");
|
||||||
|
|
||||||
var api = frontdoor();
|
var api = frontdoor();
|
||||||
var vfsServers;
|
|
||||||
|
|
||||||
api.registerType("username", /^[0-9a-z_\-]*$/i);
|
api.registerType("username", /^[0-9a-z_\-]*$/i);
|
||||||
api.registerType("projectname", /^[0-9a-z\-_]*$/i);
|
api.registerType("projectname", /^[0-9a-z\-_]*$/i);
|
||||||
|
@ -55,7 +53,7 @@ define(function(require, exports, module) {
|
||||||
handler.getProjectSession(),
|
handler.getProjectSession(),
|
||||||
handler.getRole(db),
|
handler.getRole(db),
|
||||||
handler.getProxyUrl(function() {
|
handler.getProxyUrl(function() {
|
||||||
return vfsServers ? vfsServers[0] : null;
|
return getVfsServers()[0] || null;
|
||||||
}),
|
}),
|
||||||
handler.proxyCall()
|
handler.proxyCall()
|
||||||
]);
|
]);
|
||||||
|
@ -81,53 +79,7 @@ define(function(require, exports, module) {
|
||||||
}, function(req, res, next) {
|
}, function(req, res, next) {
|
||||||
res.redirect(req.url + "/");
|
res.redirect(req.url + "/");
|
||||||
});
|
});
|
||||||
|
|
||||||
function updateVfsServerList(callback) {
|
register();
|
||||||
db.Vfs.findAllAndPurge(maxVfsAge, function(err, servers) {
|
|
||||||
if (err)
|
|
||||||
return callback(err);
|
|
||||||
if (!servers.length)
|
|
||||||
return callback(new Error("No VFS server available"));
|
|
||||||
|
|
||||||
vfsServers = shuffleServers(servers);
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function shuffleServers(servers) {
|
|
||||||
servers = servers.slice();
|
|
||||||
var isBeta = region == "beta";
|
|
||||||
servers = servers.filter(function(s) {
|
|
||||||
return isBeta ? s.region == "beta" : s.region !== "beta";
|
|
||||||
});
|
|
||||||
return servers.sort(function(a, b) {
|
|
||||||
if (a.region == b.region) {
|
|
||||||
if (a.load < b.load)
|
|
||||||
return -1;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (a.region == region)
|
|
||||||
return -1;
|
|
||||||
else if (b.region == region)
|
|
||||||
return 1;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
load();
|
|
||||||
function load() {
|
|
||||||
updateVfsServerList(function(err) {
|
|
||||||
if (err)
|
|
||||||
return setTimeout(load, 20000);
|
|
||||||
|
|
||||||
setInterval(updateVfsServerList.bind(null, function(err) {
|
|
||||||
if (err) console.error("Retrieving VFS server list failed", err);
|
|
||||||
}), 20 * 1000);
|
|
||||||
|
|
||||||
register();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
Ładowanie…
Reference in New Issue