mirror of
https://github.com/nttgin/BGPalerter.git
synced 2024-05-19 06:50:08 +00:00
added support for auto generation of monitored ASns
This commit is contained in:
22
index.js
22
index.js
@@ -65,6 +65,14 @@ const params = yargs
|
||||
.nargs('i', 0)
|
||||
.describe('i', 'Ignore delegated prefixes')
|
||||
|
||||
.alias('s', 'monitor-as')
|
||||
.nargs('s', 1)
|
||||
.describe('s', 'List of monitored ASes to be added for generic monitoring in options.monitorASns.')
|
||||
|
||||
.alias('m', 'monitor-as-origin')
|
||||
.nargs('m', 0)
|
||||
.describe('m', 'Automatically generate list of monitored ASes (options.monitorASns) from prefix origins.')
|
||||
|
||||
.demandOption(['o']);
|
||||
})
|
||||
.example('$0 generate -a 2914 -o prefixes.yml', 'Generate prefixes for AS2914')
|
||||
@@ -77,8 +85,9 @@ const params = yargs
|
||||
|
||||
switch(params._[0]) {
|
||||
case "generate":
|
||||
const generatePrefixes = require("./generatePrefixesList");
|
||||
const generatePrefixes = require("./src/generatePrefixesList");
|
||||
let prefixes = null;
|
||||
let monitoredASes = false;
|
||||
if (params.pf) {
|
||||
throw new Error("The argument --pf has been deprecated. Use -l instead");
|
||||
}
|
||||
@@ -94,12 +103,21 @@ switch(params._[0]) {
|
||||
}
|
||||
}
|
||||
|
||||
if (params.s && params.m) {
|
||||
throw new Error("You can specify -s or -m, not both");
|
||||
} else if (params.s) {
|
||||
monitoredASes = (params.s || "").split(",");
|
||||
} else if (params.m) {
|
||||
monitoredASes = true;
|
||||
}
|
||||
|
||||
generatePrefixes(
|
||||
(params.a) ? params.a.toString().split(",") : null,
|
||||
params.o,
|
||||
(params.e || "").split(","),
|
||||
params.i || false,
|
||||
prefixes
|
||||
prefixes,
|
||||
monitoredASes
|
||||
);
|
||||
|
||||
break;
|
||||
|
@@ -4,8 +4,9 @@ import yaml from "js-yaml";
|
||||
import fs from "fs";
|
||||
const batchPromises = require('batch-promises');
|
||||
|
||||
module.exports = function generatePrefixes(asnList, outputFile, exclude, excludeDelegated, prefixes) {
|
||||
module.exports = function generatePrefixes(asnList, outputFile, exclude, excludeDelegated, prefixes, monitoredASes) {
|
||||
const generateList = {};
|
||||
const allOrigins = {};
|
||||
let someNotValidatedPrefixes = false;
|
||||
|
||||
if (!asnList && !prefixes) {
|
||||
@@ -44,7 +45,7 @@ module.exports = function generatePrefixes(asnList, outputFile, exclude, exclude
|
||||
};
|
||||
|
||||
const getAnnouncedMoreSpecifics = (prefix) => {
|
||||
console.log("Processing " + prefix);
|
||||
console.log("Generating monitoring rule for", prefix);
|
||||
const url = brembo.build("https://stat.ripe.net", {
|
||||
path: ["data", "related-prefixes", "data.json"],
|
||||
params: {
|
||||
@@ -84,6 +85,10 @@ module.exports = function generatePrefixes(asnList, outputFile, exclude, exclude
|
||||
if (asns.length) {
|
||||
const origin = (asns && asns.length) ? asns : [asn];
|
||||
|
||||
for (let o of origin) {
|
||||
allOrigins[o] = true;
|
||||
}
|
||||
|
||||
generateList[prefix] = {
|
||||
description: description || "No description provided",
|
||||
asn: origin.map(i => parseInt(i)),
|
||||
@@ -183,13 +188,32 @@ module.exports = function generatePrefixes(asnList, outputFile, exclude, exclude
|
||||
console.log("Cannot download more specific prefixes", e);
|
||||
})
|
||||
})
|
||||
.then(() => {
|
||||
.then(() => { // Check
|
||||
return Promise.all(Object.keys(generateList).map(prefix => validatePrefix(generateList[prefix].asn[0], prefix)))
|
||||
.catch((e) => {
|
||||
console.log("ROA check failed due to error", e);
|
||||
})
|
||||
})
|
||||
.then(() => {
|
||||
.then(() => { // Add the options for monitorASns
|
||||
|
||||
const generateMonitoredAsObject = function (list) {
|
||||
generateList.options = generateList.options || {};
|
||||
generateList.options.monitorASns = generateList.options.monitorASns || {};
|
||||
for (let monitoredAs of list) {
|
||||
console.log("Generating generic monitoring rule for AS", monitoredAs);
|
||||
generateList.options.monitorASns[monitoredAs] = {
|
||||
group: 'default'
|
||||
};
|
||||
}
|
||||
};
|
||||
if (monitoredASes === true) {
|
||||
generateMonitoredAsObject(Object.keys(allOrigins));
|
||||
} else if (monitoredASes.length) {
|
||||
generateMonitoredAsObject(monitoredASes);
|
||||
}
|
||||
// Otherwise nothing
|
||||
})
|
||||
.then(() => { // write everything into the file
|
||||
const yamlContent = yaml.dump(generateList);
|
||||
fs.writeFileSync(outputFile, yamlContent);
|
||||
|
||||
|
Reference in New Issue
Block a user