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/create.py
|
||||
src/virtManager/createinterface.py
|
||||
src/virtManager/createmeter.py
|
||||
src/virtManager/createnet.py
|
||||
src/virtManager/createpool.py
|
||||
src/virtManager/createvol.py
|
||||
|
@ -32,7 +32,6 @@ from virtinst import (VirtualCharDevice, VirtualDevice,
|
||||
import virtManager.util as util
|
||||
import virtManager.uihelpers as uihelpers
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
from virtManager.storagebrowse import vmmStorageBrowser
|
||||
from virtManager.baseclass import vmmGObjectUI
|
||||
|
||||
@ -1124,7 +1123,7 @@ class vmmAddHardware(vmmGObjectUI):
|
||||
return
|
||||
|
||||
def do_file_allocate(asyncjob, disk):
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
|
||||
# If creating disk via storage API, we need to thread
|
||||
# off a new connection
|
||||
|
@ -26,9 +26,60 @@ import gtk
|
||||
import gobject
|
||||
|
||||
import libvirt
|
||||
import urlgrabber
|
||||
|
||||
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
|
||||
# code in the run() method every now & then
|
||||
class asyncJobWorker(threading.Thread):
|
||||
@ -118,6 +169,7 @@ class vmmAsyncJob(vmmGObjectUI):
|
||||
self.stage = self.widget("pbar-stage")
|
||||
self.pbar = self.widget("pbar")
|
||||
self.is_pulsing = True
|
||||
self._meter = None
|
||||
|
||||
args = [self] + args
|
||||
self.bg_thread = asyncJobWorker(callback, args)
|
||||
@ -154,6 +206,11 @@ class vmmAsyncJob(vmmGObjectUI):
|
||||
def get_data(self):
|
||||
return self._data
|
||||
|
||||
def get_meter(self):
|
||||
if not self._meter:
|
||||
self._meter = vmmCreateMeter(self)
|
||||
return self._meter
|
||||
|
||||
def can_cancel(self):
|
||||
return bool(self.cancel_job)
|
||||
|
||||
@ -161,7 +218,7 @@ class vmmAsyncJob(vmmGObjectUI):
|
||||
self.bg_thread = None
|
||||
self.cancel_job = None
|
||||
self.cancel_args = None
|
||||
|
||||
self._meter = None
|
||||
|
||||
####################
|
||||
# Internal helpers #
|
||||
|
@ -25,7 +25,6 @@ import gtk
|
||||
|
||||
from virtManager.baseclass import vmmGObjectUI
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
from virtManager.storagebrowse import vmmStorageBrowser
|
||||
from virtManager import util
|
||||
|
||||
@ -823,7 +822,7 @@ class vmmCloneVM(vmmGObjectUI):
|
||||
# Open a seperate connection to install on since this is async
|
||||
logging.debug("Threading off connection to clone VM.")
|
||||
newconn = util.dup_conn(self.conn).vmm
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
|
||||
self.clone_design.orig_connection = newconn
|
||||
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.baseclass import vmmGObjectUI
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
from virtManager.storagebrowse import vmmStorageBrowser
|
||||
from virtManager.details import vmmDetails
|
||||
from virtManager.domain import vmmDomainVirtinst
|
||||
@ -1924,7 +1923,7 @@ class vmmCreate(vmmGObjectUI):
|
||||
self.emit("action-show-vm", self.conn.get_uri(), guest.uuid)
|
||||
|
||||
def do_install(self, asyncjob, guest):
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
|
||||
logging.debug("Starting background install process")
|
||||
|
||||
|
@ -28,7 +28,6 @@ from virtManager import util
|
||||
from virtManager import uihelpers
|
||||
from virtManager.baseclass import vmmGObjectUI
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
|
||||
PAGE_TYPE = 0
|
||||
PAGE_DETAILS = 1
|
||||
@ -1129,7 +1128,7 @@ class vmmCreateInterface(vmmGObjectUI):
|
||||
self.close()
|
||||
|
||||
def do_install(self, asyncjob, activate):
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
error = 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.baseclass import vmmGObjectUI
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
|
||||
from virtinst import Storage
|
||||
|
||||
@ -495,7 +494,7 @@ class vmmCreatePool(vmmGObjectUI):
|
||||
|
||||
# Open a seperate connection to install on since this is async
|
||||
newconn = util.dup_lib_conn(self._pool.conn)
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
self._pool.conn = newconn
|
||||
|
||||
logging.debug("Starting backround pool creation.")
|
||||
|
@ -25,7 +25,6 @@ import gtk
|
||||
from virtManager import util
|
||||
from virtManager.baseclass import vmmGObjectUI
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
|
||||
from virtinst import Storage
|
||||
|
||||
@ -246,7 +245,7 @@ class vmmCreateVolume(vmmGObjectUI):
|
||||
newpool = newconn.storagePoolLookupByName(self.parent_pool.get_name())
|
||||
self.vol.pool = newpool
|
||||
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
logging.debug("Starting backround vol creation.")
|
||||
self.vol.install(meter=meter)
|
||||
|
||||
|
@ -30,7 +30,6 @@ import virtinst
|
||||
from virtManager import util
|
||||
from virtManager.baseclass import vmmGObjectUI
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
|
||||
STORAGE_ROW_CONFIRM = 0
|
||||
STORAGE_ROW_CANT_DELETE = 1
|
||||
@ -160,7 +159,7 @@ class vmmDeleteDialog(vmmGObjectUI):
|
||||
# Open a seperate connection to install on since this is async
|
||||
logging.debug("Threading off connection to delete vol.")
|
||||
newconn = util.dup_conn(self.conn).vmm
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
|
||||
for path in paths:
|
||||
try:
|
||||
|
@ -35,7 +35,6 @@ from virtManager.baseclass import vmmGObject
|
||||
from virtManager.clone import vmmCloneVM
|
||||
from virtManager.connect import vmmConnect
|
||||
from virtManager.connection import vmmConnection
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
from virtManager.preferences import vmmPreferences
|
||||
from virtManager.manager import vmmManager
|
||||
from virtManager.migrate import vmmMigrateDialog
|
||||
@ -950,7 +949,7 @@ class vmmEngine(vmmGObject):
|
||||
def _save_callback(self, asyncjob, vm, file_to_save):
|
||||
conn = util.dup_conn(vm.conn)
|
||||
newvm = conn.get_vm(vm.get_uuid())
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
|
||||
newvm.save(file_to_save, meter=meter)
|
||||
|
||||
|
@ -31,7 +31,6 @@ import libvirt
|
||||
from virtManager import util
|
||||
from virtManager.baseclass import vmmGObjectUI
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
from virtManager.domain import vmmDomain
|
||||
|
||||
def uri_join(uri_tuple):
|
||||
@ -534,7 +533,7 @@ class vmmMigrateDialog(vmmGObjectUI):
|
||||
def _async_migrate(self, asyncjob,
|
||||
origvm, origdconn, migrate_uri, rate, live,
|
||||
secure, max_downtime):
|
||||
meter = vmmCreateMeter(asyncjob)
|
||||
meter = asyncjob.get_meter()
|
||||
|
||||
srcconn = util.dup_conn(origvm.conn)
|
||||
dstconn = util.dup_conn(origdconn)
|
||||
|
Loading…
Reference in New Issue
Block a user