1
0
mirror of https://github.com/nttgin/BGPalerter.git synced 2024-05-19 06:50:08 +00:00
Files
nttgin-BGPalerter/consumer.js

67 lines
1.6 KiB
JavaScript
Raw Normal View History

2019-06-14 18:04:20 +02:00
import config from "./config";
export default class Consumer {
constructor(){
process.on('message', this.dispatch);
this.monitors = config.monitors.map(monitor => new monitor());
};
2019-06-15 23:06:34 +02:00
dispatch = (data) => {
2019-06-14 18:04:20 +02:00
try {
2019-06-15 23:06:34 +02:00
const message = JSON.parse(data);
2019-06-14 18:04:20 +02:00
switch (message.type) {
case "ris_message": this.handleUpdate(message)
}
} catch (e) {
console.log(e);
}
};
2019-06-15 23:06:34 +02:00
handleUpdate = (data) => {
const messages = this.transform(data);
2019-06-14 18:04:20 +02:00
for (let monitor of this.monitors){
2019-06-15 23:06:34 +02:00
for (const message of messages){
monitor.monitor(message);
}
2019-06-14 18:04:20 +02:00
}
2019-06-15 23:06:34 +02:00
};
transform = (message) => {
message = message.data;
const components = [];
const announcements = message["announcements"] || [];
const withdrawals = message["withdrawals"] || [];
const peer = message["peer"];
const path = message["path"];
for (let announcement of announcements){
const nextHop = announcement["next_hop"];
const prefixes = announcement["prefixes"] || [];
for (let prefix of prefixes){
components.push({
type: "announcement",
prefix,
peer,
path,
nextHop
})
}
}
for (let prefix of withdrawals){
components.push({
type: "withdrawal",
prefix,
peer
})
}
return components;
2019-06-14 18:04:20 +02:00
}
}