def virtEvent(uri):
    # Run a background thread with the event loop
    virEventLoopNativeStart()

    # Connect libbert - If be disconnected, reprocess.
    while True:
        vc = libvirt.openReadOnly(uri)

        # Event callback settings
        callback_ids = []
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE,
                                        myDomainEventCallback, None)
        callback_ids.append(cid)
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_REBOOT,
                                        myDomainEventRebootCallback, None)
        callback_ids.append(cid)
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_RTC_CHANGE,
                                        myDomainEventRTCChangeCallback, None)
        callback_ids.append(cid)
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR,
                                        myDomainEventIOErrorCallback, None)
        callback_ids.append(cid)
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_WATCHDOG,
                                        myDomainEventWatchdogCallback, None)
        callback_ids.append(cid)
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_GRAPHICS,
                                        myDomainEventGraphicsCallback, None)
        callback_ids.append(cid)
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DISK_CHANGE,
                                        myDomainEventDiskChangeCallback, None)
        callback_ids.append(cid)
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON,
                                        myDomainEventIOErrorReasonCallback, None)
        callback_ids.append(cid)
        cid = vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
                                        myDomainEventGenericCallback, None)
        callback_ids.append(cid)

        # Connection monitoring.
        vc.setKeepAlive(5, 3)
        while vc.isAlive() == 1:
            time.sleep(1)

        # If connection between libvirtd was lost, clear callback connection.
        evf.warn_log('Libvirt Connection Closed Unexpectedly.')
        for cid in callback_ids:
            try:
                vc.domainEventDeregisterAny(cid)
            except:
                pass
        vc.close()
        del vc
        time.sleep(3)
def errHandler(ctxt, err):
    global errno
    # print "libvirt Error(%s)" % (err[2])
    evf.warn_log(err[2])
    errno = err