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 logging
import re import re
from typing import Optional
from brian_polling_manager import sensu from brian_polling_manager import sensu
...@@ -38,10 +39,16 @@ class NetconfRouterCheck(sensu.AbstractCheck): ...@@ -38,10 +39,16 @@ class NetconfRouterCheck(sensu.AbstractCheck):
METRIC_FORMAT = "" METRIC_FORMAT = ""
METRIC_HANDLERS = None 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__() super().__init__()
self.ifc_check_params = ifc_check_params self.ifc_check_params = ifc_check_params
self.router = router 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 @sensu.AbstractCheck.name.getter
def name(self): def name(self):
...@@ -53,7 +60,7 @@ class NetconfRouterCheck(sensu.AbstractCheck): ...@@ -53,7 +60,7 @@ class NetconfRouterCheck(sensu.AbstractCheck):
hostname=self.router, hostname=self.router,
config=self.ifc_check_params["config"], config=self.ifc_check_params["config"],
script=self.ifc_check_params["script"], 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 @sensu.AbstractCheck.proxy_entity_name.getter
...@@ -62,11 +69,13 @@ class NetconfRouterCheck(sensu.AbstractCheck): ...@@ -62,11 +69,13 @@ class NetconfRouterCheck(sensu.AbstractCheck):
def refresh(sensu_params, inventory_interfaces): 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 = [ required_checks = [
NetconfRouterCheck(sensu_params["interface-check"], router) NetconfRouterCheck(sensu_params["interface-check"], router, vendor=vendor)
for router in routers for router, vendor in routers_w_vendor
] ]
r1 = sensu.refresh(sensu_params, [], load_deprecated_ifc_checks(sensu_params)) r1 = sensu.refresh(sensu_params, [], load_deprecated_ifc_checks(sensu_params))
......
...@@ -40,7 +40,7 @@ INVENTORY_INTERFACES_SCHEMA = { ...@@ -40,7 +40,7 @@ INVENTORY_INTERFACES_SCHEMA = {
'router': {'type': 'string'}, 'router': {'type': 'string'},
'name': {'type': 'string'}, 'name': {'type': 'string'},
}, },
'required': ['router', 'name',], 'required': ['router', 'name'],
} }
}, },
......
...@@ -118,11 +118,14 @@ def mocked_sensu(): ...@@ -118,11 +118,14 @@ def mocked_sensu():
"additionalProperties": True, "additionalProperties": True,
} }
def get_checks(_):
return (200, {}, json.dumps(list(saved_sensu_checks.values())))
# mocked api for returning all checks # mocked api for returning all checks
responses.add_callback( responses.add_callback(
method=responses.GET, method=responses.GET,
url=re.compile(r".*sensu.+/api/core/v2/namespaces/[^\/]+/checks$"), 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): def new_check_callback(request):
......
...@@ -46,5 +46,14 @@ ...@@ -46,5 +46,14 @@
} }
], ],
"snmp-index": 9999 "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): ...@@ -53,14 +53,29 @@ def test_router_check(config):
assert check["output_metric_handlers"] == [] 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 @responses.activate
def test_cleans_up_old_interface_checks(config, mocked_sensu, mocked_inventory): def test_cleans_up_old_interface_checks(config, mocked_sensu, mocked_inventory):
routers = inventory.load_interfaces("http://inventory1") routers = inventory.load_interfaces("http://inventory1")
result = interfaces.refresh(config["sensu"], inventory_interfaces=routers) 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() sensu.clear_cached_values()
result = interfaces.refresh(config["sensu"], inventory_interfaces=routers) 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 @responses.activate
...@@ -69,7 +84,7 @@ def test_runs_idempotent(config, mocked_sensu, mocked_inventory): ...@@ -69,7 +84,7 @@ def test_runs_idempotent(config, mocked_sensu, mocked_inventory):
interfaces.refresh(config["sensu"], inventory_interfaces=routers) interfaces.refresh(config["sensu"], inventory_interfaces=routers)
sensu.clear_cached_values() sensu.clear_cached_values()
result = interfaces.refresh(config["sensu"], inventory_interfaces=routers) 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): 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