Skip to content
Snippets Groups Projects
Commit 3c2baa7b authored by Pelle Koster's avatar Pelle Koster
Browse files

Merge branch 'feature/POL1-773-nokia-checks' into 'develop'

Feature/POL1-773 Provision sensu checks for nokia

See merge request live-projects/brian-polling-manager!8
parents a28a7e9f d30b2c02
No related branches found
No related tags found
No related merge requests found
import logging
import re
from typing import Optional
from brian_polling_manager import sensu
......@@ -38,10 +39,16 @@ class NetconfRouterCheck(sensu.AbstractCheck):
METRIC_FORMAT = ""
METRIC_HANDLERS = None
def __init__(self, ifc_check_params, router: str):
def __init__(self, ifc_check_params, router: str, vendor: Optional[str] = None):
super().__init__()
self.ifc_check_params = ifc_check_params
self.router = router
self.vendor = vendor or self.vendor_from_router_name(router)
@staticmethod
def vendor_from_router_name(router):
# Hacky vendor check
return "nokia" if router.startswith("rt0") else "juniper"
@sensu.AbstractCheck.name.getter
def name(self):
......@@ -53,7 +60,7 @@ class NetconfRouterCheck(sensu.AbstractCheck):
hostname=self.router,
config=self.ifc_check_params["config"],
script=self.ifc_check_params["script"],
args=f"--juniper {self.router} --all",
args=f"--{self.vendor} {self.router} --all",
)
@sensu.AbstractCheck.proxy_entity_name.getter
......@@ -62,11 +69,13 @@ class NetconfRouterCheck(sensu.AbstractCheck):
def refresh(sensu_params, inventory_interfaces):
routers = {ifc["router"] for ifc in inventory_interfaces}
routers_w_vendor = {
(ifc["router"], ifc.get("vendor")) for ifc in inventory_interfaces
}
required_checks = [
NetconfRouterCheck(sensu_params["interface-check"], router)
for router in routers
NetconfRouterCheck(sensu_params["interface-check"], router, vendor=vendor)
for router, vendor in routers_w_vendor
]
r1 = sensu.refresh(sensu_params, [], load_deprecated_ifc_checks(sensu_params))
......
......@@ -40,7 +40,7 @@ INVENTORY_INTERFACES_SCHEMA = {
'router': {'type': 'string'},
'name': {'type': 'string'},
},
'required': ['router', 'name',],
'required': ['router', 'name'],
}
},
......
......@@ -118,11 +118,14 @@ def mocked_sensu():
"additionalProperties": True,
}
def get_checks(_):
return (200, {}, json.dumps(list(saved_sensu_checks.values())))
# mocked api for returning all checks
responses.add_callback(
method=responses.GET,
url=re.compile(r".*sensu.+/api/core/v2/namespaces/[^\/]+/checks$"),
callback=lambda _: (200, {}, json.dumps(list(saved_sensu_checks.values()))),
callback=get_checks,
)
def new_check_callback(request):
......
......@@ -46,5 +46,14 @@
}
],
"snmp-index": 9999
},
{
"router": "rt0.on.uk.lab.office.geant.net",
"name": "1/1/c2/3",
"bundle": [],
"bundle-parents": [],
"description": "blah blah nokia router",
"circuits": [],
"snmp-index": 9999
}
]
......@@ -53,14 +53,29 @@ def test_router_check(config):
assert check["output_metric_handlers"] == []
def test_nokia_router_check(config):
check = interfaces.NetconfRouterCheck(
config["sensu"]["interface-check"], "xyz", vendor="nokia"
).to_dict()
assert check["command"] == (
"/home/brian_checks/venv/get-interface-stats "
"--config /var/lib/sensu/conf/get-interface-stats.config.json "
"--nokia xyz --all"
)
assert check["proxy_entity_name"] == "xyz"
assert check["metadata"]["name"] == "rtr-xyz"
assert check["output_metric_format"] == ""
assert check["output_metric_handlers"] == []
@responses.activate
def test_cleans_up_old_interface_checks(config, mocked_sensu, mocked_inventory):
routers = inventory.load_interfaces("http://inventory1")
result = interfaces.refresh(config["sensu"], inventory_interfaces=routers)
assert result == {"checks": 3, "input": 2, "created": 2, "updated": 0, "deleted": 3}
assert result == {"checks": 3, "input": 3, "created": 3, "updated": 0, "deleted": 3}
sensu.clear_cached_values()
result = interfaces.refresh(config["sensu"], inventory_interfaces=routers)
assert result == {"checks": 2, "input": 2, "created": 0, "updated": 0, "deleted": 0}
assert result == {"checks": 3, "input": 3, "created": 0, "updated": 0, "deleted": 0}
@responses.activate
......@@ -69,7 +84,7 @@ def test_runs_idempotent(config, mocked_sensu, mocked_inventory):
interfaces.refresh(config["sensu"], inventory_interfaces=routers)
sensu.clear_cached_values()
result = interfaces.refresh(config["sensu"], inventory_interfaces=routers)
assert result == {"checks": 2, "input": 2, "created": 0, "updated": 0, "deleted": 0}
assert result == {"checks": 3, "input": 3, "created": 0, "updated": 0, "deleted": 0}
class DummyCheck(sensu.AbstractCheck):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment