Exemple #1
0
def exabgp_format(collector, message):
    neighbor = message["neighbor"]
    raw_bgp_messages.labels(collector, str(neighbor["asn"]["peer"])).inc()
    latency.labels(collector, str(neighbor["asn"]["peer"])).set((datetime.utcnow() - datetime.utcfromtimestamp(message["time"])).seconds)
    update = neighbor["message"].get("update")
    if update is not None:
        announce = update.get("announce")
        withdraw = update.get("withdraw")
        attribute = update.get("attribute")
        if announce is not None and attribute is not None:
            as_path = attribute.get("as-path", [])
            if len(as_path) > 0:
                origin = as_path[-1]
                for item in announce.get("ipv4 unicast", {}).values():
                    for prefix in item.keys():
                        yield InternalMessage("U", float(message["time"]), collector, int(neighbor["asn"]["peer"]), neighbor["ip"], prefix, origin, exabgp_as_path(as_path))
                for item in announce.get("ipv6 unicast", {}).values():
                    for prefix in item.keys():
                        yield InternalMessage("U", float(message["time"]), collector, int(neighbor["asn"]["peer"]), neighbor["ip"], prefix, origin, exabgp_as_path(as_path))
        if withdraw is not None:
            for item in withdraw.get("ipv4 unicast", {}).values():
                for prefix in item.keys():
                    yield InternalMessage("U", float(message["time"]), collector, int(neighbor["asn"]["peer"]), neighbor["ip"], prefix, None, None)
            for item in withdraw.get("ipv6 unicast", {}).values():
                for prefix in item.keys():
                    yield InternalMessage("U", float(message["time"]), collector, int(neighbor["asn"]["peer"]), neighbor["ip"], prefix, None, None)
    else:
        logger.error("got %s", message)
Exemple #2
0
def bgpreader_format_update(collector, data):
    """
    Transform an bgpreader update message to the internal representation.
    """
    if data[0] == "W":
        yield InternalMessage("W", data[1], data[3], int(data[4]), data[5],
                              data[6], None, None)
    elif data[0] == "A":
        as_path = data[8]
        if len(as_path) > 0:
            origin = frozenset(get_as_origin(as_path))
            if len(origin) == 1:
                origin = iter(origin).next()
            yield InternalMessage("U", data[1], data[3], int(data[4]), data[5],
                                  data[6], origin, as_path)
def bgpstream_format(collector, elem):
    raw_bgp_messages.labels(collector, str(elem.peer_asn)).inc()
    latency.labels(collector, str(elem.peer_asn)).set(
        (datetime.utcnow() - datetime.utcfromtimestamp(elem.time)).seconds)
    if elem.type == "R" or elem.type == "A":
        as_path = elem.fields["as-path"]
        if len(as_path) > 0:
            origins = frozenset(get_as_origin(as_path))
            typ = "F" if elem.type == "R" else "U"
            yield InternalMessage(typ, float(elem.time), collector,
                                  int(elem.peer_asn), elem.peer_address,
                                  elem.fields["prefix"], origins, as_path)
    elif elem.type == "W":
        yield InternalMessage("W", float(elem.time), collector,
                              int(elem.peer_asn), elem.peer_address,
                              elem.fields["prefix"], None, None)
Exemple #4
0
def mabo_format_update(collector, data):
    """
    Transform an mabo update message to the internal representation.
    """
    for entry in data.get("withdraw", []):
        yield InternalMessage("W", data["timestamp"], collector,
                              int(data["peer_as"]), data["peer_ip"], entry,
                              None, None)

    as_path = data.get("as_path", "")
    if len(as_path) != 0:
        origin = frozenset(get_as_origin(as_path))
        if len(origin) == 1:
            origin = iter(origin).next()
        for entry in data.get("announce", []):
            yield InternalMessage("U", data["timestamp"], collector,
                                  int(data["peer_as"]), data["peer_ip"], entry,
                                  origin, as_path)
Exemple #5
0
def bgpreader_format_bview(collector, data):
    """
    Transform an bgpreader bview line to the internal representation.
    """
    as_path = data[8]
    if len(as_path) > 0:
        origin = frozenset(get_as_origin(as_path))
        if len(origin) == 1:
            origin = iter(origin).next()
        yield InternalMessage("F", data[1], data[3], int(data[4]), data[5],
                              data[6], origin, as_path)
Exemple #6
0
def kafka_format(collector, message):
    data = json.loads(message)
    as_path = data.get("as_path", None)
    if as_path is not None:
        origins = frozenset(get_as_origin(as_path))
        yield InternalMessage(data.get("type", "U"),
                              data["timestamp"],
                              collector,
                              int(data["peer_as"]),
                              data["peer_ip"],
                              data["prefix"],
                              origins,
                              as_path)
    else:
        yield InternalMessage("W",
                              data["timestamp"],
                              collector,
                              int(data["peer_as"]),
                              data["peer_ip"],
                              data["prefix"],
                              None,
                              None)
Exemple #7
0
def mabo_format_td2(collector, data):
    """
    Transform an mabo table dump v2 message to the internal representation.
    """
    for entry in data.get("entries", []):
        as_path = entry["as_path"]
        if len(as_path) == 0:
            # skip announces from IGP
            continue
        origin = frozenset(get_as_origin(as_path))
        if len(origin) == 1:
            origin = iter(origin).next()
        yield InternalMessage("F", data["timestamp"], collector,
                              int(entry["peer_as"]), entry["peer_ip"],
                              data["prefix"], origin, as_path)
Exemple #8
0
def bgpreader_format_bview(collector, data):
    """
    Transform an bgpreader bview line to the internal representation.
    """
    as_path = data[8]
    if len(as_path) > 0:
        try:
            origin = frozenset(get_as_origin(as_path))
        except:
            logger.warning("invalid AS_PATH %s", as_path)
        else:
            if len(origin) == 1:
                origin = iter(origin).next()
            yield InternalMessage("F", data[1], data[3], int(data[4]), data[5],
                                  data[6], origin, as_path)