xref: /qemu/tests/migration-stress/guestperf/report.py (revision 409437e16df273fc5f78f6cd1cb53023eaeb9b72)
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