in blueprints/cloud-operations/network-quota-monitoring/src/plugins/discover-compute-routerstatus.py [0:0]
def _handle_discovery(resources, response):
'Processes asset batch response and parses router status data.'
LOGGER.info('discovery handle request')
content_type = response.headers['content-type']
routers = [r for r in resources['routers'].values()]
# process batch response
for i, part in enumerate(poor_man_mp_response(content_type,
response.content)):
router = routers[i]
result = part.get('result')
if not result:
LOGGER.info(f'skipping router {router["self_link"]}, no result')
continue
bgp_peer_status = result.get('bgpPeerStatus')
if not bgp_peer_status:
LOGGER.info(f'skipping router {router["self_link"]}, no bgp peer status')
continue
network = result.get('network')
if not network:
LOGGER.info(f'skipping router {router["self_link"]}, no bgp peer status')
continue
if not network.endswith(router['network']):
LOGGER.warn(
f'router network mismatch: got {network} expected {router["network"]}'
)
continue
num_learned_routes = sum(
int(p.get('numLearnedRoutes', 0)) for p in bgp_peer_status)
if router['network'] not in resources[NAME]:
resources[NAME][router['network']] = {}
yield Resource(NAME, router['network'], num_learned_routes,
router['self_link'])
yield