diff --git a/inventory_provider/routes/poller.py b/inventory_provider/routes/poller.py index 52fcd5dc5065ae919629fe6d732542c5dd8624ce..bbc3b5d5720246d9639f48dbf05609940c5e9f4e 100644 --- a/inventory_provider/routes/poller.py +++ b/inventory_provider/routes/poller.py @@ -88,10 +88,9 @@ def poller_interface_oids(hostname): @common.require_accepts_json def service_category_interfaces(category): - def _interfaces(): - r = common.get_current_redis() - for k in r.scan_iter(f'interface-services:{category.lower()}:*'): - cached_ifc = r.get(k.decode('utf-8')).decode('utf-8') + def _interfaces(rc, cat): + for k in rc.scan_iter(f'interface-services:{cat}:*'): + cached_ifc = rc.get(k.decode('utf-8')).decode('utf-8') cached_ifc = json.loads(cached_ifc) basic_ifc_info = dict() for k in ['description', 'interface', 'router']: @@ -104,12 +103,22 @@ def service_category_interfaces(category): ifc.update(basic_ifc_info) yield ifc - result = list(_interfaces()) + category = category.lower() - if not result: - return Response( - response=f'no info available for service category {category}', - status=404, - mimetype="text/html") + r = common.get_current_redis() + cache_key = f'classifier-cache:poller:service:{category}' + result = r.get(cache_key) + + if result: + result = json.loads(result.decode('utf-8')) + else: + result = list(_interfaces(r, category)) + if result: + r.set(cache_key, json.dumps(result).encode('utf-8')) + else: + return Response( + response=f'no info available for service category {category}', + status=404, + mimetype="text/html") return jsonify(result) diff --git a/test/test_junosspace_io.py b/test/test_junos_devices_query.py similarity index 100% rename from test/test_junosspace_io.py rename to test/test_junos_devices_query.py