1use serde::{Deserialize, Serialize};
3use std::collections::BTreeMap;
4
5use rd_util::*;
6
7const SIDE_DEF_DOC: &str = "\
8//
9// rd-agent side/sysload definitions
10//
11// DEF_ID.args[]: Command arguments
12// DEF_ID.frozen_exp: Sideloader frozen expiration duration
13//
14";
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct SideloadSpec {
18 pub args: Vec<String>,
19 pub frozen_exp: u32,
20}
21
22#[derive(Serialize, Deserialize)]
23#[serde(default)]
24pub struct SideloadDefs {
25 #[serde(flatten)]
26 pub defs: BTreeMap<String, SideloadSpec>,
27}
28
29impl Default for SideloadDefs {
30 fn default() -> Self {
31 Self {
32 defs: [
33 (
34 "build-linux-half".into(),
35 SideloadSpec {
36 args: vec![
37 "build-linux.sh".into(),
38 "allmodconfig".into(),
39 "1".into(),
40 "2".into(),
41 ],
42 frozen_exp: 30,
43 },
44 ),
45 (
46 "build-linux-1x".into(),
47 SideloadSpec {
48 args: vec!["build-linux.sh".into(), "allmodconfig".into(), "1".into()],
49 frozen_exp: 30,
50 },
51 ),
52 (
53 "build-linux-2x".into(),
54 SideloadSpec {
55 args: vec!["build-linux.sh".into(), "allmodconfig".into(), "2".into()],
56 frozen_exp: 30,
57 },
58 ),
59 (
60 "build-linux-4x".into(),
61 SideloadSpec {
62 args: vec!["build-linux.sh".into(), "allmodconfig".into(), "4".into()],
63 frozen_exp: 30,
64 },
65 ),
66 (
67 "build-linux-8x".into(),
68 SideloadSpec {
69 args: vec!["build-linux.sh".into(), "allmodconfig".into(), "8".into()],
70 frozen_exp: 30,
71 },
72 ),
73 (
74 "build-linux-16x".into(),
75 SideloadSpec {
76 args: vec!["build-linux.sh".into(), "allmodconfig".into(), "16".into()],
77 frozen_exp: 30,
78 },
79 ),
80 (
81 "build-linux-32x".into(),
82 SideloadSpec {
83 args: vec!["build-linux.sh".into(), "allmodconfig".into(), "32".into()],
84 frozen_exp: 30,
85 },
86 ),
87 (
88 "build-linux-unlimited".into(),
89 SideloadSpec {
90 args: vec!["build-linux.sh".into(), "allmodconfig".into()],
91 frozen_exp: 30,
92 },
93 ),
94 (
95 "build-linux-allnoconfig-1x".into(),
96 SideloadSpec {
97 args: vec!["build-linux.sh".into(), "allnoconfig".into(), "1".into()],
98 frozen_exp: 30,
99 },
100 ),
101 (
102 "build-linux-defconfig-1x".into(),
103 SideloadSpec {
104 args: vec!["build-linux.sh".into(), "defconfig".into(), "1".into()],
105 frozen_exp: 30,
106 },
107 ),
108 (
109 "mem-hog-10pct".into(),
110 SideloadSpec {
111 args: vec!["mem-hog.sh".into(), "10%".into(), "0%".into()],
112 frozen_exp: 30,
113 },
114 ),
115 (
116 "mem-hog-25pct".into(),
117 SideloadSpec {
118 args: vec!["mem-hog.sh".into(), "25%".into(), "0%".into()],
119 frozen_exp: 30,
120 },
121 ),
122 (
123 "mem-hog-50pct".into(),
124 SideloadSpec {
125 args: vec!["mem-hog.sh".into(), "50%".into(), "0%".into()],
126 frozen_exp: 30,
127 },
128 ),
129 (
130 "mem-hog-1x".into(),
131 SideloadSpec {
132 args: vec!["mem-hog.sh".into(), "100%".into(), "0%".into()],
133 frozen_exp: 30,
134 },
135 ),
136 (
137 "mem-hog-2x".into(),
138 SideloadSpec {
139 args: vec!["mem-hog.sh".into(), "200%".into(), "0%".into()],
140 frozen_exp: 30,
141 },
142 ),
143 (
144 "mem-bloat-1x".into(),
145 SideloadSpec {
146 args: vec!["mem-hog.sh".into(), "1000%".into(), "100%".into()],
147 frozen_exp: 30,
148 },
149 ),
150 (
151 "read-bomb".into(),
152 SideloadSpec {
153 args: vec!["read-bomb.py".into(), "1024".into(), "16384".into()],
154 frozen_exp: 30,
155 },
156 ),
157 (
158 "burn-cpus-50pct".into(),
159 SideloadSpec {
160 args: vec!["burn-cpus.sh".into(), "1".into(), "2".into()],
161 frozen_exp: 30,
162 },
163 ),
164 (
165 "burn-cpus-1x".into(),
166 SideloadSpec {
167 args: vec!["burn-cpus.sh".into(), "1".into()],
168 frozen_exp: 30,
169 },
170 ),
171 (
172 "burn-cpus-2x".into(),
173 SideloadSpec {
174 args: vec!["burn-cpus.sh".into(), "2".into()],
175 frozen_exp: 30,
176 },
177 ),
178 (
179 "inodesteal-test".into(),
180 SideloadSpec {
181 args: vec!["inodesteal-test.py".into()],
182 frozen_exp: 30,
183 },
184 ),
185 ]
186 .iter()
187 .cloned()
188 .collect(),
189 }
190 }
191}
192
193impl JsonLoad for SideloadDefs {}
194
195impl JsonSave for SideloadDefs {
196 fn preamble() -> Option<String> {
197 Some(SIDE_DEF_DOC.to_string())
198 }
199}