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