make journal event handling more generic and also not drop events

This commit is contained in:
Michael Hudson-Doyle 2017-09-28 17:23:54 -04:00
parent 2c6fb9ed99
commit 5ab2f6c972
1 changed files with 12 additions and 10 deletions

View File

@ -95,10 +95,7 @@ class InstallProgressController(BaseController):
log.debug("completed %s", cmd) log.debug("completed %s", cmd)
return cp.returncode return cp.returncode
def curtin_event(self): def curtin_event(self, event):
if self.journal_reader.process() != journal.APPEND:
return
event = self.journal_reader.get_next()
event_type = event.get("CURTIN_EVENT_TYPE") event_type = event.get("CURTIN_EVENT_TYPE")
if random.randrange(1000) == 0 or len(event) > 0: if random.randrange(1000) == 0 or len(event) > 0:
log.debug("got curtin event from journald: %r", event) log.debug("got curtin event from journald: %r", event)
@ -117,11 +114,16 @@ class InstallProgressController(BaseController):
desc = "" desc = ""
self.ui.set_footer("Running install... %s" % (desc,)) self.ui.set_footer("Running install... %s" % (desc,))
def start_event_listener(self): def start_journald_listener(self, identifier, callback):
self.journal_reader = journal.Reader() reader = journal.Reader()
self.journal_reader.seek_tail() reader.seek_tail()
self.journal_reader.add_match("SYSLOG_IDENTIFIER=curtin_event") reader.add_match("SYSLOG_IDENTIFIER={}".format(identifier))
self.journal_reader_handle = self.loop.watch_file(self.journal_reader.fileno(), self.curtin_event) def watch():
if reader.process() != journal.APPEND:
return
for event in reader:
callback(event)
self.loop.watch_file(reader.fileno(), watch)
def curtin_start_install(self): def curtin_start_install(self):
log.debug('Curtin Install: calling curtin with ' log.debug('Curtin Install: calling curtin with '
@ -131,7 +133,7 @@ class InstallProgressController(BaseController):
self.start_journald_forwarder() self.start_journald_forwarder()
self.start_event_listener() self.start_journald_listener("curtin_event", self.curtin_event)
curtin_write_reporting_config(self.reporting_url) curtin_write_reporting_config(self.reporting_url)