xref: /openbmc/qemu/tests/migration-stress/guestperf/report.py (revision 9af3d9a931156142199c61518937506bfa5475f1)
1212c1933SFabiano Rosas#
2212c1933SFabiano Rosas# Migration test output result reporting
3212c1933SFabiano Rosas#
4212c1933SFabiano Rosas# Copyright (c) 2016 Red Hat, Inc.
5212c1933SFabiano Rosas#
6212c1933SFabiano Rosas# This library is free software; you can redistribute it and/or
7212c1933SFabiano Rosas# modify it under the terms of the GNU Lesser General Public
8212c1933SFabiano Rosas# License as published by the Free Software Foundation; either
9212c1933SFabiano Rosas# version 2.1 of the License, or (at your option) any later version.
10212c1933SFabiano Rosas#
11212c1933SFabiano Rosas# This library is distributed in the hope that it will be useful,
12212c1933SFabiano Rosas# but WITHOUT ANY WARRANTY; without even the implied warranty of
13212c1933SFabiano Rosas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14212c1933SFabiano Rosas# Lesser General Public License for more details.
15212c1933SFabiano Rosas#
16212c1933SFabiano Rosas# You should have received a copy of the GNU Lesser General Public
17212c1933SFabiano Rosas# License along with this library; if not, see <http://www.gnu.org/licenses/>.
18212c1933SFabiano Rosas#
19212c1933SFabiano Rosas
20212c1933SFabiano Rosasimport json
21212c1933SFabiano Rosas
22212c1933SFabiano Rosasfrom guestperf.hardware import Hardware
23212c1933SFabiano Rosasfrom guestperf.scenario import Scenario
24212c1933SFabiano Rosasfrom guestperf.progress import Progress
25212c1933SFabiano Rosasfrom guestperf.timings import Timings
26212c1933SFabiano Rosas
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
43212c1933SFabiano Rosasclass Report(object):
44212c1933SFabiano Rosas
45212c1933SFabiano Rosas    def __init__(self,
46212c1933SFabiano Rosas                 hardware,
47212c1933SFabiano Rosas                 scenario,
48212c1933SFabiano Rosas                 progress_history,
49212c1933SFabiano Rosas                 guest_timings,
50212c1933SFabiano Rosas                 qemu_timings,
51212c1933SFabiano Rosas                 vcpu_timings,
52*5984870eSHyman Huang                 result,
53212c1933SFabiano Rosas                 binary,
54212c1933SFabiano Rosas                 dst_host,
55212c1933SFabiano Rosas                 kernel,
56212c1933SFabiano Rosas                 initrd,
57212c1933SFabiano Rosas                 transport,
58212c1933SFabiano Rosas                 sleep):
59212c1933SFabiano Rosas
60212c1933SFabiano Rosas        self._hardware = hardware
61212c1933SFabiano Rosas        self._scenario = scenario
62212c1933SFabiano Rosas        self._progress_history = progress_history
63212c1933SFabiano Rosas        self._guest_timings = guest_timings
64212c1933SFabiano Rosas        self._qemu_timings = qemu_timings
65212c1933SFabiano Rosas        self._vcpu_timings = vcpu_timings
66*5984870eSHyman Huang        self._result = result
67212c1933SFabiano Rosas        self._binary = binary
68212c1933SFabiano Rosas        self._dst_host = dst_host
69212c1933SFabiano Rosas        self._kernel = kernel
70212c1933SFabiano Rosas        self._initrd = initrd
71212c1933SFabiano Rosas        self._transport = transport
72212c1933SFabiano Rosas        self._sleep = sleep
73212c1933SFabiano Rosas
74212c1933SFabiano Rosas    def serialize(self):
75212c1933SFabiano Rosas        return {
76212c1933SFabiano Rosas            "hardware": self._hardware.serialize(),
77212c1933SFabiano Rosas            "scenario": self._scenario.serialize(),
78212c1933SFabiano Rosas            "progress_history": [progress.serialize() for progress in self._progress_history],
79212c1933SFabiano Rosas            "guest_timings": self._guest_timings.serialize(),
80212c1933SFabiano Rosas            "qemu_timings": self._qemu_timings.serialize(),
81212c1933SFabiano Rosas            "vcpu_timings": self._vcpu_timings.serialize(),
82*5984870eSHyman Huang            "result": self._result.serialize(),
83212c1933SFabiano Rosas            "binary": self._binary,
84212c1933SFabiano Rosas            "dst_host": self._dst_host,
85212c1933SFabiano Rosas            "kernel": self._kernel,
86212c1933SFabiano Rosas            "initrd": self._initrd,
87212c1933SFabiano Rosas            "transport": self._transport,
88212c1933SFabiano Rosas            "sleep": self._sleep,
89212c1933SFabiano Rosas        }
90212c1933SFabiano Rosas
91212c1933SFabiano Rosas    @classmethod
92212c1933SFabiano Rosas    def deserialize(cls, data):
93212c1933SFabiano Rosas        return cls(
94212c1933SFabiano Rosas            Hardware.deserialize(data["hardware"]),
95212c1933SFabiano Rosas            Scenario.deserialize(data["scenario"]),
96212c1933SFabiano Rosas            [Progress.deserialize(record) for record in data["progress_history"]],
97212c1933SFabiano Rosas            Timings.deserialize(data["guest_timings"]),
98212c1933SFabiano Rosas            Timings.deserialize(data["qemu_timings"]),
99212c1933SFabiano Rosas            Timings.deserialize(data["vcpu_timings"]),
100*5984870eSHyman Huang            ReportResult.deserialize(data["result"]),
101212c1933SFabiano Rosas            data["binary"],
102212c1933SFabiano Rosas            data["dst_host"],
103212c1933SFabiano Rosas            data["kernel"],
104212c1933SFabiano Rosas            data["initrd"],
105212c1933SFabiano Rosas            data["transport"],
106212c1933SFabiano Rosas            data["sleep"])
107212c1933SFabiano Rosas
108212c1933SFabiano Rosas    def to_json(self):
109212c1933SFabiano Rosas        return json.dumps(self.serialize(), indent=4)
110212c1933SFabiano Rosas
111212c1933SFabiano Rosas    @classmethod
112212c1933SFabiano Rosas    def from_json(cls, data):
113212c1933SFabiano Rosas        return cls.deserialize(json.loads(data))
114212c1933SFabiano Rosas
115212c1933SFabiano Rosas    @classmethod
116212c1933SFabiano Rosas    def from_json_file(cls, filename):
117212c1933SFabiano Rosas        with open(filename, "r") as fh:
118212c1933SFabiano Rosas            return cls.deserialize(json.load(fh))
119