1409437e1SDaniel P. Berrange# 2409437e1SDaniel P. Berrange# Migration test output result reporting 3409437e1SDaniel P. Berrange# 4409437e1SDaniel P. Berrange# Copyright (c) 2016 Red Hat, Inc. 5409437e1SDaniel P. Berrange# 6409437e1SDaniel P. Berrange# This library is free software; you can redistribute it and/or 7409437e1SDaniel P. Berrange# modify it under the terms of the GNU Lesser General Public 8409437e1SDaniel P. Berrange# License as published by the Free Software Foundation; either 9*3a645d36SGan Qixin# version 2.1 of the License, or (at your option) any later version. 10409437e1SDaniel P. Berrange# 11409437e1SDaniel P. Berrange# This library is distributed in the hope that it will be useful, 12409437e1SDaniel P. Berrange# but WITHOUT ANY WARRANTY; without even the implied warranty of 13409437e1SDaniel P. Berrange# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14409437e1SDaniel P. Berrange# Lesser General Public License for more details. 15409437e1SDaniel P. Berrange# 16409437e1SDaniel P. Berrange# You should have received a copy of the GNU Lesser General Public 17409437e1SDaniel P. Berrange# License along with this library; if not, see <http://www.gnu.org/licenses/>. 18409437e1SDaniel P. Berrange# 19409437e1SDaniel P. Berrange 20409437e1SDaniel P. Berrangeimport json 21409437e1SDaniel P. Berrange 22409437e1SDaniel P. Berrangefrom guestperf.hardware import Hardware 23409437e1SDaniel P. Berrangefrom guestperf.scenario import Scenario 24409437e1SDaniel P. Berrangefrom guestperf.progress import Progress 25409437e1SDaniel P. Berrangefrom guestperf.timings import Timings 26409437e1SDaniel P. Berrange 27409437e1SDaniel P. Berrangeclass Report(object): 28409437e1SDaniel P. Berrange 29409437e1SDaniel P. Berrange def __init__(self, 30409437e1SDaniel P. Berrange hardware, 31409437e1SDaniel P. Berrange scenario, 32409437e1SDaniel P. Berrange progress_history, 33409437e1SDaniel P. Berrange guest_timings, 34409437e1SDaniel P. Berrange qemu_timings, 35409437e1SDaniel P. Berrange vcpu_timings, 36409437e1SDaniel P. Berrange binary, 37409437e1SDaniel P. Berrange dst_host, 38409437e1SDaniel P. Berrange kernel, 39409437e1SDaniel P. Berrange initrd, 40409437e1SDaniel P. Berrange transport, 41409437e1SDaniel P. Berrange sleep): 42409437e1SDaniel P. Berrange 43409437e1SDaniel P. Berrange self._hardware = hardware 44409437e1SDaniel P. Berrange self._scenario = scenario 45409437e1SDaniel P. Berrange self._progress_history = progress_history 46409437e1SDaniel P. Berrange self._guest_timings = guest_timings 47409437e1SDaniel P. Berrange self._qemu_timings = qemu_timings 48409437e1SDaniel P. Berrange self._vcpu_timings = vcpu_timings 49409437e1SDaniel P. Berrange self._binary = binary 50409437e1SDaniel P. Berrange self._dst_host = dst_host 51409437e1SDaniel P. Berrange self._kernel = kernel 52409437e1SDaniel P. Berrange self._initrd = initrd 53409437e1SDaniel P. Berrange self._transport = transport 54409437e1SDaniel P. Berrange self._sleep = sleep 55409437e1SDaniel P. Berrange 56409437e1SDaniel P. Berrange def serialize(self): 57409437e1SDaniel P. Berrange return { 58409437e1SDaniel P. Berrange "hardware": self._hardware.serialize(), 59409437e1SDaniel P. Berrange "scenario": self._scenario.serialize(), 60409437e1SDaniel P. Berrange "progress_history": [progress.serialize() for progress in self._progress_history], 61409437e1SDaniel P. Berrange "guest_timings": self._guest_timings.serialize(), 62409437e1SDaniel P. Berrange "qemu_timings": self._qemu_timings.serialize(), 63409437e1SDaniel P. Berrange "vcpu_timings": self._vcpu_timings.serialize(), 64409437e1SDaniel P. Berrange "binary": self._binary, 65409437e1SDaniel P. Berrange "dst_host": self._dst_host, 66409437e1SDaniel P. Berrange "kernel": self._kernel, 67409437e1SDaniel P. Berrange "initrd": self._initrd, 68409437e1SDaniel P. Berrange "transport": self._transport, 69409437e1SDaniel P. Berrange "sleep": self._sleep, 70409437e1SDaniel P. Berrange } 71409437e1SDaniel P. Berrange 72409437e1SDaniel P. Berrange @classmethod 73409437e1SDaniel P. Berrange def deserialize(cls, data): 74409437e1SDaniel P. Berrange return cls( 75409437e1SDaniel P. Berrange Hardware.deserialize(data["hardware"]), 76409437e1SDaniel P. Berrange Scenario.deserialize(data["scenario"]), 77409437e1SDaniel P. Berrange [Progress.deserialize(record) for record in data["progress_history"]], 78409437e1SDaniel P. Berrange Timings.deserialize(data["guest_timings"]), 79409437e1SDaniel P. Berrange Timings.deserialize(data["qemu_timings"]), 80409437e1SDaniel P. Berrange Timings.deserialize(data["vcpu_timings"]), 81409437e1SDaniel P. Berrange data["binary"], 82409437e1SDaniel P. Berrange data["dst_host"], 83409437e1SDaniel P. Berrange data["kernel"], 84409437e1SDaniel P. Berrange data["initrd"], 85409437e1SDaniel P. Berrange data["transport"], 86409437e1SDaniel P. Berrange data["sleep"]) 87409437e1SDaniel P. Berrange 88409437e1SDaniel P. Berrange def to_json(self): 89409437e1SDaniel P. Berrange return json.dumps(self.serialize(), indent=4) 90409437e1SDaniel P. Berrange 91409437e1SDaniel P. Berrange @classmethod 92409437e1SDaniel P. Berrange def from_json(cls, data): 93409437e1SDaniel P. Berrange return cls.deserialize(json.loads(data)) 94409437e1SDaniel P. Berrange 95409437e1SDaniel P. Berrange @classmethod 96409437e1SDaniel P. Berrange def from_json_file(cls, filename): 97409437e1SDaniel P. Berrange with open(filename, "r") as fh: 98409437e1SDaniel P. Berrange return cls.deserialize(json.load(fh)) 99