mirror of
https://github.com/nttgin/BGPalerter.git
synced 2024-05-19 06:50:08 +00:00
refactoring, operations on yml file are delegated to inputYml
This commit is contained in:
18
index.js
18
index.js
@@ -31,6 +31,8 @@
|
||||
*/
|
||||
|
||||
import yargs from 'yargs';
|
||||
import fs from "fs";
|
||||
import yaml from "js-yaml";
|
||||
|
||||
const params = yargs
|
||||
.usage('Usage: $0 <command> [options]')
|
||||
@@ -163,10 +165,22 @@ switch(params._[0]) {
|
||||
historical,
|
||||
group: params.g,
|
||||
append: !!params.A,
|
||||
logger: null
|
||||
logger: null,
|
||||
getCurrentPrefixesList: () => {
|
||||
const content = JSON.parse( yaml.safeLoad(fs.readFileSync(params.o, "utf8")) || {});
|
||||
return Promise.resolve(content);
|
||||
}
|
||||
};
|
||||
|
||||
generatePrefixes(inputParameters);
|
||||
if (!inputParameters.outputFile) {
|
||||
throw new Error("Output file not specified");
|
||||
}
|
||||
|
||||
generatePrefixes(inputParameters)
|
||||
.then(content => {
|
||||
fs.writeFileSync(params.o, yaml.dump(content));
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
|
@@ -1,10 +1,8 @@
|
||||
import axios from "axios";
|
||||
import url from "url";
|
||||
import brembo from "brembo";
|
||||
import yaml from "js-yaml";
|
||||
import batchPromises from "batch-promises";
|
||||
import RpkiValidator from "rpki-validator";
|
||||
import fs from "fs";
|
||||
import { AS } from "./model";
|
||||
const apiTimeout = 120000;
|
||||
const clientId = "ntt-bgpalerter"
|
||||
@@ -13,7 +11,6 @@ const rpki = new RpkiValidator({clientId});
|
||||
module.exports = function generatePrefixes(inputParameters) {
|
||||
let {
|
||||
asnList,
|
||||
outputFile,
|
||||
exclude,
|
||||
excludeDelegated,
|
||||
prefixes,
|
||||
@@ -23,7 +20,8 @@ module.exports = function generatePrefixes(inputParameters) {
|
||||
historical,
|
||||
group,
|
||||
append,
|
||||
logger
|
||||
logger,
|
||||
getCurrentPrefixesList
|
||||
} = inputParameters;
|
||||
|
||||
logger = logger || console.log;
|
||||
@@ -49,10 +47,6 @@ module.exports = function generatePrefixes(inputParameters) {
|
||||
throw new Error("You can specify an AS number or a list of prefixes, not both.");
|
||||
}
|
||||
|
||||
if (!outputFile) {
|
||||
throw new Error("Output file not specified");
|
||||
}
|
||||
|
||||
if (asnList && asnList.length) {
|
||||
asnList = asnList.map(i => i.replace("AS", ""));
|
||||
if (asnList.some(i => !new AS([i]).isValid())) {
|
||||
@@ -261,9 +255,7 @@ module.exports = function generatePrefixes(inputParameters) {
|
||||
}
|
||||
};
|
||||
|
||||
const getCurrentPrefixes = (outputFile, yamlContent) => {
|
||||
const content = fs.readFileSync(outputFile, 'utf8');
|
||||
const current = yaml.safeLoad(content) || {};
|
||||
const mergeCurrentPrefixes = (current, yamlContent) => {
|
||||
|
||||
function isObject (item) {
|
||||
return (item && typeof item === 'object' && !Array.isArray(item));
|
||||
@@ -338,13 +330,17 @@ module.exports = function generatePrefixes(inputParameters) {
|
||||
logger("WARNING: the generated configuration is a snapshot of what is currently announced. Some of the prefixes don't have ROA objects associated or are RPKI invalid. Please, verify the config file by hand!");
|
||||
}
|
||||
})
|
||||
.then(() => { // write everything into the file
|
||||
|
||||
const list = (append) ? getCurrentPrefixes(outputFile, generateList) : generateList;
|
||||
|
||||
fs.writeFileSync(outputFile, yaml.dump(list));
|
||||
|
||||
.then(() => {
|
||||
return (append)
|
||||
? getCurrentPrefixesList()
|
||||
.then(current => {
|
||||
return mergeCurrentPrefixes(current, generateList)
|
||||
})
|
||||
: generateList;
|
||||
})
|
||||
.then(list => {
|
||||
logger("Done!");
|
||||
return list;
|
||||
})
|
||||
.catch((e) => {
|
||||
logger(`Something went wrong ${e}`);
|
||||
|
@@ -158,10 +158,14 @@ export default class Input {
|
||||
throw new Error('The method loadPrefixes MUST be implemented');
|
||||
};
|
||||
|
||||
save = () => {
|
||||
save = (data) => {
|
||||
throw new Error('The method save MUST be implemented');
|
||||
};
|
||||
|
||||
retrieve = () => {
|
||||
throw new Error('The method retrieve MUST be implemented');
|
||||
};
|
||||
|
||||
generate = () => {
|
||||
return inquirer
|
||||
.prompt([
|
||||
@@ -202,12 +206,10 @@ export default class Input {
|
||||
}
|
||||
])
|
||||
.then((answer) => {
|
||||
// const generatePrefixes = require("../generatePrefixesList");
|
||||
const asns = answer.asns.split(",");
|
||||
|
||||
const inputParameters = {
|
||||
asnList: asns,
|
||||
outputFile: this.config.volume + "prefixes.yml",
|
||||
exclude: [],
|
||||
excludeDelegated: answer.i,
|
||||
prefixes: null,
|
||||
@@ -217,19 +219,16 @@ export default class Input {
|
||||
historical: false,
|
||||
group: null,
|
||||
append: false,
|
||||
logger: null
|
||||
logger: null,
|
||||
getCurrentPrefixesList: () => {
|
||||
return this.retrieve();
|
||||
}
|
||||
};
|
||||
|
||||
if (this.config.generatePrefixListEveryDays >= 1 && this.storage) {
|
||||
return this.storage
|
||||
.set(this.prefixListStorageKey, inputParameters)
|
||||
.then(() => generatePrefixes(inputParameters))
|
||||
.catch(error => {
|
||||
this.logger.log({
|
||||
level: 'error',
|
||||
message: error
|
||||
});
|
||||
});
|
||||
.then(() => generatePrefixes(inputParameters));
|
||||
} else {
|
||||
return generatePrefixes(inputParameters);
|
||||
}
|
||||
@@ -238,9 +237,14 @@ export default class Input {
|
||||
} else {
|
||||
throw new Error("Nothing to monitor.");
|
||||
}
|
||||
})
|
||||
.then(this.save)
|
||||
.catch(error => {
|
||||
this.logger.log({
|
||||
level: 'error',
|
||||
message: error
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
_reGeneratePrefixList = () => {
|
||||
@@ -269,7 +273,7 @@ export default class Input {
|
||||
.then(() => {
|
||||
this.logger.log({
|
||||
level: 'info',
|
||||
message: "Prefix list updated. See prefixes.yml."
|
||||
message: `Prefix list updated.`
|
||||
});
|
||||
this.setReGeneratePrefixList();
|
||||
})
|
||||
|
@@ -49,7 +49,8 @@ export default class InputYml extends Input {
|
||||
};
|
||||
|
||||
loadPrefixes = () => {
|
||||
if (!fs.existsSync(this.config.volume + this.config.monitoredPrefixesFiles[0])) {
|
||||
this.defaultPrefixFile = this.config.volume + this.config.monitoredPrefixesFiles[0];
|
||||
if (!fs.existsSync(this.defaultPrefixFile)) {
|
||||
return this.generate()
|
||||
.then(() => this._loadPrefixes());
|
||||
}
|
||||
@@ -269,7 +270,12 @@ export default class InputYml extends Input {
|
||||
return this.asns;
|
||||
};
|
||||
|
||||
save = () =>
|
||||
save = (content) => {
|
||||
fs.writeFileSync(this.defaultPrefixFile, yaml.dump(content));
|
||||
return Promise.resolve();
|
||||
};
|
||||
|
||||
retrieve = () =>
|
||||
new Promise((resolve, reject) => {
|
||||
const prefixes = {};
|
||||
for (let rule of this.prefixes) {
|
||||
@@ -299,7 +305,6 @@ export default class InputYml extends Input {
|
||||
};
|
||||
}
|
||||
|
||||
fs.writeFileSync("prefixes.yml", yaml.dump({ ...prefixes, ...options }));
|
||||
resolve(true)
|
||||
resolve({ ...prefixes, ...options });
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user