1*409437e1SDaniel P. Berrange# 2*409437e1SDaniel P. Berrange# Migration test output result reporting 3*409437e1SDaniel P. Berrange# 4*409437e1SDaniel P. Berrange# Copyright (c) 2016 Red Hat, Inc. 5*409437e1SDaniel P. Berrange# 6*409437e1SDaniel P. Berrange# This library is free software; you can redistribute it and/or 7*409437e1SDaniel P. Berrange# modify it under the terms of the GNU Lesser General Public 8*409437e1SDaniel P. Berrange# License as published by the Free Software Foundation; either 9*409437e1SDaniel P. Berrange# version 2 of the License, or (at your option) any later version. 10*409437e1SDaniel P. Berrange# 11*409437e1SDaniel P. Berrange# This library is distributed in the hope that it will be useful, 12*409437e1SDaniel P. Berrange# but WITHOUT ANY WARRANTY; without even the implied warranty of 13*409437e1SDaniel P. Berrange# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14*409437e1SDaniel P. Berrange# Lesser General Public License for more details. 15*409437e1SDaniel P. Berrange# 16*409437e1SDaniel P. Berrange# You should have received a copy of the GNU Lesser General Public 17*409437e1SDaniel P. Berrange# License along with this library; if not, see <http://www.gnu.org/licenses/>. 18*409437e1SDaniel P. Berrange# 19*409437e1SDaniel P. Berrange 20*409437e1SDaniel P. Berrangeimport json 21*409437e1SDaniel P. Berrange 22*409437e1SDaniel P. Berrangefrom guestperf.hardware import Hardware 23*409437e1SDaniel P. Berrangefrom guestperf.scenario import Scenario 24*409437e1SDaniel P. Berrangefrom guestperf.progress import Progress 25*409437e1SDaniel P. Berrangefrom guestperf.timings import Timings 26*409437e1SDaniel P. Berrange 27*409437e1SDaniel P. Berrangeclass Report(object): 28*409437e1SDaniel P. Berrange 29*409437e1SDaniel P. Berrange def __init__(self, 30*409437e1SDaniel P. Berrange hardware, 31*409437e1SDaniel P. Berrange scenario, 32*409437e1SDaniel P. Berrange progress_history, 33*409437e1SDaniel P. Berrange guest_timings, 34*409437e1SDaniel P. Berrange qemu_timings, 35*409437e1SDaniel P. Berrange vcpu_timings, 36*409437e1SDaniel P. Berrange binary, 37*409437e1SDaniel P. Berrange dst_host, 38*409437e1SDaniel P. Berrange kernel, 39*409437e1SDaniel P. Berrange initrd, 40*409437e1SDaniel P. Berrange transport, 41*409437e1SDaniel P. Berrange sleep): 42*409437e1SDaniel P. Berrange 43*409437e1SDaniel P. Berrange self._hardware = hardware 44*409437e1SDaniel P. Berrange self._scenario = scenario 45*409437e1SDaniel P. Berrange self._progress_history = progress_history 46*409437e1SDaniel P. Berrange self._guest_timings = guest_timings 47*409437e1SDaniel P. Berrange self._qemu_timings = qemu_timings 48*409437e1SDaniel P. Berrange self._vcpu_timings = vcpu_timings 49*409437e1SDaniel P. Berrange self._binary = binary 50*409437e1SDaniel P. Berrange self._dst_host = dst_host 51*409437e1SDaniel P. Berrange self._kernel = kernel 52*409437e1SDaniel P. Berrange self._initrd = initrd 53*409437e1SDaniel P. Berrange self._transport = transport 54*409437e1SDaniel P. Berrange self._sleep = sleep 55*409437e1SDaniel P. Berrange 56*409437e1SDaniel P. Berrange def serialize(self): 57*409437e1SDaniel P. Berrange return { 58*409437e1SDaniel P. Berrange "hardware": self._hardware.serialize(), 59*409437e1SDaniel P. Berrange "scenario": self._scenario.serialize(), 60*409437e1SDaniel P. Berrange "progress_history": [progress.serialize() for progress in self._progress_history], 61*409437e1SDaniel P. Berrange "guest_timings": self._guest_timings.serialize(), 62*409437e1SDaniel P. Berrange "qemu_timings": self._qemu_timings.serialize(), 63*409437e1SDaniel P. Berrange "vcpu_timings": self._vcpu_timings.serialize(), 64*409437e1SDaniel P. Berrange "binary": self._binary, 65*409437e1SDaniel P. Berrange "dst_host": self._dst_host, 66*409437e1SDaniel P. Berrange "kernel": self._kernel, 67*409437e1SDaniel P. Berrange "initrd": self._initrd, 68*409437e1SDaniel P. Berrange "transport": self._transport, 69*409437e1SDaniel P. Berrange "sleep": self._sleep, 70*409437e1SDaniel P. Berrange } 71*409437e1SDaniel P. Berrange 72*409437e1SDaniel P. Berrange @classmethod 73*409437e1SDaniel P. Berrange def deserialize(cls, data): 74*409437e1SDaniel P. Berrange return cls( 75*409437e1SDaniel P. Berrange Hardware.deserialize(data["hardware"]), 76*409437e1SDaniel P. Berrange Scenario.deserialize(data["scenario"]), 77*409437e1SDaniel P. Berrange [Progress.deserialize(record) for record in data["progress_history"]], 78*409437e1SDaniel P. Berrange Timings.deserialize(data["guest_timings"]), 79*409437e1SDaniel P. Berrange Timings.deserialize(data["qemu_timings"]), 80*409437e1SDaniel P. Berrange Timings.deserialize(data["vcpu_timings"]), 81*409437e1SDaniel P. Berrange data["binary"], 82*409437e1SDaniel P. Berrange data["dst_host"], 83*409437e1SDaniel P. Berrange data["kernel"], 84*409437e1SDaniel P. Berrange data["initrd"], 85*409437e1SDaniel P. Berrange data["transport"], 86*409437e1SDaniel P. Berrange data["sleep"]) 87*409437e1SDaniel P. Berrange 88*409437e1SDaniel P. Berrange def to_json(self): 89*409437e1SDaniel P. Berrange return json.dumps(self.serialize(), indent=4) 90*409437e1SDaniel P. Berrange 91*409437e1SDaniel P. Berrange @classmethod 92*409437e1SDaniel P. Berrange def from_json(cls, data): 93*409437e1SDaniel P. Berrange return cls.deserialize(json.loads(data)) 94*409437e1SDaniel P. Berrange 95*409437e1SDaniel P. Berrange @classmethod 96*409437e1SDaniel P. Berrange def from_json_file(cls, filename): 97*409437e1SDaniel P. Berrange with open(filename, "r") as fh: 98*409437e1SDaniel P. Berrange return cls.deserialize(json.load(fh)) 99