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