mutable statuses = Object.entries(groupBy(connections, "prb_id")).map(
([prb_id, conn_result]) => {
let probe = probe_objects.filter((p) => p.id === parseInt(prb_id))[0];
let conns_sorted = conn_result.sort(sortByTimestamp);
let state = (event1, event2) =>
event1 === "connect" && event2 === "disconnect" ? "up" : "down";
let flip = (event) => (event === "connect" ? "disconnect" : "connect");
let prefix_v4_size = probe.prefix_v4
? 2 ** (32 - parseInt(probe.prefix_v4.split("/")[1]))
: 0;
let res = [];
let r = {
start: _start.getTime() / 1000,
end: conns_sorted[0].timestamp,
status: state(flip(conns_sorted[0].event), conns_sorted[0].event),
prb_id: prb_id,
asn_v4: probe.asn_v4,
prefix_v4: probe.prefix_v4,
prefix_v4_size: prefix_v4_size,
country_code: probe.country_code,
tags: probe.tags.map((t) => t.slug)
};
res.push(r);
for (let i = 0; i < conns_sorted.length; i++) {
let start = conns_sorted[i];
let end = conns_sorted[i + 1];
if (!start || !end) continue;
let status = {
start: start.timestamp,
end: end.timestamp,
status: state(start.event, end.event),
prb_id: prb_id,
asn_v4: probe.asn_v4,
prefix_v4: probe.prefix_v4,
prefix_v4_size: prefix_v4_size,
country_code: probe.country_code,
tags: probe.tags.map((t) => t.slug)
};
res.push(status);
}
let fakeStop =
d3
.min([new Date(_stop.getTime()), new Date(latest_7000 * 1000)])
.getTime() / 1000;
const last = conns_sorted[conns_sorted.length - 1];
let s = {
start: last.timestamp,
end: fakeStop,
status: state(last.event, flip(last.event)),
prb_id: prb_id,
asn_v4: probe.asn_v4,
prefix_v4: probe.prefix_v4,
prefix_v4_size: prefix_v4_size,
country_code: probe.country_code,
tags: probe.tags.map((t) => t.slug)
};
res.push(s);
mutable _ += 1;
return res;
}
)