Replaced python script to fix filenames by internal background job.
This commit is contained in:
parent
ce155951bf
commit
d24e6e6307
6 changed files with 76 additions and 93 deletions
server
17
server/jobs/fixNodeFilenamesJob.js
Normal file
17
server/jobs/fixNodeFilenamesJob.js
Normal 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();
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
|
@ -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');
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue