diff options
Diffstat (limited to 'rpki/gui/cacheview/util.py')
-rw-r--r-- | rpki/gui/cacheview/util.py | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/rpki/gui/cacheview/util.py b/rpki/gui/cacheview/util.py index 9e8748bf..21430091 100644 --- a/rpki/gui/cacheview/util.py +++ b/rpki/gui/cacheview/util.py @@ -32,6 +32,7 @@ from django.db import transaction import django.db.models import rpki +import rpki.left_right import rpki.gui.app.timestamp from rpki.gui.app.models import Conf, Alert from rpki.gui.cacheview import models @@ -39,6 +40,8 @@ from rpki.rcynic import rcynic_xml_iterator, label_iterator from rpki.sundial import datetime from rpki.irdb.zookeeper import Zookeeper +from lxml.etree import Element, SubElement + logger = logging.getLogger(__name__) @@ -310,23 +313,26 @@ def fetch_published_objects(): """Query rpkid for all objects published by local users, and look up the current validation status of each object. The validation status is used later to send alerts for objects which have transitioned to invalid. - """ + logger.info('querying for published objects') handles = [conf.handle for conf in Conf.objects.all()] - req = [rpki.left_right.list_published_objects_elt.make_pdu(action='list', self_handle=h, tag=h) for h in handles] + q_msg = Element(rpki.left_right.tag_msg, nsmap = rpki.left_right.nsmap, + type = "query", version = rpki.left_right.version) + for h in handles: + SubElement(q_msg, rpki.left_right.tag_list_published_objects, action="list", self_handle=h, tag=h) z = Zookeeper() - pdus = z.call_rpkid(*req) - for pdu in pdus: - if isinstance(pdu, rpki.left_right.list_published_objects_elt): + r_msg = z.call_rpkid(q_msg) + for r_pdu in r_msg: + if r_pdu.tag == rpki.left_right.tag_list_published_objects: # Look up the object in the rcynic cache - qs = models.RepositoryObject.objects.filter(uri=pdu.uri) + qs = models.RepositoryObject.objects.filter(uri=r_pdu.get("uri")) if qs: # get the current validity state valid = qs[0].statuses.filter(status=object_accepted).exists() - uris[pdu.uri] = (pdu.self_handle, valid, False, None) - logger.debug('adding ' + pdu.uri) + uris[r_pdu.get("uri")] = (r_pdu.get("self_handle"), valid, False, None) + logger.debug('adding %s', r_pdu.get("uri")) else: # this object is not in the cache. it was either published # recently, or disappared previously. if it disappeared @@ -334,8 +340,8 @@ def fetch_published_objects(): # omit the uri from the list since we are interested only in # objects which were valid and are no longer valid pass - elif isinstance(pdu, rpki.left_right.report_error_elt): - logging.error('rpkid reported an error: %s', pdu.error_code) + elif r_pdu.tag == rpki.left_right.tag_report_error: + logging.error('rpkid reported an error: %s', r_pdu.get("error_code")) class Handle(object): @@ -353,7 +359,6 @@ class Handle(object): def notify_invalid(): """Send email alerts to the addresses registered in ghostbuster records for any invalid objects that were published by users of this system. - """ logger.info('sending notifications for invalid objects') |