bt benchmark: Use 0 as ymin for raw value plot
[lttng-ci.git] / scripts / babeltrace-benchmark / lava_submit.py
CommitLineData
5c65bbc2
JR
1#!/usr/bin/python3
2# Copyright (C) 2019 - Jonathan Rajotte Julien <jonathan.rajotte-julien@efficios.com>
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation, either version 3 of the License, or
7# (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17import argparse
18import os
19import sys
20import time
21import xmlrpc.client
22
23from jinja2 import Environment, FileSystemLoader
24
25USERNAME = "lava-jenkins"
26HOSTNAME = "lava-master-02.internal.efficios.com"
27DEFAULT_KERNEL_COMMIT = "1a1a512b983108015ced1e7a7c7775cfeec42d8c"
28
29
30def wait_on(server, jobid):
31 """
32 Wait for the completion of the job.
33 Do not care for result. This is mostly to prevent flooding of lava with
34 multiple jobs for the same commit hash. Jenkins is responsible for
35 running only one job for job submissions.
36 """
37 # Check the status of the job every 30 seconds
38 jobstatus = server.scheduler.job_state(jobid)["job_state"]
39 running = False
40 while jobstatus in ["Submitted", "Scheduling", "Scheduled", "Running"]:
41 if not running and jobstatus == "Running":
42 print("Job started running", flush=True)
43 running = True
44 time.sleep(30)
45 try:
46 jobstatus = server.scheduler.job_state(jobid)["job_state"]
47 except xmlrpc.client.ProtocolError:
48 print("Protocol error, retrying", flush=True)
49 continue
50 print("Job ended with {} status.".format(jobstatus), flush=True)
51
52
53def submit(
54 commit, debug=False, kernel_commit=DEFAULT_KERNEL_COMMIT, wait_for_completion=True
55):
56 nfsrootfs = "https://obj.internal.efficios.com/lava/rootfs/rootfs_amd64_xenial_2018-12-05.tar.gz"
57 kernel_url = "https://obj.internal.efficios.com/lava/kernel/{}.baremetal.bzImage".format(
58 kernel_commit
59 )
60 modules_url = "https://obj.internal.efficios.com/lava/modules/linux/{}.baremetal.linux.modules.tar.gz".format(
61 kernel_commit
62 )
63
64 lava_api_key = None
65 if not debug:
66 try:
67 lava_api_key = os.environ["LAVA2_JENKINS_TOKEN"]
68 except Exception as error:
69 print(
70 "LAVA2_JENKINS_TOKEN not found in the environment variable. Exiting...",
71 error,
72 )
73 return -1
74
75 jinja_loader = FileSystemLoader(os.path.dirname(os.path.realpath(__file__)))
76 jinja_env = Environment(loader=jinja_loader, trim_blocks=True, lstrip_blocks=True)
77 jinja_template = jinja_env.get_template("template_lava_job_bt_benchmark.jinja2")
78
79 context = dict()
80 context["kernel_url"] = kernel_url
81 context["nfsrootfs_url"] = nfsrootfs
82 context["modules_url"] = modules_url
83 context["commit_hash"] = commit
84
85 render = jinja_template.render(context)
86
87 print("Job to be submitted:", flush=True)
88
89 print(render, flush=True)
90
91 if debug:
92 return 0
93
94 server = xmlrpc.client.ServerProxy(
95 "http://%s:%s@%s/RPC2" % (USERNAME, lava_api_key, HOSTNAME)
96 )
97
98 for attempt in range(10):
99 try:
100 jobid = server.scheduler.submit_job(render)
101 except xmlrpc.client.ProtocolError as error:
102 print(
103 "Protocol error on submit, sleeping and retrying. Attempt #{}".format(
104 attempt
105 ),
106 flush=True,
107 )
108 time.sleep(5)
109 continue
110 else:
111 break
112
113 print("Lava jobid:{}".format(jobid), flush=True)
114 print(
115 "Lava job URL: http://lava-master-02.internal.efficios.com/scheduler/job/{}".format(
116 jobid
117 ),
118 flush=True,
119 )
120
121 if not wait_for_completion:
122 return 0
123
124 wait_on(server, jobid)
125
126
127if __name__ == "__main__":
128 parser = argparse.ArgumentParser(
129 description="Launch baremetal babeltrace test using Lava"
130 )
131 parser.add_argument("-c", "--commit", required=True)
132 parser.add_argument(
133 "-k", "--kernel-commit", required=False, default=DEFAULT_KERNEL_COMMIT
134 )
135 parser.add_argument("-d", "--debug", required=False, action="store_true")
136 args = parser.parse_args()
137 sys.exit(submit(args.kernel_commit, args.commit, args.debug))
This page took 0.026475 seconds and 4 git commands to generate.