Replaced python script to fix filenames by internal background job.

This commit is contained in:
baldo 2016-06-21 15:21:08 +02:00
parent ce155951bf
commit d24e6e6307
6 changed files with 76 additions and 93 deletions

View file

@ -0,0 +1,17 @@
'use strict';
angular.module('ffffng').factory('FixNodeFilenamesJob', function (NodeService, Logger) {
return {
description: 'Makes sure node files (holding fastd key, name, etc.) are correctly named.',
run: function (callback) {
NodeService.fixNodeFilenames(function (err) {
if (err) {
Logger.tag('nodes', 'fix-filenames').error('Error fixing filenames:', err);
}
callback();
});
}
};
});

View file

@ -69,6 +69,7 @@ angular.module('ffffng').factory('Scheduler', function ($injector, Logger, confi
try {
schedule('0 */1 * * * *', 'MailQueueJob');
schedule('15 */1 * * * *', 'FixNodeFilenamesJob');
if (config.client.monitoring.enabled) {
schedule('30 */15 * * * *', 'NodeInformationRetrievalJob');

View file

@ -44,6 +44,14 @@ angular.module('ffffng')
return glob.sync(config.server.peersPath + '/' + pattern.toLowerCase());
}
function findFilesInPeersPath() {
var files = glob.sync(config.server.peersPath + '/*');
return _.filter(files, function (file) {
return file[0] !== '.' && fs.lstatSync(file).isFile();
});
}
function parseNodeFilename(filename) {
var parts = _.split(filename, '@', filenameParts.length);
var parsed = {};
@ -88,18 +96,20 @@ angular.module('ffffng')
return null;
}
function writeNodeFile(isUpdate, token, node, nodeSecrets, callback) {
var filename =
config.server.peersPath + '/' +
(
node.hostname + '@' +
node.mac + '@' +
(node.key || '') + '@' +
token + '@' +
(nodeSecrets.monitoringToken || '')
).toLowerCase();
function toNodeFilename(token, node, nodeSecrets) {
return config.server.peersPath + '/' +
(
node.hostname + '@' +
node.mac + '@' +
(node.key || '') + '@' +
token + '@' +
(nodeSecrets.monitoringToken || '')
).toLowerCase();
}
var data = '';
function writeNodeFile(isUpdate, token, node, nodeSecrets, callback) {
var filename = toNodeFilename(token, node, nodeSecrets);
var data = '';
_.each(linePrefixes, function (prefix, key) {
var value;
switch (key) {
@ -401,6 +411,42 @@ angular.module('ffffng')
getNodeDataByMonitoringToken: function (monitoringToken, callback) {
return getNodeDataByFilePattern({ monitoringToken: monitoringToken }, callback);
},
fixNodeFilenames: function (callback) {
var files = findFilesInPeersPath();
async.mapLimit(
files,
MAX_PARALLEL_NODES_PARSING,
function (file, fileCallback) {
parseNodeFile(file, function (err, node, nodeSecrets) {
if (err) {
return fileCallback(err);
}
var expectedFilename = toNodeFilename(node.token, node, nodeSecrets);
if (file !== expectedFilename) {
try {
fs.renameSync(file, expectedFilename);
} catch (e) {
return fileCallback(new Error(
'Cannot rename file ' + file + ' to ' + expectedFilename + ' => ' + e
));
}
}
fileCallback(null);
});
},
function (err) {
if (err) {
return callback(err);
}
return callback(null);
}
);
}
};
});