mirror of
https://github.com/virt-manager/virt-manager.git
synced 2024-10-27 01:55:20 +03:00
asyncjob: Provide helper to get meter wrapper
This commit is contained in:
parent
cb777cd7d4
commit
dc78c01edc
@ -16,7 +16,6 @@ src/virtManager/connectauth.py
|
|||||||
src/virtManager/console.py
|
src/virtManager/console.py
|
||||||
src/virtManager/create.py
|
src/virtManager/create.py
|
||||||
src/virtManager/createinterface.py
|
src/virtManager/createinterface.py
|
||||||
src/virtManager/createmeter.py
|
|
||||||
src/virtManager/createnet.py
|
src/virtManager/createnet.py
|
||||||
src/virtManager/createpool.py
|
src/virtManager/createpool.py
|
||||||
src/virtManager/createvol.py
|
src/virtManager/createvol.py
|
||||||
|
@ -32,7 +32,6 @@ from virtinst import (VirtualCharDevice, VirtualDevice,
|
|||||||
import virtManager.util as util
|
import virtManager.util as util
|
||||||
import virtManager.uihelpers as uihelpers
|
import virtManager.uihelpers as uihelpers
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
from virtManager.asyncjob import vmmAsyncJob
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
from virtManager.storagebrowse import vmmStorageBrowser
|
from virtManager.storagebrowse import vmmStorageBrowser
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
|
|
||||||
@ -1124,7 +1123,7 @@ class vmmAddHardware(vmmGObjectUI):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def do_file_allocate(asyncjob, disk):
|
def do_file_allocate(asyncjob, disk):
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
|
|
||||||
# If creating disk via storage API, we need to thread
|
# If creating disk via storage API, we need to thread
|
||||||
# off a new connection
|
# off a new connection
|
||||||
|
@ -26,9 +26,60 @@ import gtk
|
|||||||
import gobject
|
import gobject
|
||||||
|
|
||||||
import libvirt
|
import libvirt
|
||||||
|
import urlgrabber
|
||||||
|
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
|
|
||||||
|
class vmmCreateMeter(urlgrabber.progress.BaseMeter):
|
||||||
|
def __init__(self, asyncjob):
|
||||||
|
# progress meter has to run asynchronously, so pass in the
|
||||||
|
# async job to call back to with progress info
|
||||||
|
urlgrabber.progress.BaseMeter.__init__(self)
|
||||||
|
self.asyncjob = asyncjob
|
||||||
|
self.started = False
|
||||||
|
|
||||||
|
def _do_start(self, now=None):
|
||||||
|
if self.text is not None:
|
||||||
|
text = self.text
|
||||||
|
else:
|
||||||
|
text = self.basename
|
||||||
|
if self.size is None:
|
||||||
|
out = " %5sB" % (0)
|
||||||
|
self.asyncjob.pulse_pbar(out, text)
|
||||||
|
else:
|
||||||
|
out = "%3i%% %5sB" % (0, 0)
|
||||||
|
self.asyncjob.set_pbar_fraction(0, out, text)
|
||||||
|
self.started = True
|
||||||
|
|
||||||
|
def _do_update(self, amount_read, now=None):
|
||||||
|
if self.text is not None:
|
||||||
|
text = self.text
|
||||||
|
else:
|
||||||
|
text = self.basename
|
||||||
|
fread = urlgrabber.progress.format_number(amount_read)
|
||||||
|
if self.size is None:
|
||||||
|
out = " %5sB" % (fread)
|
||||||
|
self.asyncjob.pulse_pbar(out, text)
|
||||||
|
else:
|
||||||
|
frac = self.re.fraction_read()
|
||||||
|
out = "%3i%% %5sB" % (frac * 100, fread)
|
||||||
|
self.asyncjob.set_pbar_fraction(frac, out, text)
|
||||||
|
|
||||||
|
def _do_end(self, amount_read, now=None):
|
||||||
|
if self.text is not None:
|
||||||
|
text = self.text
|
||||||
|
else:
|
||||||
|
text = self.basename
|
||||||
|
fread = urlgrabber.progress.format_number(amount_read)
|
||||||
|
if self.size is None:
|
||||||
|
out = " %5sB" % (fread)
|
||||||
|
self.asyncjob.pulse_pbar(out, text)
|
||||||
|
else:
|
||||||
|
out = "%3i%% %5sB" % (100, fread)
|
||||||
|
self.asyncjob.set_pbar_done(out, text)
|
||||||
|
self.started = False
|
||||||
|
|
||||||
|
|
||||||
# This thin wrapper only exists so we can put debugging
|
# This thin wrapper only exists so we can put debugging
|
||||||
# code in the run() method every now & then
|
# code in the run() method every now & then
|
||||||
class asyncJobWorker(threading.Thread):
|
class asyncJobWorker(threading.Thread):
|
||||||
@ -118,6 +169,7 @@ class vmmAsyncJob(vmmGObjectUI):
|
|||||||
self.stage = self.widget("pbar-stage")
|
self.stage = self.widget("pbar-stage")
|
||||||
self.pbar = self.widget("pbar")
|
self.pbar = self.widget("pbar")
|
||||||
self.is_pulsing = True
|
self.is_pulsing = True
|
||||||
|
self._meter = None
|
||||||
|
|
||||||
args = [self] + args
|
args = [self] + args
|
||||||
self.bg_thread = asyncJobWorker(callback, args)
|
self.bg_thread = asyncJobWorker(callback, args)
|
||||||
@ -154,6 +206,11 @@ class vmmAsyncJob(vmmGObjectUI):
|
|||||||
def get_data(self):
|
def get_data(self):
|
||||||
return self._data
|
return self._data
|
||||||
|
|
||||||
|
def get_meter(self):
|
||||||
|
if not self._meter:
|
||||||
|
self._meter = vmmCreateMeter(self)
|
||||||
|
return self._meter
|
||||||
|
|
||||||
def can_cancel(self):
|
def can_cancel(self):
|
||||||
return bool(self.cancel_job)
|
return bool(self.cancel_job)
|
||||||
|
|
||||||
@ -161,7 +218,7 @@ class vmmAsyncJob(vmmGObjectUI):
|
|||||||
self.bg_thread = None
|
self.bg_thread = None
|
||||||
self.cancel_job = None
|
self.cancel_job = None
|
||||||
self.cancel_args = None
|
self.cancel_args = None
|
||||||
|
self._meter = None
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# Internal helpers #
|
# Internal helpers #
|
||||||
|
@ -25,7 +25,6 @@ import gtk
|
|||||||
|
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
from virtManager.asyncjob import vmmAsyncJob
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
from virtManager.storagebrowse import vmmStorageBrowser
|
from virtManager.storagebrowse import vmmStorageBrowser
|
||||||
from virtManager import util
|
from virtManager import util
|
||||||
|
|
||||||
@ -823,7 +822,7 @@ class vmmCloneVM(vmmGObjectUI):
|
|||||||
# Open a seperate connection to install on since this is async
|
# Open a seperate connection to install on since this is async
|
||||||
logging.debug("Threading off connection to clone VM.")
|
logging.debug("Threading off connection to clone VM.")
|
||||||
newconn = util.dup_conn(self.conn).vmm
|
newconn = util.dup_conn(self.conn).vmm
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
|
|
||||||
self.clone_design.orig_connection = newconn
|
self.clone_design.orig_connection = newconn
|
||||||
for d in self.clone_design.clone_virtual_disks:
|
for d in self.clone_design.clone_virtual_disks:
|
||||||
|
@ -30,7 +30,6 @@ from virtManager import util
|
|||||||
from virtManager.mediadev import MEDIA_CDROM
|
from virtManager.mediadev import MEDIA_CDROM
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
from virtManager.asyncjob import vmmAsyncJob
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
from virtManager.storagebrowse import vmmStorageBrowser
|
from virtManager.storagebrowse import vmmStorageBrowser
|
||||||
from virtManager.details import vmmDetails
|
from virtManager.details import vmmDetails
|
||||||
from virtManager.domain import vmmDomainVirtinst
|
from virtManager.domain import vmmDomainVirtinst
|
||||||
@ -1924,7 +1923,7 @@ class vmmCreate(vmmGObjectUI):
|
|||||||
self.emit("action-show-vm", self.conn.get_uri(), guest.uuid)
|
self.emit("action-show-vm", self.conn.get_uri(), guest.uuid)
|
||||||
|
|
||||||
def do_install(self, asyncjob, guest):
|
def do_install(self, asyncjob, guest):
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
|
|
||||||
logging.debug("Starting background install process")
|
logging.debug("Starting background install process")
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@ from virtManager import util
|
|||||||
from virtManager import uihelpers
|
from virtManager import uihelpers
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
from virtManager.asyncjob import vmmAsyncJob
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
|
|
||||||
PAGE_TYPE = 0
|
PAGE_TYPE = 0
|
||||||
PAGE_DETAILS = 1
|
PAGE_DETAILS = 1
|
||||||
@ -1129,7 +1128,7 @@ class vmmCreateInterface(vmmGObjectUI):
|
|||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def do_install(self, asyncjob, activate):
|
def do_install(self, asyncjob, activate):
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
error = None
|
error = None
|
||||||
details = None
|
details = None
|
||||||
|
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2006 Red Hat, Inc.
|
|
||||||
# Copyright (C) 2006 Hugh O. Brock <hbrock@redhat.com>
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
||||||
# MA 02110-1301 USA.
|
|
||||||
#
|
|
||||||
|
|
||||||
import urlgrabber.progress as progress
|
|
||||||
|
|
||||||
class vmmCreateMeter(progress.BaseMeter):
|
|
||||||
def __init__(self, asyncjob):
|
|
||||||
# progress meter has to run asynchronously, so pass in the
|
|
||||||
# async job to call back to with progress info
|
|
||||||
progress.BaseMeter.__init__(self)
|
|
||||||
self.asyncjob = asyncjob
|
|
||||||
self.started = False
|
|
||||||
|
|
||||||
def _do_start(self, now=None):
|
|
||||||
if self.text is not None:
|
|
||||||
text = self.text
|
|
||||||
else:
|
|
||||||
text = self.basename
|
|
||||||
if self.size is None:
|
|
||||||
out = " %5sB" % (0)
|
|
||||||
self.asyncjob.pulse_pbar(out, text)
|
|
||||||
else:
|
|
||||||
out = "%3i%% %5sB" % (0, 0)
|
|
||||||
self.asyncjob.set_pbar_fraction(0, out, text)
|
|
||||||
self.started = True
|
|
||||||
|
|
||||||
def _do_update(self, amount_read, now=None):
|
|
||||||
if self.text is not None:
|
|
||||||
text = self.text
|
|
||||||
else:
|
|
||||||
text = self.basename
|
|
||||||
fread = progress.format_number(amount_read)
|
|
||||||
if self.size is None:
|
|
||||||
out = " %5sB" % (fread)
|
|
||||||
self.asyncjob.pulse_pbar(out, text)
|
|
||||||
else:
|
|
||||||
frac = self.re.fraction_read()
|
|
||||||
out = "%3i%% %5sB" % (frac * 100, fread)
|
|
||||||
self.asyncjob.set_pbar_fraction(frac, out, text)
|
|
||||||
|
|
||||||
def _do_end(self, amount_read, now=None):
|
|
||||||
if self.text is not None:
|
|
||||||
text = self.text
|
|
||||||
else:
|
|
||||||
text = self.basename
|
|
||||||
fread = progress.format_number(amount_read)
|
|
||||||
if self.size is None:
|
|
||||||
out = " %5sB" % (fread)
|
|
||||||
self.asyncjob.pulse_pbar(out, text)
|
|
||||||
else:
|
|
||||||
out = "%3i%% %5sB" % (100, fread)
|
|
||||||
self.asyncjob.set_pbar_done(out, text)
|
|
||||||
self.started = False
|
|
@ -26,7 +26,6 @@ import logging
|
|||||||
from virtManager import util
|
from virtManager import util
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
from virtManager.asyncjob import vmmAsyncJob
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
|
|
||||||
from virtinst import Storage
|
from virtinst import Storage
|
||||||
|
|
||||||
@ -495,7 +494,7 @@ class vmmCreatePool(vmmGObjectUI):
|
|||||||
|
|
||||||
# Open a seperate connection to install on since this is async
|
# Open a seperate connection to install on since this is async
|
||||||
newconn = util.dup_lib_conn(self._pool.conn)
|
newconn = util.dup_lib_conn(self._pool.conn)
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
self._pool.conn = newconn
|
self._pool.conn = newconn
|
||||||
|
|
||||||
logging.debug("Starting backround pool creation.")
|
logging.debug("Starting backround pool creation.")
|
||||||
|
@ -25,7 +25,6 @@ import gtk
|
|||||||
from virtManager import util
|
from virtManager import util
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
from virtManager.asyncjob import vmmAsyncJob
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
|
|
||||||
from virtinst import Storage
|
from virtinst import Storage
|
||||||
|
|
||||||
@ -246,7 +245,7 @@ class vmmCreateVolume(vmmGObjectUI):
|
|||||||
newpool = newconn.storagePoolLookupByName(self.parent_pool.get_name())
|
newpool = newconn.storagePoolLookupByName(self.parent_pool.get_name())
|
||||||
self.vol.pool = newpool
|
self.vol.pool = newpool
|
||||||
|
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
logging.debug("Starting backround vol creation.")
|
logging.debug("Starting backround vol creation.")
|
||||||
self.vol.install(meter=meter)
|
self.vol.install(meter=meter)
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ import virtinst
|
|||||||
from virtManager import util
|
from virtManager import util
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
from virtManager.asyncjob import vmmAsyncJob
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
|
|
||||||
STORAGE_ROW_CONFIRM = 0
|
STORAGE_ROW_CONFIRM = 0
|
||||||
STORAGE_ROW_CANT_DELETE = 1
|
STORAGE_ROW_CANT_DELETE = 1
|
||||||
@ -160,7 +159,7 @@ class vmmDeleteDialog(vmmGObjectUI):
|
|||||||
# Open a seperate connection to install on since this is async
|
# Open a seperate connection to install on since this is async
|
||||||
logging.debug("Threading off connection to delete vol.")
|
logging.debug("Threading off connection to delete vol.")
|
||||||
newconn = util.dup_conn(self.conn).vmm
|
newconn = util.dup_conn(self.conn).vmm
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
|
|
||||||
for path in paths:
|
for path in paths:
|
||||||
try:
|
try:
|
||||||
|
@ -35,7 +35,6 @@ from virtManager.baseclass import vmmGObject
|
|||||||
from virtManager.clone import vmmCloneVM
|
from virtManager.clone import vmmCloneVM
|
||||||
from virtManager.connect import vmmConnect
|
from virtManager.connect import vmmConnect
|
||||||
from virtManager.connection import vmmConnection
|
from virtManager.connection import vmmConnection
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
from virtManager.preferences import vmmPreferences
|
from virtManager.preferences import vmmPreferences
|
||||||
from virtManager.manager import vmmManager
|
from virtManager.manager import vmmManager
|
||||||
from virtManager.migrate import vmmMigrateDialog
|
from virtManager.migrate import vmmMigrateDialog
|
||||||
@ -950,7 +949,7 @@ class vmmEngine(vmmGObject):
|
|||||||
def _save_callback(self, asyncjob, vm, file_to_save):
|
def _save_callback(self, asyncjob, vm, file_to_save):
|
||||||
conn = util.dup_conn(vm.conn)
|
conn = util.dup_conn(vm.conn)
|
||||||
newvm = conn.get_vm(vm.get_uuid())
|
newvm = conn.get_vm(vm.get_uuid())
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
|
|
||||||
newvm.save(file_to_save, meter=meter)
|
newvm.save(file_to_save, meter=meter)
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ import libvirt
|
|||||||
from virtManager import util
|
from virtManager import util
|
||||||
from virtManager.baseclass import vmmGObjectUI
|
from virtManager.baseclass import vmmGObjectUI
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
from virtManager.asyncjob import vmmAsyncJob
|
||||||
from virtManager.createmeter import vmmCreateMeter
|
|
||||||
from virtManager.domain import vmmDomain
|
from virtManager.domain import vmmDomain
|
||||||
|
|
||||||
def uri_join(uri_tuple):
|
def uri_join(uri_tuple):
|
||||||
@ -534,7 +533,7 @@ class vmmMigrateDialog(vmmGObjectUI):
|
|||||||
def _async_migrate(self, asyncjob,
|
def _async_migrate(self, asyncjob,
|
||||||
origvm, origdconn, migrate_uri, rate, live,
|
origvm, origdconn, migrate_uri, rate, live,
|
||||||
secure, max_downtime):
|
secure, max_downtime):
|
||||||
meter = vmmCreateMeter(asyncjob)
|
meter = asyncjob.get_meter()
|
||||||
|
|
||||||
srcconn = util.dup_conn(origvm.conn)
|
srcconn = util.dup_conn(origvm.conn)
|
||||||
dstconn = util.dup_conn(origdconn)
|
dstconn = util.dup_conn(origdconn)
|
||||||
|
Loading…
Reference in New Issue
Block a user