* Use key name for configured archiver name (e.g. "zip")

* Start WIP on mesasge import/toss via schedule
* Defaults for message network name
This commit is contained in:
Bryan Ashby 2016-02-29 22:32:51 -07:00
parent 1a6af18801
commit 662d3f232e
4 changed files with 97 additions and 12 deletions

View File

@ -75,7 +75,7 @@ module.exports = class ArchiveUtil {
}
// return first match
const detected = _.find(this.archivers, arch => {
const detected = _.findKey(this.archivers, arch => {
const lenNeeded = arch.offset + arch.sig.length;
if(buf.length < lenNeeded) {

View File

@ -211,7 +211,6 @@ function getDefaultConfig() {
archivers : {
zip : {
name : "PKZip", // :TODO: Use key for this
sig : "504b0304",
offset : 0,
compressCmd : "7z",

View File

@ -69,8 +69,7 @@ function loadModulesForCategory(category, iterator, complete) {
fs.readdir(Config.paths[category], (err, files) => {
if(err) {
iterator(err);
return;
return iterator(err);
}
const jsModules = files.filter(file => {

View File

@ -55,8 +55,20 @@ function FTNMessageScanTossModule() {
}
this.getDefaultNetworkName = function() {
if(this.moduleConfig.defaultNetwork) {
return this.moduleConfig.defaultNetwork;
}
const networkNames = Object.keys(Config.messageNetworks.ftn.networks);
if(1 === networkNames.length) {
return networkNames[0];
}
};
this.isDefaultDomainZone = function(networkName, address) {
return(networkName === this.moduleConfig.defaultNetwork && address.zone === this.moduleConfig.defaultZone);
const defaultNetworkName = this.getDefaultNetworkName();
return(networkName === defaultNetworkName && address.zone === this.moduleConfig.defaultZone);
}
this.getOutgoingPacketDir = function(networkName, destAddress) {
@ -288,6 +300,8 @@ function FTNMessageScanTossModule() {
return false;
}
// :TODO: need to check more!
return true;
};
@ -318,9 +332,6 @@ function FTNMessageScanTossModule() {
}
};
this.performImport = function() {
};
this.getAreaLastScanId = function(areaTag, cb) {
const sql =
`SELECT area_tag, message_id
@ -576,6 +587,43 @@ function FTNMessageScanTossModule() {
);
}, cb); // complete
};
this.importMessagesFromDirectory = function(importDir, cb) {
async.waterfall(
[
function getPossibleFiles(callback) {
fs.readdir(importDir, (err, files) => {
callback(err, files);
});
},
function identify(files, callback) {
async.map(files, (f, transform) => {
let entry = { file : f };
if('.pkt' === paths.extname(f)) {
entry.type = 'packet';
transform(null, entry);
} else {
const fullPath = paths.join(importDir, f);
self.archUtil.detectType(fullPath, (err, archName) => {
entry.type = archName;
transform(null, entry);
});
}
}, (err, identifiedFiles) => {
callback(err, identifiedFiles);
});
},
function importPacketFiles(identifiedFiles, callback) {
}
],
err => {
cb(err);
}
);
};
}
require('util').inherits(FTNMessageScanTossModule, MessageScanTossModule);
@ -592,7 +640,7 @@ FTNMessageScanTossModule.prototype.startup = function(cb) {
if(!exporting) {
exporting = true;
Log.info( { module : exports.moduleInfo.name }, 'Performing scheduled message export...');
Log.info( { module : exports.moduleInfo.name }, 'Performing scheduled message scan/export...');
this.performExport(err => {
exporting = false;
@ -605,6 +653,24 @@ FTNMessageScanTossModule.prototype.startup = function(cb) {
// :TODO: monitor file for changes/existance with gaze
}
}
const importSchedule = this.parseScheduleString(this.moduleConfig.schedule.import);
if(importSchedule) {
if(importSchedule.sched) {
let importing = false;
this.importTimer = later.setInterval( () => {
if(!importing) {
importing = true;
Log.info( { module : exports.moduleInfo.name }, 'Performing scheduled message import/toss...');
this.performImport(err => {
importing = false;
});
}
}, importSchedule.sched);
}
}
}
FTNMessageScanTossModule.super_.prototype.startup.call(this, cb);
@ -620,13 +686,28 @@ FTNMessageScanTossModule.prototype.shutdown = function(cb) {
FTNMessageScanTossModule.super_.prototype.shutdown.call(this, cb);
};
FTNMessageScanTossModule.prototype.performImport = function(cb) {
if(!this.hasValidConfiguration()) {
return cb(new Error('Missing or invalid configuration'));
}
var self = this;
async.each( [ 'inbound', 'secInbound' ], (importDir, nextDir) => {
self.importMessagesFromDirectory(self.moduleConfig.paths[importDir], err => {
nextDir();
});
}, cb);
};
FTNMessageScanTossModule.prototype.performExport = function(cb) {
//
// We're only concerned with areas related to FTN. For each area, loop though
// and let's find out what messages need exported.
//
if(!this.hasValidConfiguration()) {
return cb(new Error('No valid configurations for export'));
return cb(new Error('Missing or invalid configuration'));
}
const getNewUuidsSql =
@ -668,9 +749,15 @@ FTNMessageScanTossModule.prototype.performExport = function(cb) {
});
},
function exportToConfiguredUplinks(msgRows, callback) {
const uuidsOnly = msgRows.map(r => r.message_uuid); // conver to array of UUIDs only
const uuidsOnly = msgRows.map(r => r.message_uuid); // convert to array of UUIDs only
self.exportMessagesToUplinks(uuidsOnly, areaConfig, err => {
callback(err, msgRows[msgRows.length - 1].message_id);
const newLastScanId = msgRows[msgRows.length - 1].message_id;
Log.info(
{ messagesExported : msgRows.length, newLastScanId : newLastScanId },
'Export complete');
callback(err, newLastScanId);
});
},
function updateLastScanId(newLastScanId, callback) {