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