1212c1933SFabiano Rosas# 2212c1933SFabiano Rosas# Migration test output result reporting 3212c1933SFabiano Rosas# 4212c1933SFabiano Rosas# Copyright (c) 2016 Red Hat, Inc. 5212c1933SFabiano Rosas# 6212c1933SFabiano Rosas# This library is free software; you can redistribute it and/or 7212c1933SFabiano Rosas# modify it under the terms of the GNU Lesser General Public 8212c1933SFabiano Rosas# License as published by the Free Software Foundation; either 9212c1933SFabiano Rosas# version 2.1 of the License, or (at your option) any later version. 10212c1933SFabiano Rosas# 11212c1933SFabiano Rosas# This library is distributed in the hope that it will be useful, 12212c1933SFabiano Rosas# but WITHOUT ANY WARRANTY; without even the implied warranty of 13212c1933SFabiano Rosas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14212c1933SFabiano Rosas# Lesser General Public License for more details. 15212c1933SFabiano Rosas# 16212c1933SFabiano Rosas# You should have received a copy of the GNU Lesser General Public 17212c1933SFabiano Rosas# License along with this library; if not, see <http://www.gnu.org/licenses/>. 18212c1933SFabiano Rosas# 19212c1933SFabiano Rosas 20212c1933SFabiano Rosasimport json 21212c1933SFabiano Rosas 22212c1933SFabiano Rosasfrom guestperf.hardware import Hardware 23212c1933SFabiano Rosasfrom guestperf.scenario import Scenario 24212c1933SFabiano Rosasfrom guestperf.progress import Progress 25212c1933SFabiano Rosasfrom guestperf.timings import Timings 26212c1933SFabiano Rosas 27*5984870eSHyman Huangclass ReportResult(object): 28*5984870eSHyman Huang 29*5984870eSHyman Huang def __init__(self, success=False): 30*5984870eSHyman Huang self._success = success 31*5984870eSHyman Huang 32*5984870eSHyman Huang def serialize(self): 33*5984870eSHyman Huang return { 34*5984870eSHyman Huang "success": self._success, 35*5984870eSHyman Huang } 36*5984870eSHyman Huang 37*5984870eSHyman Huang @classmethod 38*5984870eSHyman Huang def deserialize(cls, data): 39*5984870eSHyman Huang return cls( 40*5984870eSHyman Huang data["success"]) 41*5984870eSHyman Huang 42*5984870eSHyman Huang 43212c1933SFabiano Rosasclass Report(object): 44212c1933SFabiano Rosas 45212c1933SFabiano Rosas def __init__(self, 46212c1933SFabiano Rosas hardware, 47212c1933SFabiano Rosas scenario, 48212c1933SFabiano Rosas progress_history, 49212c1933SFabiano Rosas guest_timings, 50212c1933SFabiano Rosas qemu_timings, 51212c1933SFabiano Rosas vcpu_timings, 52*5984870eSHyman Huang result, 53212c1933SFabiano Rosas binary, 54212c1933SFabiano Rosas dst_host, 55212c1933SFabiano Rosas kernel, 56212c1933SFabiano Rosas initrd, 57212c1933SFabiano Rosas transport, 58212c1933SFabiano Rosas sleep): 59212c1933SFabiano Rosas 60212c1933SFabiano Rosas self._hardware = hardware 61212c1933SFabiano Rosas self._scenario = scenario 62212c1933SFabiano Rosas self._progress_history = progress_history 63212c1933SFabiano Rosas self._guest_timings = guest_timings 64212c1933SFabiano Rosas self._qemu_timings = qemu_timings 65212c1933SFabiano Rosas self._vcpu_timings = vcpu_timings 66*5984870eSHyman Huang self._result = result 67212c1933SFabiano Rosas self._binary = binary 68212c1933SFabiano Rosas self._dst_host = dst_host 69212c1933SFabiano Rosas self._kernel = kernel 70212c1933SFabiano Rosas self._initrd = initrd 71212c1933SFabiano Rosas self._transport = transport 72212c1933SFabiano Rosas self._sleep = sleep 73212c1933SFabiano Rosas 74212c1933SFabiano Rosas def serialize(self): 75212c1933SFabiano Rosas return { 76212c1933SFabiano Rosas "hardware": self._hardware.serialize(), 77212c1933SFabiano Rosas "scenario": self._scenario.serialize(), 78212c1933SFabiano Rosas "progress_history": [progress.serialize() for progress in self._progress_history], 79212c1933SFabiano Rosas "guest_timings": self._guest_timings.serialize(), 80212c1933SFabiano Rosas "qemu_timings": self._qemu_timings.serialize(), 81212c1933SFabiano Rosas "vcpu_timings": self._vcpu_timings.serialize(), 82*5984870eSHyman Huang "result": self._result.serialize(), 83212c1933SFabiano Rosas "binary": self._binary, 84212c1933SFabiano Rosas "dst_host": self._dst_host, 85212c1933SFabiano Rosas "kernel": self._kernel, 86212c1933SFabiano Rosas "initrd": self._initrd, 87212c1933SFabiano Rosas "transport": self._transport, 88212c1933SFabiano Rosas "sleep": self._sleep, 89212c1933SFabiano Rosas } 90212c1933SFabiano Rosas 91212c1933SFabiano Rosas @classmethod 92212c1933SFabiano Rosas def deserialize(cls, data): 93212c1933SFabiano Rosas return cls( 94212c1933SFabiano Rosas Hardware.deserialize(data["hardware"]), 95212c1933SFabiano Rosas Scenario.deserialize(data["scenario"]), 96212c1933SFabiano Rosas [Progress.deserialize(record) for record in data["progress_history"]], 97212c1933SFabiano Rosas Timings.deserialize(data["guest_timings"]), 98212c1933SFabiano Rosas Timings.deserialize(data["qemu_timings"]), 99212c1933SFabiano Rosas Timings.deserialize(data["vcpu_timings"]), 100*5984870eSHyman Huang ReportResult.deserialize(data["result"]), 101212c1933SFabiano Rosas data["binary"], 102212c1933SFabiano Rosas data["dst_host"], 103212c1933SFabiano Rosas data["kernel"], 104212c1933SFabiano Rosas data["initrd"], 105212c1933SFabiano Rosas data["transport"], 106212c1933SFabiano Rosas data["sleep"]) 107212c1933SFabiano Rosas 108212c1933SFabiano Rosas def to_json(self): 109212c1933SFabiano Rosas return json.dumps(self.serialize(), indent=4) 110212c1933SFabiano Rosas 111212c1933SFabiano Rosas @classmethod 112212c1933SFabiano Rosas def from_json(cls, data): 113212c1933SFabiano Rosas return cls.deserialize(json.loads(data)) 114212c1933SFabiano Rosas 115212c1933SFabiano Rosas @classmethod 116212c1933SFabiano Rosas def from_json_file(cls, filename): 117212c1933SFabiano Rosas with open(filename, "r") as fh: 118212c1933SFabiano Rosas return cls.deserialize(json.load(fh)) 119