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 93a645d36SGan 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 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 43409437e1SDaniel P. Berrangeclass Report(object): 44409437e1SDaniel P. Berrange 45409437e1SDaniel P. Berrange def __init__(self, 46409437e1SDaniel P. Berrange hardware, 47409437e1SDaniel P. Berrange scenario, 48409437e1SDaniel P. Berrange progress_history, 49409437e1SDaniel P. Berrange guest_timings, 50409437e1SDaniel P. Berrange qemu_timings, 51409437e1SDaniel P. Berrange vcpu_timings, 52*5984870eSHyman Huang result, 53409437e1SDaniel P. Berrange binary, 54409437e1SDaniel P. Berrange dst_host, 55409437e1SDaniel P. Berrange kernel, 56409437e1SDaniel P. Berrange initrd, 57409437e1SDaniel P. Berrange transport, 58409437e1SDaniel P. Berrange sleep): 59409437e1SDaniel P. Berrange 60409437e1SDaniel P. Berrange self._hardware = hardware 61409437e1SDaniel P. Berrange self._scenario = scenario 62409437e1SDaniel P. Berrange self._progress_history = progress_history 63409437e1SDaniel P. Berrange self._guest_timings = guest_timings 64409437e1SDaniel P. Berrange self._qemu_timings = qemu_timings 65409437e1SDaniel P. Berrange self._vcpu_timings = vcpu_timings 66*5984870eSHyman Huang self._result = result 67409437e1SDaniel P. Berrange self._binary = binary 68409437e1SDaniel P. Berrange self._dst_host = dst_host 69409437e1SDaniel P. Berrange self._kernel = kernel 70409437e1SDaniel P. Berrange self._initrd = initrd 71409437e1SDaniel P. Berrange self._transport = transport 72409437e1SDaniel P. Berrange self._sleep = sleep 73409437e1SDaniel P. Berrange 74409437e1SDaniel P. Berrange def serialize(self): 75409437e1SDaniel P. Berrange return { 76409437e1SDaniel P. Berrange "hardware": self._hardware.serialize(), 77409437e1SDaniel P. Berrange "scenario": self._scenario.serialize(), 78409437e1SDaniel P. Berrange "progress_history": [progress.serialize() for progress in self._progress_history], 79409437e1SDaniel P. Berrange "guest_timings": self._guest_timings.serialize(), 80409437e1SDaniel P. Berrange "qemu_timings": self._qemu_timings.serialize(), 81409437e1SDaniel P. Berrange "vcpu_timings": self._vcpu_timings.serialize(), 82*5984870eSHyman Huang "result": self._result.serialize(), 83409437e1SDaniel P. Berrange "binary": self._binary, 84409437e1SDaniel P. Berrange "dst_host": self._dst_host, 85409437e1SDaniel P. Berrange "kernel": self._kernel, 86409437e1SDaniel P. Berrange "initrd": self._initrd, 87409437e1SDaniel P. Berrange "transport": self._transport, 88409437e1SDaniel P. Berrange "sleep": self._sleep, 89409437e1SDaniel P. Berrange } 90409437e1SDaniel P. Berrange 91409437e1SDaniel P. Berrange @classmethod 92409437e1SDaniel P. Berrange def deserialize(cls, data): 93409437e1SDaniel P. Berrange return cls( 94409437e1SDaniel P. Berrange Hardware.deserialize(data["hardware"]), 95409437e1SDaniel P. Berrange Scenario.deserialize(data["scenario"]), 96409437e1SDaniel P. Berrange [Progress.deserialize(record) for record in data["progress_history"]], 97409437e1SDaniel P. Berrange Timings.deserialize(data["guest_timings"]), 98409437e1SDaniel P. Berrange Timings.deserialize(data["qemu_timings"]), 99409437e1SDaniel P. Berrange Timings.deserialize(data["vcpu_timings"]), 100*5984870eSHyman Huang ReportResult.deserialize(data["result"]), 101409437e1SDaniel P. Berrange data["binary"], 102409437e1SDaniel P. Berrange data["dst_host"], 103409437e1SDaniel P. Berrange data["kernel"], 104409437e1SDaniel P. Berrange data["initrd"], 105409437e1SDaniel P. Berrange data["transport"], 106409437e1SDaniel P. Berrange data["sleep"]) 107409437e1SDaniel P. Berrange 108409437e1SDaniel P. Berrange def to_json(self): 109409437e1SDaniel P. Berrange return json.dumps(self.serialize(), indent=4) 110409437e1SDaniel P. Berrange 111409437e1SDaniel P. Berrange @classmethod 112409437e1SDaniel P. Berrange def from_json(cls, data): 113409437e1SDaniel P. Berrange return cls.deserialize(json.loads(data)) 114409437e1SDaniel P. Berrange 115409437e1SDaniel P. Berrange @classmethod 116409437e1SDaniel P. Berrange def from_json_file(cls, filename): 117409437e1SDaniel P. Berrange with open(filename, "r") as fh: 118409437e1SDaniel P. Berrange return cls.deserialize(json.load(fh)) 119