1*212c1933SFabiano Rosas# 2*212c1933SFabiano Rosas# Migration test migration operation progress 3*212c1933SFabiano Rosas# 4*212c1933SFabiano Rosas# Copyright (c) 2016 Red Hat, Inc. 5*212c1933SFabiano Rosas# 6*212c1933SFabiano Rosas# This library is free software; you can redistribute it and/or 7*212c1933SFabiano Rosas# modify it under the terms of the GNU Lesser General Public 8*212c1933SFabiano Rosas# License as published by the Free Software Foundation; either 9*212c1933SFabiano Rosas# version 2.1 of the License, or (at your option) any later version. 10*212c1933SFabiano Rosas# 11*212c1933SFabiano Rosas# This library is distributed in the hope that it will be useful, 12*212c1933SFabiano Rosas# but WITHOUT ANY WARRANTY; without even the implied warranty of 13*212c1933SFabiano Rosas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14*212c1933SFabiano Rosas# Lesser General Public License for more details. 15*212c1933SFabiano Rosas# 16*212c1933SFabiano Rosas# You should have received a copy of the GNU Lesser General Public 17*212c1933SFabiano Rosas# License along with this library; if not, see <http://www.gnu.org/licenses/>. 18*212c1933SFabiano Rosas# 19*212c1933SFabiano Rosas 20*212c1933SFabiano Rosas 21*212c1933SFabiano Rosasclass ProgressStats(object): 22*212c1933SFabiano Rosas 23*212c1933SFabiano Rosas def __init__(self, 24*212c1933SFabiano Rosas transferred_bytes, 25*212c1933SFabiano Rosas remaining_bytes, 26*212c1933SFabiano Rosas total_bytes, 27*212c1933SFabiano Rosas duplicate_pages, 28*212c1933SFabiano Rosas skipped_pages, 29*212c1933SFabiano Rosas normal_pages, 30*212c1933SFabiano Rosas normal_bytes, 31*212c1933SFabiano Rosas dirty_rate_pps, 32*212c1933SFabiano Rosas transfer_rate_mbs, 33*212c1933SFabiano Rosas iterations): 34*212c1933SFabiano Rosas self._transferred_bytes = transferred_bytes 35*212c1933SFabiano Rosas self._remaining_bytes = remaining_bytes 36*212c1933SFabiano Rosas self._total_bytes = total_bytes 37*212c1933SFabiano Rosas self._duplicate_pages = duplicate_pages 38*212c1933SFabiano Rosas self._skipped_pages = skipped_pages 39*212c1933SFabiano Rosas self._normal_pages = normal_pages 40*212c1933SFabiano Rosas self._normal_bytes = normal_bytes 41*212c1933SFabiano Rosas self._dirty_rate_pps = dirty_rate_pps 42*212c1933SFabiano Rosas self._transfer_rate_mbs = transfer_rate_mbs 43*212c1933SFabiano Rosas self._iterations = iterations 44*212c1933SFabiano Rosas 45*212c1933SFabiano Rosas def serialize(self): 46*212c1933SFabiano Rosas return { 47*212c1933SFabiano Rosas "transferred_bytes": self._transferred_bytes, 48*212c1933SFabiano Rosas "remaining_bytes": self._remaining_bytes, 49*212c1933SFabiano Rosas "total_bytes": self._total_bytes, 50*212c1933SFabiano Rosas "duplicate_pages": self._duplicate_pages, 51*212c1933SFabiano Rosas "skipped_pages": self._skipped_pages, 52*212c1933SFabiano Rosas "normal_pages": self._normal_pages, 53*212c1933SFabiano Rosas "normal_bytes": self._normal_bytes, 54*212c1933SFabiano Rosas "dirty_rate_pps": self._dirty_rate_pps, 55*212c1933SFabiano Rosas "transfer_rate_mbs": self._transfer_rate_mbs, 56*212c1933SFabiano Rosas "iterations": self._iterations, 57*212c1933SFabiano Rosas } 58*212c1933SFabiano Rosas 59*212c1933SFabiano Rosas @classmethod 60*212c1933SFabiano Rosas def deserialize(cls, data): 61*212c1933SFabiano Rosas return cls( 62*212c1933SFabiano Rosas data["transferred_bytes"], 63*212c1933SFabiano Rosas data["remaining_bytes"], 64*212c1933SFabiano Rosas data["total_bytes"], 65*212c1933SFabiano Rosas data["duplicate_pages"], 66*212c1933SFabiano Rosas data["skipped_pages"], 67*212c1933SFabiano Rosas data["normal_pages"], 68*212c1933SFabiano Rosas data["normal_bytes"], 69*212c1933SFabiano Rosas data["dirty_rate_pps"], 70*212c1933SFabiano Rosas data["transfer_rate_mbs"], 71*212c1933SFabiano Rosas data["iterations"]) 72*212c1933SFabiano Rosas 73*212c1933SFabiano Rosas 74*212c1933SFabiano Rosasclass Progress(object): 75*212c1933SFabiano Rosas 76*212c1933SFabiano Rosas def __init__(self, 77*212c1933SFabiano Rosas status, 78*212c1933SFabiano Rosas ram, 79*212c1933SFabiano Rosas now, 80*212c1933SFabiano Rosas duration, 81*212c1933SFabiano Rosas downtime, 82*212c1933SFabiano Rosas downtime_expected, 83*212c1933SFabiano Rosas setup_time, 84*212c1933SFabiano Rosas throttle_pcent, 85*212c1933SFabiano Rosas dirty_limit_throttle_time_per_round, 86*212c1933SFabiano Rosas dirty_limit_ring_full_time): 87*212c1933SFabiano Rosas 88*212c1933SFabiano Rosas self._status = status 89*212c1933SFabiano Rosas self._ram = ram 90*212c1933SFabiano Rosas self._now = now 91*212c1933SFabiano Rosas self._duration = duration 92*212c1933SFabiano Rosas self._downtime = downtime 93*212c1933SFabiano Rosas self._downtime_expected = downtime_expected 94*212c1933SFabiano Rosas self._setup_time = setup_time 95*212c1933SFabiano Rosas self._throttle_pcent = throttle_pcent 96*212c1933SFabiano Rosas self._dirty_limit_throttle_time_per_round = \ 97*212c1933SFabiano Rosas dirty_limit_throttle_time_per_round 98*212c1933SFabiano Rosas self._dirty_limit_ring_full_time = \ 99*212c1933SFabiano Rosas dirty_limit_ring_full_time 100*212c1933SFabiano Rosas 101*212c1933SFabiano Rosas def serialize(self): 102*212c1933SFabiano Rosas return { 103*212c1933SFabiano Rosas "status": self._status, 104*212c1933SFabiano Rosas "ram": self._ram.serialize(), 105*212c1933SFabiano Rosas "now": self._now, 106*212c1933SFabiano Rosas "duration": self._duration, 107*212c1933SFabiano Rosas "downtime": self._downtime, 108*212c1933SFabiano Rosas "downtime_expected": self._downtime_expected, 109*212c1933SFabiano Rosas "setup_time": self._setup_time, 110*212c1933SFabiano Rosas "throttle_pcent": self._throttle_pcent, 111*212c1933SFabiano Rosas "dirty_limit_throttle_time_per_round": 112*212c1933SFabiano Rosas self._dirty_limit_throttle_time_per_round, 113*212c1933SFabiano Rosas "dirty_limit_ring_full_time": 114*212c1933SFabiano Rosas self._dirty_limit_ring_full_time, 115*212c1933SFabiano Rosas } 116*212c1933SFabiano Rosas 117*212c1933SFabiano Rosas @classmethod 118*212c1933SFabiano Rosas def deserialize(cls, data): 119*212c1933SFabiano Rosas return cls( 120*212c1933SFabiano Rosas data["status"], 121*212c1933SFabiano Rosas ProgressStats.deserialize(data["ram"]), 122*212c1933SFabiano Rosas data["now"], 123*212c1933SFabiano Rosas data["duration"], 124*212c1933SFabiano Rosas data["downtime"], 125*212c1933SFabiano Rosas data["downtime_expected"], 126*212c1933SFabiano Rosas data["setup_time"], 127*212c1933SFabiano Rosas data["throttle_pcent"], 128*212c1933SFabiano Rosas data["dirty_limit_throttle_time_per_round"], 129*212c1933SFabiano Rosas data["dirty_limit_ring_full_time"]) 130