Skip to content
Snippets Groups Projects
Commit f57d5499 authored by Erik Reid's avatar Erik Reid
Browse files

loaded nokia lag/port state data from lab

parent 49ee4880
Branches
Tags
No related merge requests found
"""
"""
import contextlib
import enum
import logging
import typing
from lxml import etree
import ncclient.manager
if typing.TYPE_CHECKING:
from ncclient.lxml_ import NCElement
STATE_NS = 'urn:nokia.com:sros:ns:yang:sr:state'
# TODO: decide if these are really global
DEFAULT_NETCONF_PORT = 830
DEFAULT_NETCONF_CONNECT_TIMEOUT = 5 # seconds
ENDPOINT_TYPES = {'port', 'lag'}
logger = logging.getLogger(__name__)
@contextlib.contextmanager
def _connection(hostname: str, ssh_params: dict, port: int = DEFAULT_NETCONF_PORT):
params = {
'host': hostname,
'port': port,
'device_params': {'name': 'sros'},
'nc_params': {'capabilities': ['urn:nokia.com:nc:pysros:pc']},
'timeout': DEFAULT_NETCONF_CONNECT_TIMEOUT
}
params.update(ssh_params)
conn = ncclient.manager.connect(**params)
conn.async_mode = False
yield conn
def _remove_ns(nc_doc: 'NCElement'):
# convert to etree
etree_doc = etree.fromstring(nc_doc.tostring.decode('utf-8'))
for elem in etree_doc.getiterator():
elem.tag = etree.QName(elem).localname
etree.cleanup_namespaces(etree_doc)
return etree_doc
def get_netconf_interface_info(router_name: str, ssh_params: dict):
def _filter(endpoint_type: str):
# https://github.com/nokia/pysros/blob/main/examples/show_port_counters.py
# https://netdevops.me/2020/nokia-yang-tree-and-path-browser/
# https://github.com/hellt/nokia-yangtree
_f = etree.Element('filter')
_state = etree.SubElement(
_f,
f'{{{STATE_NS}}}state',
nsmap={'nokia-state': STATE_NS})
_endpoint = etree.SubElement(_state, f'{{{STATE_NS}}}{endpoint_type}')
_ = etree.SubElement(_endpoint, f'{{{STATE_NS}}}statistics')
return _f
with _connection(hostname=router_name, ssh_params=ssh_params) as router:
# return {_ept: _remove_ns(router.get(filter=_filter(_ept))) for _ept in ENDPOINT_TYPES}
rsp = {}
for _ept in ENDPOINT_TYPES:
logger.debug(f"Getting {router_name} {_ept} info")
rsp[_ept] = _remove_ns(router.get(filter=_filter(_ept)))
return rsp
def interface_counters(raw_counter_docs):
def interface_counters(ifc_doc):
assert False, "TODO"
if __name__ == '__main__':
from brian_polling_manager.interface_stats import config
import os
config_filename = os.path.join(
os.path.dirname(__file__),
'..', 'config-test.json')
with open(config_filename) as f:
params = config.load(f)
ROUTERS = [
'rt0.lon.uk.lab.office.geant.net',
'rt0.ams.nl.lab.office.geant.net'
]
# rsp = get_interface_info_ncrpc(
raw_counter_docs = get_netconf_interface_info(
router_name=ROUTERS[0],
ssh_params=params['nokia'])
print(interface_counters(raw_counter_docs))
\ No newline at end of file
import pathlib
from brian_polling_manager.interface_stats.vendors import nokia
from lxml import etree
ROUTERS = [
'rt0.lon.uk.lab.office.geant.net',
'rt0.ams.nl.lab.office.geant.net'
]
SSH_PARAMS = {
'ssh_config': '~/.ssh/config.d/routers-jump'
}
def load_estate_interface_info():
for fqdn in ROUTERS:
print(fqdn)
raw_counter_docs = nokia.get_netconf_interface_info(router_name=fqdn, ssh_params=SSH_PARAMS)
file = pathlib.Path(__file__).parent / f"{fqdn}-ports.xml"
file.write_bytes(etree.tostring(raw_counter_docs['port']))
file = pathlib.Path(__file__).parent / f"{fqdn}-lags.xml"
file.write_bytes(etree.tostring(raw_counter_docs['lag']))
if __name__ == "__main__":
load_estate_interface_info()
<rpc-reply message-id="urn:uuid:6050c9ae-f172-48cb-b622-de38a0bb4dc2">
<data>
<state>
<lag>
<lag-name>lag-1</lag-name>
<statistics>
<in-discards>0</in-discards>
<in-errors>0</in-errors>
<in-octets>1085235439</in-octets>
<in-packets>9303665</in-packets>
<in-unknown-protocol-discards>0</in-unknown-protocol-discards>
<in-broadcast-packets>1381</in-broadcast-packets>
<in-multicast-packets>1901289</in-multicast-packets>
<in-unicast-packets>7400995</in-unicast-packets>
<out-discards>0</out-discards>
<out-errors>0</out-errors>
<out-octets>2421077015</out-octets>
<out-packets>9547819</out-packets>
<out-broadcast-packets>2</out-broadcast-packets>
<out-multicast-packets>1938199</out-multicast-packets>
<out-unicast-packets>7609618</out-unicast-packets>
</statistics>
</lag>
<lag>
<lag-name>lag-2</lag-name>
<statistics>
<in-discards>0</in-discards>
<in-errors>0</in-errors>
<in-octets>249901296</in-octets>
<in-packets>1843820</in-packets>
<in-unknown-protocol-discards>0</in-unknown-protocol-discards>
<in-broadcast-packets>13</in-broadcast-packets>
<in-multicast-packets>1842604</in-multicast-packets>
<in-unicast-packets>1203</in-unicast-packets>
<out-discards>0</out-discards>
<out-errors>0</out-errors>
<out-octets>250752335</out-octets>
<out-packets>1843774</out-packets>
<out-broadcast-packets>7</out-broadcast-packets>
<out-multicast-packets>1842135</out-multicast-packets>
<out-unicast-packets>1632</out-unicast-packets>
</statistics>
</lag>
</state>
</data>
</rpc-reply>
\ No newline at end of file
This diff is collapsed.
<rpc-reply message-id="urn:uuid:3894277d-7b25-48f5-8ba9-562f46f6dc8f">
<data>
<state>
<lag>
<lag-name>lag-1</lag-name>
<statistics>
<in-discards>0</in-discards>
<in-errors>0</in-errors>
<in-octets>570547629</in-octets>
<in-packets>4775863</in-packets>
<in-unknown-protocol-discards>0</in-unknown-protocol-discards>
<in-broadcast-packets>1146</in-broadcast-packets>
<in-multicast-packets>1819365</in-multicast-packets>
<in-unicast-packets>2955352</in-unicast-packets>
<out-discards>0</out-discards>
<out-errors>0</out-errors>
<out-octets>2233049747348</out-octets>
<out-packets>1548091286</out-packets>
<out-broadcast-packets>3</out-broadcast-packets>
<out-multicast-packets>1845201</out-multicast-packets>
<out-unicast-packets>1546246082</out-unicast-packets>
</statistics>
</lag>
<lag>
<lag-name>lag-2</lag-name>
<statistics>
<in-discards>0</in-discards>
<in-errors>0</in-errors>
<in-octets>250750598</in-octets>
<in-packets>1843761</in-packets>
<in-unknown-protocol-discards>0</in-unknown-protocol-discards>
<in-broadcast-packets>7</in-broadcast-packets>
<in-multicast-packets>1842122</in-multicast-packets>
<in-unicast-packets>1632</in-unicast-packets>
<out-discards>0</out-discards>
<out-errors>0</out-errors>
<out-octets>249899559</out-octets>
<out-packets>1843807</out-packets>
<out-broadcast-packets>13</out-broadcast-packets>
<out-multicast-packets>1842591</out-multicast-packets>
<out-unicast-packets>1203</out-unicast-packets>
</statistics>
</lag>
<lag>
<lag-name>lag-3</lag-name>
<statistics>
<in-discards>0</in-discards>
<in-errors>0</in-errors>
<in-octets>2929739563029</in-octets>
<in-packets>2082887987</in-packets>
<in-unknown-protocol-discards>0</in-unknown-protocol-discards>
<in-broadcast-packets>1128</in-broadcast-packets>
<in-multicast-packets>1783573</in-multicast-packets>
<in-unicast-packets>2081103286</in-unicast-packets>
<out-discards>0</out-discards>
<out-errors>0</out-errors>
<out-octets>282746343</out-octets>
<out-packets>2269978</out-packets>
<out-broadcast-packets>6</out-broadcast-packets>
<out-multicast-packets>1815908</out-multicast-packets>
<out-unicast-packets>454064</out-unicast-packets>
</statistics>
</lag>
<lag>
<lag-name>lag-7</lag-name>
<statistics>
<in-discards>0</in-discards>
<in-errors>0</in-errors>
<in-octets>2233314244220</in-octets>
<in-packets>1550531221</in-packets>
<in-unknown-protocol-discards>0</in-unknown-protocol-discards>
<in-broadcast-packets>775</in-broadcast-packets>
<in-multicast-packets>1267126</in-multicast-packets>
<in-unicast-packets>1549263320</in-unicast-packets>
<out-discards>0</out-discards>
<out-errors>0</out-errors>
<out-octets>2924753731201</out-octets>
<out-packets>2091108268</out-packets>
<out-broadcast-packets>2</out-broadcast-packets>
<out-multicast-packets>1239821</out-multicast-packets>
<out-unicast-packets>2089868445</out-unicast-packets>
</statistics>
</lag>
</state>
</data>
</rpc-reply>
\ No newline at end of file
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment