1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
// Copyright (c) Facebook, Inc. and its affiliates.
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;

use rd_util::*;

const SIDE_DEF_DOC: &str = "\
//
// rd-agent side/sysload definitions
//
//  DEF_ID.args[]: Command arguments
//  DEF_ID.frozen_exp: Sideloader frozen expiration duration
//
";

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SideloadSpec {
    pub args: Vec<String>,
    pub frozen_exp: u32,
}

#[derive(Serialize, Deserialize)]
#[serde(default)]
pub struct SideloadDefs {
    #[serde(flatten)]
    pub defs: BTreeMap<String, SideloadSpec>,
}

impl Default for SideloadDefs {
    fn default() -> Self {
        Self {
            defs: [
                (
                    "build-linux-half".into(),
                    SideloadSpec {
                        args: vec![
                            "build-linux.sh".into(),
                            "allmodconfig".into(),
                            "1".into(),
                            "2".into(),
                        ],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-1x".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "allmodconfig".into(), "1".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-2x".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "allmodconfig".into(), "2".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-4x".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "allmodconfig".into(), "4".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-8x".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "allmodconfig".into(), "8".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-16x".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "allmodconfig".into(), "16".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-32x".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "allmodconfig".into(), "32".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-unlimited".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "allmodconfig".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-allnoconfig-1x".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "allnoconfig".into(), "1".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "build-linux-defconfig-1x".into(),
                    SideloadSpec {
                        args: vec!["build-linux.sh".into(), "defconfig".into(), "1".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "mem-hog-10pct".into(),
                    SideloadSpec {
                        args: vec!["mem-hog.sh".into(), "10%".into(), "0%".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "mem-hog-25pct".into(),
                    SideloadSpec {
                        args: vec!["mem-hog.sh".into(), "25%".into(), "0%".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "mem-hog-50pct".into(),
                    SideloadSpec {
                        args: vec!["mem-hog.sh".into(), "50%".into(), "0%".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "mem-hog-1x".into(),
                    SideloadSpec {
                        args: vec!["mem-hog.sh".into(), "100%".into(), "0%".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "mem-hog-2x".into(),
                    SideloadSpec {
                        args: vec!["mem-hog.sh".into(), "200%".into(), "0%".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "mem-bloat-1x".into(),
                    SideloadSpec {
                        args: vec!["mem-hog.sh".into(), "1000%".into(), "100%".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "read-bomb".into(),
                    SideloadSpec {
                        args: vec!["read-bomb.py".into(), "1024".into(), "16384".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "burn-cpus-50pct".into(),
                    SideloadSpec {
                        args: vec!["burn-cpus.sh".into(), "1".into(), "2".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "burn-cpus-1x".into(),
                    SideloadSpec {
                        args: vec!["burn-cpus.sh".into(), "1".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "burn-cpus-2x".into(),
                    SideloadSpec {
                        args: vec!["burn-cpus.sh".into(), "2".into()],
                        frozen_exp: 30,
                    },
                ),
                (
                    "inodesteal-test".into(),
                    SideloadSpec {
                        args: vec!["inodesteal-test.py".into()],
                        frozen_exp: 30,
                    },
                ),
            ]
            .iter()
            .cloned()
            .collect(),
        }
    }
}

impl JsonLoad for SideloadDefs {}

impl JsonSave for SideloadDefs {
    fn preamble() -> Option<String> {
        Some(SIDE_DEF_DOC.to_string())
    }
}