1# 2# Migration test output result reporting 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 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 20import json 21 22from guestperf.hardware import Hardware 23from guestperf.scenario import Scenario 24from guestperf.progress import Progress 25from guestperf.timings import Timings 26 27class Report(object): 28 29 def __init__(self, 30 hardware, 31 scenario, 32 progress_history, 33 guest_timings, 34 qemu_timings, 35 vcpu_timings, 36 binary, 37 dst_host, 38 kernel, 39 initrd, 40 transport, 41 sleep): 42 43 self._hardware = hardware 44 self._scenario = scenario 45 self._progress_history = progress_history 46 self._guest_timings = guest_timings 47 self._qemu_timings = qemu_timings 48 self._vcpu_timings = vcpu_timings 49 self._binary = binary 50 self._dst_host = dst_host 51 self._kernel = kernel 52 self._initrd = initrd 53 self._transport = transport 54 self._sleep = sleep 55 56 def serialize(self): 57 return { 58 "hardware": self._hardware.serialize(), 59 "scenario": self._scenario.serialize(), 60 "progress_history": [progress.serialize() for progress in self._progress_history], 61 "guest_timings": self._guest_timings.serialize(), 62 "qemu_timings": self._qemu_timings.serialize(), 63 "vcpu_timings": self._vcpu_timings.serialize(), 64 "binary": self._binary, 65 "dst_host": self._dst_host, 66 "kernel": self._kernel, 67 "initrd": self._initrd, 68 "transport": self._transport, 69 "sleep": self._sleep, 70 } 71 72 @classmethod 73 def deserialize(cls, data): 74 return cls( 75 Hardware.deserialize(data["hardware"]), 76 Scenario.deserialize(data["scenario"]), 77 [Progress.deserialize(record) for record in data["progress_history"]], 78 Timings.deserialize(data["guest_timings"]), 79 Timings.deserialize(data["qemu_timings"]), 80 Timings.deserialize(data["vcpu_timings"]), 81 data["binary"], 82 data["dst_host"], 83 data["kernel"], 84 data["initrd"], 85 data["transport"], 86 data["sleep"]) 87 88 def to_json(self): 89 return json.dumps(self.serialize(), indent=4) 90 91 @classmethod 92 def from_json(cls, data): 93 return cls.deserialize(json.loads(data)) 94 95 @classmethod 96 def from_json_file(cls, filename): 97 with open(filename, "r") as fh: 98 return cls.deserialize(json.load(fh)) 99