only consider VFS servers from the same region

pull/227/head
Fabian Jakobs 2015-12-16 15:13:44 +00:00
rodzic d620d8db6f
commit aee50cfda9
1 zmienionych plików z 5 dodań i 53 usunięć

Wyświetl plik

@ -6,6 +6,7 @@ define(function(require, exports, module) {
"db",
"c9.login",
"preview.handler",
"vfs.serverlist",
"user-content.redirect",
"connect.remote-address"
];
@ -13,21 +14,18 @@ define(function(require, exports, module) {
return main;
function main(options, imports, register) {
var maxVfsAge = options.maxVfsAge || 20 * 1000;
var region = options.region;
var session = imports.session;
var db = imports.db;
var ensureLoggedIn = imports["c9.login"].ensureLoggedIn();
var handler = imports["preview.handler"];
var userContent = imports["user-content.redirect"];
var getVfsServers = imports["vfs.serverlist"].getServers;
var frontdoor = require("frontdoor");
var error = require("http-error");
var requestTimeout = require("c9/request_timeout");
var api = frontdoor();
var vfsServers;
api.registerType("username", /^[0-9a-z_\-]*$/i);
api.registerType("projectname", /^[0-9a-z\-_]*$/i);
@ -55,7 +53,7 @@ define(function(require, exports, module) {
handler.getProjectSession(),
handler.getRole(db),
handler.getProxyUrl(function() {
return vfsServers ? vfsServers[0] : null;
return getVfsServers()[0] || null;
}),
handler.proxyCall()
]);
@ -81,53 +79,7 @@ define(function(require, exports, module) {
}, function(req, res, next) {
res.redirect(req.url + "/");
});
function updateVfsServerList(callback) {
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();
});
}
register();
}
});