Compare commits
611 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b1f7f191f | ||
|
|
516b41017a | ||
|
|
0ea2375c87 | ||
|
|
be1a4dec8a | ||
|
|
7aadba1d57 | ||
|
|
7bf6c03113 | ||
|
|
60716494e6 | ||
|
|
51acdc67c7 | ||
|
|
c279b0a3a3 | ||
|
|
bf2e8dcc16 | ||
|
|
791d82ecdf | ||
|
|
ed27e1a36f | ||
|
|
da86cd5046 | ||
|
|
78b7da54ef | ||
|
|
f8f16f3e87 | ||
|
|
6885629cb7 | ||
|
|
024189d25d | ||
|
|
8782fcdaa5 | ||
|
|
5bbf8a8caf | ||
|
|
1d21ea4a53 | ||
|
|
ea890b7b8b | ||
|
|
da2648fec8 | ||
|
|
767e8641e1 | ||
|
|
1658bf1e65 | ||
|
|
5245f152a1 | ||
|
|
3cae6d56a6 | ||
|
|
22e0a1134a | ||
|
|
18f8662c24 | ||
|
|
42b9a5b6fd | ||
|
|
2e57174e46 | ||
|
|
39aef2d526 | ||
|
|
9af4fe7a0e | ||
|
|
894364a09c | ||
|
|
3bbd06d599 | ||
|
|
1907838b35 | ||
|
|
8eda4a5a91 | ||
|
|
712de905a4 | ||
|
|
a1d05a987c | ||
|
|
abbe900f13 | ||
|
|
5a96db3380 | ||
|
|
56ef1a00b6 | ||
|
|
e6f19c8988 | ||
|
|
0d768702e0 | ||
|
|
a45895b0ff | ||
|
|
c1a6dcc851 | ||
|
|
eafc5b7a7f | ||
|
|
1c31a919b6 | ||
|
|
5e02c1202c | ||
|
|
2c9cfa4aa7 | ||
|
|
9b22974ea4 | ||
|
|
bee7eeb30a | ||
|
|
a7a0a85183 | ||
|
|
be6ee9b44e | ||
|
|
98a9f44146 | ||
|
|
9004ab7410 | ||
|
|
43e0657d62 | ||
|
|
639a4739e5 | ||
|
|
5d988fb686 | ||
|
|
602ad4bd8e | ||
|
|
7ea7799327 | ||
|
|
edce918fc2 | ||
|
|
66966c63bd | ||
|
|
4fdbf3e04d | ||
|
|
28689112ef | ||
|
|
bfbd5600bf | ||
|
|
4ba6342b94 | ||
|
|
d72518f471 | ||
|
|
e1340308aa | ||
|
|
e9788b9f35 | ||
|
|
3b65a0329e | ||
|
|
7c02413dc6 | ||
|
|
9a4d519a18 | ||
|
|
218f5cfab0 | ||
|
|
82389c8e6a | ||
|
|
fd26da038a | ||
|
|
0c84dd460c | ||
|
|
05e5b13b17 | ||
|
|
976a1564c2 | ||
|
|
803e11d274 | ||
|
|
4f60331beb | ||
|
|
5219e0a08d | ||
|
|
c166443a11 | ||
|
|
d8d72f6d4e | ||
|
|
4be09f1155 | ||
|
|
c4a82ae8f6 | ||
|
|
a19b10d401 | ||
|
|
5d941004e2 | ||
|
|
c3c47d7829 | ||
|
|
ec013399f0 | ||
|
|
60154761b5 | ||
|
|
afa41dcb8b | ||
|
|
200f25160d | ||
|
|
a21ae0bbc1 | ||
|
|
ffdd31d273 | ||
|
|
460fda86bf | ||
|
|
7607477254 | ||
|
|
1bf2f3239a | ||
|
|
c569da824c | ||
|
|
f3891dc41d | ||
|
|
c5908f1979 | ||
|
|
7b734c9cd9 | ||
|
|
e1d75936de | ||
|
|
7d0b809ea9 | ||
|
|
a71bd2cbf8 | ||
|
|
8941860e9b | ||
|
|
a000c0ef20 | ||
|
|
e4b47aa5a4 | ||
|
|
3b95afe1f0 | ||
|
|
d279629ee4 | ||
|
|
a28727598e | ||
|
|
5f23296e9b | ||
|
|
09e721cfda | ||
|
|
a87b8fbad7 | ||
|
|
2ccaf6eab9 | ||
|
|
5d26bc75ab | ||
|
|
38b813186e | ||
|
|
f66269971b | ||
|
|
b10d6d62bb | ||
|
|
d2f7ef4d59 | ||
|
|
eaac34ce9b | ||
|
|
4f3c6d1046 | ||
|
|
ee17c558b5 | ||
|
|
1adc5604d7 | ||
|
|
c5d6fbe9b7 | ||
|
|
c6170880ed | ||
|
|
bba7a462b7 | ||
|
|
a023c9ffb8 | ||
|
|
98f536a827 | ||
|
|
aec95545da | ||
|
|
e10563d25c | ||
|
|
360b2ea52c | ||
|
|
d7000da52b | ||
|
|
52f97d07fe | ||
|
|
a469cd9b24 | ||
|
|
d3c26130d8 | ||
|
|
b6958aea66 | ||
|
|
cd9f20a553 | ||
|
|
327315004f | ||
|
|
b1cabd5cce | ||
|
|
9cf7ecd68c | ||
|
|
2fd7fd58ca | ||
|
|
1939c50960 | ||
|
|
2d6953fe67 | ||
|
|
7592fd09b1 | ||
|
|
c271719825 | ||
|
|
de63dcd52e | ||
|
|
fbb21fcba7 | ||
|
|
358e0e019e | ||
|
|
6e15b68e82 | ||
|
|
6347c3f982 | ||
|
|
d152ee6166 | ||
|
|
f28d8eff3d | ||
|
|
4049811246 | ||
|
|
7b2446ee52 | ||
|
|
e30f391520 | ||
|
|
32073ad075 | ||
|
|
5b1da20a39 | ||
|
|
01b3030ef8 | ||
|
|
d35d61ed7a | ||
|
|
86ccf1f872 | ||
|
|
7277d957d2 | ||
|
|
3742302f6a | ||
|
|
04e0bb96ed | ||
|
|
6f9e7feb1f | ||
|
|
60ce0b5727 | ||
|
|
c6da014d03 | ||
|
|
dcd5b41ae7 | ||
|
|
bdc952bd0c | ||
|
|
f823d6475f | ||
|
|
3c5e61286b | ||
|
|
63bc93c74c | ||
|
|
f3575e663a | ||
|
|
fefc17b87c | ||
|
|
a26f2f5223 | ||
|
|
81dc40f174 | ||
|
|
283ea3f704 | ||
|
|
97619f5014 | ||
|
|
bf934fb90b | ||
|
|
f497023529 | ||
|
|
6ee8cb107d | ||
|
|
7330df29ae | ||
|
|
a314034df7 | ||
|
|
e78beb7e8a | ||
|
|
4628e1cbb3 | ||
|
|
0b8fdfc13f | ||
|
|
dd0b6056a6 | ||
|
|
b9d5108479 | ||
|
|
566ae6d648 | ||
|
|
fdd0f5c6d1 | ||
|
|
f4435c54f6 | ||
|
|
5c765b0b86 | ||
|
|
01efc7eeb7 | ||
|
|
8b01a910f6 | ||
|
|
22a966553b | ||
|
|
8bc6d4ab3c | ||
|
|
e28ab9feaf | ||
|
|
916bf5ef25 | ||
|
|
9dea655699 | ||
|
|
160210de1f | ||
|
|
85b8fa1561 | ||
|
|
390552847f | ||
|
|
041a10ab71 | ||
|
|
a6f0208080 | ||
|
|
afc3319808 | ||
|
|
04e34a9785 | ||
|
|
669d64fccd | ||
|
|
d34da778eb | ||
|
|
2e7f7004bc | ||
|
|
924b3f1ebf | ||
|
|
6bee435df4 | ||
|
|
914a1632dd | ||
|
|
3a68779c1b | ||
|
|
6e1a5fe51f | ||
|
|
a63d7ccbe4 | ||
|
|
2c05f1a225 | ||
|
|
f1866f7675 | ||
|
|
47bab9f402 | ||
|
|
131812eb54 | ||
|
|
d22ab87bd3 | ||
|
|
5172376256 | ||
|
|
4a48da0cf4 | ||
|
|
372e3102bd | ||
|
|
b6a42d4fae | ||
|
|
c42e629d12 | ||
|
|
eb241892bb | ||
|
|
ea65b2f735 | ||
|
|
84de65a0b2 | ||
|
|
a9e05b8296 | ||
|
|
db31e1536d | ||
|
|
1536c6160d | ||
|
|
f1a480380a | ||
|
|
edbde811fc | ||
|
|
e38d5bedc2 | ||
|
|
5ee3eb0a29 | ||
|
|
12f25faebe | ||
|
|
506d650e9e | ||
|
|
0229f0a924 | ||
|
|
88c627b624 | ||
|
|
f6d4ddd838 | ||
|
|
7bb2550573 | ||
|
|
bbb5009e80 | ||
|
|
1ca04b1f70 | ||
|
|
dff1263dab | ||
|
|
f50fd289ed | ||
|
|
2cc521ee61 | ||
|
|
7c87cbcf35 | ||
|
|
a5e4944c0f | ||
|
|
59b63bc26d | ||
|
|
c364e89793 | ||
|
|
3a88d83254 | ||
|
|
0015567d24 | ||
|
|
30d79511bf | ||
|
|
e6a12eceb4 | ||
|
|
b05ca034c9 | ||
|
|
b9da25a040 | ||
|
|
f23f336477 | ||
|
|
41168d7dd5 | ||
|
|
493ebd2b41 | ||
|
|
a351cdd3ba | ||
|
|
e1e10bbd75 | ||
|
|
88a7740dfb | ||
|
|
b318833d1d | ||
|
|
296485afac | ||
|
|
d280772507 | ||
|
|
29fcf362a1 | ||
|
|
28710178d5 | ||
|
|
b20f9c7e29 | ||
|
|
dfe945e04c | ||
|
|
ed1455e68f | ||
|
|
2ecb8426c8 | ||
|
|
a92ac2c2c6 | ||
|
|
165e824630 | ||
|
|
24128fc243 | ||
|
|
e2942f164c | ||
|
|
d8189a32ec | ||
|
|
744d380253 | ||
|
|
ad9aace274 | ||
|
|
42cac172f3 | ||
|
|
89d094f990 | ||
|
|
f2b8d5406e | ||
|
|
4e3de6da21 | ||
|
|
8242022047 | ||
|
|
d582c84f5a | ||
|
|
73abf2bda8 | ||
|
|
d58fe95958 | ||
|
|
8257565f1e | ||
|
|
8bc425049e | ||
|
|
502ef8ee6d | ||
|
|
934a1334d4 | ||
|
|
999fc361d1 | ||
|
|
1aa0cd3020 | ||
|
|
ab9a509ded | ||
|
|
1569432b97 | ||
|
|
44c73e0bb0 | ||
|
|
d719cb2a40 | ||
|
|
650056633f | ||
|
|
326cfa2025 | ||
|
|
42498edb51 | ||
|
|
6ee7341e31 | ||
|
|
92343153de | ||
|
|
09dda94575 | ||
|
|
6c594d4266 | ||
|
|
64dbfad097 | ||
|
|
092d4eacad | ||
|
|
2f51c1cea7 | ||
|
|
f4627c0119 | ||
|
|
a5bce454bc | ||
|
|
2ac16b4feb | ||
|
|
0462cbbcc8 | ||
|
|
d3a4bc7c5d | ||
|
|
87b6be4094 | ||
|
|
964155f6f6 | ||
|
|
389be3a5af | ||
|
|
3a513f7741 | ||
|
|
4762cba5b8 | ||
|
|
58f06fec29 | ||
|
|
d8ec55f206 | ||
|
|
1c21aecdcb | ||
|
|
4db83fd42b | ||
|
|
a177e0865c | ||
|
|
c20fd451a8 | ||
|
|
15949b11d8 | ||
|
|
3048d6753a | ||
|
|
7fc086e792 | ||
|
|
3046b4d707 | ||
|
|
4d388174a5 | ||
|
|
bda8ebc88d | ||
|
|
ae90e14b49 | ||
|
|
55f5eefb3f | ||
|
|
3ddc3f1f53 | ||
|
|
080a3574e9 | ||
|
|
50fd4f6c3b | ||
|
|
676373d32a | ||
|
|
e68f0c1ad0 | ||
|
|
d4bbd9569f | ||
|
|
db6856ef47 | ||
|
|
7fa2427eb7 | ||
|
|
2d889bca8b | ||
|
|
6f8d84dbc3 | ||
|
|
045be30ab5 | ||
|
|
153f7fed30 | ||
|
|
5d71f521a1 | ||
|
|
2a74fb3cdc | ||
|
|
18498c11ea | ||
|
|
ca12daceac | ||
|
|
a2e8b3ffb4 | ||
|
|
6a4489701c | ||
|
|
c26817bfbd | ||
|
|
402bd85cc9 | ||
|
|
c4da765b71 | ||
|
|
0c0d9ad583 | ||
|
|
29afd4c7fb | ||
|
|
415e2e4038 | ||
|
|
f466eb0775 | ||
|
|
9afcd28ee6 | ||
|
|
f81c3fcc57 | ||
|
|
157fc269a3 | ||
|
|
4f5390a40d | ||
|
|
7899b11cb1 | ||
|
|
669990ddd1 | ||
|
|
e4f0c5f788 | ||
|
|
6820316a92 | ||
|
|
20f6e77a72 | ||
|
|
2cee8b9ed7 | ||
|
|
ba4f9cc7be | ||
|
|
4d9515ea7c | ||
|
|
9758c83067 | ||
|
|
31ec58a747 | ||
|
|
2c4a2aa320 | ||
|
|
e4c69e609b | ||
|
|
e007f901f8 | ||
|
|
0943b37e69 | ||
|
|
d65daf9f8f | ||
|
|
fd7c47bb91 | ||
|
|
4470c5fec8 | ||
|
|
081e03ddc0 | ||
|
|
c4b5638538 | ||
|
|
c2825d0346 | ||
|
|
130da0b0b0 | ||
|
|
7fcd9e553a | ||
|
|
8ecf60f515 | ||
|
|
3b48647c21 | ||
|
|
09ed6afa51 | ||
|
|
3ae1b271ed | ||
|
|
5fdaf18860 | ||
|
|
95982a1c3c | ||
|
|
3602260228 | ||
|
|
753edc4e1c | ||
|
|
b6ba411800 | ||
|
|
084914dfdf | ||
|
|
4972815427 | ||
|
|
e6671137cd | ||
|
|
16164afac9 | ||
|
|
918ac8834a | ||
|
|
03b83fb293 | ||
|
|
2e943c8a1d | ||
|
|
2ca8dcc896 | ||
|
|
84f73d952b | ||
|
|
111bab9c27 | ||
|
|
547738f354 | ||
|
|
f95218a616 | ||
|
|
1c7849239c | ||
|
|
1f09021a4a | ||
|
|
caa4594972 | ||
|
|
b6dd727ea3 | ||
|
|
9876d4b554 | ||
|
|
f6b1ea4990 | ||
|
|
3a29cf1d63 | ||
|
|
f61e10589e | ||
|
|
14c4658425 | ||
|
|
82da68b23e | ||
|
|
404b804616 | ||
|
|
9c6b50367d | ||
|
|
2234680bf6 | ||
|
|
5029fc62e7 | ||
|
|
2cf8eed156 | ||
|
|
ab84278515 | ||
|
|
c318e1c07f | ||
|
|
9aadf99d39 | ||
|
|
bc9e566e38 | ||
|
|
7ec6c6f214 | ||
|
|
d2a33177a7 | ||
|
|
7918bd4cc4 | ||
|
|
a89ce4375b | ||
|
|
553f5d16cf | ||
|
|
420c570b09 | ||
|
|
d99e57fb68 | ||
|
|
9aec757040 | ||
|
|
7cbf772db5 | ||
|
|
70e6bc7825 | ||
|
|
63d1401f0e | ||
|
|
3908736fd9 | ||
|
|
e7a5b8b6ec | ||
|
|
4628a69c1d | ||
|
|
e45b81b8a2 | ||
|
|
ef7be984ac | ||
|
|
290f28394c | ||
|
|
d0cbc9c46a | ||
|
|
4db4ce29b3 | ||
|
|
daee43f7a1 | ||
|
|
c82e6509d6 | ||
|
|
d21d59fdee | ||
|
|
14d9bc8d81 | ||
|
|
c3d8bc31e9 | ||
|
|
61d0555fe5 | ||
|
|
106d565ffd | ||
|
|
716a2635eb | ||
|
|
5d2f5ac6eb | ||
|
|
c2193e9844 | ||
|
|
c501adc0f9 | ||
|
|
7954f94868 | ||
|
|
3fad54cefe | ||
|
|
54e667ed2b | ||
|
|
ce1acaa6fb | ||
|
|
2a730dc94a | ||
|
|
c1f92941cb | ||
|
|
a2b0ff2c76 | ||
|
|
70834b9d0a | ||
|
|
4d1413e5d5 | ||
|
|
678b3d95b9 | ||
|
|
33cab40573 | ||
|
|
0cf46fd198 | ||
|
|
cea88fe829 | ||
|
|
2b3246f88b | ||
|
|
fe7563d3ad | ||
|
|
cbbcb0cb9a | ||
|
|
8bd52e82f0 | ||
|
|
480cf94d0c | ||
|
|
5748a84a88 | ||
|
|
7e05c67dde | ||
|
|
4a87fb301e | ||
|
|
472fdeea03 | ||
|
|
d7186a11ac | ||
|
|
9896d0a1d5 | ||
|
|
1887b4431d | ||
|
|
fa006e04f6 | ||
|
|
dc18aa5b0c | ||
|
|
470f2dbd80 | ||
|
|
b026cb1ada | ||
|
|
ab1adb6276 | ||
|
|
2755eff0ac | ||
|
|
a29af9da51 | ||
|
|
3673eaf57d | ||
|
|
2b698d630c | ||
|
|
47417cc126 | ||
|
|
8fac5c73b0 | ||
|
|
ee99fb31b3 | ||
|
|
08ae7da2a2 | ||
|
|
d565f79c05 | ||
|
|
7085e4b2cf | ||
|
|
c41e7b3460 | ||
|
|
7038cad520 | ||
|
|
ea9df9424f | ||
|
|
b580e615cf | ||
|
|
8910c2fb9a | ||
|
|
070b2ed512 | ||
|
|
a280b288ff | ||
|
|
e792c7bef2 | ||
|
|
2ca57c5d8c | ||
|
|
fad2cd4e5d | ||
|
|
0bc981e517 | ||
|
|
852fb9378b | ||
|
|
db6037dd7b | ||
|
|
ac289cc8ff | ||
|
|
c61b7a09c0 | ||
|
|
6c2f939266 | ||
|
|
64b0483248 | ||
|
|
8765e26c5e | ||
|
|
5f093b7919 | ||
|
|
4a51138f02 | ||
|
|
b2e6aa8bac | ||
|
|
077f9dd659 | ||
|
|
17ccadb307 | ||
|
|
79f0b2b535 | ||
|
|
658d624f32 | ||
|
|
34c86410c2 | ||
|
|
bc81c03158 | ||
|
|
d3d8942cb6 | ||
|
|
bb5ac80ee7 | ||
|
|
15ab3d3434 | ||
|
|
a2ce8583de | ||
|
|
33a15ca53f | ||
|
|
22ea9587bb | ||
|
|
06e7f695be | ||
|
|
432def01d2 | ||
|
|
9d677ef936 | ||
|
|
e428d3781b | ||
|
|
25fcf9f3be | ||
|
|
73fb1b3ace | ||
|
|
33be563142 | ||
|
|
69b1b5dc1a | ||
|
|
960245ac7b | ||
|
|
f2495baadb | ||
|
|
7dbde7e982 | ||
|
|
849fa769e4 | ||
|
|
fa34e629de | ||
|
|
99ed71c045 | ||
|
|
4fc9b5046f | ||
|
|
2276ea9611 | ||
|
|
7718da8d06 | ||
|
|
b5c58544d1 | ||
|
|
92c5a89757 | ||
|
|
a5639a25b1 | ||
|
|
798a3e6fba | ||
|
|
e2fac00203 | ||
|
|
d6d64bdd13 | ||
|
|
e65f6e913f | ||
|
|
0e62d0c4c1 | ||
|
|
367b8e680f | ||
|
|
6c98586662 | ||
|
|
f17a504909 | ||
|
|
835d06be2d | ||
|
|
c1262c4476 | ||
|
|
81b2145f2a | ||
|
|
a97b5fbff8 | ||
|
|
414098f601 | ||
|
|
11b8283843 | ||
|
|
7d81b9224c | ||
|
|
673e37a22b | ||
|
|
6f8f6150a1 | ||
|
|
1698818efb | ||
|
|
297bc4206d | ||
|
|
79bee6a042 | ||
|
|
6b6c70b649 | ||
|
|
142e2f92c1 | ||
|
|
120638b8ff | ||
|
|
23c7f8ad8c | ||
|
|
eb6d354c94 | ||
|
|
94ace3c885 | ||
|
|
4a544ffb56 | ||
|
|
54898f7377 | ||
|
|
0f51b6b3a2 | ||
|
|
faf1b27b2c | ||
|
|
610fb640ad | ||
|
|
e31385f604 | ||
|
|
a3f2256336 | ||
|
|
e4b7e7f2d9 | ||
|
|
bf78f2db13 | ||
|
|
ebb76e4752 | ||
|
|
5fe117b776 | ||
|
|
1ec700cee9 | ||
|
|
2bab1bda45 | ||
|
|
036b735a69 | ||
|
|
ab2c13b82e | ||
|
|
fa148e7553 | ||
|
|
8ec8eab7cb | ||
|
|
03a122e87a | ||
|
|
5102ccd9a7 | ||
|
|
4f14e3314c | ||
|
|
3806120ef7 | ||
|
|
4097daeeb7 | ||
|
|
9aabbab6e5 | ||
|
|
7cc0abd595 | ||
|
|
14ad1180a4 | ||
|
|
5eaa004c70 | ||
|
|
6b687e75f8 | ||
|
|
597ef4c764 | ||
|
|
48fa67f007 | ||
|
|
a8fb00a7d6 | ||
|
|
b002052840 | ||
|
|
7e61625fa5 | ||
|
|
9a5f42e0c9 | ||
|
|
a17e271dad | ||
|
|
d71296dd0b | ||
|
|
8838244dc0 | ||
|
|
0208723886 | ||
|
|
db92ec4195 | ||
|
|
14589143da | ||
|
|
db4f94fdee | ||
|
|
95b3e69384 | ||
|
|
349a2a0d1a |
2
AUTHORS
2
AUTHORS
@@ -1,4 +1,4 @@
|
||||
Copyright 2008 - 2015 by Phoronix Media.
|
||||
Copyright 2008 - 2017 by Phoronix Media.
|
||||
|
||||
Lead Architects:
|
||||
|
||||
|
||||
18
README.md
18
README.md
@@ -1,8 +1,8 @@
|
||||
# Phoronix Test Suite 6.0.0
|
||||
# Phoronix Test Suite 7.0.0
|
||||
http://www.phoronix-test-suite.com/
|
||||
|
||||
The **Phoronix Test Suite** is the most comprehensive testing and benchmarking
|
||||
platform available for Linux, Solaris, Mac OS X, and BSD operating systems. The
|
||||
platform available for Linux, Solaris, OS X, and BSD operating systems. The
|
||||
Phoronix Test Suite allows for carrying out tests in a fully automated manner
|
||||
from test installation to execution and reporting. All tests are meant to be
|
||||
easily reproducible, easy-to-use, and support fully automated execution. The
|
||||
@@ -27,7 +27,7 @@ able to upload their test results, profiles, and suites to OpenBenchmarking.org.
|
||||
A test profile is a single test that can be executed by the Phoronix Test Suite
|
||||
-- with a series of options possible within every test -- and a test suite is a
|
||||
seamless collection of test profiles and/or additional test suites. A test
|
||||
profile consists of a set of bash/shell scripts and XML files while a test suite
|
||||
profile consists of a set of Bash/shell scripts and XML files while a test suite
|
||||
is a single XML file.
|
||||
|
||||
[OpenBenchmarking.org](http://www.openbenchmarking.org/) also allows for
|
||||
@@ -46,9 +46,9 @@ Phoromatic, and OpenBenchmarking.org is available by contacting
|
||||
|
||||
Full details on the Phoronix Test Suite setup and usage is available from the
|
||||
included HTML/PDF documentation within the phoronix-test-suite package and from
|
||||
the Phoronix Test Suite web-site.
|
||||
the Phoronix Test Suite website.
|
||||
|
||||
## INSTALLATION & SETUP:
|
||||
## Installation & Setup
|
||||
|
||||
The Phoronix Test Suite is supported on Linux, *BSD, Solaris, Mac OS X, and
|
||||
Windows systems. However, the most full-featured and well supported operating
|
||||
@@ -61,11 +61,11 @@ architectures.
|
||||
The Phoronix Test Suite can be installed for system-wide usage or run locally
|
||||
without installation from the extracted tar.gz/zip package. The only hard
|
||||
dependency on the Phoronix Test Suite is having command-line support for PHP
|
||||
(PHP 5.3+) installed. A complete PHP stack (e.g. with web-server) is NOT needed,
|
||||
but merely the PHP command-line support, which is widely available from
|
||||
(PHP 5.3+) installed. A complete PHP stack (e.g. with web server) is **not**
|
||||
needed, but merely the PHP command-line support, which is widely available from
|
||||
operating system package managers under the name `php`, `php5-cli`, or `php5`.
|
||||
|
||||
## USAGE:
|
||||
## Usage
|
||||
|
||||
The process to download, install/setup, execute, and report the results of a
|
||||
benchmark can be as simple as a command such as `phoronix-test-suite benchmark
|
||||
@@ -84,7 +84,7 @@ running, for example, `phoronix-test-suite benchmark 1204293-BY-PHORONIX357` if
|
||||
wishing to compare the results of the
|
||||
`http://openbenchmarking.org/result/1204293-BY-PHORONIX357` result file.
|
||||
|
||||
Additional information is available from the Phoronix Test Suite web-site
|
||||
Additional information is available from the Phoronix Test Suite website
|
||||
<http://www.phoronix-test-suite.com/> and the material bundled within the
|
||||
`phoronix-test-suite/documentation/` directory. A man page is also bundled with
|
||||
the phoronix-test-suite software.
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -23,7 +23,7 @@
|
||||
if(!is_executable("phoronix-test-suite") || !is_dir("pts-core/"))
|
||||
{
|
||||
echo "\nYou must run this script from the root directory of the phoronix-test-suite/ folder!\n";
|
||||
echo "Example: php5 deploy/deb-package/build-package-deb.php\n";
|
||||
echo "Example: php deploy/deb-package/build-package-deb.php\n";
|
||||
exit(0);
|
||||
}
|
||||
if(!is_executable('/usr/bin/dpkg'))
|
||||
@@ -63,8 +63,8 @@ $control_file .= "Section: Utilities\n";
|
||||
$control_file .= "Installed-Size: " . shell_exec("cd /tmp/pts-deb-builder/; du -s | cut -f 1");
|
||||
$control_file .= "Priority: optional\n";
|
||||
$control_file .= "Architecture: all\n";
|
||||
$control_file .= "Depends: php5-cli, php5-gd, php5-json\n";
|
||||
$control_file .= "Recommends: build-essential\n";
|
||||
$control_file .= "Depends: php-cli|php5-cli,php5-cli|php-xml\n";
|
||||
$control_file .= "Recommends: build-essential, php-gd|php5-gd\n";
|
||||
$control_file .= "Maintainer: Phoronix Media <trondheim-pts@phoronix-test-suite.com>\n";
|
||||
$control_file .= "Description: An Automated, Open-Source Testing Framework\n " . @str_replace("\n", " ", file_get_contents('pts-core/static/short-description.txt')) . "\n";
|
||||
$control_file .= "Homepage: http://www.phoronix-test-suite.com/ \n";
|
||||
|
||||
@@ -12,6 +12,7 @@ Section "Device"
|
||||
Option "Virtualheads" "1"
|
||||
Option "Vsync" "0"
|
||||
Option "SwapbuffersWait" "0"
|
||||
Option "DRI" "3"
|
||||
EndSection
|
||||
|
||||
Section "Screen"
|
||||
|
||||
@@ -2,6 +2,7 @@ Section "Device"
|
||||
Identifier "Device0"
|
||||
Driver "radeon"
|
||||
Option "SwapBuffersWait" "0"
|
||||
Option "DRI "3"
|
||||
EndSection
|
||||
|
||||
Section "Monitor"
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
set -e
|
||||
|
||||
run_benchmark() {
|
||||
chlp benchmark-start || true
|
||||
|
||||
params="$@"
|
||||
|
||||
mkdir -p /opt/pts/results
|
||||
@@ -20,9 +18,10 @@ run_benchmark() {
|
||||
|
||||
phoronix-test-suite batch-install $params > /dev/null 2>&1
|
||||
|
||||
benchmark-start || true
|
||||
phoronix-test-suite batch-run $params
|
||||
benchmark-finish || true
|
||||
rsync -aqz /root/.phoronix-test-suite /opt/pts/results/$run
|
||||
|
||||
scripts/parse /opt/pts/results/$run/.phoronix-test-suite/test-results/$(date +%Y)-*/test-1.xml
|
||||
chlp benchmark-finish || true
|
||||
}
|
||||
|
||||
@@ -110,6 +110,9 @@ install_phoronix() {
|
||||
apt-get install -qqy unzip build-essential default-jre-headless mesa-utils
|
||||
apt-get install -qqy phoronix-test-suite
|
||||
|
||||
apt-get install -qqy python python-pip
|
||||
pip install --upgrade charms.benchmark
|
||||
|
||||
# puppet helper to distribute facts between scripts
|
||||
apt-get install -qqy facter-customfacts-plugin
|
||||
|
||||
|
||||
@@ -10,10 +10,15 @@ PHORONIX TEST SUITE PUBLIC TODO LIST:
|
||||
- Possibly restore "weighted suites" [http://phorogit.com/index.php?p=phoronix-test-suite.git&a=commitdiff&h=548e5c073cc90d92ac3f382ca4933d5f556e78c6&hb=444441f9be866f51920e0ad8ca3909951b4d90c5]
|
||||
- Integrate finish-run command into the run command, auto-detect if the result file was a partial save and then ask if to perform run recovery'
|
||||
- Multi-threaded downloading of test files
|
||||
- Numerous pts_render improvements [see in-line code comments]
|
||||
- Optimus / DRI_PRIME=1 / xrandr --listproviders better GPU detection
|
||||
- NVIDIA make use of UsedDedicatedGPUMemory as new GPU sensor
|
||||
- Clean up all the WebSocket code and make it fit to spec
|
||||
- Incremental result uploads support
|
||||
- Check with Phodevi's parsers what other tools support JSON outputs - e.g. http://karelzak.blogspot.com/2015/06/json-output-for-basic-tools.html for cleaner parsing
|
||||
|
||||
- Figure out why TestClientVersion in result file XML is missing after adding multiple systems, the previous ones are then blank
|
||||
- Restore the ReferenceID support in the results XML
|
||||
- Improve titles on tables like in: http://openbenchmarking.org/result/1603172-GA-AMDTONGA973
|
||||
|
||||
### PTS-GRAPH ###
|
||||
|
||||
@@ -23,9 +28,8 @@ PHORONIX TEST SUITE PUBLIC TODO LIST:
|
||||
|
||||
- Shorten long change-logs on test profile pages - e.g. http://openbenchmarking.org/test/pts/hpcc
|
||||
|
||||
### NEW TEST PROFILES ###
|
||||
### POSSIBLE NEW TEST PROFILES ###
|
||||
|
||||
- Python-libmemcached [http://code.google.com/p/python-libmemcached/]
|
||||
- Intel HiBench [https://github.com/intel-hadoop/HiBench]
|
||||
- Hadoop Benchmarks / TeraSort
|
||||
- LATT Latency Tests [git://git.kernel.dk/latt.git]
|
||||
@@ -58,8 +62,18 @@ PHORONIX TEST SUITE PUBLIC TODO LIST:
|
||||
- https://openfoamwiki.net/index.php/Benchmarks_standard_v1
|
||||
- Cassandra 1.2 stress - http://docs.datastax.com/en/cassandra/1.2/cassandra/tools/toolsCStress_t.html
|
||||
- http://gcc.opensuse.org/c++bench-frescobaldi/
|
||||
- https://github.com/GoogleCloudPlatform/PerfKitBenchmarker
|
||||
- https://gooseberry.blender.org/gooseberry-production-benchmark-file/
|
||||
- https://github.com/hhvm/oss-performance
|
||||
- https://github.com/gormanm/mmtests
|
||||
- https://github.com/pandegroup/fahbench
|
||||
- https://github.com/STH-Dev/linux-bench
|
||||
- http://anzwix.com/a/FFmpeg/CryptobenchAddSupportForBlowfish
|
||||
- https://wiki.mikejung.biz/Benchmarking
|
||||
- http://dacapobench.org/
|
||||
|
||||
- https://github.com/soumith/convnet-benchmarks
|
||||
- https://github.com/cavazos-lab/FinanceBench
|
||||
- https://svail.github.io/DeepBench/
|
||||
|
||||
### WEB SOCKET / HTML5 USER INTERFACE WORK ###
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.TH phoronix-test-suite 1 "www.phoronix-test-suite.com" "6.0.0"
|
||||
.TH phoronix-test-suite 1 "www.phoronix-test-suite.com" "7.0.0"
|
||||
.SH NAME
|
||||
phoronix-test-suite \- The Phoronix Test Suite is an extensible open-source platform for performing testing and performance evaluation.
|
||||
.SH SYNOPSIS
|
||||
@@ -6,14 +6,14 @@ phoronix-test-suite \- The Phoronix Test Suite is an extensible open-source plat
|
||||
.br
|
||||
.B phoronix-test-suite benchmark [test | suite]
|
||||
.SH DESCRIPTION
|
||||
The **Phoronix Test Suite** is the most comprehensive testing and benchmarking platform available for Linux, Solaris, Mac OS X, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners.
|
||||
The **Phoronix Test Suite** is the most comprehensive testing and benchmarking platform available for Linux, Solaris, OS X, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.SH TEST INSTALLATION
|
||||
.B install [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B install [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option will install the selected test(s) inside the testing environment directory. The install process from downloading of the test files to the installation is fully automated. The install option needs to be supplied with the test name or suite as an argument. Optionally, a OpenBenchmarking.org ID or the name of a saved results file can be supplied as well and the test(s) to install will automatically be extracted from that information. If the test is already installed and was run by the latest version of the installation process, no action will be taken. Multiple arguments can be supplied to install additional tests at the same time.
|
||||
.TP
|
||||
.B install-dependencies [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B install-dependencies [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option will install the external dependencies needed by the selected test(s) using the distribution's package management system. For example, some tests depend upon GCC for compiling code. If GCC is not detected on the system, the Phoronix Test Suite will attempt to install GCC using the distribution's package management system. If you are running this command as a local user, you may be prompted for the root password while the process is running. For unsupported distributions, the dependency names will be displayed along with common names for the package. The install-dependencies option needs to be supplied with the test name or suite as an argument. When using the install option, the external dependencies are automatically checked.
|
||||
.TP
|
||||
.B make-download-cache
|
||||
@@ -26,13 +26,13 @@ This option will permanently remove a installed test by the Phoronix Test Suite.
|
||||
.B auto-compare
|
||||
This option will autonomously determine the most relevant test(s) to run for any selected sub-system(s). The tests to run are determined via OpenBenchmarking.org integration with the global results pool. Related test results from OpenBenchmarking.org are also merged to provide a straight-forward and effective means of carrying out a system comparison. If wishing to find comparable results for any particular test profile(s), simply pass the test profile names as additional arguments to this command.
|
||||
.TP
|
||||
.B benchmark [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B benchmark [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option will install the selected test(s) (if needed) and will proceed to run the test(s). This option is equivalent to running phoronix-test-suite with the install option followed by the run option. Multiple arguments can be supplied to run additional tests at the same time and save the results into one file.
|
||||
.TP
|
||||
.B finish-run [Test Result]
|
||||
This option can be used if a test run had not properly finished running all tests within a saved results file. Using this option when specifying a saved results file where all tests had not completed will attempt to finish testing on the remaining tests where there are missing results.
|
||||
.TP
|
||||
.B run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B run [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option will run the selected test(s).
|
||||
.TP
|
||||
.B run-random-tests
|
||||
@@ -41,29 +41,29 @@ This option will query OpenBenchmarking.org to run random benchmarks and result
|
||||
.B run-tests-in-suite
|
||||
This option can be used if you wish to run all of the tests found in a supplied suite, but you wish to re-configure each of the test options rather than using the defaults supplied by the suite.
|
||||
.TP
|
||||
.B stress-run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B stress-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option will run the passed tests/suites in the multi-process stress-testing mode. The stress-run mode will not produce a result file but is rather intended for running multiple test profiles concurrently to stress / burn-in the system. The number of tests to run concurrently can be toggled via the PTS_CONCURRENT_TEST_RUNS environment variable and by default is set to a value of 2.
|
||||
.TP
|
||||
.SH BATCH TESTING
|
||||
.B batch-benchmark [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B batch-benchmark [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option and its arguments are equivalent to the benchmark option, but the process will be run in the Phoronix Test Suite batch mode.
|
||||
.TP
|
||||
.B batch-install [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B batch-install [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
If you wish to run the install process in the Phoronix Test Suite batch mode but do not wish to run any tests at this time. Running the install process in the batch mode will use the default values and not prompt the user of any possible options, to ensure the process is fully automated.
|
||||
.TP
|
||||
.B batch-run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B batch-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option and its arguments are equivalent to the run option, but the process will be run in the Phoronix Test Suite batch mode.
|
||||
.TP
|
||||
.B batch-setup
|
||||
This option is used to configure the batch mode options for the Phoronix Test Suite, which is subsequently written to the user configuration file. Among the options are whether to automatically upload the test results to OpenBenchmarking.org and prompting for the saved file name.
|
||||
.TP
|
||||
.B default-benchmark [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B default-benchmark [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option will install the selected test(s) (if needed) and will proceed to run the test(s) in the defaults mode. This option is equivalent to running phoronix-test-suite with the install option followed by the default-run option.
|
||||
.TP
|
||||
.B default-run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B default-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option will run the selected test(s). The name of the test or suite must be supplied or the OpenBenchmarking.org ID or saved local file name. Multiple arguments can be supplied to run additional tests at the same time and save the results in a suite-like fashion. Unlike the normal run option, the default-run will not prompt the user to select from the available test options but will instead use the default options as automatically set by pts-core or the test profile. Use batch-run to automatically test all of the available options.
|
||||
.TP
|
||||
.B internal-run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B internal-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option and its arguments pre-set the Phoronix Test Suite batch run mode with sane values for carrying out benchmarks in a semi-automated manner and without uploading any of the result data to the public OpenBenchmarking.org.
|
||||
.TP
|
||||
.SH OPENBENCHMARKING.ORG
|
||||
@@ -101,15 +101,15 @@ This option can be used for uploading a test profile to your account on OpenBenc
|
||||
This option can be used for uploading a test suite to your account on OpenBenchmarking.org. By uploading your test suite to OpenBenchmarking.org, others are then able to browse and access this test suite for easy distribution.
|
||||
.TP
|
||||
.SH SYSTEM
|
||||
.B detailed-system-info
|
||||
Display detailed information about the installed system hardware and software information as detected by the Phoronix Test Suite Phodevi Library.
|
||||
.TP
|
||||
.B diagnostics
|
||||
This option will print information that is useful to developers when debugging problems with the Phoronix Test Suite and/or test profiles and test suites.
|
||||
.TP
|
||||
.B interactive
|
||||
A simple text-driven interactive interface to the Phoronix Test Suite.
|
||||
.TP
|
||||
.B php-conf
|
||||
This option will print information that is useful to developers when debugging problems with the Phoronix Test Suite and/or test profiles and test suites.
|
||||
.TP
|
||||
.B system-info
|
||||
Display the installed system hardware and software information as detected by the Phoronix Test Suite Phodevi Library.
|
||||
.TP
|
||||
@@ -117,7 +117,10 @@ Display the installed system hardware and software information as detected by th
|
||||
Display the installed system hardware and software sensors in real-time as detected by the Phoronix Test Suite Phodevi Library.
|
||||
.TP
|
||||
.SH INFORMATION
|
||||
.B info [Test | Suite | OpenBenchmarking.org ID | Test Result]
|
||||
.B estimate-run-time [Test | Suite | OpenBenchmarking ID | Test Result]
|
||||
This option will provide estimates for test run-time / length.
|
||||
.TP
|
||||
.B info [Test | Suite | OpenBenchmarking ID | Test Result]
|
||||
This option will show details about the supplied test, suite, virtual suite, or result file.
|
||||
.TP
|
||||
.B list-available-suites
|
||||
@@ -141,6 +144,9 @@ This option will list all test profiles that are currently installed on the syst
|
||||
.B list-missing-dependencies
|
||||
This option will list all of the packages / external test dependencies that are missing from the system that the Phoronix Test Suite may potentially need by select test profiles.
|
||||
.TP
|
||||
.B list-not-installed-tests
|
||||
This option will list all test profiles that are supported and available but presently NOT installed on the system.
|
||||
.TP
|
||||
.B list-possible-dependencies
|
||||
This option will list all of the packages / external test dependencies that are are potentially used by the Phoronix Test Suite.
|
||||
.TP
|
||||
@@ -154,19 +160,22 @@ This option will list various details about installed tests and their usage.
|
||||
This option will list all available test profiles that are available from the enabled OpenBenchmarking.org repositories but are NOT SUPPORTED on the given hardware/software platform. This is mainly a debugging option for those looking for test profiles to potentially port to new platforms, etc.
|
||||
.TP
|
||||
.SH ASSET CREATION
|
||||
.B debug-benchmark [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B debug-benchmark [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option is intended for use by test profile writers and is identical to the <em>run</em> option but will yield more information during the run process that can be used to debug issues with a test profile or to verify the test profile is functioning correctly.
|
||||
.TP
|
||||
.B debug-install [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B debug-install [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option is intended for use by test profile writers and is identical to the install option but will yield more information during the run process that can be used to debug issues with a test profile installer or to verify the test profile is functioning correctly.
|
||||
.TP
|
||||
.B debug-test-download-links [Test | Suite | OpenBenchmarking.org ID | Test Result]
|
||||
.B debug-result-parser [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option is intended for use by test profile writers and is used for debugging a result parser. No test execution is done, but there must already be PTS-generated .log files present within the test's installation directory.
|
||||
.TP
|
||||
.B debug-test-download-links [Test | Suite | OpenBenchmarking ID | Test Result]
|
||||
This option will check all download links within the specified test profile(s) to ensure there are no broken URLs.
|
||||
.TP
|
||||
.B download-test-files [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B download-test-files [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This will download the selected test file(s) to the Phoronix Test Suite download cache but will not install the tests.
|
||||
.TP
|
||||
.B force-install [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
|
||||
.B force-install [Test | Suite | OpenBenchmarking ID | Test Result] ...
|
||||
This option will force the installation (or re-installation) of a test or suite. The arguments and process is similar to the install option but even if the test is installed, the entire installation process will automatically be executed. This option is generally used when debugging a test installation problem.
|
||||
.TP
|
||||
.B result-file-to-suite [Test Result]
|
||||
@@ -227,6 +236,9 @@ This option will read a saved test results file and output the system hardware a
|
||||
.B show-result [Test Result]
|
||||
Open up the test results in the Phoronix Test Suite Result Viewer or on OpenBenchmarking.org.
|
||||
.TP
|
||||
.B winners-and-losers [Test Result]
|
||||
This option is used if you wish to analyze a result file to see which runs produced the most wins/losses of those result identifiers in the saved file.
|
||||
.TP
|
||||
.SH RESULT ANALYTICS
|
||||
.B analyze-all-runs [Test Result]
|
||||
This option will generate a candlestick graph showing the distribution of results from all trial runs. The candlestick graph is similar to the Japanese candlestick charts used by the financial industry, except instead of representing stock data it is numerical result data from all trial runs.\n\nThe tip of the upper-wick represents the highest value of the test runs with the tip of the lower-wick representing the lowest value of all test runs. The upper-edge of the candle body represents the first or last run value and the lower-edge represents the first or last run value. Lastly, if the last run value is less than the first run value, the candle body is the same color as the graph background, otherwise the last run value is greater.
|
||||
@@ -235,6 +247,9 @@ This option will generate a candlestick graph showing the distribution of result
|
||||
.B build-suite
|
||||
This option will guide the user through the process of generating their own test suite, which they can then run. Optionally, passed as arguments can be the test(s) or suite(s) to add to the suite to be created, instead of being prompted through the process.
|
||||
.TP
|
||||
.B debug-dependency-handler
|
||||
This option is used for testing the distribution-specific dependency handler for external dependencies.
|
||||
.TP
|
||||
.B debug-render-test
|
||||
This option is used during the development of the Phoronix Test Suite software for testing of the result and graph rendering code-paths This option will download a large number of reference test results from LinuxBenchmarking.com.
|
||||
.TP
|
||||
@@ -261,7 +276,7 @@ This option will display the Phoronix Test Suite client version.
|
||||
.TP
|
||||
.SH WEB / GUI SUPPORT
|
||||
.B gui
|
||||
Launch the Phoronix Test Suite HTML5 web user-interface in the local GUI mode (no remote web support) and attempt to auto-launch the web-browser.
|
||||
Launch the Phoronix Test Suite HTML5 web user-interface in the local GUI mode (no remote web support) and attempt to auto-launch the web-browser. THIS FEATURE IS CURRENTLY EXPERIMENTAL AND NO LONGER ACTIVE DEVELOPMENT. See Phoronix Test Suite Phoromatic as an alternative web UI approach.
|
||||
.TP
|
||||
.B start-remote-gui-server
|
||||
Start the GUI web server and WebSocket server processes for remote (or local) access via the web-browser. The settings can be configured via the Phoronix Test Suite's XML configuration file.
|
||||
@@ -283,8 +298,8 @@ This option will allow you to configure all available end-user options for a Pho
|
||||
This option can be used for debugging a Phoronix Test Suite module.
|
||||
.TP
|
||||
.SH PHOROMATIC
|
||||
.B g
|
||||
n
|
||||
.B n
|
||||
_
|
||||
.TP
|
||||
.SH SEE ALSO
|
||||
.B Websites:
|
||||
@@ -299,5 +314,5 @@ http://www.phoronix.com/
|
||||
.br
|
||||
http://www.phoronix.com/forums/
|
||||
.SH AUTHORS
|
||||
Copyright 2008 - 2015 by Phoronix Media, Michael Larabel.
|
||||
Copyright 2008 - 2017 by Phoronix Media, Michael Larabel.
|
||||
.TP
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,10 +5,10 @@
|
||||
<body>
|
||||
<h1>Setup Overview</h1>
|
||||
<p>The Phoronix Test Suite supports Linux, Apple Mac OS X, Microsoft Windows, Solaris, Hurd, BSD, and other operating system environments. The only Linux distribution-specific code deals with the external dependencies support feature that are set by individual test profiles. If you are not running one of the supported Linux distributions, Solaris, BSD, or Mac OS X, you may need to install a package manually (as instructed by the Phoronix Test Suite) in order for a test to run. An example of an external dependency would be GCC and the OpenGL Utility Toolkit being needed for test profiles that build an OpenGL benchmark from source-code.</p>
|
||||
<p>Among the distributions where the Phoronix Test Suite has been officially tested include Ubuntu, Fedora, Mandriva / Mageia, Gentoo, PCLinuxOS, Arch Linux, Pardus, OpenSuSE, Optware, webOS, Zenwalk, CentOS, Red Hat Enterprise Linux, Oracle Linux, Scientific Linux, Debian, Mint, MEPIS, and Amazon Linux EC2.</p>
|
||||
<p>Among the distributions where the Phoronix Test Suite has been officially tested include Ubuntu, Fedora, Mandriva / Mageia, Gentoo, PCLinuxOS, Arch Linux, Pardus, OpenSuSE, Optware, webOS, Zenwalk, CentOS, Red Hat Enterprise Linux, Oracle Linux, Scientific Linux, Debian, Mint, MEPIS, Alpine Linux, Void Linux, Intel Clear Linux, and Amazon Linux EC2.</p>
|
||||
<p>Among the tested BSD distributions are FreeBSD, PC-BSD, NetBSD, OpenBSD, Debian GNU/kFreeBSD, and DragonflyBSD. Tested Solaris distributions include OpenSolaris, Solaris Express 11, Oracle Solaris 11, OpenIndiana, Illumos, and Nexenta.</p>
|
||||
<h1>Dependencies</h1>
|
||||
<p>The only required dependency for the Phoronix Test Suite is PHP 5.3 or newer. On Linux distributions, the needed package is commonly called <em>php5-cli</em> or <em>php-cli</em> or <em>php</em>. It is important to note that only PHP for the command-line is needed and not a web server (Apache) or other packages commonly associated with PHP and its usage by web-sites. The PHP5 version required is PHP 5.3+ and can also be found at <a href="http://www.php.net/">www.php.net</a>.</p>
|
||||
<p>The only required dependency for the Phoronix Test Suite is PHP 5.3 or newer. On Linux distributions, the needed package is commonly called <em>php5-cli</em> or <em>php-cli</em> or <em>php7</em> or <em>php</em>. It is important to note that only PHP for the command-line is needed and not a web server (Apache) or other packages commonly associated with PHP and its usage by web-sites. The PHP5 version required is PHP 5.3+ and can also be found at <a href="http://www.php.net/">www.php.net</a>. PHP 7 is fully supported by the Phoronix Test Suite as well as HHVM.</p>
|
||||
|
||||
<p>For installing PHP on Windows, the <a href="https://www.microsoft.com/web/platform/phponwindows.aspx">Microsoft Web Platform Installer</a> provides an automated alternative that will install PHP into the directory expected by Phoronix Test Suite. Users opting to install PHP manually must extract the files to <em>C:\Program Files (x86)\PHP\</em> or a subdirectory.</p>
|
||||
<p>As part of the PHP requirement, the following PHP extensions are required and/or highly recommended in order to take advantage of the Phoronix Test Suite capabilities:</p>
|
||||
|
||||
@@ -1 +1 @@
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>External Dependencies</title></head><body><p>The Phoronix Test Suite has a feature known as "External Dependencies" where the Phoronix Test Suite can attempt to automatically install some of the test-specific dependencies on supported distributions. If running on a distribution where there is currently no External Dependencies profile, the needed package name(s) are listed for manual installation.</p><p>Below are a list of the operating systems that currently have external dependencies support within the Phoronix Test Suite for the automatic installation of needed test files.<hr><ul></ul><li>Amazon</li><li>Angstrom</li><li>Arch Linux</li><li>CentOS</li><li>ClearOS</li><li>ClearOS Core Server</li><li>Debian</li><li>DragonFlyBSD</li><li>Fedora</li><li>Fluxbuntu</li><li>FreeBSD</li><li>GNU KFreeBSD</li><li>Gentoo</li><li>Goobuntu</li><li>HP</li><li>Joli Cloud</li><li>Linaro</li><li>Linux Mint</li><li>MEPIS</li><li>Mac OS X</li><li>MacPorts</li><li>Mageia</li><li>Mandriva</li><li>MeeGo</li><li>Moblin</li><li>Mythbuntu</li><li>NetBSD</li><li>Nexenta Core</li><li>OLPC</li><li>OpenIndiana</li><li>OpenMandriva</li><li>OpenSolaris</li><li>OpenSuSE</li><li>Optware</li><li>Oracle Server</li><li>PCLinuxOS</li><li>PTS Desktop Live</li><li>PTS Linux Live</li><li>Palm</li><li>Pardus Linux</li><li>Red Hat Enterprise</li><li>Red Hat Enterprise Server</li><li>SUSE</li><li>SUSE Linux</li><li>Scientific</li><li>ScientificSL</li><li>Ubuntu</li><li>Zenwalk</li><li>gNewSense</li></p></body></html>
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>External Dependencies</title></head><body><p>The Phoronix Test Suite has a feature known as "External Dependencies" where the Phoronix Test Suite can attempt to automatically install some of the test-specific dependencies on supported distributions. If running on a distribution where there is currently no External Dependencies profile, the needed package name(s) are listed for manual installation.</p><p>Below are a list of the operating systems that currently have external dependencies support within the Phoronix Test Suite for the automatic installation of needed test files.<hr><ul></ul><li>Alpine Linux</li><li>Amazon</li><li>Angstrom</li><li>Arch Linux</li><li>CentOS</li><li>ClearOS</li><li>ClearOS Core Server</li><li>Debian</li><li>DragonFlyBSD</li><li>Fedora</li><li>Fluxbuntu</li><li>FreeBSD</li><li>GNU KFreeBSD</li><li>Gentoo</li><li>Goobuntu</li><li>HP</li><li>Joli Cloud</li><li>Linaro</li><li>Linux Mint</li><li>MEPIS</li><li>Mac OS X</li><li>MacPorts</li><li>Mageia</li><li>Mandriva</li><li>MeeGo</li><li>Moblin</li><li>Mythbuntu</li><li>NetBSD</li><li>Nexenta Core</li><li>OLPC</li><li>OpenIndiana</li><li>OpenMandriva</li><li>OpenSolaris</li><li>OpenSuSE</li><li>Optware</li><li>Oracle Server</li><li>PCLinuxOS</li><li>PTS Desktop Live</li><li>PTS Linux Live</li><li>Palm</li><li>Pardus Linux</li><li>Red Hat Enterprise</li><li>Red Hat Enterprise Server</li><li>SUSE</li><li>SUSE Linux</li><li>Scientific</li><li>ScientificSL</li><li>Solus</li><li>Solus Linux</li><li>Ubuntu</li><li>Void Linux</li><li>Zenwalk</li><li>gNewSense</li></p></body></html>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,20 +1,20 @@
|
||||
The Phoronix Test Suite itself is an open-source framework for conducting automated tests along with reporting of test results, detection of installed system software/hardware, and other features. Modules for the Phoronix Test Suite also allow for integration with git-bisect and other revision control systems for per-commit regression testing, system sensor monitoring, and other extras.
|
||||
|
||||
This framework is designed to be an extensible architecture so that new test profiles and suites can be easily added to represent performance benchmarks, unit tests, and other quantitative and qualitative (e.g. image quality comparison) measurements. Available through OpenBenchmarking.org, a collaborative storage platform developed in conjunction with the Phoronix Test Suite, are more than 200 individual test profiles and more than 60 test suites available by default from the Phoronix Test Suite. Independent users are also able to upload their test results, profiles, and suites to OpenBenchmarking.org. A test profile is a single test that can be executed by the Phoronix Test Suite -- with a series of options possible within every test -- and a test suite is a seamless collection of test profiles and/or additional test suites. A test profile consists of a set of bash/shell scripts and XML files while a test suite is a single XML file.
|
||||
This framework is designed to be an extensible architecture so that new test profiles and suites can be easily added to represent performance benchmarks, unit tests, and other quantitative and qualitative (e.g. image quality comparison) measurements. Available through OpenBenchmarking.org, a collaborative storage platform developed in conjunction with the Phoronix Test Suite, are more than 200 individual test profiles and more than 60 test suites available by default from the Phoronix Test Suite. Independent users are also able to upload their test results, profiles, and suites to OpenBenchmarking.org. A test profile is a single test that can be executed by the Phoronix Test Suite -- with a series of options possible within every test -- and a test suite is a seamless collection of test profiles and/or additional test suites. A test profile consists of a set of Bash/shell scripts and XML files while a test suite is a single XML file.
|
||||
|
||||
[OpenBenchmarking.org](http://www.openbenchmarking.org/) also allows for conducting side-by-side result comparisons, a central location for storing and sharing test results, and collaborating over test data. [Phoromatic](http://www.phoromatic.com/) is a complementary platform to OpenBenchmarking.org and the Phoronix Test Suite for interfacing with Phoronix Test Suite client(s) to automatically execute test runs on a timed, per-commit, or other trigger-driven basis. Phoromatic is designed for enterprise and allows for the easy management of multiple networked systems running Phoronix Test Suite clients via a single web-based interface.
|
||||
|
||||
Professional support and custom engineering for the Phoronix Test Suite, Phoromatic, and OpenBenchmarking.org is available by contacting <http://www.phoronix-test-suite.com/>.
|
||||
|
||||
Full details on the Phoronix Test Suite setup and usage is available from the included HTML/PDF documentation within the phoronix-test-suite package and from the Phoronix Test Suite web-site.
|
||||
Full details on the Phoronix Test Suite setup and usage is available from the included HTML/PDF documentation within the phoronix-test-suite package and from the Phoronix Test Suite website.
|
||||
|
||||
## INSTALLATION & SETUP:
|
||||
## Installation & Setup
|
||||
|
||||
The Phoronix Test Suite is supported on Linux, *BSD, Solaris, Mac OS X, and Windows systems. However, the most full-featured and well supported operating system for conducting the tests is Linux with some non-basic functionality not being available under all platforms. The Phoronix Test Suite software/framework is compatible with all major CPU architectures (e.g. i686, x86_64, ARM, PowerPC), but not all of the test profiles/suites are compatible with all architectures.
|
||||
|
||||
The Phoronix Test Suite can be installed for system-wide usage or run locally without installation from the extracted tar.gz/zip package. The only hard dependency on the Phoronix Test Suite is having command-line support for PHP (PHP 5.3+) installed. A complete PHP stack (e.g. with web-server) is NOT needed, but merely the PHP command-line support, which is widely available from operating system package managers under the name `php`, `php5-cli`, or `php5`.
|
||||
The Phoronix Test Suite can be installed for system-wide usage or run locally without installation from the extracted tar.gz/zip package. The only hard dependency on the Phoronix Test Suite is having command-line support for PHP (PHP 5.3+) installed. A complete PHP stack (e.g. with web server) is **not** needed, but merely the PHP command-line support, which is widely available from operating system package managers under the name `php`, `php5-cli`, or `php5`.
|
||||
|
||||
## USAGE:
|
||||
## Usage
|
||||
|
||||
The process to download, install/setup, execute, and report the results of a benchmark can be as simple as a command such as `phoronix-test-suite benchmark smallpt` to run a simple CPU test profile. If wishing to simply install a test, it's a matter of running `phoronix-test-suite install <test or suite name>` and to run it's `phoronix-test-suite run <test or suite name>`. There's also a batch mode for non-interactive benchmarking by first running `phoronix-test-suite batch-setup` and then using the `batch-run` sub-command rather than `run`.
|
||||
|
||||
@@ -22,4 +22,4 @@ Viewing installed system hardware and software is available via `phoronix-test-s
|
||||
|
||||
Facilitating a result comparison from OpenBenchmarking.org can be done by running, for example, `phoronix-test-suite benchmark 1204293-BY-PHORONIX357` if wishing to compare the results of the `http://openbenchmarking.org/result/1204293-BY-PHORONIX357` result file.
|
||||
|
||||
Additional information is available from the Phoronix Test Suite web-site <http://www.phoronix-test-suite.com/> and the material bundled within the `phoronix-test-suite/documentation/` directory. A man page is also bundled with the phoronix-test-suite software.
|
||||
Additional information is available from the Phoronix Test Suite website <http://www.phoronix-test-suite.com/> and the material bundled within the `phoronix-test-suite/documentation/` directory. A man page is also bundled with the phoronix-test-suite software.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
# Phoronix Test Suite
|
||||
# URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
# Copyright (C) 2008 - 2015, Phoronix Media
|
||||
# Copyright (C) 2008 - 2017, Phoronix Media
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
#
|
||||
# Phoronix Test Suite
|
||||
# URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
# Copyright (C) 2008 - 2015, Phoronix Media
|
||||
# Copyright (C) 2008 - 2015, Michael Larabel
|
||||
# Copyright (C) 2008 - 2017, Phoronix Media
|
||||
# Copyright (C) 2008 - 2017, Michael Larabel
|
||||
# phoronix-test-suite: The Phoronix Test Suite is an extensible open-source testing / benchmarking platform
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@@ -44,12 +44,18 @@ fi
|
||||
if [ ! "X$PHP_BIN" = "X" ] && [ -x $PHP_BIN ]
|
||||
then
|
||||
export PHP_BIN=$PHP_BIN
|
||||
elif [ -x /usr/bin/php7 ] || [ -x /usr/local/bin/php7 ] || [ -x /usr/pkg/bin/php7 ]
|
||||
then
|
||||
export PHP_BIN="php7"
|
||||
elif [ -x /usr/bin/php5 ] || [ -x /usr/local/bin/php5 ] || [ -x /usr/pkg/bin/php5 ]
|
||||
then
|
||||
export PHP_BIN="php5"
|
||||
elif [ -x /usr/bin/php ] || [ -x /usr/local/bin/php ] || [ -x /usr/pkg/bin/php ]
|
||||
then
|
||||
export PHP_BIN="php"
|
||||
elif [ -x /usr/php7/bin/php ]
|
||||
then
|
||||
export PHP_BIN="/usr/php7/bin/php"
|
||||
elif [ -x /usr/php5/bin/php ]
|
||||
then
|
||||
export PHP_BIN="/usr/php5/bin/php"
|
||||
@@ -65,6 +71,9 @@ then
|
||||
elif which php >/dev/null 2>&1 ;
|
||||
then
|
||||
export PHP_BIN="php"
|
||||
elif which php7 >/dev/null 2>&1 ;
|
||||
then
|
||||
export PHP_BIN="php7"
|
||||
elif which php5 >/dev/null 2>&1 ;
|
||||
then
|
||||
export PHP_BIN="php5"
|
||||
@@ -83,7 +92,7 @@ if [ "X$PHP_BIN" = "X" ]
|
||||
then
|
||||
cat <<'EOT'
|
||||
|
||||
PHP 5.3 or newer must be installed for the Phoronix Test Suite
|
||||
PHP 5.3 or newer or PHP 7 must be installed for the Phoronix Test Suite
|
||||
The PHP command-line package is commonly called php-cli, php5-cli, or php.
|
||||
For more information visit: http://www.phoronix-test-suite.com/
|
||||
|
||||
@@ -91,38 +100,87 @@ EOT
|
||||
|
||||
if [ -x /usr/bin/zypper ]
|
||||
then
|
||||
# SUSE / OpenSUSE
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# zypper install php5 php5-zip"
|
||||
echo "# zypper install php7 php7-zip"
|
||||
echo " "
|
||||
elif [ -x /usr/bin/apt-get ]
|
||||
then
|
||||
# Debian / Ubuntu Based Systems
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# apt-get install php5-cli"
|
||||
echo "# apt-get install php-cli php-xml"
|
||||
echo " "
|
||||
elif [ -x /usr/bin/dnf ]
|
||||
then
|
||||
# Modern Fedora
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# dnf install php-cli php-xml"
|
||||
echo " "
|
||||
elif [ -x /usr/bin/yum ]
|
||||
then
|
||||
# Red Hat / Fedora / etc
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# yum install php-cli php-xml"
|
||||
echo " "
|
||||
elif [ -x /usr/bin/pkg_radd ]
|
||||
then
|
||||
# BSD
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# pkg_radd php5 php5-json php5-zip php5-dom"
|
||||
echo " "
|
||||
elif [ -x /usr/bin/pacman ]
|
||||
then
|
||||
# Arch Linux
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# pacman -S php"
|
||||
echo " "
|
||||
elif [ -x /usr/local/sbin/pkg ] || [ -x /usr/sbin/pkg ]
|
||||
then
|
||||
# DragonFlyBSD and others
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# pkg install php5 php5-dom php5-zip php5-json php5-simplexml"
|
||||
echo "# pkg install php70 php70-dom php70-zip php70-json php70-simplexml"
|
||||
echo " "
|
||||
elif [ -x /usr/local/swupd ]
|
||||
then
|
||||
# Clear Linux
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# swupd bundle-add os-testsuite-phoronix"
|
||||
echo " "
|
||||
elif [ -x /usr/sbin/pkg_add ]
|
||||
then
|
||||
# OpenBSD
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# pkg_add php php-zip"
|
||||
echo " "
|
||||
elif [ -x /usr/sbin/equo ]
|
||||
then
|
||||
# Sabayon
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# equo install dev-lang/php"
|
||||
echo " "
|
||||
elif [ -x /usr/bin/xbps-install ] || [ -x /usr/sbin/xbps-install ]
|
||||
then
|
||||
# Void Linux
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# xbps-install -Sy php unzip"
|
||||
echo " "
|
||||
elif [ -x /usr/sbin/netpkg ]
|
||||
then
|
||||
# Zenwalk / Slackware
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# netpkg php"
|
||||
echo " "
|
||||
elif [ -x /sbin/apk ]
|
||||
then
|
||||
# Alpine Linux
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# apk add php5 php5-dom php5-zip php5-json"
|
||||
echo " "
|
||||
elif [ -x /usr/bin/urpmi ]
|
||||
then
|
||||
# OpenMandriva Linux
|
||||
echo "The command to likely run for your operating system is: "
|
||||
echo "# urpmi php-cli"
|
||||
echo " "
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
:: Phoronix Test Suite
|
||||
:: URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
:: Copyright (C) 2008 - 2015, Phoronix Media
|
||||
:: Copyright (C) 2008 - 2015, Michael Larabel
|
||||
:: Copyright (C) 2008 - 2017, Phoronix Media
|
||||
:: Copyright (C) 2008 - 2017, Michael Larabel
|
||||
:: phoronix-test-suite: The Phoronix Test Suite is an extensible open-source testing / benchmarking platform
|
||||
::
|
||||
:: This program is free software; you can redistribute it and/or modify
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2012 - 2015, Phoronix Media
|
||||
Copyright (C) 2012 - 2015, Michael Larabel
|
||||
Copyright (C) 2012 - 2016, Phoronix Media
|
||||
Copyright (C) 2012 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -39,7 +39,7 @@ class auto_compare implements pts_option_interface
|
||||
|
||||
if($test_object instanceof pts_test_profile)
|
||||
{
|
||||
array_push($compare_tests, $test_object->get_identifier(false));
|
||||
$compare_tests[] = $test_object->get_identifier(false);
|
||||
|
||||
if(!isset($compare_subsystems[$test_object->get_test_hardware_type()]))
|
||||
{
|
||||
@@ -140,7 +140,7 @@ class auto_compare implements pts_option_interface
|
||||
}
|
||||
$result_file->override_result_objects($result_objects);
|
||||
pts_client::save_test_result($result_file->get_file_location(), $result_file->get_xml());
|
||||
array_push($compare_results, $public_id);
|
||||
$compare_results[] = $public_id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,10 +197,10 @@ class auto_compare implements pts_option_interface
|
||||
{
|
||||
$value_r = explode(' ', str_replace('-', ' ', $value));
|
||||
array_pop($value_r);
|
||||
array_push($to_array, $component_type . ':' . implode(' ', $value_r));
|
||||
$to_array[] = $component_type . ':' . implode(' ', $value_r);
|
||||
}
|
||||
|
||||
array_push($to_array, $component_type . ':' . $value);
|
||||
$to_array[] = $component_type . ':' . $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -37,8 +37,12 @@ class build_suite implements pts_option_interface
|
||||
$possible_suites = pts_openbenchmarking::available_suites();
|
||||
$possible_tests = pts_openbenchmarking::available_tests();
|
||||
|
||||
$suite_writer = new pts_test_suite_writer();
|
||||
$suite_writer->add_suite_information($suite_name, '1.0.0', $suite_maintainer, $suite_test_type, $suite_description);
|
||||
$new_suite = new pts_test_suite();
|
||||
$new_suite->set_title($suite_name);
|
||||
$new_suite->set_version('1.0.0');
|
||||
$new_suite->set_maintainer($suite_maintainer);
|
||||
$new_suite->set_suite_type($suite_test_type);
|
||||
$new_suite->set_description($suite_description);
|
||||
|
||||
foreach($r as $test_object)
|
||||
{
|
||||
@@ -51,12 +55,12 @@ class build_suite implements pts_option_interface
|
||||
for($i = 0; $i < count($args); $i++)
|
||||
{
|
||||
// Not binding the test profile version to this suite, otherwise change false to true
|
||||
$suite_writer->add_to_suite($test_object->get_identifier(false), $args[$i], $description[$i]);
|
||||
$new_suite->add_to_suite($test_object, $args[$i], $description[$i]);
|
||||
}
|
||||
}
|
||||
else if($test_object instanceof pts_test_suite)
|
||||
{
|
||||
$suite_writer->add_to_suite($test_object->get_identifier(), null, null);
|
||||
$new_suite->add_suite_tests_to_suite($test_object);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,12 +78,13 @@ class build_suite implements pts_option_interface
|
||||
|
||||
for($i = 0; $i < count($args); $i++)
|
||||
{
|
||||
$suite_writer->add_to_suite($test_to_add, $args[$i], $description[$i]);
|
||||
$new_suite->add_to_suite($test_profile, $args[$i], $description[$i]);
|
||||
}
|
||||
break;
|
||||
case 'Add Sub-Suite':
|
||||
$suite_to_add = pts_user_io::prompt_text_menu('Enter test suite', $possible_suites);
|
||||
$suite_writer->add_to_suite($suite_to_add, null, null);
|
||||
$test_suite = new pts_test_suite($suite_to_add);
|
||||
$new_suite->add_suite_tests_to_suite($test_suite);
|
||||
break;
|
||||
}
|
||||
echo PHP_EOL . 'Available Options:' . PHP_EOL;
|
||||
@@ -87,13 +92,9 @@ class build_suite implements pts_option_interface
|
||||
}
|
||||
while($input_option != 'Save & Exit');
|
||||
|
||||
$suite_identifier = $suite_writer->clean_save_name_string($suite_name);
|
||||
$save_to = PTS_TEST_SUITE_PATH . 'local/' . $suite_identifier . '/suite-definition.xml';
|
||||
mkdir(dirname($save_to));
|
||||
|
||||
if($suite_writer->save_xml($save_to) != false)
|
||||
if($new_suite->save_xml($suite_name) != false)
|
||||
{
|
||||
echo PHP_EOL . PHP_EOL . 'Saved To: ' . $save_to . PHP_EOL . 'To run this suite, type: phoronix-test-suite benchmark ' . $suite_identifier . PHP_EOL . PHP_EOL;
|
||||
echo PHP_EOL . PHP_EOL . 'Saved -- to run this suite, type: phoronix-test-suite benchmark ' . $new_suite->get_identifier() . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
45
pts-core/commands/debug_dependency_handler.php
Normal file
45
pts-core/commands/debug_dependency_handler.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015, Phoronix Media
|
||||
Copyright (C) 2015, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class debug_dependency_handler implements pts_option_interface
|
||||
{
|
||||
const doc_section = 'Other';
|
||||
const doc_description = 'This option is used for testing the distribution-specific dependency handler for external dependencies.';
|
||||
|
||||
public static function run($r)
|
||||
{
|
||||
$exdep_parser = new pts_exdep_generic_parser();
|
||||
foreach($exdep_parser->get_available_packages() as $pkg)
|
||||
{
|
||||
$pkg_data = $exdep_parser->get_package_data($pkg);
|
||||
$files = explode(' ', str_replace(array(' OR ', ', '), ' ', $pkg_data['file_check']));
|
||||
foreach($files as $file)
|
||||
{
|
||||
echo (is_array($file) ? implode(' ', $file) : $file) . ': ';
|
||||
$deps = pts_external_dependencies::packages_that_provide($file);
|
||||
echo (is_array($deps) ? implode(' ', $deps) : null) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015, Phoronix Media
|
||||
Copyright (C) 2015, Michael Larabel
|
||||
Copyright (C) 2015 - 2017, Phoronix Media
|
||||
Copyright (C) 2015 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -34,7 +34,11 @@ class debug_render_test implements pts_option_interface
|
||||
pts_network::download_file('http://linuxbenchmarking.com/misc/mega-render-test-310815.tar.bz2', $render_dir . 'mega-render-test.tar.bz2');
|
||||
pts_compression::archive_extract($render_dir . 'mega-render-test.tar.bz2');
|
||||
}
|
||||
define('PATH_TO_EXPORTED_PHOROMATIC_DATA', $render_dir . 'mega-render-test-310815/');
|
||||
|
||||
if(!defined('PATH_TO_EXPORTED_PHOROMATIC_DATA'))
|
||||
{
|
||||
define('PATH_TO_EXPORTED_PHOROMATIC_DATA', $render_dir . 'mega-render-test-310815/');
|
||||
}
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set('memory_limit','2048M');
|
||||
@@ -63,7 +67,7 @@ class debug_render_test implements pts_option_interface
|
||||
{
|
||||
// Add to result file
|
||||
$system_name = basename(dirname($composite_xml)) . ': ' . $trigger;
|
||||
array_push($result_files, new pts_result_merge_select($composite_xml, null, $system_name));
|
||||
$result_files[] = new pts_result_merge_select($composite_xml, null, $system_name);
|
||||
}
|
||||
}
|
||||
echo 'STARTING MERGE; ';
|
||||
@@ -97,6 +101,19 @@ class debug_render_test implements pts_option_interface
|
||||
$dump_size += strlen($html_dump);
|
||||
file_put_contents(PATH_TO_EXPORTED_PHOROMATIC_DATA . $REQUESTED . '.html', $html_dump . '</body></html>');
|
||||
}
|
||||
|
||||
if(getenv('DEBUG_RENDER_TEST_LOCAL_TOO') != false)
|
||||
{
|
||||
echo PHP_EOL . 'LOCAL RENDER TEST TIME' . PHP_EOL;
|
||||
$extra_graph_attributes = null;
|
||||
foreach(pts_client::saved_test_results() as $saved_result)
|
||||
{
|
||||
$save_to_dir = pts_client::setup_test_result_directory($saved_result);
|
||||
$generated_graphs = pts_client::generate_result_file_graphs($saved_result, $save_to_dir, $extra_graph_attributes);
|
||||
echo $saved_result . ': ' . count($generated_graphs) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
echo PHP_EOL . 'RENDER TEST TOOK: ' . (time() - $start) . PHP_EOL . PHP_EOL;
|
||||
echo PHP_EOL . 'PEAK MEMORY USAGE: ' . round(memory_get_peak_usage(true) / 1048576, 3) . ' MB';
|
||||
echo PHP_EOL . 'PEAK MEMORY USAGE (emalloc): ' . round(memory_get_peak_usage() / 1048576, 3) . ' MB';
|
||||
|
||||
48
pts-core/commands/debug_result_parser.php
Normal file
48
pts-core/commands/debug_result_parser.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2017, Phoronix Media
|
||||
Copyright (C) 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class debug_result_parser implements pts_option_interface
|
||||
{
|
||||
const doc_section = 'Asset Creation';
|
||||
const doc_description = 'This option is intended for use by test profile writers and is used for debugging a result parser. No test execution is done, but there must already be PTS-generated .log files present within the test\'s installation directory.';
|
||||
|
||||
public static function argument_checks()
|
||||
{
|
||||
return array(
|
||||
new pts_argument_check('VARIABLE_LENGTH', array('pts_types', 'identifier_to_object'), null)
|
||||
);
|
||||
}
|
||||
public static function run($r)
|
||||
{
|
||||
// Make sure you're debugging the latest test script...
|
||||
//pts_test_installer::standard_install($r);
|
||||
// For debugging, usually running just once is sufficient, unless FORCE_TIMES_TO_RUN is preset
|
||||
pts_client::pts_set_environment_variable('FORCE_TIMES_TO_RUN', 1);
|
||||
// Run the test(s) in debug mode
|
||||
pts_client::set_debug_mode(true);
|
||||
$test_run_manager = new pts_test_run_manager();
|
||||
$test_run_manager->DEBUG_no_test_execution_just_result_parse = true;
|
||||
$test_run_manager->standard_run($r);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2013 - 2015, Phoronix Media
|
||||
Copyright (C) 2013 - 2015, Michael Larabel
|
||||
Copyright (C) 2013 - 2016, Phoronix Media
|
||||
Copyright (C) 2013 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -57,7 +57,7 @@ class debug_self_test implements pts_option_interface
|
||||
$c_start = microtime(true);
|
||||
pts_client::execute_command($command, $args);
|
||||
$c_finish = microtime(true);
|
||||
array_push($individual_times[$command], ($c_finish - $c_start));
|
||||
$individual_times[$command][] = ($c_finish - $c_start);
|
||||
}
|
||||
}
|
||||
$finish = microtime(true);
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2011 - 2015, Phoronix Media
|
||||
Copyright (C) 2011 - 2015, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class detailed_system_info implements pts_option_interface
|
||||
{
|
||||
const doc_section = 'System';
|
||||
const doc_description = 'Display detailed information about the installed system hardware and software information as detected by the Phoronix Test Suite Phodevi Library.';
|
||||
|
||||
public static function run($r)
|
||||
{
|
||||
pts_client::$display->generic_heading('System Information');
|
||||
echo 'Hardware:' . PHP_EOL . phodevi::system_hardware(true) . PHP_EOL . PHP_EOL;
|
||||
echo 'Software:' . PHP_EOL . phodevi::system_software(true) . PHP_EOL . PHP_EOL;
|
||||
|
||||
//
|
||||
// Processor Information
|
||||
//
|
||||
|
||||
$cpu_flags = phodevi_cpu::get_cpu_flags();
|
||||
echo PHP_EOL . 'PROCESSOR:' . PHP_EOL . PHP_EOL;
|
||||
echo 'Core Count: ' . phodevi_cpu::cpuinfo_core_count() . PHP_EOL;
|
||||
echo 'Thread Count: ' . phodevi_cpu::cpuinfo_thread_count() . PHP_EOL;
|
||||
echo 'Cache Size: ' . phodevi_cpu::cpuinfo_cache_size() . ' KB' . PHP_EOL;
|
||||
|
||||
echo 'Instruction Set Extensions: ' . phodevi_cpu::instruction_set_extensions() . PHP_EOL;
|
||||
echo 'AES Encryption: ' . ($cpu_flags & phodevi_cpu::get_cpu_feature_constant('aes') ? 'YES' : 'NO') . PHP_EOL;
|
||||
echo 'Energy Performance Bias: ' . ($cpu_flags & phodevi_cpu::get_cpu_feature_constant('epb') ? 'YES' : 'NO') . PHP_EOL;
|
||||
echo 'Virtualization: ' . (phodevi_cpu::virtualization_technology() ? phodevi_cpu::virtualization_technology() : 'NO') . PHP_EOL;
|
||||
|
||||
// Other info
|
||||
foreach(pts_arrays::to_array(pts_test_run_manager::pull_test_notes(true)) as $test_note_head => $test_note)
|
||||
{
|
||||
echo ucwords(str_replace('-', ' ', $test_note_head)) . ': ' . $test_note . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2010, Phoronix Media
|
||||
Copyright (C) 2009 - 2010, Michael Larabel
|
||||
Copyright (C) 2009 - 2016, Phoronix Media
|
||||
Copyright (C) 2009 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -32,7 +32,7 @@ class dump_possible_options implements pts_option_interface
|
||||
|
||||
if(!in_array(pts_strings::first_in_string($name, '-'), array('dump', 'debug', 'task')))
|
||||
{
|
||||
array_push($options, $name);
|
||||
$options[] = $name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
63
pts-core/commands/estimate_run_time.php
Normal file
63
pts-core/commands/estimate_run_time.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2017, Phoronix Media
|
||||
Copyright (C) 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class estimate_run_time implements pts_option_interface
|
||||
{
|
||||
const doc_section = 'Information';
|
||||
const doc_description = 'This option will provide estimates for test run-time / length.';
|
||||
|
||||
public static function argument_checks()
|
||||
{
|
||||
return array(
|
||||
new pts_argument_check(0, array('pts_types', 'identifier_to_object'))
|
||||
);
|
||||
}
|
||||
public static function run($args)
|
||||
{
|
||||
echo PHP_EOL;
|
||||
|
||||
if($args[0] == 'pts/all' || empty($args))
|
||||
{
|
||||
$args = pts_openbenchmarking::available_tests(false);
|
||||
}
|
||||
|
||||
$tests = array();
|
||||
$total_time = 0;
|
||||
$test_count = 0;
|
||||
foreach($args as $arg)
|
||||
{
|
||||
foreach(pts_types::identifiers_to_test_profile_objects($arg) as $t)
|
||||
{
|
||||
$tests[] = array($t->get_identifier(), pts_strings::format_time($t->get_estimated_run_time()));
|
||||
$total_time += $t->get_estimated_run_time();
|
||||
$test_count++;
|
||||
}
|
||||
}
|
||||
if($test_count > 1 && $total_time > 0)
|
||||
{
|
||||
echo pts_user_io::display_text_table($tests);
|
||||
echo PHP_EOL . PHP_EOL . 'TOTAL TIME ESTIMATE: ' . pts_strings::format_time($total_time) . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2015, Phoronix Media
|
||||
Copyright (C) 2009 - 2015, Michael Larabel
|
||||
Copyright (C) 2009 - 2016, Phoronix Media
|
||||
Copyright (C) 2009 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -45,6 +45,12 @@ class finish_run implements pts_option_interface
|
||||
|
||||
foreach($result_file->get_result_objects() as $pos => $result_object)
|
||||
{
|
||||
// Don't load null test profile identifier tests into the run queue
|
||||
if($result_object->test_profile->get_identifier() == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$this_result_object_identifiers = $result_object->test_result_buffer->get_identifiers();
|
||||
|
||||
foreach($system_identifiers as $system_identifier)
|
||||
@@ -56,7 +62,7 @@ class finish_run implements pts_option_interface
|
||||
$test_positions[$system_identifier] = array();
|
||||
}
|
||||
|
||||
array_push($test_positions[$system_identifier], $pos);
|
||||
$test_positions[$system_identifier][] = $pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
class gui implements pts_option_interface
|
||||
{
|
||||
const doc_section = 'Web / GUI Support';
|
||||
const doc_description = 'Launch the Phoronix Test Suite HTML5 web user-interface in the local GUI mode (no remote web support) and attempt to auto-launch the web-browser.';
|
||||
const doc_description = 'Launch the Phoronix Test Suite HTML5 web user-interface in the local GUI mode (no remote web support) and attempt to auto-launch the web-browser. THIS FEATURE IS CURRENTLY EXPERIMENTAL AND NO LONGER ACTIVE DEVELOPMENT. See Phoronix Test Suite Phoromatic as an alternative web UI approach.';
|
||||
|
||||
public static function command_aliases()
|
||||
{
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2010 - 2015, Phoronix Media
|
||||
Copyright (C) 2010 - 2015, Michael Larabel
|
||||
Copyright (C) 2010 - 2017, Phoronix Media
|
||||
Copyright (C) 2010 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -27,7 +27,7 @@ class help implements pts_option_interface
|
||||
|
||||
public static function run($r)
|
||||
{
|
||||
echo PHP_EOL . pts_core::program_title(true) . PHP_EOL . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_colored_text(pts_core::program_title(true), 'green', true) . PHP_EOL . PHP_EOL;
|
||||
echo pts_documentation::basic_description() . PHP_EOL . PHP_EOL . 'View the included PDF / HTML documentation or visit http://www.phoronix-test-suite.com/ for full details.' . PHP_EOL;
|
||||
$options = pts_documentation::client_commands_array();
|
||||
|
||||
@@ -38,13 +38,15 @@ class help implements pts_option_interface
|
||||
continue;
|
||||
}
|
||||
|
||||
echo PHP_EOL . strtoupper($section) . PHP_EOL . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold(strtoupper($section)) . PHP_EOL . PHP_EOL;
|
||||
|
||||
sort($contents);
|
||||
$tabled = array();
|
||||
foreach($contents as &$option)
|
||||
{
|
||||
echo ' ' . trim($option[0] . ' ' . implode(' ', $option[1])) . PHP_EOL;
|
||||
$tabled[] = array($option[0], pts_client::cli_colored_text(implode(' ', $option[1]), 'gray'));
|
||||
}
|
||||
echo pts_user_io::display_text_table($tabled, ' ') . PHP_EOL;
|
||||
}
|
||||
echo PHP_EOL;
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2017, Phoronix Media
|
||||
Copyright (C) 2008 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -47,14 +47,19 @@ class info implements pts_option_interface
|
||||
if($o instanceof pts_test_suite)
|
||||
{
|
||||
pts_client::$display->generic_heading($o->get_title());
|
||||
echo 'Run Identifier: ' . $o->get_identifier() . PHP_EOL;
|
||||
echo 'Suite Version: ' . $o->get_version() . PHP_EOL;
|
||||
echo 'Maintainer: ' . $o->get_maintainer() . PHP_EOL;
|
||||
echo 'Suite Type: ' . $o->get_suite_type() . PHP_EOL;
|
||||
echo 'Unique Tests: ' . $o->get_unique_test_count() . PHP_EOL;
|
||||
echo 'Suite Description: ' . $o->get_description() . PHP_EOL;
|
||||
echo PHP_EOL;
|
||||
echo $o->pts_format_contained_tests_string();
|
||||
echo pts_client::cli_just_bold('Run Identifier: ') . $o->get_identifier() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Suite Version: ') . $o->get_version() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Maintainer: ') . $o->get_maintainer() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Suite Type: ') . $o->get_suite_type() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Unique Tests: ') . $o->get_unique_test_count() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Suite Description: ') . $o->get_description() . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold('Contained Tests: ') . PHP_EOL;
|
||||
$test_table = array();
|
||||
foreach($o->get_contained_test_result_objects() as $result_obj)
|
||||
{
|
||||
$test_table[] = array($result_obj->test_profile->get_title(), $result_obj->get_arguments_description());
|
||||
}
|
||||
echo pts_user_io::display_text_table($test_table, ' ', 1);
|
||||
echo PHP_EOL;
|
||||
}
|
||||
else if($o instanceof pts_test_profile)
|
||||
@@ -67,32 +72,32 @@ class info implements pts_option_interface
|
||||
}
|
||||
|
||||
pts_client::$display->generic_heading($test_title);
|
||||
echo 'Run Identifier: ' . $o->get_identifier() . PHP_EOL;
|
||||
echo 'Profile Version: ' . $o->get_test_profile_version() . PHP_EOL;
|
||||
echo 'Maintainer: ' . $o->get_maintainer() . PHP_EOL;
|
||||
echo 'Test Type: ' . $o->get_test_hardware_type() . PHP_EOL;
|
||||
echo 'Software Type: ' . $o->get_test_software_type() . PHP_EOL;
|
||||
echo 'License Type: ' . $o->get_license() . PHP_EOL;
|
||||
echo 'Test Status: ' . $o->get_status() . PHP_EOL;
|
||||
echo 'Project Web-Site: ' . $o->get_project_url() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Run Identifier: ') . $o->get_identifier() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Profile Version: ') . $o->get_test_profile_version() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Maintainer: ') . $o->get_maintainer() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Test Type: ') . $o->get_test_hardware_type() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Software Type: ') . $o->get_test_software_type() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('License Type: ') . $o->get_license() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Test Status: ') . $o->get_status() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Project Web-Site: ') . $o->get_project_url() . PHP_EOL;
|
||||
if($o->get_estimated_run_time() > 1)
|
||||
{
|
||||
echo 'Estimated Run-Time: ' . $o->get_estimated_run_time() . ' Seconds' . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Estimated Run-Time: ') . $o->get_estimated_run_time() . ' Seconds' . PHP_EOL;
|
||||
}
|
||||
|
||||
$download_size = $o->get_download_size();
|
||||
if(!empty($download_size))
|
||||
{
|
||||
echo 'Download Size: ' . $download_size . ' MB' . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Download Size: ') . $download_size . ' MB' . PHP_EOL;
|
||||
}
|
||||
|
||||
$environment_size = $o->get_environment_size();
|
||||
if(!empty($environment_size))
|
||||
{
|
||||
echo 'Environment Size: ' . $environment_size . ' MB' . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Environment Size: ') . $environment_size . ' MB' . PHP_EOL;
|
||||
}
|
||||
|
||||
echo PHP_EOL . 'Description: ' . $o->get_description() . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold('Description: ') . $o->get_description() . PHP_EOL;
|
||||
|
||||
if($o->test_installation != false)
|
||||
{
|
||||
@@ -104,37 +109,37 @@ class info implements pts_option_interface
|
||||
$latest_time = $o->test_installation->get_latest_run_time();
|
||||
$latest_time = !empty($latest_time) ? pts_strings::format_time($latest_time, 'SECONDS') : 'N/A';
|
||||
|
||||
echo PHP_EOL . 'Test Installed: Yes' . PHP_EOL;
|
||||
echo 'Last Run: ' . $last_run . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold('Test Installed: ') . 'Yes' . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Last Run: ') . $last_run . PHP_EOL;
|
||||
|
||||
if($last_run != 'Never')
|
||||
{
|
||||
if($o->test_installation->get_run_count() > 1)
|
||||
{
|
||||
echo 'Average Run-Time: ' . $avg_time . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Average Run-Time: ') . $avg_time . PHP_EOL;
|
||||
}
|
||||
|
||||
echo 'Latest Run-Time: ' . $latest_time . PHP_EOL;
|
||||
echo 'Times Run: ' . $o->test_installation->get_run_count() . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Latest Run-Time: ') . $latest_time . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Times Run: ') . $o->test_installation->get_run_count() . PHP_EOL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo PHP_EOL . 'Test Installed: No' . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold('Test Installed: ') . 'No' . PHP_EOL;
|
||||
}
|
||||
|
||||
$dependencies = $o->get_dependencies();
|
||||
$dependencies = $o->get_external_dependencies();
|
||||
if(!empty($dependencies) && !empty($dependencies[0]))
|
||||
{
|
||||
echo PHP_EOL . 'Software Dependencies:' . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold('Software Dependencies:') . PHP_EOL;
|
||||
echo pts_user_io::display_text_list($o->get_dependency_names());
|
||||
}
|
||||
echo PHP_EOL;
|
||||
}
|
||||
else if($o instanceof pts_result_file)
|
||||
{
|
||||
echo 'Title: ' . $o->get_title() . PHP_EOL . 'Identifier: ' . $o->get_identifier() . PHP_EOL;
|
||||
echo PHP_EOL . 'Test Result Identifiers:' . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Title: ') . $o->get_title() . PHP_EOL . pts_client::cli_just_bold('Identifier: ') . $o->get_identifier() . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold('Test Result Identifiers:') . PHP_EOL;
|
||||
echo pts_user_io::display_text_list($o->get_system_identifiers());
|
||||
|
||||
$test_titles = array();
|
||||
@@ -142,13 +147,13 @@ class info implements pts_option_interface
|
||||
{
|
||||
if($result_object->test_profile->get_display_format() == 'BAR_GRAPH')
|
||||
{
|
||||
array_push($test_titles, $result_object->test_profile->get_title());
|
||||
$test_titles[] = $result_object->test_profile->get_title();
|
||||
}
|
||||
}
|
||||
|
||||
if(count($test_titles) > 0)
|
||||
{
|
||||
echo PHP_EOL . 'Contained Tests:' . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold('Contained Tests:') . PHP_EOL;
|
||||
echo pts_user_io::display_text_list(array_unique($test_titles));
|
||||
}
|
||||
echo PHP_EOL;
|
||||
@@ -156,7 +161,7 @@ class info implements pts_option_interface
|
||||
else if($o instanceof pts_virtual_test_suite)
|
||||
{
|
||||
pts_client::$display->generic_heading($o->get_title());
|
||||
echo 'Virtual Suite Description: ' . $o->get_description() . PHP_EOL . PHP_EOL;
|
||||
echo pts_client::cli_just_bold('Virtual Suite Description: ') . $o->get_description() . PHP_EOL . PHP_EOL;
|
||||
|
||||
foreach($o->get_contained_test_profiles() as $test_profile)
|
||||
{
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2011 - 2015, Phoronix Media
|
||||
Copyright (C) 2011 - 2015, Michael Larabel
|
||||
Copyright (C) 2011 - 2016, Phoronix Media
|
||||
Copyright (C) 2011 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -95,7 +95,7 @@ class interactive implements pts_option_interface
|
||||
|
||||
foreach(array_map('strtolower', pts_types::subsystem_targets()) as $subsystem)
|
||||
{
|
||||
array_push($possible_suites, 'pts/' . $subsystem);
|
||||
$possible_suites[] = 'pts/' . $subsystem;
|
||||
}
|
||||
|
||||
$suites_to_run = pts_user_io::prompt_text_menu('Select Suite', $possible_suites, true);
|
||||
@@ -174,7 +174,7 @@ class interactive implements pts_option_interface
|
||||
}
|
||||
else
|
||||
{
|
||||
array_push($drives, 'No HDD');
|
||||
$drives[] = 'No HDD';
|
||||
$to_mount = pts_user_io::prompt_text_menu('Select Drive / Partition To Mount', $drives);
|
||||
|
||||
if($to_mount != 'No HDD')
|
||||
|
||||
@@ -31,7 +31,7 @@ class list_available_suites implements pts_option_interface
|
||||
}
|
||||
public static function run($r)
|
||||
{
|
||||
$available_suites = pts_openbenchmarking::available_suites(false);
|
||||
$available_suites = array_merge(pts_openbenchmarking::available_suites(false), pts_tests::local_suites());
|
||||
pts_client::$display->generic_heading('Available Suites');
|
||||
|
||||
if(count($available_suites) > 0)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -39,7 +39,7 @@ class list_available_tests implements pts_option_interface
|
||||
$id = substr($identifier, strlen($repo) + 1);
|
||||
$repo_index = pts_openbenchmarking::read_repository_index($repo);
|
||||
|
||||
if(!in_array(phodevi::operating_system(), $repo_index['tests'][$id]['supported_platforms']) || empty($repo_index['tests'][$id]['title']))
|
||||
if((!empty($repo_index['tests'][$id]['supported_platforms']) && !in_array(phodevi::operating_system(), $repo_index['tests'][$id]['supported_platforms'])) || empty($repo_index['tests'][$id]['title']))
|
||||
{
|
||||
// Don't show unsupported tests
|
||||
continue;
|
||||
@@ -49,9 +49,9 @@ class list_available_tests implements pts_option_interface
|
||||
$test_count++;
|
||||
}
|
||||
|
||||
foreach(pts_file_io::glob(PTS_TEST_PROFILE_PATH . 'local/*/test-definition.xml') as $path)
|
||||
foreach(pts_tests::local_tests() as $identifier)
|
||||
{
|
||||
$test_profile = new pts_test_profile('local/' . basename(dirname($path)));
|
||||
$test_profile = new pts_test_profile($identifier);
|
||||
|
||||
if($test_profile->get_title() != null && $test_profile->is_supported(false))
|
||||
{
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2013, Phoronix Media
|
||||
Copyright (C) 2009 - 2013, Michael Larabel
|
||||
Copyright (C) 2009 - 2016, Phoronix Media
|
||||
Copyright (C) 2009 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -34,7 +34,7 @@ class list_installed_suites implements pts_option_interface
|
||||
$suite = new pts_test_suite($suite);
|
||||
if($suite->needs_updated_install() == false)
|
||||
{
|
||||
array_push($installed_suites, $suite);
|
||||
$installed_suites[] = $suite;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2011, Phoronix Media
|
||||
Copyright (C) 2008 - 2011, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
82
pts-core/commands/list_not_installed_tests.php
Normal file
82
pts-core/commands/list_not_installed_tests.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2016, Phoronix Media
|
||||
Copyright (C) 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class list_not_installed_tests implements pts_option_interface
|
||||
{
|
||||
const doc_section = 'Information';
|
||||
const doc_description = 'This option will list all test profiles that are supported and available but presently NOT installed on the system.';
|
||||
|
||||
public static function command_aliases()
|
||||
{
|
||||
return array('list_uninstalled_tests');
|
||||
}
|
||||
public static function run($r)
|
||||
{
|
||||
pts_client::$display->generic_heading('Available Tests Not Installed');
|
||||
$test_count = 0;
|
||||
foreach(pts_openbenchmarking::available_tests(false) as $identifier)
|
||||
{
|
||||
$repo = substr($identifier, 0, strpos($identifier, '/'));
|
||||
$id = substr($identifier, strlen($repo) + 1);
|
||||
$repo_index = pts_openbenchmarking::read_repository_index($repo);
|
||||
|
||||
if((!empty($repo_index['tests'][$id]['supported_platforms']) && !in_array(phodevi::operating_system(), $repo_index['tests'][$id]['supported_platforms'])) || empty($repo_index['tests'][$id]['title']))
|
||||
{
|
||||
// Don't show unsupported tests
|
||||
continue;
|
||||
}
|
||||
|
||||
$test_profile = new pts_test_profile($identifier);
|
||||
if($test_profile->is_test_installed())
|
||||
{
|
||||
// Only show uninstalled tests
|
||||
continue;
|
||||
}
|
||||
|
||||
echo sprintf('%-30ls - %-35ls %-9ls', $identifier, $repo_index['tests'][$id]['title'], $repo_index['tests'][$id]['test_type']) . PHP_EOL;
|
||||
$test_count++;
|
||||
}
|
||||
|
||||
foreach(pts_tests::local_tests() as $identifier)
|
||||
{
|
||||
$test_profile = new pts_test_profile($identifier);
|
||||
if($test_profile->is_test_installed())
|
||||
{
|
||||
// Only show uninstalled tests
|
||||
continue;
|
||||
}
|
||||
|
||||
if($test_profile->get_title() != null && $test_profile->is_supported(false))
|
||||
{
|
||||
echo sprintf('%-30ls - %-35ls %-9ls', $test_profile->get_identifier(), $test_profile->get_title(), $test_profile->get_test_hardware_type()) . PHP_EOL;
|
||||
$test_count++;
|
||||
}
|
||||
}
|
||||
|
||||
if($test_count == 0)
|
||||
{
|
||||
echo PHP_EOL . 'No tests found. Please check that you have Internet connectivity to download test profile data from OpenBenchmarking.org. The Phoronix Test Suite has documentation on configuring the network setup, proxy settings, and PHP network options. Please contact Phoronix Media if you continuing to experience problems.' . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2012, Phoronix Media
|
||||
Copyright (C) 2008 - 2012, Michael Larabel
|
||||
Copyright (C) 2008 - 2017, Phoronix Media
|
||||
Copyright (C) 2008 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -32,7 +32,8 @@ class list_test_usage implements pts_option_interface
|
||||
|
||||
if(count($installed_tests) > 0)
|
||||
{
|
||||
echo sprintf('%-18ls %-8ls %-13ls %-11ls %-13ls %-10ls', 'TEST', 'VERSION', 'INSTALL DATE', 'LAST RUN', 'AVG RUN-TIME', 'TIMES RUN') . PHP_EOL;
|
||||
echo sprintf('%-32ls %-12ls %-11ls %-8ls %-6ls', 'TEST', 'INSTALL', 'LAST RUN', 'AVERAGE', 'TIMES') . PHP_EOL;
|
||||
echo sprintf('%-32ls %-12ls %-11ls %-8ls %-6ls', '', 'DATE', 'DATE', 'RUNTIME', 'RUN') . PHP_EOL;
|
||||
foreach($installed_tests as $identifier)
|
||||
{
|
||||
$test_profile = new pts_test_profile($identifier);
|
||||
@@ -45,7 +46,7 @@ class list_test_usage implements pts_option_interface
|
||||
$last_run = $test_profile->test_installation->get_last_run_date();
|
||||
$last_run = $last_run == '0000-00-00' ? 'NEVER' : $last_run;
|
||||
|
||||
echo sprintf('%-18ls - %-8ls %-13ls %-11ls %-13ls %-10ls', $identifier, $test_profile->test_installation->get_installed_version(), $test_profile->test_installation->get_install_date(), $last_run, $avg_time, $test_profile->test_installation->get_run_count()) . PHP_EOL;
|
||||
echo sprintf('%-32ls %-12ls %-11ls %-8ls %-6ls', $identifier, $test_profile->test_installation->get_install_date(), $last_run, $avg_time, $test_profile->test_installation->get_run_count()) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -95,7 +95,7 @@ class make_download_cache implements pts_option_interface
|
||||
}
|
||||
else if($file->get_md5() == $json_download_cache['phoronix-test-suite']['download-cache'][$file->get_filename()]['md5'] && $file->get_sha256() == $json_download_cache['phoronix-test-suite']['download-cache'][$file->get_filename()]['sha256'])
|
||||
{
|
||||
array_push($json_download_cache['phoronix-test-suite']['download-cache'][$file->get_filename()]['associated_tests'], $test_profile->get_identifier());
|
||||
$json_download_cache['phoronix-test-suite']['download-cache'][$file->get_filename()]['associated_tests'][] = $test_profile->get_identifier();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -124,7 +124,7 @@ class make_download_cache implements pts_option_interface
|
||||
{
|
||||
continue;
|
||||
}
|
||||
array_push($cached_tests, $test);
|
||||
$cached_tests[] = $test;
|
||||
}
|
||||
$json_download_cache['phoronix-test-suite']['cached-tests'] = $cached_tests;
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -39,7 +39,7 @@ class merge_results implements pts_option_interface
|
||||
{
|
||||
if(pts_types::is_result_file($result_file))
|
||||
{
|
||||
array_push($result_files_to_merge, PTS_SAVE_RESULTS_PATH . $result_file . '/composite.xml');
|
||||
$result_files_to_merge[] = PTS_SAVE_RESULTS_PATH . $result_file . '/composite.xml';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2012, Phoronix Media
|
||||
Copyright (C) 2012, Michael Larabel
|
||||
Copyright (C) 2012 - 2016, Phoronix Media
|
||||
Copyright (C) 2012 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -195,7 +195,7 @@ var_dump($screenshots);
|
||||
|
||||
if(count($line) == 2)
|
||||
{
|
||||
array_push($shared_library_dependencies, trim(basename($line[0])));
|
||||
$shared_library_dependencies[] = trim(basename($line[0]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,7 +363,7 @@ var_dump($server_response);
|
||||
{
|
||||
$gl_usage[$line]++;
|
||||
}
|
||||
else if(ctype_alnum($line))
|
||||
else if(pts_strings::is_alnum($line))
|
||||
{
|
||||
$gl_usage[$line] = 1;
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2012, Phoronix Media
|
||||
Copyright (C) 2008 - 2012, Michael Larabel
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -46,7 +46,7 @@ class openbenchmarking_login implements pts_option_interface
|
||||
$login_state = pts_openbenchmarking::make_openbenchmarking_request('account_login', $login_payload);
|
||||
$json = json_decode($login_state, true);
|
||||
|
||||
if(isset($json['openbenchmarking']['response']['error']))
|
||||
if(!isset($json['openbenchmarking']) || isset($json['openbenchmarking']['response']['error']))
|
||||
{
|
||||
trigger_error($json['openbenchmarking']['response']['error'], E_USER_ERROR);
|
||||
pts_storage_object::remove_in_file(PTS_CORE_STORAGE, 'openbenchmarking');
|
||||
|
||||
87
pts-core/commands/php_conf.php
Normal file
87
pts-core/commands/php_conf.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2016, Phoronix Media
|
||||
Copyright (C) 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class php_conf implements pts_option_interface
|
||||
{
|
||||
const doc_section = 'System';
|
||||
const doc_description = 'This option will print information that is useful to developers when debugging problems with the Phoronix Test Suite and/or test profiles and test suites.';
|
||||
|
||||
public static function run($r)
|
||||
{
|
||||
$table = array();
|
||||
$table[] = array('PHP:', PTS_PHP_VERSION);
|
||||
$table[] = array('PHP VERSION ID: ', PHP_VERSION_ID);
|
||||
$table[] = array('PHP BINARY: ', getenv('PHP_BIN'));
|
||||
echo PHP_EOL . pts_user_io::display_text_table($table, null, 0) . PHP_EOL;
|
||||
echo PHP_EOL;
|
||||
echo 'MAIN CAPABILITY CHECK: ' . PHP_EOL;
|
||||
pts_client::program_requirement_checks(false, true);
|
||||
|
||||
// TODO: ultimately centralize this below list so it doesn't go stale
|
||||
// TODO: when making it uniform, change function_exists() calls to say pts_function_check() that will read the cached list
|
||||
$functions_to_check = array(
|
||||
'posix_getpid',
|
||||
'posix_getuid',
|
||||
'posix_getpwuid',
|
||||
'posix_isatty',
|
||||
'posix_kill',
|
||||
'posix_setsid',
|
||||
'preg_replace',
|
||||
'socket_create_listen',
|
||||
'pcntl_fork',
|
||||
'pcntl_signal',
|
||||
'ssh2_connect',
|
||||
'sqlite_escape_string',
|
||||
'gzinflate',
|
||||
'gzdeflate',
|
||||
'gzcompress',
|
||||
'imagecreatefromstring',
|
||||
'imagecreatefrompng',
|
||||
'filter_var',
|
||||
'ctype_digit',
|
||||
'ctype_alnum',
|
||||
'finfo_open',
|
||||
'hash_file',
|
||||
'cli_set_process_title',
|
||||
'curl_init',
|
||||
'stream_context_set_params',
|
||||
'imagepng',
|
||||
'imagecreatefromgif',
|
||||
'zip_open',
|
||||
'imagettftext',
|
||||
'imageantialias',
|
||||
'json_decode',
|
||||
'simplexml_load_string',
|
||||
'timezone_name_from_abbr'
|
||||
);
|
||||
sort($functions_to_check);
|
||||
$table = array();
|
||||
foreach($functions_to_check as $func)
|
||||
{
|
||||
$table[] = array($func, (function_exists($func) ? 'PRESENT' : 'MISSING'));
|
||||
}
|
||||
echo 'OPTIONAL FUNCTION CHECKS: ';
|
||||
echo PHP_EOL . pts_user_io::display_text_table($table, null, 0) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2015, Phoronix Media
|
||||
Copyright (C) 2009 - 2015, Michael Larabel
|
||||
Copyright (C) 2009 - 2016, Phoronix Media
|
||||
Copyright (C) 2009 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -52,7 +52,7 @@ class reorder_result_file implements pts_option_interface
|
||||
do
|
||||
{
|
||||
$extract_identifier = pts_user_io::prompt_text_menu('Select the test run to be showed next', $result_file_identifiers);
|
||||
array_push($sorted_identifiers, $extract_identifier);
|
||||
$sorted_identifiers[] = $extract_identifier;
|
||||
|
||||
$old_identifiers = $result_file_identifiers;
|
||||
$result_file_identifiers = array();
|
||||
@@ -61,7 +61,7 @@ class reorder_result_file implements pts_option_interface
|
||||
{
|
||||
if($identifier != $extract_identifier)
|
||||
{
|
||||
array_push($result_file_identifiers, $identifier);
|
||||
$result_file_identifiers[] = $identifier;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2015, Phoronix Media
|
||||
Copyright (C) 2009 - 2015, Michael Larabel
|
||||
Copyright (C) 2009 - 2016, Phoronix Media
|
||||
Copyright (C) 2009 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -33,84 +33,20 @@ class result_file_to_pdf implements pts_option_interface
|
||||
}
|
||||
public static function run($r)
|
||||
{
|
||||
if(!function_exists('getimagesizefromstring'))
|
||||
{
|
||||
echo 'PHP GD support is required for this command.' . PHP_EOL . PHP_EOL;
|
||||
return false;
|
||||
}
|
||||
|
||||
$_REQUEST['force_format'] = 'PNG'; // Force to PNG renderer
|
||||
$_REQUEST['svg_dom_gd_no_interlacing'] = true; // Otherwise FPDF will fail
|
||||
$tdir = pts_client::create_temporary_directory();
|
||||
pts_client::generate_result_file_graphs($r[0], $tdir);
|
||||
|
||||
$result_file = new pts_result_file($r[0]);
|
||||
$pdf = new pts_pdf_template($result_file->get_title(), null);
|
||||
|
||||
$pdf->AddPage();
|
||||
$pdf->Image(PTS_CORE_STATIC_PATH . 'images/pts-308x160.png', 69, 85, 73, 38);
|
||||
$pdf->Ln(120);
|
||||
$pdf->WriteStatementCenter('www.phoronix-test-suite.com');
|
||||
$pdf->Ln(15);
|
||||
$pdf->WriteBigHeaderCenter($result_file->get_title());
|
||||
$pdf->WriteText($result_file->get_description());
|
||||
|
||||
|
||||
$pdf->AddPage();
|
||||
$pdf->Ln(15);
|
||||
|
||||
$pdf->SetSubject($result_file->get_title() . ' Benchmarks');
|
||||
//$pdf->SetKeywords(implode(', ', $identifiers));
|
||||
|
||||
$pdf->WriteHeader('Test Systems:');
|
||||
foreach($result_file->get_systems() as $s)
|
||||
{
|
||||
$pdf->WriteMiniHeader($s->get_identifier());
|
||||
$pdf->WriteText($s->get_hardware());
|
||||
$pdf->WriteText($s->get_software());
|
||||
//$pdf->WriteText($notes_r[$i]);
|
||||
}
|
||||
|
||||
/*
|
||||
if(count($identifiers) > 1 && is_file($tdir . 'result-graphs/overview.jpg'))
|
||||
{
|
||||
$pdf->AddPage();
|
||||
$pdf->Ln(100);
|
||||
$pdf->Image($tdir . 'result-graphs/overview.jpg', 15, 40, 180);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
$pdf->AddPage();
|
||||
$placement = 1;
|
||||
$results = $result_file->get_result_objects();
|
||||
for($i = 1; $i <= count($results); $i++)
|
||||
{
|
||||
if(is_file($tdir . 'result-graphs/' . $i . '.png'))
|
||||
{
|
||||
$pdf->Ln(100);
|
||||
$pdf->Image($tdir . 'result-graphs/' . $i . '.png', 50, 40 + (($placement - 1) * 120), 120);
|
||||
}
|
||||
|
||||
if($placement == 2)
|
||||
{
|
||||
$placement = 0;
|
||||
|
||||
if($i != count($results))
|
||||
{
|
||||
$pdf->AddPage();
|
||||
}
|
||||
}
|
||||
$placement++;
|
||||
}
|
||||
|
||||
|
||||
// To save:
|
||||
/*
|
||||
$pdf_file = 'SAVE_TO';
|
||||
|
||||
if(substr($pdf_file, -4) != '.pdf')
|
||||
{
|
||||
$pdf_file .= '.pdf';
|
||||
}
|
||||
*/
|
||||
$pdf_file = pts_core::user_home_directory() . $r[0] . '.pdf';
|
||||
$pdf->Output($pdf_file);
|
||||
pts_file_io::delete($tdir, null, true);
|
||||
$pdf_output = pts_result_file_output::result_file_to_pdf($result_file, $pdf_file, 'F');
|
||||
echo PHP_EOL . 'Saved To: ' . $pdf_file . PHP_EOL;
|
||||
}
|
||||
public static function invalid_command($passed_args = null)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -44,25 +44,25 @@ class result_file_to_suite implements pts_option_interface
|
||||
$suite_maintainer = pts_user_io::prompt_user_input('Enter suite maintainer name');
|
||||
$suite_description = pts_user_io::prompt_user_input('Enter suite description');
|
||||
|
||||
$suite_writer = new pts_test_suite_writer();
|
||||
$suite_writer->add_suite_information($suite_name, '1.0.0', $suite_maintainer, $suite_test_type, $suite_description);
|
||||
$new_suite = new pts_test_suite();
|
||||
$new_suite->set_title($suite_name);
|
||||
$new_suite->set_version('1.0.0');
|
||||
$new_suite->set_maintainer($suite_maintainer);
|
||||
$new_suite->set_suite_type($suite_test_type);
|
||||
$new_suite->set_description($suite_description);
|
||||
|
||||
|
||||
// Read results file
|
||||
$result_file = new pts_result_file($result_file);
|
||||
|
||||
foreach($result_file->get_result_objects() as $result_object)
|
||||
{
|
||||
$suite_writer->add_to_suite_from_result_object($result_object);
|
||||
$test = new pts_test_profile($result_object->test_profile->get_identifier());
|
||||
$new_suite->add_to_suite($test, $result_object->get_arguments(), $result_object->get_arguments_description());
|
||||
}
|
||||
|
||||
// Finish it off
|
||||
$suite_identifier = pts_test_run_manager::clean_save_name($suite_name);
|
||||
mkdir(PTS_TEST_SUITE_PATH . 'local/' . $suite_identifier);
|
||||
$save_to = PTS_TEST_SUITE_PATH . 'local/' . $suite_identifier . '/suite-definition.xml';
|
||||
|
||||
if($suite_writer->save_xml($save_to) != false)
|
||||
if($new_suite->save_xml($suite_name) != false)
|
||||
{
|
||||
echo PHP_EOL . PHP_EOL . 'Saved To: ' . $save_to . PHP_EOL . 'To run this suite, type: phoronix-test-suite benchmark ' . $suite_identifier . PHP_EOL . PHP_EOL;
|
||||
echo PHP_EOL . PHP_EOL . 'Saved -- to run this suite, type: phoronix-test-suite benchmark ' . $new_suite->get_identifier() . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
}
|
||||
public static function invalid_command($passed_args = null)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2012, Phoronix Media
|
||||
Copyright (C) 2008 - 2012, Michael Larabel
|
||||
Copyright (C) 2008 - 2017, Phoronix Media
|
||||
Copyright (C) 2008 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -44,7 +44,15 @@ class show_result implements pts_option_interface
|
||||
pts_client::generate_result_file_graphs($r[0], PTS_SAVE_RESULTS_PATH . $r[0] . '/');
|
||||
}
|
||||
|
||||
pts_client::display_web_page($URL . '/index.html', null, false, true);
|
||||
if(pts_client::read_env('DISPLAY') == false)
|
||||
{
|
||||
$rf = new pts_result_file($r[0]);
|
||||
echo pts_result_file_output::result_file_to_text($rf, pts_client::terminal_width());
|
||||
}
|
||||
else
|
||||
{
|
||||
pts_client::display_web_page($URL . '/index.html', null, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2014 - 2015, Phoronix Media
|
||||
Copyright (C) 2014 - 2015, Michael Larabel
|
||||
Copyright (C) 2014 - 2016, Phoronix Media
|
||||
Copyright (C) 2014 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -47,7 +47,15 @@ class start_phoromatic_server implements pts_option_interface
|
||||
|
||||
$server_launcher = '#!/bin/sh' . PHP_EOL;
|
||||
$web_port = 0;
|
||||
$remote_access = pts_config::read_user_config('PhoronixTestSuite/Options/Server/RemoteAccessPort', 'RANDOM');
|
||||
$remote_access_override = getenv('PHOROMATIC_HTTP_PORT');
|
||||
if($remote_access_override && is_numeric($remote_access_override) && $remote_access_override > 1)
|
||||
{
|
||||
$remote_access = $remote_access_override;
|
||||
}
|
||||
else
|
||||
{
|
||||
$remote_access = pts_config::read_user_config('PhoronixTestSuite/Options/Server/RemoteAccessPort', 'RANDOM');
|
||||
}
|
||||
|
||||
$fp = false;
|
||||
$errno = null;
|
||||
@@ -134,7 +142,14 @@ class start_phoromatic_server implements pts_option_interface
|
||||
$server_launcher .= 'event_server_pid=$!'. PHP_EOL;
|
||||
|
||||
// HTTP Server Setup
|
||||
if(false && pts_client::executable_in_path('nginx') && is_file('/run/php-fpm/php-fpm.pid'))
|
||||
if(getenv('PHOROMATIC_WANTS_APACHE'))
|
||||
{
|
||||
echo PHP_EOL . PHP_EOL . 'To manually configure Apache, setup the following:' . PHP_EOL;
|
||||
echo 'The root web directory: ' . PTS_CORE_PATH . 'phoromatic/public_html/' . PHP_EOL;
|
||||
echo 'Set the HTTP port to: ' . $web_port . PHP_EOL;
|
||||
echo 'Of course, ensure Apache PHP support is available.' . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
else if(false && pts_client::executable_in_path('nginx') && is_file('/run/php-fpm/php-fpm.pid'))
|
||||
{
|
||||
// NGINX
|
||||
$nginx_conf = 'error_log /tmp/error.log;
|
||||
@@ -186,6 +201,7 @@ class start_phoromatic_server implements pts_option_interface
|
||||
else if(($mongoose = pts_client::executable_in_path('mongoose')) && ($php_cgi = pts_client::executable_in_path('php-cgi')))
|
||||
{
|
||||
// Mongoose Embedded Web Server
|
||||
echo PHP_EOL . 'Launching with Mongoose web server.' . PHP_EOL;
|
||||
$server_launcher .= $mongoose . ' -p ' . $web_port . ' -r ' . PTS_CORE_PATH . 'phoromatic/public_html/ -I ' . $php_cgi . ' -i index.php > /dev/null 2>> $PTS_PHOROMATIC_LOG_LOCATION &' . PHP_EOL; //2> /dev/null
|
||||
|
||||
}
|
||||
@@ -197,6 +213,7 @@ class start_phoromatic_server implements pts_option_interface
|
||||
else
|
||||
{
|
||||
// PHP Web Server
|
||||
echo PHP_EOL . 'Launching with PHP built-in web server.' . PHP_EOL;
|
||||
$server_launcher .= getenv('PHP_BIN') . ' -S ' . $server_ip . ':' . $web_port . ' -t ' . PTS_CORE_PATH . 'phoromatic/public_html/ > /dev/null 2>> $PTS_PHOROMATIC_LOG_LOCATION &' . PHP_EOL; //2> /dev/null
|
||||
}
|
||||
$server_launcher .= 'http_server_pid=$!'. PHP_EOL;
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015, Phoronix Media
|
||||
Copyright (C) 2015, Michael Larabel
|
||||
Copyright (C) 2015 - 2017, Phoronix Media
|
||||
Copyright (C) 2015 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -33,7 +33,7 @@ class stress_run implements pts_option_interface
|
||||
}
|
||||
public static function run($to_run)
|
||||
{
|
||||
pts_test_run_manager::set_batch_mode(array(
|
||||
$test_run_manager = new pts_stress_run_manager(array(
|
||||
'UploadResults' => false,
|
||||
'SaveResults' => false,
|
||||
'PromptForTestDescription' => false,
|
||||
@@ -45,13 +45,34 @@ class stress_run implements pts_option_interface
|
||||
|
||||
$tests_to_run_concurrently = 2;
|
||||
|
||||
echo PHP_EOL . pts_client::cli_just_bold('STRESS-RUN ENVIRONMENT VARIABLES:') . PHP_EOL;
|
||||
|
||||
if(($j = getenv('PTS_CONCURRENT_TEST_RUNS')) && is_numeric($j) && $j > 1)
|
||||
{
|
||||
$tests_to_run_concurrently = $j;
|
||||
echo 'PTS_CONCURRENT_TEST_RUNS set; running ' . $tests_to_run_concurrently . ' tests concurrently.' . PHP_EOL;
|
||||
echo PHP_EOL . 'PTS_CONCURRENT_TEST_RUNS set; running ' . $tests_to_run_concurrently . ' tests concurrently.' . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo PHP_EOL . pts_client::cli_just_bold('PTS_CONCURRENT_TEST_RUNS:') . ' Set the PTS_CONCURRENT_TEST_RUNS environment variable to specify how many tests should be run concurrently during the stress-run process. If not specified, defaults to 2.' . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
|
||||
$test_run_manager = new pts_test_run_manager(true);
|
||||
// Run the actual tests
|
||||
$total_loop_time = pts_client::read_env('TOTAL_LOOP_TIME');
|
||||
if($total_loop_time == 'infinite')
|
||||
{
|
||||
$total_loop_time = 'infinite';
|
||||
echo PHP_EOL . 'TOTAL_LOOP_TIME set; running tests in an infinite loop until otherwise triggered' . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
else if($total_loop_time && is_numeric($total_loop_time) && $total_loop_time > 1)
|
||||
{
|
||||
echo PHP_EOL . 'TOTAL_LOOP_TIME set; running tests for ' . $total_loop_time . ' minutes' . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo PHP_EOL . pts_client::cli_just_bold('TOTAL_LOOP_TIME:') . ' Set the TOTAL_LOOP_TIME environment variable if wishing to specify (in minutes) how long to run the stress-run process.' . PHP_EOL . PHP_EOL;
|
||||
$total_loop_time = false;
|
||||
}
|
||||
|
||||
/*
|
||||
if(count($to_run) < $tests_to_run_concurrently)
|
||||
@@ -72,22 +93,6 @@ class stress_run implements pts_option_interface
|
||||
return false;
|
||||
}
|
||||
|
||||
// Run the actual tests
|
||||
$total_loop_time = pts_client::read_env('TOTAL_LOOP_TIME');
|
||||
if($total_loop_time == 'infinite')
|
||||
{
|
||||
$total_loop_time = 'infinite';
|
||||
echo 'TOTAL_LOOP_TIME set; running tests in an infinite loop until otherwise triggered' . PHP_EOL;
|
||||
}
|
||||
else if($total_loop_time && is_numeric($total_loop_time) && $total_loop_time > 9)
|
||||
{
|
||||
$total_loop_time = $total_loop_time * 60;
|
||||
echo 'TOTAL_LOOP_TIME set; running tests for ' . ($total_loop_time / 60) . ' minutes' . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
$total_loop_time = false;
|
||||
}
|
||||
//$test_run_manager->pre_execution_process();
|
||||
$test_run_manager->multi_test_stress_run_execute($tests_to_run_concurrently, $total_loop_time);
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2011, Phoronix Media
|
||||
Copyright (C) 2008 - 2011, Michael Larabel
|
||||
Copyright (C) 2008 - 2017, Phoronix Media
|
||||
Copyright (C) 2008 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -28,8 +28,7 @@ class system_info implements pts_option_interface
|
||||
public static function run($r)
|
||||
{
|
||||
pts_client::$display->generic_heading('System Information');
|
||||
echo 'Hardware:' . PHP_EOL . phodevi::system_hardware(true) . PHP_EOL . PHP_EOL;
|
||||
echo 'Software:' . PHP_EOL . phodevi::system_software(true) . PHP_EOL . PHP_EOL;
|
||||
echo phodevi::system_centralized_view();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2015, Phoronix Media
|
||||
Copyright (C) 2009 - 2015, Michael Larabel
|
||||
Copyright (C) 2009 - 2017, Phoronix Media
|
||||
Copyright (C) 2009 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -27,43 +27,39 @@ class system_sensors implements pts_option_interface
|
||||
|
||||
public static function run($r)
|
||||
{
|
||||
pts_client::$display->generic_heading('Supported Sensors');
|
||||
pts_client::$display->generic_heading('Supported Sensors For This System');
|
||||
$tabled = array();
|
||||
foreach(phodevi::supported_sensors() as $sensor)
|
||||
{
|
||||
$supported_devices = call_user_func(array($sensor[2], 'get_supported_devices'));
|
||||
|
||||
if($supported_devices === NULL)
|
||||
{
|
||||
self::print_sensor($sensor, NULL);
|
||||
continue;
|
||||
$supported_devices = array(null);
|
||||
}
|
||||
|
||||
foreach($supported_devices as $device)
|
||||
{
|
||||
self::print_sensor($sensor, $device);
|
||||
if($sensor[0] === 'cgroup')
|
||||
{
|
||||
// echo '- ' . phodevi::sensor_name($sensor) . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sensor_object = new $sensor[2](0, $device);
|
||||
$tabled[] = array(pts_client::cli_just_bold(phodevi::sensor_object_name($sensor_object) . ': '), phodevi::read_sensor($sensor_object), pts_client::cli_colored_text(phodevi::read_sensor_object_unit($sensor_object), 'gray'));
|
||||
}
|
||||
}
|
||||
}
|
||||
echo pts_user_io::display_text_table($tabled) . PHP_EOL;
|
||||
|
||||
pts_client::$display->generic_heading('Unsupported Sensors');
|
||||
pts_client::$display->generic_heading('Unsupported Sensors For This System');
|
||||
foreach(phodevi::unsupported_sensors() as $sensor)
|
||||
{
|
||||
echo '- ' . phodevi::sensor_name($sensor) . PHP_EOL;
|
||||
}
|
||||
echo PHP_EOL;
|
||||
}
|
||||
|
||||
private static function print_sensor($sensor, $device)
|
||||
{
|
||||
if($sensor[0] === 'cgroup')
|
||||
{
|
||||
echo '- ' . phodevi::sensor_name($sensor) . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sensor_object = new $sensor[2](0, $device);
|
||||
echo '- ' . phodevi::sensor_object_name($sensor_object) . ': ' . phodevi::read_sensor($sensor_object) . ' ' . phodevi::read_sensor_object_unit($sensor_object) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2010 - 2013, Phoronix Media
|
||||
Copyright (C) 2010 - 2013, Michael Larabel
|
||||
Copyright (C) 2010 - 2015, Phoronix Media
|
||||
Copyright (C) 2010 - 2015, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -35,7 +35,7 @@ class upload_test_profile implements pts_option_interface
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach(pts_types::identifiers_to_test_profile_objects($r, true, true) as $test_profile)
|
||||
foreach(pts_types::identifiers_to_test_profile_objects($r, false, true) as $test_profile)
|
||||
{
|
||||
// validate_test_profile
|
||||
if(pts_validation::validate_test_profile($test_profile))
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2010 - 2015, Phoronix Media
|
||||
Copyright (C) 2010 - 2015, Michael Larabel
|
||||
Copyright (C) 2010 - 2016, Phoronix Media
|
||||
Copyright (C) 2010 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -39,10 +39,10 @@ class upload_test_suite implements pts_option_interface
|
||||
{
|
||||
pts_client::$display->generic_heading($r[0]);
|
||||
|
||||
if(pts_validation::validate_test_suite($test_suite))
|
||||
if(pts_validation::validate_test_suite($test_suite) && $test_suite->get_file_location() != null)
|
||||
{
|
||||
$zip_file = PTS_OPENBENCHMARKING_SCRATCH_PATH . $test_suite->get_identifier(false) . '-' . $test_suite->get_version() . '.zip';
|
||||
$zip_created = pts_compression::zip_archive_create($zip_file, $test_suite->xml_parser->getFileLocation());
|
||||
$zip_created = pts_compression::zip_archive_create($zip_file, $test_suite->get_file_location());
|
||||
|
||||
if($zip_created == false)
|
||||
{
|
||||
@@ -50,11 +50,6 @@ class upload_test_suite implements pts_option_interface
|
||||
return false;
|
||||
}
|
||||
|
||||
$zip = new ZipArchive();
|
||||
$zip->open($zip_file);
|
||||
$zip->renameName(basename($test_suite->xml_parser->getFileLocation()), 'suite-definition.xml');
|
||||
$zip->close();
|
||||
|
||||
$commit_description = pts_user_io::prompt_user_input('Enter a test commit description', false);
|
||||
|
||||
echo PHP_EOL;
|
||||
|
||||
106
pts-core/commands/winners_and_losers.php
Normal file
106
pts-core/commands/winners_and_losers.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2017, Phoronix Media
|
||||
Copyright (C) 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class winners_and_losers implements pts_option_interface
|
||||
{
|
||||
const doc_section = 'Result Management';
|
||||
const doc_description = 'This option is used if you wish to analyze a result file to see which runs produced the most wins/losses of those result identifiers in the saved file.';
|
||||
|
||||
public static function argument_checks()
|
||||
{
|
||||
return array(
|
||||
new pts_argument_check(0, array('pts_types', 'is_result_file'), null)
|
||||
);
|
||||
}
|
||||
public static function run($args)
|
||||
{
|
||||
$result_file = new pts_result_file($args[0]);
|
||||
$result_file_identifiers = $result_file->get_system_identifiers();
|
||||
|
||||
if(count($result_file_identifiers) < 2)
|
||||
{
|
||||
echo PHP_EOL . 'There are not multiple test runs in this result file.' . PHP_EOL;
|
||||
return false;
|
||||
}
|
||||
|
||||
echo pts_client::cli_colored_text($result_file->get_title(), 'gray', true) . PHP_EOL;
|
||||
echo pts_client::cli_colored_text('RESULT COUNT: ', 'cyan', true) . $result_file->get_test_count() . PHP_EOL . PHP_EOL;
|
||||
$winners = array();
|
||||
$losers = array();
|
||||
$tests_counted = 0;
|
||||
|
||||
foreach($result_file->get_result_objects() as $result)
|
||||
{
|
||||
if($result->test_result_buffer->get_count() < 2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$tests_counted++;
|
||||
$winner = $result->get_result_first();
|
||||
$loser = $result->get_result_last();
|
||||
|
||||
if(!isset($winners[$winner]))
|
||||
{
|
||||
$winners[$winner] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$winners[$winner]++;
|
||||
}
|
||||
|
||||
if(!isset($losers[$loser]))
|
||||
{
|
||||
$losers[$loser] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$losers[$loser]++;
|
||||
}
|
||||
}
|
||||
|
||||
arsort($winners);
|
||||
arsort($losers);
|
||||
|
||||
echo pts_client::cli_colored_text('WINS:', 'green', true) . PHP_EOL;
|
||||
$table = array();
|
||||
foreach($winners as $identifier => $count)
|
||||
{
|
||||
$table[] = array($identifier . ': ', $count, ' [' . pts_math::set_precision($count / $tests_counted * 100, 1) . '%]');
|
||||
}
|
||||
echo pts_user_io::display_text_table($table) . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_colored_text('LOSSES: ', 'red', true) . PHP_EOL;
|
||||
$table = array();
|
||||
foreach($losers as $identifier => $count)
|
||||
{
|
||||
$table[] = array($identifier . ': ', $count, ' [' . pts_math::set_precision($count / $tests_counted * 100, 1) . '%]');
|
||||
}
|
||||
echo pts_user_io::display_text_table($table) . PHP_EOL;
|
||||
echo PHP_EOL;
|
||||
}
|
||||
public static function invalid_command($passed_args = null)
|
||||
{
|
||||
pts_tests::recently_saved_results();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015, Phoronix Media
|
||||
Copyright (C) 2015, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class arch_dependency_handler implements pts_dependency_handler
|
||||
{
|
||||
public static function what_provides($files_needed)
|
||||
{
|
||||
$packages_needed = array();
|
||||
foreach(pts_arrays::to_array($files_needed) as $file)
|
||||
{
|
||||
if(pts_client::executable_in_path('pkgfile'))
|
||||
{
|
||||
$pkgfile_provides = self::run_pkgfile_provides($file);
|
||||
if($pkgfile_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $pkgfile_provides;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Try appending common paths
|
||||
if(strpos($file, '.h') !== false)
|
||||
{
|
||||
$pkgfile_provides = self::run_pkgfile_provides('/usr/include/' . $file);
|
||||
if($pkgfile_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $pkgfile_provides;
|
||||
}
|
||||
}
|
||||
else if(strpos($file, '.so') !== false)
|
||||
{
|
||||
$pkgfile_provides = self::run_pkgfile_provides('/usr/lib/' . $file);
|
||||
if($pkgfile_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $pkgfile_provides;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(array('/usr/bin/', '/bin/', '/usr/sbin') as $possible_path)
|
||||
{
|
||||
$pkgfile_provides = self::run_pkgfile_provides($possible_path . $file);
|
||||
if($pkgfile_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $pkgfile_provides;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $packages_needed;
|
||||
}
|
||||
protected static function run_pkgfile_provides($arg)
|
||||
{
|
||||
$pkgfile_output = shell_exec('pkgfile ' . $arg . ' 2>/dev/null');
|
||||
|
||||
foreach(explode(PHP_EOL, $pkgfile_output) as $line)
|
||||
{
|
||||
$line = trim($line);
|
||||
if(!empty($line))
|
||||
{
|
||||
return $line;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015, Phoronix Media
|
||||
Copyright (C) 2015, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class fedora_dependency_handler implements pts_dependency_handler
|
||||
{
|
||||
public static function what_provides($files_needed)
|
||||
{
|
||||
$packages_needed = array();
|
||||
foreach(pts_arrays::to_array($files_needed) as $file)
|
||||
{
|
||||
if(pts_client::executable_in_path('dnf'))
|
||||
{
|
||||
$dnf_provides = self::run_dnf_provides($file);
|
||||
if($dnf_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $dnf_provides;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Try appending common paths
|
||||
if(strpos($file, '.h') !== false)
|
||||
{
|
||||
$dnf_provides = self::run_dnf_provides('/usr/include/' . $file);
|
||||
if($dnf_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $dnf_provides;
|
||||
}
|
||||
}
|
||||
else if(strpos($file, '.so') !== false)
|
||||
{
|
||||
$dnf_provides = self::run_dnf_provides('/usr/lib/' . $file);
|
||||
if($dnf_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $dnf_provides;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(array('/usr/bin/', '/bin/', '/usr/sbin') as $possible_path)
|
||||
{
|
||||
$dnf_provides = self::run_dnf_provides($possible_path . $file);
|
||||
if($dnf_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $dnf_provides;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $packages_needed;
|
||||
}
|
||||
protected static function run_dnf_provides($arg)
|
||||
{
|
||||
$dnf_output = shell_exec('dnf --quiet provides ' . $arg . ' 2>/dev/null');
|
||||
|
||||
foreach(explode(PHP_EOL, $dnf_output) as $line)
|
||||
{
|
||||
if(($x = strpos($line, ' : ')) == false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$line = trim(substr($line, 0, $x));
|
||||
|
||||
if(strpos($line, '-') !== false && strpos($line, '.') !== false && strpos($line, ' ') === false)
|
||||
{
|
||||
// Don't mess with the version/arch stuff, etc, so try to strip it off
|
||||
$offset = 0;
|
||||
while(($x = strpos($line, '-', $offset)) !== false)
|
||||
{
|
||||
if(isset($line[($x + 1)]) && is_numeric($line[($x + 1)]))
|
||||
{
|
||||
$line = substr($line, 0, $x);
|
||||
break;
|
||||
}
|
||||
$offset = $x + 1;
|
||||
}
|
||||
|
||||
return $line;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015 - 2016, Phoronix Media
|
||||
Copyright (C) 2015 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class opensuse_dependency_handler implements pts_dependency_handler
|
||||
{
|
||||
public static function what_provides($files_needed)
|
||||
{
|
||||
$packages_needed = array();
|
||||
foreach(pts_arrays::to_array($files_needed) as $file)
|
||||
{
|
||||
if(pts_client::executable_in_path('zypper'))
|
||||
{
|
||||
$zypper_provides = self::run_zypper_provides($file);
|
||||
if($zypper_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $zypper_provides;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $packages_needed;
|
||||
}
|
||||
protected static function run_zypper_provides($arg)
|
||||
{
|
||||
$line = shell_exec('zypper search --provides --match-exact ' . $arg . ' 2>/dev/null');
|
||||
|
||||
if(($x = strpos($line, '-----')) == false)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
$line = substr($line, $x);
|
||||
$line = substr($line, strpos($line, "\n") + 2);
|
||||
$line = trim(substr($line, 0, strpos($line, PHP_EOL)));
|
||||
$parts = explode('|', $line);
|
||||
|
||||
if(isset($parts[1]))
|
||||
{
|
||||
return trim($parts[1]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015, Phoronix Media
|
||||
Copyright (C) 2015, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class ubuntu_dependency_handler implements pts_dependency_handler
|
||||
{
|
||||
public static function what_provides($files_needed)
|
||||
{
|
||||
$packages_needed = array();
|
||||
foreach(pts_arrays::to_array($files_needed) as $file)
|
||||
{
|
||||
if(pts_client::executable_in_path('apt-file'))
|
||||
{
|
||||
if(!defined('APT_FILE_UPDATED'))
|
||||
{
|
||||
shell_exec('apt-file update 2>&1');
|
||||
define('APT_FILE_UPDATED', 1);
|
||||
}
|
||||
|
||||
// Try appending common paths
|
||||
if(strpos($file, '.h') !== false)
|
||||
{
|
||||
$apt_provides = self::run_apt_file_provides('/usr/include/' . $file);
|
||||
if($apt_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $apt_provides;
|
||||
}
|
||||
}
|
||||
else if(strpos($file, '.so') !== false)
|
||||
{
|
||||
$apt_provides = self::run_apt_file_provides('/usr/lib/' . $file);
|
||||
if($apt_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $apt_provides;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(array('/usr/bin/', '/bin/', '/usr/sbin') as $possible_path)
|
||||
{
|
||||
$apt_provides = self::run_apt_file_provides($possible_path . $file);
|
||||
if($apt_provides != null)
|
||||
{
|
||||
$packages_needed[$file] = $apt_provides;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $packages_needed;
|
||||
}
|
||||
protected static function run_apt_file_provides($arg)
|
||||
{
|
||||
$apt_output = shell_exec('apt-file -N search --regex "' . $arg . '$" 2>/dev/null');
|
||||
|
||||
foreach(explode(PHP_EOL, $apt_output) as $line)
|
||||
{
|
||||
if(($x = strpos($line, ': ')) == false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return trim(substr($line, 0, $x));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
7
pts-core/external-test-dependencies/scripts/install-alpine-packages.sh
Executable file
7
pts-core/external-test-dependencies/scripts/install-alpine-packages.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Alpine Linux package installation
|
||||
|
||||
echo "Please enter your root password below:" 1>&2
|
||||
su root -c "apk add -v $*"
|
||||
exit
|
||||
@@ -3,5 +3,5 @@
|
||||
# Arch package installation
|
||||
|
||||
echo "Please enter your root password below:" 1>&2
|
||||
su root -c "pacman -Sy --noconfirm $*"
|
||||
su root -c "pacman -Sy --noconfirm --needed $*"
|
||||
exit
|
||||
|
||||
@@ -1,43 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
#dports pkg
|
||||
pkg install $*
|
||||
pkg install -y $*
|
||||
|
||||
|
||||
# Old dropped DragonFly pkgsrc support from older releases
|
||||
# DragonFlyBSD pkgsrc package installation
|
||||
exit
|
||||
|
||||
echo "For now with this test profile script, please run: phoronix-test-suite install-dependencies xxx as root."
|
||||
|
||||
# Check that pkgsrc is setup, below code should work for making sure good state with at least DragonFlyBSD
|
||||
if [ -d /usr/pkgsrc ] && [ ! -d /usr/pkgsrc/devel ];
|
||||
then
|
||||
cd /usr
|
||||
|
||||
if [ -d /usr/pkgsrc/.git ];
|
||||
then
|
||||
make pkgsrc-update
|
||||
else
|
||||
make pkgsrc-create
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d /usr/pkgsrc ]
|
||||
then
|
||||
for portdir in $*
|
||||
do
|
||||
if [ -d /usr/pkgsrc/$portdir ];
|
||||
then
|
||||
cd /usr/pkgsrc/$portdir
|
||||
bmake install clean BATCH="yes"
|
||||
fi
|
||||
done
|
||||
elif [ -x /usr/local/sbin/pkg ]
|
||||
then
|
||||
for portdir in $*
|
||||
do
|
||||
# DragonFlyBSD 3.6 now uses dports by default and this method seems to work fine for hitting most packages based upon earlier pkgsrc basename
|
||||
pkg install -y `basename $portdir`
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
echo "Please enter your root password below:" 1>&2
|
||||
|
||||
if [ -x /usr/bin/zypper ]; then
|
||||
su root -c "zypper install -l -y --force-resolution $*"
|
||||
su root -c "zypper install -l -y -n --force-resolution $*"
|
||||
else
|
||||
su root -c "yast -i $*"
|
||||
fi
|
||||
|
||||
7
pts-core/external-test-dependencies/scripts/install-solus-packages.sh
Executable file
7
pts-core/external-test-dependencies/scripts/install-solus-packages.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Solus package installation
|
||||
|
||||
echo "Please enter your root password below:" 1>&2
|
||||
sudo eopkg install --yes-all $*
|
||||
exit
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/bin/sh
|
||||
if [ `whoami` != "root" ] && [ ! -z "$DISPLAY" ]; then
|
||||
if [ `whoami` = "root" ] && [ ! -w /usr/bin/sudo ]; then
|
||||
apt-get -y --ignore-missing install $*
|
||||
elif [ `whoami` != "root" ] && [ ! -z "$DISPLAY" ]; then
|
||||
if [ -x /usr/bin/gksudo ]; then
|
||||
ROOT="/usr/bin/gksudo"
|
||||
elif [ -x /usr/bin/kdesudo ]; then
|
||||
|
||||
7
pts-core/external-test-dependencies/scripts/install-void-packages.sh
Executable file
7
pts-core/external-test-dependencies/scripts/install-void-packages.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Void Linux package installation
|
||||
|
||||
echo "Please enter your root password below:" 1>&2
|
||||
su root -c "xbps-install -Sy $*"
|
||||
exit
|
||||
200
pts-core/external-test-dependencies/xml/alpine-packages.xml
Normal file
200
pts-core/external-test-dependencies/xml/alpine-packages.xml
Normal file
@@ -0,0 +1,200 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/xsl" href="xsl/pts-exdep-viewer.xsl" ?>
|
||||
<PhoronixTestSuite>
|
||||
<ExternalDependencies>
|
||||
<Information>
|
||||
<Name>Alpine Linux</Name>
|
||||
<Aliases></Aliases>
|
||||
<PackageManager>apk</PackageManager>
|
||||
</Information>
|
||||
<Package>
|
||||
<GenericName>common-dependencies</GenericName>
|
||||
<PackageName>unzip</PackageName>
|
||||
<FileCheck>unzip</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>gtk-development</GenericName>
|
||||
<PackageName>gtk+ gtk+2.0 gtk+3.0</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>sdl2-development</GenericName>
|
||||
<PackageName>sdl sdl_image sdl_mixer</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>sdl-development</GenericName>
|
||||
<PackageName>sdl sdl_image sdl_mixer</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glut</GenericName>
|
||||
<PackageName>freeglut</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libpng-development</GenericName>
|
||||
<PackageName>libpng</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openssl-development</GenericName>
|
||||
<PackageName>openssl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>build-utilities</GenericName>
|
||||
<PackageName>gcc make build-base automake autoconf</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>cairo-development</GenericName>
|
||||
<PackageName>cairo</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>xorg-development</GenericName>
|
||||
<PackageName>xorg-server</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tiff</GenericName>
|
||||
<PackageName>tiff</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bison</GenericName>
|
||||
<PackageName>bison</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>flex</GenericName>
|
||||
<PackageName>flex</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>imlib2-development</GenericName>
|
||||
<PackageName>imlib2</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>java</GenericName>
|
||||
<PackageName>java-common</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>portaudio-development</GenericName>
|
||||
<PackageName>portaudio</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>fortran-compiler</GenericName>
|
||||
<PackageName>gfortran</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glew</GenericName>
|
||||
<PackageName>glew</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bc</GenericName>
|
||||
<PackageName>bc</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>scons</GenericName>
|
||||
<PackageName>scons</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>smartmontools</GenericName>
|
||||
<PackageName>smartmontools</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>zlib-development</GenericName>
|
||||
<PackageName>zlib</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>jpeg-development</GenericName>
|
||||
<PackageName>libjpeg-turbo</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libaio-development</GenericName>
|
||||
<PackageName>libaio</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>pcre</GenericName>
|
||||
<PackageName>pcre</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl</GenericName>
|
||||
<PackageName>perl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>vorbis-development</GenericName>
|
||||
<PackageName>libvorbis</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>p7zip</GenericName>
|
||||
<PackageName>p7zip</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>autoconf</GenericName>
|
||||
<PackageName>autoconf</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libtool</GenericName>
|
||||
<PackageName>libtool</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>ncurses-development</GenericName>
|
||||
<PackageName>ncurses</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>popt</GenericName>
|
||||
<PackageName>popt</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>curl</GenericName>
|
||||
<PackageName>curl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>fftw3-development</GenericName>
|
||||
<PackageName>fftw</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>cmake</GenericName>
|
||||
<PackageName>cmake</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>boost-development</GenericName>
|
||||
<PackageName>boost</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bzip2-development</GenericName>
|
||||
<PackageName>bzip2</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tcl</GenericName>
|
||||
<PackageName>tcl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glibc-development</GenericName>
|
||||
<PackageName>libc-dev</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python</GenericName>
|
||||
<PackageName>python</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>yasm</GenericName>
|
||||
<PackageName>yasm</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>gmp-library</GenericName>
|
||||
<PackageName>gmp</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>subversion</GenericName>
|
||||
<PackageName>subversion</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>git</GenericName>
|
||||
<PackageName>git</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tinyxml</GenericName>
|
||||
<PackageName>libtinyxml</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>attr</GenericName>
|
||||
<PackageName>attr</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<PackageName>apache2</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
@@ -6,6 +6,11 @@
|
||||
<Name>Arch Linux</Name>
|
||||
<PackageManager>pacman</PackageManager>
|
||||
</Information>
|
||||
<Package>
|
||||
<GenericName>common-dependencies</GenericName>
|
||||
<PackageName>mesa-demos</PackageName>
|
||||
<FileCheck>glxinfo</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>gtk-development</GenericName>
|
||||
<PackageName>gtk2</PackageName>
|
||||
@@ -36,7 +41,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>build-utilities</GenericName>
|
||||
<PackageName>gcc</PackageName>
|
||||
<PackageName>gcc make autoconf</PackageName>
|
||||
<FileCheck>g++</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
@@ -226,5 +231,29 @@
|
||||
<GenericName>attr</GenericName>
|
||||
<PackageName>attr</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<PackageName>apache</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<PackageName>redis</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<PackageName>opencv</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl-digest-md5</GenericName>
|
||||
<PackageName>perl-digest-md5-file perl6-digest-md5</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-scipy</GenericName>
|
||||
<PackageName>python2-scipy</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-sklearn</GenericName>
|
||||
<PackageName>python2-scikit-learn</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<ExternalDependencies>
|
||||
<Information>
|
||||
<Name>DragonFlyBSD</Name>
|
||||
<PackageManager>pkg</PackageManager>
|
||||
</Information>
|
||||
<Package>
|
||||
<GenericName>common-dependencies</GenericName>
|
||||
@@ -108,7 +109,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python</GenericName>
|
||||
<PackageName>python3</PackageName>
|
||||
<PackageName>python3 python</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>yasm</GenericName>
|
||||
@@ -142,5 +143,17 @@
|
||||
<GenericName>git</GenericName>
|
||||
<PackageName>git</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<PackageName>apache</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-sklearn</GenericName>
|
||||
<PackageName>py27-scikit-learn</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-scipy</GenericName>
|
||||
<PackageName>py27-scipy</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
@@ -252,11 +252,39 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencl</GenericName>
|
||||
<PackageName>opencl-headers</PackageName>
|
||||
<PackageName>opencl-headers pocl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>attr</GenericName>
|
||||
<PackageName>attr</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<PackageName>httpd</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<PackageName>golang</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<PackageName>redis</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<PackageName>opencv-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl-digest-md5</GenericName>
|
||||
<PackageName>perl-Digest-MD5</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-scipy</GenericName>
|
||||
<PackageName>scipy</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-sklearn</GenericName>
|
||||
<PackageName>python-scikit-learn</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
@@ -208,5 +208,9 @@
|
||||
<GenericName>superlu</GenericName>
|
||||
<PackageName>math/superlu</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<PackageName>lang/go</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
<GenericName>xorg-development</GenericName>
|
||||
<Title>X.Org Development Files and Libraries</Title>
|
||||
<PossibleNames>xserver-xorg-development, xorg-devel</PossibleNames>
|
||||
<FileCheck>xorg/xf86.h</FileCheck>
|
||||
<FileCheck>xorg/xf86.h OR X11/Xlib.h</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>cairo-development</GenericName>
|
||||
@@ -269,7 +269,7 @@
|
||||
<GenericName>blas-development</GenericName>
|
||||
<Title>Basic Linear Algebra Sub-Routine Library</Title>
|
||||
<PossibleNames>libblas-dev, libblas-devel, blas-devel, blas</PossibleNames>
|
||||
<FileCheck>libblas.so</FileCheck>
|
||||
<FileCheck>libblas.so OR openblas_config.h</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>lapack-development</GenericName>
|
||||
@@ -287,7 +287,7 @@
|
||||
<GenericName>openmpi-development</GenericName>
|
||||
<Title>OpenMPI</Title>
|
||||
<PossibleNames>libopenmpi-dev, openmpi-bin</PossibleNames>
|
||||
<FileCheck>openmpi/lib/libmpi.so, mpirun.openmpi</FileCheck>
|
||||
<FileCheck>openmpi/lib/libmpi.so OR mpirun OR mpirun.openmpi</FileCheck>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
@@ -408,7 +408,49 @@
|
||||
<GenericName>attr</GenericName>
|
||||
<Title>Attr</Title>
|
||||
<PossibleNames>attr, libattr1-dev</PossibleNames>
|
||||
<FileCheck>attr/xattr.h</FileCheck>
|
||||
<FileCheck>attr/xattr.h OR sys/xattr.h</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<Title>httpd</Title>
|
||||
<PossibleNames>httpd, apache2</PossibleNames>
|
||||
<FileCheck>/usr/sbin/apachectl</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<Title>Go Language</Title>
|
||||
<PossibleNames>golang, go-doc</PossibleNames>
|
||||
<FileCheck>/usr/bin/go</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<Title>Redis</Title>
|
||||
<PossibleNames>redis, redis-server</PossibleNames>
|
||||
<FileCheck>/usr/bin/redis-server</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<Title>OpenCV</Title>
|
||||
<PossibleNames>opencv</PossibleNames>
|
||||
<FileCheck>opencv/cv.h OR opencv2/core.hpp</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl-digest-md5</GenericName>
|
||||
<Title>Perl interface to the MD5 Algorithm</Title>
|
||||
<PossibleNames>perl-Digest-MD5, perl-Digest-Perl-MD5, libdigest-md5</PossibleNames>
|
||||
<FileCheck>Digest/MD5.pm OR /usr/share/doc/perl-Digest-MD5 OR /usr/share/perl5/Digest/</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-scipy</GenericName>
|
||||
<Title>Python Scipy</Title>
|
||||
<PossibleNames>python-scipy</PossibleNames>
|
||||
<FileCheck>/usr/lib/python2.7/dist-packages/scipy</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-sklearn</GenericName>
|
||||
<Title>Python Sklearn</Title>
|
||||
<PossibleNames>python-sklearn</PossibleNames>
|
||||
<FileCheck>/usr/lib/python2.7/dist-packages/scikit_learn-0.17.egg-info</FileCheck>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
@@ -248,5 +248,33 @@
|
||||
<GenericName>attr</GenericName>
|
||||
<PackageName>sys-apps/attr</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<PackageName>www-servers/apache</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<PackageName>dev-lang/go</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<PackageName>dev-db/redis</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<PackageName>media-libs/opencv</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl-digest-md5</GenericName>
|
||||
<PackageName>perl-core/Digest-MD5</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-scipy</GenericName>
|
||||
<PackageName>sci-libs/scipy</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-sklearn</GenericName>
|
||||
<PackageName>sci-libs/scikits_learn</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
@@ -235,5 +235,21 @@
|
||||
<GenericName>tinyxml</GenericName>
|
||||
<PackageName>tinyxml-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<PackageName>golang</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<PackageName>redis</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<PackageName>opencv-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl-digest-md5</GenericName>
|
||||
<PackageName>perl-Digest-MD5</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>lapack-development</GenericName>
|
||||
<PackageName>lapack-devel</PackageName>
|
||||
<PackageName>lapack-devel lapacke-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>cmake</GenericName>
|
||||
@@ -204,7 +204,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>atlas-development</GenericName>
|
||||
<PackageName>libatlas3-devel</PackageName>
|
||||
<PackageName>blas-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openmpi-development</GenericName>
|
||||
@@ -250,9 +250,41 @@
|
||||
<GenericName>tinyxml</GenericName>
|
||||
<PackageName>tinyxml-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencl</GenericName>
|
||||
<PackageName>opencl-headers</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>attr</GenericName>
|
||||
<PackageName>attr</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<PackageName>apache2</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<PackageName>go-doc</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<PackageName>redis</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<PackageName>opencv-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl-digest-md5</GenericName>
|
||||
<PackageName>perl-Digest-Perl-MD5</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-scipy</GenericName>
|
||||
<PackageName>python-scipy</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-sklearn</GenericName>
|
||||
<PackageName>python-scikit-learn</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
269
pts-core/external-test-dependencies/xml/solus-packages.xml
Normal file
269
pts-core/external-test-dependencies/xml/solus-packages.xml
Normal file
@@ -0,0 +1,269 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/xsl" href="xsl/pts-exdep-viewer.xsl" ?>
|
||||
<PhoronixTestSuite>
|
||||
<ExternalDependencies>
|
||||
<Information>
|
||||
<Name>Solus</Name>
|
||||
<Aliases>Solus Linux</Aliases>
|
||||
<PackageManager>eopkg</PackageManager>
|
||||
</Information>
|
||||
<Package>
|
||||
<GenericName>common-dependencies</GenericName>
|
||||
<PackageName>mesalib-demos unzip</PackageName>
|
||||
<FileCheck>glxinfo, unzip</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>32bit-compatibility</GenericName>
|
||||
<PackageName>glibc-32bit libstdc++-32bit libx11-32bit libxext-32bit libxrandr-32bit libxinerama-32bit libxdamage-32bit-devel mesalib-32bit-devel sdl1-sound-32bit libjpeg-turbo-32bit systemd-32bit</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>gtk-development</GenericName>
|
||||
<PackageName>libgtk-2-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>sdl2-development</GenericName>
|
||||
<PackageName>sdl2-mixer-devel sdl2-ttf-devel sdl2-gfx-devel sdl2-devel sdl2-image-devel sdl2-net-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>sdl-development</GenericName>
|
||||
<PackageName>sdl1-devel sdl1-image-devel sdl2-ttf-devel sdl-gfx-devel sdl1-image-devel sdl1-net-devel sdl1-mixer-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glut</GenericName>
|
||||
<PackageName>freeglut-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libpng-development</GenericName>
|
||||
<PackageName>libpng-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openssl-development</GenericName>
|
||||
<PackageName>openssl-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>build-utilities</GenericName>
|
||||
<PackageName>-c system.devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tiff</GenericName>
|
||||
<PackageName>libtiff-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bison</GenericName>
|
||||
<PackageName>bison</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>flex</GenericName>
|
||||
<PackageName>flex</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>imlib2-development</GenericName>
|
||||
<PackageName>imlib2-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>java</GenericName>
|
||||
<PackageName>openjdk-8</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>portaudio-development</GenericName>
|
||||
<PackageName>portaudio-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>fortran-compiler</GenericName>
|
||||
<PackageName>gfortran</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glew</GenericName>
|
||||
<PackageName>glew-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bc</GenericName>
|
||||
<PackageName>bc</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>scons</GenericName>
|
||||
<PackageName>scons</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>smartmontools</GenericName>
|
||||
<PackageName>smartmontools</PackageName>
|
||||
<FileCheck>/usr/sbin/smartctl</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>zlib-development</GenericName>
|
||||
<PackageName>zlib-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>jpeg-development</GenericName>
|
||||
<PackageName>libjpeg-turbo-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libaio-development</GenericName>
|
||||
<PackageName>libaio-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>pcre</GenericName>
|
||||
<PackageName>libpcre-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl</GenericName>
|
||||
<PackageName>perl perl-module-build</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>xorg-video</GenericName>
|
||||
<PackageName>libxv-devel libxvmc-devel libvdpau-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openal-development</GenericName>
|
||||
<PackageName>openal-soft-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>vorbis-development</GenericName>
|
||||
<PackageName>libvorbis-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>jam</GenericName>
|
||||
<PackageName>ftjam</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>p7zip</GenericName>
|
||||
<PackageName>p7zip</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>qt4-development</GenericName>
|
||||
<PackageName>qt4-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>autoconf</GenericName>
|
||||
<PackageName>autoconf</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libtool</GenericName>
|
||||
<PackageName>libtool</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>ncurses-development</GenericName>
|
||||
<PackageName>ncurses-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>popt</GenericName>
|
||||
<PackageName>popt-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>curl</GenericName>
|
||||
<PackageName>curl-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>fftw3-development</GenericName>
|
||||
<PackageName>fftw-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>blas-development</GenericName>
|
||||
<PackageName>openblas-devel</PackageName>
|
||||
<FileCheck>openblas_config.h</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>lapack-development</GenericName>
|
||||
<PackageName>openblas-devel</PackageName>
|
||||
<FileCheck>lapacke.h</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>atlas-development</GenericName>
|
||||
<PackageName>gflags-devel glog-devel leveldb-devel lmdb-devel hdf5-devel opencv-devel protobuf-devel snappy-devel</PackageName>
|
||||
<FileCheck>gflags.h</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>cmake</GenericName>
|
||||
<PackageName>cmake</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>boost-development</GenericName>
|
||||
<PackageName>libboost-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bzip2-development</GenericName>
|
||||
<PackageName>bzip2-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tcl</GenericName>
|
||||
<PackageName>tcl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glibc-development</GenericName>
|
||||
<PackageName>glibc-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python</GenericName>
|
||||
<PackageName>python</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>boost-thread-development</GenericName>
|
||||
<PackageName>libboost-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-numpy</GenericName>
|
||||
<PackageName>numpy</PackageName>
|
||||
<FileCheck>/usr/lib/python2.7/site-packages/numpy</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>yasm</GenericName>
|
||||
<PackageName>yasm</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>gmp-library</GenericName>
|
||||
<PackageName>gmp-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>subversion</GenericName>
|
||||
<PackageName>subversion</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>git</GenericName>
|
||||
<PackageName>git</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>suitesparse</GenericName>
|
||||
<PackageName>suitesparse-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tinyxml</GenericName>
|
||||
<PackageName>tinyxml-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencl</GenericName>
|
||||
<PackageName>ocl-icd-devel</PackageName>
|
||||
<FileCheck>ocl_icd.h</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>attr</GenericName>
|
||||
<PackageName>attr-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<PackageName>golang</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<PackageName>redis</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<PackageName>opencv-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl-digest-md5</GenericName>
|
||||
<PackageName>perl</PackageName>
|
||||
<FileCheck>/usr/lib/perl5/5.22.1/x86_64-linux/Digest/MD5.pm</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-scipy</GenericName>
|
||||
<PackageName>scipy</PackageName>
|
||||
<FileCheck>/usr/lib/python2.7/site-packages/scipy</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-sklearn</GenericName>
|
||||
<PackageName>scikit-learn</PackageName>
|
||||
<FileCheck>/usr/lib/python2.7/site-packages/sklearn</FileCheck>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
@@ -9,8 +9,8 @@
|
||||
</Information>
|
||||
<Package>
|
||||
<GenericName>common-dependencies</GenericName>
|
||||
<PackageName>mesa-utils unzip</PackageName>
|
||||
<FileCheck>glxinfo, unzip</FileCheck>
|
||||
<PackageName>mesa-utils unzip apt-file</PackageName>
|
||||
<FileCheck>glxinfo, unzip, apt-file</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>32bit-compatibility</GenericName>
|
||||
@@ -47,7 +47,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libpng-development</GenericName>
|
||||
<PackageName>libpng12-dev</PackageName>
|
||||
<PackageName>libpng-dev</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openssl-development</GenericName>
|
||||
@@ -209,7 +209,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>lapack-development</GenericName>
|
||||
<PackageName>liblapack-dev</PackageName>
|
||||
<PackageName>liblapack-dev liblapacke-dev</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>atlas-development</GenericName>
|
||||
@@ -217,7 +217,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openmpi-development</GenericName>
|
||||
<PackageName>libopenmpi-dev openmpi-bin libmpich2-dev</PackageName>
|
||||
<PackageName>libopenmpi-dev openmpi-bin libmpich-dev</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>cmake</GenericName>
|
||||
@@ -281,7 +281,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>superlu</GenericName>
|
||||
<PackageName>libsuperlu3-dev</PackageName>
|
||||
<PackageName>libsuperlu-dev</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>suitesparse</GenericName>
|
||||
@@ -289,7 +289,7 @@
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>dune</GenericName>
|
||||
<PackageName>libdune-common-dev libdune-istl-dev libdune-grid-dev libdune-localfunctions-dev</PackageName>
|
||||
<PackageName>libdune-common-dev libdune-istl-dev libdune-geometry-dev libdune-grid-dev libdune-localfunctions-dev</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tinyxml</GenericName>
|
||||
@@ -303,5 +303,35 @@
|
||||
<GenericName>attr</GenericName>
|
||||
<PackageName>libattr1-dev</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<PackageName>apache2</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<PackageName>golang</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<PackageName>redis-server</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<PackageName>libopencv-dev</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl-digest-md5</GenericName>
|
||||
<PackageName>libdigest-md5-file-perl libdigest-perl-md5-perl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-scipy</GenericName>
|
||||
<PackageName>python-scipy</PackageName>
|
||||
<FileCheck>/usr/lib/python2.7/dist-packages/scipy</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-sklearn</GenericName>
|
||||
<PackageName>python-sklearn</PackageName>
|
||||
<FileCheck>/usr/lib/python2.7/dist-packages/sklearn/</FileCheck>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
252
pts-core/external-test-dependencies/xml/void-packages.xml
Normal file
252
pts-core/external-test-dependencies/xml/void-packages.xml
Normal file
@@ -0,0 +1,252 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/xsl" href="xsl/pts-exdep-viewer.xsl" ?>
|
||||
<PhoronixTestSuite>
|
||||
<ExternalDependencies>
|
||||
<Information>
|
||||
<Name>Void Linux</Name>
|
||||
<Aliases></Aliases>
|
||||
<PackageManager>xbps-install</PackageManager>
|
||||
</Information>
|
||||
<Package>
|
||||
<GenericName>common-dependencies</GenericName>
|
||||
<PackageName>unzip</PackageName>
|
||||
<FileCheck>unzip</FileCheck>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>gtk-development</GenericName>
|
||||
<PackageName>gtk+-devel gtk+3-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>sdl2-development</GenericName>
|
||||
<PackageName>SDL2-devel SDL2_gfx-devel SDL2_image-devel SDL2_ttf-devel SDL2_net-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>sdl-development</GenericName>
|
||||
<PackageName>SDL-devel SDL_gfx-devel SDL_image-devel SDL_ttf-devel SDL_net-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glut</GenericName>
|
||||
<PackageName>libfreeglut-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>csh</GenericName>
|
||||
<PackageName>tcsh</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libpng-development</GenericName>
|
||||
<PackageName>libpng-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openssl-development</GenericName>
|
||||
<PackageName>libressl-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>build-utilities</GenericName>
|
||||
<PackageName>gcc gcc-c++ autoconf make libgomp-devel automake</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>cairo-development</GenericName>
|
||||
<PackageName>cairo-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>xorg-development</GenericName>
|
||||
<PackageName>xorg-server-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tiff</GenericName>
|
||||
<PackageName>tiff-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bison</GenericName>
|
||||
<PackageName>bison</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>flex</GenericName>
|
||||
<PackageName>flex</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>imlib2-development</GenericName>
|
||||
<PackageName>imlib2-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>java</GenericName>
|
||||
<PackageName>openjdk</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>portaudio-development</GenericName>
|
||||
<PackageName>portaudio-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>fortran-compiler</GenericName>
|
||||
<PackageName>gcc-fortran</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glew</GenericName>
|
||||
<PackageName>glew-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bc</GenericName>
|
||||
<PackageName>bc</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>freeimage</GenericName>
|
||||
<PackageName>freeimage-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>scons</GenericName>
|
||||
<PackageName>scons</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>smartmontools</GenericName>
|
||||
<PackageName>smartmontools</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>zlib-development</GenericName>
|
||||
<PackageName>zlib-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>jpeg-development</GenericName>
|
||||
<PackageName>libopenjpeg-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libaio-development</GenericName>
|
||||
<PackageName>libaio-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>pcre</GenericName>
|
||||
<PackageName>libpcre</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>perl</GenericName>
|
||||
<PackageName>perl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>xorg-video</GenericName>
|
||||
<PackageName>libXv-devel l;ibvdpau-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libstdcpp5</GenericName>
|
||||
<PackageName>libstdc++-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openal-development</GenericName>
|
||||
<PackageName>libopenal-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>vorbis-development</GenericName>
|
||||
<PackageName>libvorbis-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>jam</GenericName>
|
||||
<PackageName>jam</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>p7zip</GenericName>
|
||||
<PackageName>p7zip</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>autoconf</GenericName>
|
||||
<PackageName>autoconf</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>libtool</GenericName>
|
||||
<PackageName>libtool</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>ncurses-development</GenericName>
|
||||
<PackageName>ncurses-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>popt</GenericName>
|
||||
<PackageName>popt-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>numa-development</GenericName>
|
||||
<PackageName>libnuma-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>curl</GenericName>
|
||||
<PackageName>libcurl-devel curl</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>fftw3-development</GenericName>
|
||||
<PackageName>libfftw</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>blas-development</GenericName>
|
||||
<PackageName>blas-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>lapack-development</GenericName>
|
||||
<PackageName>lapack-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>openmpi-development</GenericName>
|
||||
<PackageName>libopenmpi</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>cmake</GenericName>
|
||||
<PackageName>cmake</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>boost-development</GenericName>
|
||||
<PackageName>boost boost-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>bzip2-development</GenericName>
|
||||
<PackageName>bzip2-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>tcl</GenericName>
|
||||
<PackageName>tcl tcl-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glibc-development</GenericName>
|
||||
<PackageName>glibc-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>glibc-development</GenericName>
|
||||
<PackageName>glibc-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python</GenericName>
|
||||
<PackageName>python</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>python-numpy</GenericName>
|
||||
<PackageName>python-numpy</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>yasm</GenericName>
|
||||
<PackageName>yasm</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>gmp-library</GenericName>
|
||||
<PackageName>gmp-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>subversion</GenericName>
|
||||
<PackageName>subversion</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>git</GenericName>
|
||||
<PackageName>git</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>opencl</GenericName>
|
||||
<PackageName>opencl-headers</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>attr</GenericName>
|
||||
<PackageName>attr-devel</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>httpd</GenericName>
|
||||
<PackageName>apache</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>golang</GenericName>
|
||||
<PackageName>go</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
@@ -227,6 +227,13 @@
|
||||
<PackageName>gmp</PackageName>
|
||||
<FileCheck>/usr/include/gmp.h</FileCheck>
|
||||
</Package>
|
||||
<!-- lib3ds support for Zenwalk -->
|
||||
<Package>
|
||||
<GenericName>opencv</GenericName>
|
||||
<PackageName>opencv</PackageName>
|
||||
</Package>
|
||||
<Package>
|
||||
<GenericName>redis-server</GenericName>
|
||||
<PackageName>redis</PackageName>
|
||||
</Package>
|
||||
</ExternalDependencies>
|
||||
</PhoronixTestSuite>
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2011, Phoronix Media
|
||||
Copyright (C) 2008 - 2011, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
dummy_module.php: A simple 'dummy' module to demonstrate the PTS functions
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -120,6 +120,14 @@ class dummy_module extends pts_module_interface
|
||||
{
|
||||
echo PHP_EOL . 'We\'re all done with the testing for now.' . PHP_EOL . 'Called: __post_run_process()' . PHP_EOL;
|
||||
}
|
||||
public static function __test_log_output()
|
||||
{
|
||||
echo PHP_EOL . 'Log file available.' . PHP_EOL . 'Called: __test_log_output()' . PHP_EOL;
|
||||
}
|
||||
public static function __post_test_run_system_logs()
|
||||
{
|
||||
echo PHP_EOL . 'System logs available.' . PHP_EOL . 'Called: __post_test_run_system_logs()' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
130
pts-core/modules/flamegrapher.php
Normal file
130
pts-core/modules/flamegrapher.php
Normal file
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2016, Phoronix Media
|
||||
Copyright (C) 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class flamegrapher extends pts_module_interface
|
||||
{
|
||||
const module_name = 'Generate Perf FlameGraphs For Tests';
|
||||
const module_version = '0.1.0';
|
||||
const module_description = 'Setting FLAME_GRAPH_PATH=<path to flamegraph path> will auto-load and enable this Phoronix Test Suite module. The module will generate a Linux perf FlameGraph for each test run during the benchmarking process. Details on FlameGraph @ https://github.com/brendangregg/FlameGraph';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
private static $successful_test_run;
|
||||
private static $flame_graph_path = false;
|
||||
private static $temp_flame_dir;
|
||||
private static $save_position = 0;
|
||||
|
||||
public static function module_environmental_variables()
|
||||
{
|
||||
return array('FLAME_GRAPH_PATH');
|
||||
}
|
||||
public static function module_info()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public static function __run_manager_setup(&$test_run_manager)
|
||||
{
|
||||
// Verify LINUX_PERF is set, `perf` can be found, and is Linux
|
||||
self::$flame_graph_path = getenv('FLAME_GRAPH_PATH') . '/';
|
||||
|
||||
if(!is_dir(self::$flame_graph_path))
|
||||
{
|
||||
echo 'FLAME_GRAPH_PATH is not valid directory to FlameGraph.' . PHP_EOL;
|
||||
return pts_module::MODULE_UNLOAD;
|
||||
}
|
||||
if(!is_executable(self::$flame_graph_path . 'stackcollapse-perf.pl'))
|
||||
{
|
||||
echo 'stackcollapse-perf.pl not found.' . PHP_EOL;
|
||||
return pts_module::MODULE_UNLOAD;
|
||||
}
|
||||
if(!is_executable(self::$flame_graph_path . 'flamegraph.pl'))
|
||||
{
|
||||
echo 'flamegraph.pl not found.' . PHP_EOL;
|
||||
return pts_module::MODULE_UNLOAD;
|
||||
}
|
||||
if(!pts_client::executable_in_path('perf'))
|
||||
{
|
||||
echo 'Linux perf binary not found.' . PHP_EOL;
|
||||
return pts_module::MODULE_UNLOAD;
|
||||
}
|
||||
if(!pts_client::executable_in_path('perl'))
|
||||
{
|
||||
echo 'Linux perl binary not found.' . PHP_EOL;
|
||||
return pts_module::MODULE_UNLOAD;
|
||||
}
|
||||
|
||||
echo PHP_EOL . 'Linux Perf & FlameGraph Support Enabled.' . PHP_EOL . PHP_EOL;
|
||||
|
||||
// This module won't be too useful if you're not saving the results to see the graphs
|
||||
$test_run_manager->force_results_save();
|
||||
}
|
||||
public static function __pre_test_run(&$test_run_request)
|
||||
{
|
||||
// Pre-run process start perf recording
|
||||
self::$temp_flame_dir = pts_client::create_temporary_directory('flamegraph');
|
||||
shell_exec('perf record -a -g -F 97 -o ' . self::$temp_flame_dir . 'perf.data sleep 3');
|
||||
}
|
||||
public static function __post_test_run_success($test_run_request)
|
||||
{
|
||||
// Base the new result object/graph off of what just ran
|
||||
// Do the copy here of it since this function is only called when test is a success
|
||||
self::$successful_test_run = clone $test_run_request;
|
||||
}
|
||||
public static function __post_test_run_process(&$result_file)
|
||||
{
|
||||
$svg_flamegraph = null;
|
||||
if(is_dir(self::$temp_flame_dir))
|
||||
{
|
||||
// Post-process perf data with FlameGraph
|
||||
shell_exec('cd ' . self::$temp_flame_dir . ' && perf script > out.stack');
|
||||
shell_exec(self::$flame_graph_path . 'stackcollapse-perf.pl ' . self::$temp_flame_dir . 'out.stack > ' . self::$temp_flame_dir . 'out.folded');
|
||||
shell_exec(self::$flame_graph_path . 'flamegraph.pl ' . self::$temp_flame_dir . 'out.folded > ' . self::$temp_flame_dir . 'out.svg');
|
||||
if(is_file(self::$temp_flame_dir . 'out.svg'))
|
||||
{
|
||||
$svg_flamegraph = file_get_contents(self::$temp_flame_dir . 'out.svg');
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
pts_file_io::delete(self::$temp_flame_dir, null, true);
|
||||
self::$temp_flame_dir = false;
|
||||
}
|
||||
|
||||
if(self::$successful_test_run && $svg_flamegraph)
|
||||
{
|
||||
self::$save_position++;
|
||||
if(!is_dir($result_file->default_result_folder_path() . '/result-graphs'))
|
||||
{
|
||||
pts_file_io::mkdir($result_file->default_result_folder_path() . '/result-graphs', 0777, true);
|
||||
}
|
||||
|
||||
// TODO XXX below is a bit hacky way of saving SVG graphs to make them appear in the local results viewer under matching test
|
||||
$s = file_put_contents($result_file->default_result_folder_path() . '/result-graphs/' . self::$save_position . '_extra1.svg', $svg_flamegraph);
|
||||
if($s)
|
||||
{
|
||||
echo PHP_EOL . 'Saved FlameGraph result to: ' . $result_file->default_result_folder_path() . '/result-graphs/' . self::$save_position . '_extra1.svg' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
// Reset to be safe
|
||||
self::$successful_test_run = null;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2012, Phoronix Media
|
||||
Copyright (C) 2008 - 2012, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
graphics_override.php: Graphics AA/AF image quality setting override module
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -28,8 +28,8 @@ class graphics_event_checker extends pts_module_interface
|
||||
const module_description = 'This module checks a number of events prior to and and after running a test to make sure the graphics sub-system was not put in a sour or unintended state by the application. For instance, it makes sure syncing to vBlank is not forced through the driver and that a graphics test has not left the display in an unintended mode.';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
static $start_video_resolution = array(-1, -1);
|
||||
static $driver_forced_vsync = false;
|
||||
private static $start_video_resolution = array(-1, -1);
|
||||
private static $driver_forced_vsync = false;
|
||||
|
||||
// GPU Errors
|
||||
static $error_pointer = 0;
|
||||
@@ -92,7 +92,7 @@ class graphics_event_checker extends pts_module_interface
|
||||
// vblank_mode=0 has long been set within pts-core, but put it here too just since there's these other checks here
|
||||
putenv('vblank_mode=0');
|
||||
}
|
||||
public static function __post_test_run(&$test_result)
|
||||
public static function __post_test_run($test_result)
|
||||
{
|
||||
if($test_result->test_profile->get_test_hardware_type() != 'Graphics')
|
||||
{
|
||||
@@ -152,7 +152,7 @@ class graphics_event_checker extends pts_module_interface
|
||||
echo PHP_EOL . 'GPU Errors: ' . $error_count . $error_breakdown . PHP_EOL;
|
||||
}
|
||||
|
||||
if(phodevi::is_nvidia_graphics() && self::$driver_forced_vsync)
|
||||
if(self::$driver_forced_vsync && phodevi::is_nvidia_graphics())
|
||||
{
|
||||
shell_exec('nvidia-settings -a SyncToVBlank=1 2>&1');
|
||||
}
|
||||
|
||||
126
pts-core/modules/html_results_export.php
Normal file
126
pts-core/modules/html_results_export.php
Normal file
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2016, Phoronix Media
|
||||
Copyright (C) 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class html_results_export extends pts_module_interface
|
||||
{
|
||||
const module_name = 'Result Exporter To HTML';
|
||||
const module_version = '1.0.0';
|
||||
const module_description = 'This module allows basic exporting of results to HTML for saving either to a file locally (specified using the EXPORT_RESULTS_HTML_FILE_TO environment variable) or to a mail account (specified using the EXPORT_RESULTS_HTML_EMAIL_TO environment variable). EXPORT_RESULTS_HTML_EMAIL_TO supports multiple email addresses delimited by a comma.';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
public static function module_environmental_variables()
|
||||
{
|
||||
return array('EXPORT_RESULTS_HTML_EMAIL_TO', 'EXPORT_RESULTS_HTML_FILE_TO');
|
||||
}
|
||||
protected static function generate_html_email_results($result_file)
|
||||
{
|
||||
$html = '<html><head><title>' . $result_file->get_title() . ' - Phoronix Test Suite</title></head><body>';
|
||||
$html .= '<h1>' . $result_file->get_title() . '</h1>';
|
||||
$html .= '<p>' . $result_file->get_description() . '</p>';
|
||||
$extra_attributes = array();
|
||||
|
||||
// Systems
|
||||
$table = new pts_ResultFileSystemsTable($result_file);
|
||||
$html .= '<p style="text-align: center; overflow: auto;">' . pts_render::render_graph_inline_embed($table, $result_file, $extra_attributes, true, 'HTML') . '</p>';
|
||||
|
||||
// Result Overview
|
||||
$intent = null;
|
||||
$table = new pts_ResultFileTable($result_file, $intent);
|
||||
$html .= '<p style="text-align: center; overflow: auto;">' . pts_render::render_graph_inline_embed($table, $result_file, $extra_attributes, true, 'HTML') . '</p>';
|
||||
|
||||
// The Results
|
||||
foreach($result_file->get_result_objects() as $result_object)
|
||||
{
|
||||
$res = pts_render::render_graph_inline_embed($result_object, $result_file, $extra_attributes, true, 'HTML');
|
||||
|
||||
if($res == false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$html .= '<h2>' . $result_object->test_profile->get_title() . '</h2>';
|
||||
$html .= '<h3>' . $result_object->get_arguments_description() . '</h3>';
|
||||
$html .= '<p align="center">';
|
||||
$html .= $res;
|
||||
$html .= '</p>';
|
||||
unset($result_object);
|
||||
}
|
||||
|
||||
// Footer
|
||||
$html .= '<hr />
|
||||
<p><img src="http://www.phoronix-test-suite.com/web/pts-logo-60.png" /></p>
|
||||
<h6><em>The <a href="http://www.phoronix-test-suite.com/">Phoronix Test Suite</a>, <a href="http://www.phoromatic.com/">Phoromatic</a>, and <a href="http://openbenchmarking.org/">OpenBenchmarking.org</a> are products of <a href="http://www.phoronix-media.com/">Phoronix Media</a>.<br />The Phoronix Test Suite is open-source under terms of the GNU GPL. Commercial support, custom engineering, and other services are available by contacting Phoronix Media.<br />© ' . date('Y') . ' Phoronix Media.</em></h6>';
|
||||
$html .= '</body></html>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
public static function __event_results_saved($test_run_manager)
|
||||
{
|
||||
$html_file = pts_module::read_variable('EXPORT_RESULTS_HTML_FILE_TO');
|
||||
$emails = pts_strings::comma_explode(pts_module::read_variable('EXPORT_RESULTS_HTML_EMAIL_TO'));
|
||||
|
||||
$html_contents = self::generate_html_email_results($test_run_manager->result_file);
|
||||
|
||||
|
||||
if(!empty($html_file))
|
||||
{
|
||||
file_put_contents($html_file, $html_contents);
|
||||
echo 'HTML Result File To: ' . $html_file . PHP_EOL;
|
||||
}
|
||||
|
||||
if(!empty($emails))
|
||||
{
|
||||
//$pdf_contents = pts_result_file_output::result_file_to_pdf($test_run_manager->result_file, 'pts-test-results.pdf', 'S');
|
||||
//$pdf_contents = chunk_split(base64_encode($pdf_contents));
|
||||
|
||||
foreach($emails as $email)
|
||||
{
|
||||
|
||||
/*$boundary = md5(uniqid(time()));
|
||||
$headers = "From: Phoronix Test Suite <no-reply@phoromatic.com>\r\n";
|
||||
$headers .= "MIME-Version: 1.0\r\n";
|
||||
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"\r\n\r\n";
|
||||
$message = "This is a multi-part message in MIME format.\r\n";
|
||||
$message .= "--" . $boundary . "\r\n";
|
||||
$message .= "Content-Type: text/html; charset=utf-8\r\n";
|
||||
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
|
||||
$message .= $html_contents . "\r\n\r\n";
|
||||
$message .= "--" . $boundary . "\r\n";
|
||||
$message .= "Content-Type: application/pdf; name=\"pts-test-results.pdf\"\r\n";
|
||||
$message .= "Content-Transfer-Encoding: base64\r\n";
|
||||
$message .= "Content-Disposition: attachment; filename=\"pts-test-results.pdf\"\r\n\r\n";
|
||||
$message .= $pdf_contents . "\r\n\r\n";
|
||||
$message .= "--" . $boundary . "--";
|
||||
|
||||
mail($email, 'Phoronix Test Suite Result File: ' . $test_run_manager->result_file->get_title(), $message, $headers);
|
||||
echo 'HTML Results Emailed To: ' . $email . PHP_EOL; */
|
||||
$headers = "MIME-Version: 1.0\r\n";
|
||||
$headers .= "Content-type:text/html;charset=UTF-8\r\n";
|
||||
$headers .= "From: Phoromatic - Phoronix Test Suite <no-reply@phoromatic.com>\r\n";
|
||||
mail($email, 'Phoronix Test Suite Result File: ' . $test_run_manager->result_file->get_title(), $html_contents, $headers);
|
||||
echo 'HTML Results Emailed To: ' . $email . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
67
pts-core/modules/log_exporter.php
Normal file
67
pts-core/modules/log_exporter.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2016, Phoronix Media
|
||||
Copyright (C) 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class log_exporter extends pts_module_interface
|
||||
{
|
||||
const module_name = 'Log Exporter';
|
||||
const module_version = '1.0.0';
|
||||
const module_description = 'This module allows for easily exporting test run logs and system logs to external locations via specifying the directory paths via the COPY_TEST_RUN_LOGS_TO and COPY_SYSTEM_LOGS_TO environment variables.';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
public static function module_environmental_variables()
|
||||
{
|
||||
return array('COPY_TEST_RUN_LOGS_TO', 'COPY_SYSTEM_LOGS_TO');
|
||||
}
|
||||
public static function __test_log_output($log_file_path)
|
||||
{
|
||||
if(getenv('COPY_TEST_RUN_LOGS_TO') == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
$COPY_TEST_RUN_LOGS_TO = getenv('COPY_TEST_RUN_LOGS_TO');
|
||||
|
||||
pts_file_io::mkdir($COPY_TEST_RUN_LOGS_TO);
|
||||
if(is_writable($COPY_TEST_RUN_LOGS_TO))
|
||||
{
|
||||
copy($log_file_path, $COPY_TEST_RUN_LOGS_TO . '/' . basename($log_file_path));
|
||||
}
|
||||
}
|
||||
public static function __post_test_run_system_logs($log_file_path)
|
||||
{
|
||||
if(getenv('COPY_SYSTEM_LOGS_TO') == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
$COPY_SYSTEM_LOGS_TO = getenv('COPY_SYSTEM_LOGS_TO');
|
||||
|
||||
pts_file_io::mkdir($COPY_SYSTEM_LOGS_TO);
|
||||
if(is_writable($COPY_SYSTEM_LOGS_TO))
|
||||
{
|
||||
foreach(pts_file_io::glob($log_file_path . '/*') as $sys_log_file)
|
||||
{
|
||||
copy($sys_log_file, $COPY_SYSTEM_LOGS_TO . '/' . basename($sys_log_file));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
496
pts-core/modules/matisk.php
Normal file
496
pts-core/modules/matisk.php
Normal file
@@ -0,0 +1,496 @@
|
||||
<?php
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2016, Michael Larabel
|
||||
Copyright (C) 2016, Phoronix Media
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class matisk extends pts_module_interface
|
||||
{
|
||||
const module_name = 'MATISK';
|
||||
const module_version = '1.2.0';
|
||||
const module_description = 'My Automated Test Infrastructure Setup Kit';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
// For values array template [0] = default value [1] = description
|
||||
private static $ini_struct = array(
|
||||
'workload' =>
|
||||
array(
|
||||
'save_results' => array(true, 'A boolean value of whether to save the test results.'),
|
||||
'suite' => array(null, 'A string that is an XML test suite for the Phoronix Test Suite. If running a custom collection of tests/suites, first run phoronix-test-suite build-suite.'),
|
||||
'save_name' => array(null, 'The string to save the test results as.'),
|
||||
'description' => array(null, 'The test description string.'),
|
||||
'result_identifier' => array(null, 'The test result identifier string, unless using contexts.')
|
||||
),
|
||||
'installation' =>
|
||||
array(
|
||||
'install_check' => array(true, 'Check to see that all tests/suites are installed prior to execution.'),
|
||||
'force_install' => array(false, 'Force all tests/suites to be re-installed each time prior to execution.'),
|
||||
'external_download_cache' => array(null, 'The option to specify a non-standard PTS External Dependencies download cache directory.'),
|
||||
'block_phodevi_caching' => array(false, 'If Phodevi should not be caching any hardware/software information.')
|
||||
),
|
||||
'general' =>
|
||||
array(
|
||||
'upload_to_openbenchmarking' => array(false, 'A boolean value whether to automatically upload the test result to OpenBenchmarking.org'), // Automatic upload to OpenBenchmarking?
|
||||
// 'open_browser' => false, // Automatically launch web browser to show the results?
|
||||
),
|
||||
'environmental_variables' =>
|
||||
array(
|
||||
'EXAMPLE_VAR' => array('EXAMPLE', 'The environmental_variables section allows key = value pairs of environmental variables to be set by default.')
|
||||
),
|
||||
'set_context' =>
|
||||
array(
|
||||
'The pre_install or pre_run fields must be used when using the MATISK context testing functionality. The set_context fields must specify an executable file for setting the context of the system. Passed as the first argument to the respective file is the context string defined by the contexts section of this file. If any of the set_context scripts emit an exit code of 8, the testing process will abort immediately. If any of the set_context scripts emit an exit code of 9, the testing process will skip executing the suite on the current context.',
|
||||
'pre_install' => array(null, 'An external file to be used for setting the system context prior to test installation.'),
|
||||
'pre_run' => array(null, 'An external file to be used for setting the system context prior to test execution.'),
|
||||
// 'interim_run' => array(null, 'An external file to be used for setting the system context in between tests in the execution queue.'),
|
||||
'post_install' => array(null, 'An external file to be used for setting the system context after the test installation.'),
|
||||
'post_run' => array(null, 'An external file to be used for setting the system context after all tests have been executed.'),
|
||||
'reboot_support' => array(false, 'If any of the context scripts cause the system to reboot, set this value to true and the Phoronix Test Suite will attempt to automatically recover itself upon reboot.'),
|
||||
'context' => array(array(), 'An array of context values.'),
|
||||
'external_contexts' => array(null, 'An external file for loading a list of contexts, if not loading the list of contexts via the context array in this file. If the external file is a script it will be executed and the standard output will be used for parsing the contexts.'),
|
||||
'external_contexts_delimiter' => array('EOL', 'The delimiter for the external_contexts contexts list. Special keyword: EOL will use a line break as the delimiter and TAB will use a tab as a delimiter.'),
|
||||
'reverse_context_order' => array(false, 'A boolean value of whether to reverse the order (from bottom to top) for the execution of a list of contexts.'),
|
||||
'log_context_outputs' => array(false, 'A boolean value of whether to log the output of the set-context scripts to ~/.phoronix-test-suite/modules-data/matisk/')
|
||||
)
|
||||
);
|
||||
|
||||
private static $context = null;
|
||||
private static $ini = array();
|
||||
private static $matisk_config_dir = null;
|
||||
private static $skip_test_set = false;
|
||||
|
||||
public static function module_info()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public static function user_commands()
|
||||
{
|
||||
return array('run' => 'run_matisk', 'template' => 'template');
|
||||
}
|
||||
public static function template()
|
||||
{
|
||||
echo PHP_EOL . '; Sample INI Configuration Template For Phoronix Test Suite MATISK' . PHP_EOL . '; http://www.phoronix-test-suite.com/' . PHP_EOL . PHP_EOL;
|
||||
|
||||
foreach(self::$ini_struct as $section => $items)
|
||||
{
|
||||
echo PHP_EOL . '[' . $section . ']' . PHP_EOL;
|
||||
|
||||
foreach($items as $key => $r)
|
||||
{
|
||||
if(!is_array($r))
|
||||
{
|
||||
echo PHP_EOL . '; ' . wordwrap($r, 80, PHP_EOL . '; ', true) . PHP_EOL . PHP_EOL;
|
||||
continue;
|
||||
}
|
||||
list($default_value, $description) = $r;
|
||||
|
||||
if($description != null)
|
||||
{
|
||||
echo '; ' . wordwrap($description, 80, PHP_EOL . '; ', true);
|
||||
|
||||
if($default_value !== null && $default_value != array())
|
||||
{
|
||||
echo ' The default value is ';
|
||||
|
||||
if($default_value === true || $default_value === false)
|
||||
{
|
||||
echo $default_value === true ? 'TRUE' : 'FALSE';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $default_value;
|
||||
}
|
||||
|
||||
echo '.';
|
||||
}
|
||||
|
||||
echo PHP_EOL;
|
||||
}
|
||||
|
||||
if(is_array($default_value))
|
||||
{
|
||||
$default_value = isset($default_value[0]) ? $default_value[0] : null;
|
||||
echo $key . '[] = ' . $default_value . PHP_EOL;
|
||||
echo $key . '[] = ' . $default_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $key . ' = ';
|
||||
|
||||
if($default_value === true || $default_value === false)
|
||||
{
|
||||
echo $default_value === true ? 'TRUE' : 'FALSE';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $default_value;
|
||||
}
|
||||
}
|
||||
|
||||
echo PHP_EOL . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
private static function find_file($file)
|
||||
{
|
||||
if(is_file($file))
|
||||
{
|
||||
$file = $file;
|
||||
}
|
||||
else if(is_file(self::$matisk_config_dir . $file))
|
||||
{
|
||||
$file = self::$matisk_config_dir . $file;
|
||||
}
|
||||
else
|
||||
{
|
||||
$file = false;
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
public static function run_matisk($args)
|
||||
{
|
||||
echo PHP_EOL . 'MATISK For The Phoronix Test Suite' . PHP_EOL;
|
||||
|
||||
if(!isset($args[0]) || !is_file($args[0]))
|
||||
{
|
||||
echo PHP_EOL . 'You must specify a MATISK INI file to load.' . PHP_EOL . PHP_EOL;
|
||||
return false;
|
||||
}
|
||||
self::$matisk_config_dir = dirname($args[0]) . '/';
|
||||
pts_file_io::mkdir(pts_module::save_dir());
|
||||
|
||||
$ini = parse_ini_file($args[0], true);
|
||||
|
||||
foreach(self::$ini_struct as $section => $items)
|
||||
{
|
||||
foreach($items as $key => $r)
|
||||
{
|
||||
if(is_array($r) && !isset($ini[$section][$key]))
|
||||
{
|
||||
$ini[$section][$key] = $r[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Checks
|
||||
if(pts_test_suite::is_suite($ini['workload']['suite']) == false)
|
||||
{
|
||||
// See if the XML suite-definition was just tossed into the same directory
|
||||
if(($xml_file = self::find_file($ini['workload']['suite'] . '.xml')) !== false)
|
||||
{
|
||||
pts_file_io::mkdir(PTS_TEST_SUITE_PATH . 'local/' . $ini['workload']['suite']);
|
||||
copy($xml_file, PTS_TEST_SUITE_PATH . 'local/' . $ini['workload']['suite'] . '/suite-definition.xml');
|
||||
}
|
||||
|
||||
if(pts_test_suite::is_suite($ini['workload']['suite']) == false)
|
||||
{
|
||||
echo PHP_EOL . 'A test suite must be specified to execute. If a suite needs to be constructed, run: ' . PHP_EOL . 'phoronix-test-suite build-suite' . PHP_EOL . PHP_EOL;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if($ini['set_context']['external_contexts'] != null)
|
||||
{
|
||||
switch($ini['set_context']['external_contexts_delimiter'])
|
||||
{
|
||||
case 'EOL':
|
||||
case '':
|
||||
$ini['set_context']['external_contexts_delimiter'] = PHP_EOL;
|
||||
break;
|
||||
case 'TAB':
|
||||
$ini['set_context']['external_contexts_delimiter'] = "\t";
|
||||
break;
|
||||
}
|
||||
|
||||
if(($ff = self::find_file($ini['set_context']['external_contexts'])))
|
||||
{
|
||||
if(is_executable($ff))
|
||||
{
|
||||
$ini['set_context']['context'] = shell_exec($ff . ' 2> /dev/null');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ini['set_context']['context'] = file_get_contents($ff);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Hopefully it's a command to execute then...
|
||||
$ini['set_context']['context'] = shell_exec($ini['set_context']['external_contexts'] . ' 2> /dev/null');
|
||||
}
|
||||
|
||||
$ini['set_context']['context'] = explode($ini['set_context']['external_contexts_delimiter'], $ini['set_context']['context']);
|
||||
}
|
||||
else if($ini['set_context']['context'] != null && !is_array($ini['set_context']['context']))
|
||||
{
|
||||
$ini['set_context']['context'] = array($ini['set_context']['context']);
|
||||
}
|
||||
|
||||
if(is_array($ini['set_context']['context']) && count($ini['set_context']['context']) > 0)
|
||||
{
|
||||
foreach($ini['set_context']['context'] as $i => $context)
|
||||
{
|
||||
if($context == null)
|
||||
{
|
||||
unset($ini['set_context']['context'][$i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Context testing
|
||||
if(count($ini['set_context']['context']) > 0 && $ini['set_context']['pre_run'] == null && $ini['set_context']['pre_install'] == null)
|
||||
{
|
||||
echo PHP_EOL . 'The pre_run or pre_install set_context fields must be set in order to set the system\'s context.' . PHP_EOL;
|
||||
return false;
|
||||
}
|
||||
|
||||
if($ini['set_context']['reverse_context_order'])
|
||||
{
|
||||
$ini['set_context']['context'] = array_reverse($ini['set_context']['context']);
|
||||
}
|
||||
}
|
||||
|
||||
if(pts_strings::string_bool($ini['workload']['save_results']))
|
||||
{
|
||||
if($ini['workload']['save_name'] == null)
|
||||
{
|
||||
echo PHP_EOL . 'The save_name field cannot be left empty when saving the test results.' . PHP_EOL;
|
||||
return false;
|
||||
}
|
||||
/*
|
||||
if($ini['workload']['result_identifier'] == null)
|
||||
{
|
||||
echo PHP_EOL . 'The result_identifier field cannot be left empty when saving the test results.' . PHP_EOL;
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
if(!empty($ini['environmental_variables']) && is_array($ini['environmental_variables']))
|
||||
{
|
||||
foreach($ini['environmental_variables'] as $key => $value)
|
||||
{
|
||||
putenv(trim($key) . '=' . trim($value));
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($ini['set_context']['context']))
|
||||
{
|
||||
$ini['set_context']['context'] = array($ini['workload']['result_identifier']);
|
||||
}
|
||||
|
||||
if(pts_strings::string_bool($ini['set_context']['log_context_outputs']))
|
||||
{
|
||||
pts_file_io::mkdir(pts_module::save_dir() . $ini['workload']['save_name']);
|
||||
}
|
||||
|
||||
$spent_context_file = pts_module::save_dir() . $ini['workload']['save_name'] . '.spent-contexts';
|
||||
if(!is_file($spent_context_file))
|
||||
{
|
||||
touch($spent_context_file);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If recovering from an existing run, don't rerun contexts that were already executed
|
||||
$spent_contexts = pts_file_io::file_get_contents($spent_context_file);
|
||||
$spent_contexts = explode(PHP_EOL, $spent_contexts);
|
||||
|
||||
foreach($spent_contexts as $sc)
|
||||
{
|
||||
if(($key = array_search($sc, $ini['set_context']['context'])) !== false)
|
||||
{
|
||||
unset($ini['set_context']['context'][$key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($ini['set_context']['reboot_support'] && phodevi::is_linux())
|
||||
{
|
||||
// In case a set-context involves a reboot, auto-recover
|
||||
$xdg_config_home = is_dir('/etc/xdg/autostart') && is_writable('/etc/xdg/autostart') ? '/etc/xdg/autostart' : pts_client::read_env('XDG_CONFIG_HOME');
|
||||
|
||||
if($xdg_config_home == false)
|
||||
{
|
||||
$xdg_config_home = pts_client::user_home_directory() . '.config';
|
||||
}
|
||||
|
||||
if($xdg_config_home != false && is_dir($xdg_config_home))
|
||||
{
|
||||
$autostart_dir = $xdg_config_home . '/autostart/';
|
||||
pts_file_io::mkdir($xdg_config_home . '/autostart/');
|
||||
}
|
||||
file_put_contents($xdg_config_home . '/autostart/phoronix-test-suite-matisk.desktop', '
|
||||
[Desktop Entry]
|
||||
Name=Phoronix Test Suite Matisk Recovery
|
||||
GenericName=Phoronix Test Suite
|
||||
Comment=Matisk Auto-Recovery Support
|
||||
Exec=gnome-terminal -e \'phoronix-test-suite matisk ' . $args[0] . '\'
|
||||
Icon=phoronix-test-suite
|
||||
Type=Application
|
||||
Encoding=UTF-8
|
||||
Categories=System;Monitor;');
|
||||
}
|
||||
|
||||
if($ini['installation']['block_phodevi_caching'])
|
||||
{
|
||||
// Block Phodevi caching if changing out system components and there is a chance one of the strings of changed contexts might be cached (e.g. OpenGL user-space driver)
|
||||
phodevi::$allow_phodevi_caching = false;
|
||||
}
|
||||
|
||||
if(phodevi::system_uptime() < 60)
|
||||
{
|
||||
echo PHP_EOL . 'Sleeping 45 seconds while waiting for the system to settle...' . PHP_EOL;
|
||||
sleep(45);
|
||||
}
|
||||
|
||||
self::$ini = $ini;
|
||||
$total_context_count = count(self::$ini['set_context']['context']);
|
||||
while(($context = array_shift(self::$ini['set_context']['context'])) !== null)
|
||||
{
|
||||
echo PHP_EOL . ($total_context_count - count(self::$ini['set_context']['context'])) . ' of ' . $total_context_count . ' in test execution queue [' . $context . ']' . PHP_EOL . PHP_EOL;
|
||||
self::$context = $context;
|
||||
|
||||
if(pts_strings::string_bool(self::$ini['installation']['install_check']) || $ini['set_context']['pre_install'] != null)
|
||||
{
|
||||
self::process_user_config_external_hook_process('pre_install');
|
||||
$force_install = false;
|
||||
$no_prompts = true;
|
||||
if(pts_strings::string_bool(self::$ini['installation']['force_install']))
|
||||
{
|
||||
$force_install = true;
|
||||
}
|
||||
|
||||
if(self::$ini['installation']['external_download_cache'] != null)
|
||||
{
|
||||
pts_test_install_manager::add_external_download_cache(self::$ini['installation']['external_download_cache']);
|
||||
}
|
||||
|
||||
// Do the actual test installation
|
||||
pts_test_installer::standard_install(self::$ini['workload']['suite'], $force_install, $no_prompts);
|
||||
self::process_user_config_external_hook_process('post_install');
|
||||
}
|
||||
|
||||
$batch_mode = false;
|
||||
$auto_mode = true;
|
||||
$test_run_manager = new pts_test_run_manager($batch_mode, $auto_mode);
|
||||
if($test_run_manager->initial_checks(self::$ini['workload']['suite']) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(self::$skip_test_set == false)
|
||||
{
|
||||
self::process_user_config_external_hook_process('pre_run');
|
||||
|
||||
// Load the tests to run
|
||||
if($test_run_manager->load_tests_to_run(self::$ini['workload']['suite']) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Save results?
|
||||
$result_identifier = $ini['workload']['result_identifier'];
|
||||
if($result_identifier == null)
|
||||
{
|
||||
$result_identifier = '$MATISK_CONTEXT';
|
||||
}
|
||||
// Allow $MATIISK_CONTEXT as a valid user variable to pass it...
|
||||
$result_identifier = str_replace('$MATISK_CONTEXT', self::$context, $result_identifier);
|
||||
|
||||
$test_run_manager->set_save_name(self::$ini['workload']['save_name']);
|
||||
$test_run_manager->set_results_identifier($result_identifier);
|
||||
$test_run_manager->set_description(self::$ini['workload']['description']);
|
||||
|
||||
// Don't upload results unless it's the last in queue where the context count is now 0
|
||||
$test_run_manager->auto_upload_to_openbenchmarking((count(self::$ini['set_context']['context']) == 0 && self::$ini['general']['upload_to_openbenchmarking']));
|
||||
|
||||
// Run the actual tests
|
||||
$test_run_manager->pre_execution_process();
|
||||
$test_run_manager->call_test_runs();
|
||||
$test_run_manager->post_execution_process();
|
||||
}
|
||||
|
||||
self::$skip_test_set = false;
|
||||
file_put_contents($spent_context_file, self::$context . PHP_EOL, FILE_APPEND);
|
||||
pts_file_io::unlink(pts_module::save_dir() . self::$context . '.last-call');
|
||||
self::process_user_config_external_hook_process('post_run');
|
||||
}
|
||||
|
||||
unlink($spent_context_file);
|
||||
isset($xdg_config_home) && pts_file_io::unlink($xdg_config_home . '/autostart/phoronix-test-suite-matisk.desktop');
|
||||
}
|
||||
protected static function process_user_config_external_hook_process($process)
|
||||
{
|
||||
// Check to not run the same process
|
||||
$last_call_file = pts_module::save_dir() . self::$context . '.last-call';
|
||||
if(is_file($last_call_file))
|
||||
{
|
||||
$check = pts_file_io::file_get_contents($last_call_file);
|
||||
|
||||
if($process == $check)
|
||||
{
|
||||
unlink($last_call_file);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$process != 'post_run' && file_put_contents($last_call_file, $process);
|
||||
|
||||
if(self::$ini['set_context'][$process])
|
||||
{
|
||||
$command = self::find_file(self::$ini['set_context'][$process]) ? self::find_file(self::$ini['set_context'][$process]) : self::$ini['set_context'][$process];
|
||||
$descriptor_spec = array(
|
||||
0 => array('pipe', 'r'),
|
||||
1 => array('pipe', 'w'),
|
||||
2 => array('pipe', 'w')
|
||||
);
|
||||
|
||||
$env_vars = null;
|
||||
pts_client::$display->test_run_instance_error('Running ' . $process . ' set-context script.');
|
||||
if(is_executable($command))
|
||||
{
|
||||
// Pass the context as the first argument to the string
|
||||
$command .= ' ' . self::$context;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Else find $MATISK_CONTEXT in the command string
|
||||
$command = str_replace('$MATISK_CONTEXT', self::$context, $command);
|
||||
}
|
||||
|
||||
$proc = proc_open($command, $descriptor_spec, $pipes, null, $env_vars);
|
||||
echo $std_output = stream_get_contents($pipes[1]);
|
||||
$return_value = proc_close($proc);
|
||||
|
||||
if(pts_strings::string_bool(self::$ini['set_context']['log_context_outputs']))
|
||||
{
|
||||
file_put_contents(pts_module::save_dir() . self::$ini['workload']['save_name'] . '/' . self::$context . '-' . $process . '.txt', $std_output);
|
||||
}
|
||||
|
||||
switch($return_value)
|
||||
{
|
||||
case 8:
|
||||
exit(0);
|
||||
case 9:
|
||||
self::$skip_test_set = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015, Phoronix Media
|
||||
Copyright (C) 2015, Michael Larabel
|
||||
Copyright (C) 2015 - 2016, Phoronix Media
|
||||
Copyright (C) 2015 - 2016, Michael Larabel
|
||||
perf_per_dollar.php: This module is derived from the system_monitor module
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -24,7 +24,7 @@
|
||||
class perf_per_dollar extends pts_module_interface
|
||||
{
|
||||
const module_name = 'Performance Per Dollar/Cost Calculator';
|
||||
const module_version = '0.1.0';
|
||||
const module_version = '0.1.1';
|
||||
const module_description = 'Setting the COST_PERF_PER_DOLLAR= environment variable to whatever value of the system cost/component you are running a comparison on will yield extra graphs that calculate the performance-per-dollar based on the test being run. The COST_PERF_PER_DOLLAR environment variable is applied just to the current test run identifier.';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
@@ -67,18 +67,27 @@ class perf_per_dollar extends pts_module_interface
|
||||
}
|
||||
public static function __post_test_run_process(&$result_file)
|
||||
{
|
||||
if(self::$successful_test_run_request && self::$successful_test_run_request->test_profile->get_display_format() == 'BAR_GRAPH' && self::$successful_test_run_request->test_profile->get_result_proportion() == 'HIB')
|
||||
if(self::$successful_test_run_request && self::$successful_test_run_request->test_profile->get_display_format() == 'BAR_GRAPH')
|
||||
{
|
||||
// This copy isn't needed but it's shorter and from port from system_monitor where there can be multiple items tracked
|
||||
$test_result = clone self::$successful_test_run_request;
|
||||
$test_result->test_profile->set_identifier(null);
|
||||
$test_result->set_used_arguments_description('Performance / Cost - ' . $test_result->get_arguments_description());
|
||||
$test_result->set_used_arguments('dollar comparison ' . $test_result->get_arguments());
|
||||
$test_result->test_profile->set_result_scale($test_result->test_profile->get_result_scale() . ' Per Dollar');
|
||||
$test_result->test_result_buffer = new pts_test_result_buffer();
|
||||
$test_result->test_result_buffer->add_test_result(self::$result_identifier, pts_math::set_precision($test_result->active->get_result() / self::$COST_PERF_PER_DOLLAR), null, array('install-footnote' => '$' . self::$COST_PERF_PER_DOLLAR . ' reported cost.'));
|
||||
$result_file->add_result($test_result);
|
||||
array_push(self::$perf_per_dollar_collection, $test_result->active->get_result());
|
||||
$result = 0;
|
||||
if(self::$successful_test_run_request->test_profile->get_result_proportion() == 'HIB')
|
||||
{
|
||||
$result = pts_math::set_precision(self::$successful_test_run_request->active->get_result() / self::$COST_PERF_PER_DOLLAR);
|
||||
}
|
||||
|
||||
if($result != 0)
|
||||
{
|
||||
// This copy isn't needed but it's shorter and from port from system_monitor where there can be multiple items tracked
|
||||
$test_result = clone self::$successful_test_run_request;
|
||||
$test_result->test_profile->set_identifier(null);
|
||||
$test_result->set_used_arguments_description('Performance / Cost - ' . $test_result->get_arguments_description());
|
||||
$test_result->set_used_arguments('dollar comparison ' . $test_result->get_arguments());
|
||||
$test_result->test_profile->set_result_scale($test_result->test_profile->get_result_scale() . ' Per Dollar');
|
||||
$test_result->test_result_buffer = new pts_test_result_buffer();
|
||||
$test_result->test_result_buffer->add_test_result(self::$result_identifier, $result, null, array('install-footnote' => '$' . self::$COST_PERF_PER_DOLLAR . ' reported cost.'));
|
||||
$result_file->add_result($test_result);
|
||||
self::$perf_per_dollar_collection[] = $test_result->active->get_result();
|
||||
}
|
||||
}
|
||||
self::$successful_test_run_request = null;
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2015, Phoronix Media
|
||||
Copyright (C) 2009 - 2015, Michael Larabel
|
||||
Copyright (C) 2009 - 2016, Phoronix Media
|
||||
Copyright (C) 2009 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -23,7 +23,7 @@
|
||||
class phoromatic extends pts_module_interface
|
||||
{
|
||||
const module_name = 'Phoromatic Client';
|
||||
const module_version = '1.0.0';
|
||||
const module_version = '1.1.0';
|
||||
const module_description = 'The Phoromatic client is used for connecting to a Phoromatic server (Phoromatic.com or a locally run server) to facilitate the automatic running of tests, generally across multiple test nodes in a routine manner. For more details visit http://www.phoromatic.com/. This module is intended to be used with Phoronix Test Suite 5.2+ clients and servers.';
|
||||
const module_author = 'Phoronix Media';
|
||||
|
||||
@@ -33,10 +33,14 @@ class phoromatic extends pts_module_interface
|
||||
private static $server_ws_port = null;
|
||||
private static $is_running_as_phoromatic_node = false;
|
||||
private static $log_file = null;
|
||||
private static $limit_network_communication = false;
|
||||
|
||||
private static $p_save_identifier = null;
|
||||
private static $p_schedule_id = null;
|
||||
private static $p_trigger_id = null;
|
||||
private static $benchmark_ticket_id = null;
|
||||
private static $in_stress_mode = false;
|
||||
private static $has_run_server_setup_func = false;
|
||||
|
||||
private static $test_run_manager = null;
|
||||
|
||||
@@ -238,6 +242,7 @@ class phoromatic extends pts_module_interface
|
||||
}
|
||||
}
|
||||
|
||||
// Randomize the thread work a little bit to ensure not hitting the systems at the same time
|
||||
sleep(rand(60, 90));
|
||||
}
|
||||
}
|
||||
@@ -286,7 +291,7 @@ class phoromatic extends pts_module_interface
|
||||
$to_post['s'] = phodevi::system_software(true);
|
||||
$to_post['n'] = phodevi::read_property('system', 'hostname');
|
||||
$to_post['msi'] = PTS_MACHINE_SELF_ID;
|
||||
return pts_network::http_upload_via_post('http://' . $server_address . ':' . $server_http_port . '/phoromatic.php', $to_post);
|
||||
return pts_network::http_upload_via_post('http://' . $server_address . ':' . $server_http_port . '/phoromatic.php', $to_post, false);
|
||||
}
|
||||
protected static function update_system_status($current_task, $estimated_time_remaining = 0, $percent_complete = 0, $for_schedule = null, $estimate_to_next_comm = 0)
|
||||
{
|
||||
@@ -297,12 +302,27 @@ class phoromatic extends pts_module_interface
|
||||
pts_client::$pts_logger && pts_client::$pts_logger->log($current_task);
|
||||
$last_msg = $current_task;
|
||||
|
||||
if(self::$limit_network_communication)
|
||||
{
|
||||
static $last_comm_time = 0;
|
||||
if(time() > ($last_comm_time + 800 + rand(0, 180)))
|
||||
{
|
||||
// It's been at least half hour since last update, so report in state...
|
||||
$last_comm_time = time();
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return phoromatic::upload_to_remote_server(array(
|
||||
'r' => 'update_system_status',
|
||||
'a' => $current_task,
|
||||
'time' => $estimated_time_remaining,
|
||||
'pc' => $percent_complete,
|
||||
'sched' => (!empty($for_schedule) ? $for_schedule : self::$p_schedule_id),
|
||||
'bid' => (!empty(self::$benchmark_ticket_id) ? self::$benchmark_ticket_id : 0),
|
||||
'o' => $estimate_to_next_comm
|
||||
));
|
||||
}
|
||||
@@ -314,6 +334,8 @@ class phoromatic extends pts_module_interface
|
||||
}
|
||||
protected static function setup_server_addressing($server_string = null)
|
||||
{
|
||||
self::$has_run_server_setup_func = true;
|
||||
|
||||
if(isset($server_string[0]) && strpos($server_string[0], '/', strpos($server_string[0], ':')) > 6)
|
||||
{
|
||||
pts_client::$pts_logger && pts_client::$pts_logger->log('Attempting to connect to Phoromatic Server: ' . $server_string[0]);
|
||||
@@ -447,7 +469,7 @@ class phoromatic extends pts_module_interface
|
||||
|
||||
if(!$server_setup)
|
||||
{
|
||||
if(PTS_IS_DAEMONIZED_SERVER_PROCESS)
|
||||
if(getenv('PTS_NO_REBOOT_ON_NETWORK_FAILURE') == false && PTS_IS_DAEMONIZED_SERVER_PROCESS)
|
||||
{
|
||||
if(pts_client::executable_in_path('reboot'))
|
||||
{
|
||||
@@ -490,7 +512,7 @@ class phoromatic extends pts_module_interface
|
||||
}
|
||||
else if(PTS_IS_DAEMONIZED_SERVER_PROCESS && $times_failed > 10)
|
||||
{
|
||||
if(pts_client::executable_in_path('reboot'))
|
||||
if(getenv('PTS_NO_REBOOT_ON_NETWORK_FAILURE') == false && pts_client::executable_in_path('reboot'))
|
||||
{
|
||||
shell_exec('reboot');
|
||||
sleep(5);
|
||||
@@ -526,9 +548,16 @@ class phoromatic extends pts_module_interface
|
||||
}
|
||||
}
|
||||
|
||||
self::$limit_network_communication = isset($json['phoromatic']['settings']['LimitNetworkCommunication']) && pts_strings::string_bool($json['phoromatic']['settings']['LimitNetworkCommunication']);
|
||||
if(self::$limit_network_communication)
|
||||
{
|
||||
// Sleep to ensure network communication is somewhat random in case all systems started at same time
|
||||
sleep(0, 20);
|
||||
}
|
||||
|
||||
if($just_started)
|
||||
{
|
||||
if(PTS_IS_DAEMONIZED_SERVER_PROCESS)
|
||||
if(PTS_IS_DAEMONIZED_SERVER_PROCESS && !self::$limit_network_communication)
|
||||
{
|
||||
$pid = pcntl_fork();
|
||||
if($pid == 0)
|
||||
@@ -559,7 +588,7 @@ class phoromatic extends pts_module_interface
|
||||
{
|
||||
case 'install':
|
||||
phoromatic::update_system_status('Installing Tests');
|
||||
pts_suite_nye_XmlReader::set_temporary_suite('pre-seed', $json['phoromatic']['test_suite']);
|
||||
pts_test_suite::set_temporary_suite('pre-seed', $json['phoromatic']['test_suite']);
|
||||
pts_test_installer::standard_install('pre-seed', false, true);
|
||||
break;
|
||||
case 'benchmark':
|
||||
@@ -570,13 +599,14 @@ class phoromatic extends pts_module_interface
|
||||
$benchmark_timer = time();
|
||||
self::$is_running_as_phoromatic_node = true;
|
||||
$suite_identifier = sha1(time() . rand(2, 1000));
|
||||
pts_suite_nye_XmlReader::set_temporary_suite($suite_identifier, $json['phoromatic']['test_suite']);
|
||||
pts_test_suite::set_temporary_suite($suite_identifier, $json['phoromatic']['test_suite']);
|
||||
self::$p_save_identifier = $json['phoromatic']['trigger_id'];
|
||||
$phoromatic_results_identifier = self::$p_save_identifier;
|
||||
$phoromatic_save_identifier = $json['phoromatic']['save_identifier'];
|
||||
self::$p_schedule_id = isset($json['phoromatic']['schedule_id']) ? $json['phoromatic']['schedule_id'] : false;
|
||||
self::$p_trigger_id = self::$p_save_identifier;
|
||||
$benchmark_ticket_id = isset($json['phoromatic']['benchmark_ticket_id']) ? $json['phoromatic']['benchmark_ticket_id'] : null;
|
||||
self::$benchmark_ticket_id = $benchmark_ticket_id;
|
||||
phoromatic::update_system_status('Running Benchmarks For: ' . $phoromatic_save_identifier);
|
||||
|
||||
if(pts_strings::string_bool($json['phoromatic']['settings']['RunInstallCommand']))
|
||||
@@ -593,15 +623,47 @@ class phoromatic extends pts_module_interface
|
||||
}
|
||||
}
|
||||
$env_vars = isset($json['phoromatic']['environment_variables']) ? pts_strings::parse_value_string_vars($json['phoromatic']['environment_variables']) : array();
|
||||
$is_stress_run = isset($env_vars['PTS_CONCURRENT_TEST_RUNS']) && $env_vars['PTS_CONCURRENT_TEST_RUNS'] > 1;
|
||||
|
||||
// Do the actual running
|
||||
phodevi::clear_cache();
|
||||
self::$test_run_manager = new pts_test_run_manager(array(
|
||||
|
||||
if($is_stress_run)
|
||||
{
|
||||
self::$test_run_manager = new pts_stress_run_manager(array(
|
||||
'UploadResults' => false,
|
||||
'SaveResults' => false,
|
||||
'PromptForTestDescription' => false,
|
||||
'RunAllTestCombinations' => false,
|
||||
'PromptSaveName' => false,
|
||||
'PromptForTestIdentifier' => false,
|
||||
'OpenBrowser' => false
|
||||
), true);
|
||||
|
||||
if(self::$test_run_manager->initial_checks($suite_identifier, 'SHORT'))
|
||||
{
|
||||
if(self::$test_run_manager->load_tests_to_run($suite_identifier))
|
||||
{
|
||||
self::$test_run_manager->action_on_stress_log_set(array('phoromatic', 'upload_stress_log_sane'));
|
||||
self::$in_stress_mode = $phoromatic_save_identifier;
|
||||
self::$test_run_manager->multi_test_stress_run_execute($env_vars['PTS_CONCURRENT_TEST_RUNS'], $env_vars['TOTAL_LOOP_TIME']);
|
||||
self::$in_stress_mode = false;
|
||||
self::upload_stress_log(self::$test_run_manager->get_stress_log());
|
||||
}
|
||||
}
|
||||
self::$benchmark_ticket_id = null;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
self::$test_run_manager = new pts_test_run_manager(array(
|
||||
'UploadResults' => (isset($json['phoromatic']['settings']['UploadResultsToOpenBenchmarking']) && pts_strings::string_bool($json['phoromatic']['settings']['UploadResultsToOpenBenchmarking'])),
|
||||
'SaveResults' => true,
|
||||
'RunAllTestCombinations' => false,
|
||||
'OpenBrowser' => false
|
||||
), true);
|
||||
}
|
||||
|
||||
if(self::$test_run_manager->initial_checks($suite_identifier, 'SHORT'))
|
||||
{
|
||||
// Load the tests to run
|
||||
@@ -622,25 +684,9 @@ class phoromatic extends pts_module_interface
|
||||
// Save results?
|
||||
|
||||
// Run the actual tests
|
||||
if(isset($env_vars['PTS_CONCURRENT_TEST_RUNS']) && $env_vars['PTS_CONCURRENT_TEST_RUNS'] > 1)
|
||||
{
|
||||
$total_loop_time = isset($env_vars['TOTAL_LOOP_TIME']) ? $env_vars['TOTAL_LOOP_TIME'] : false;
|
||||
pts_client::$pts_logger->log('STRESS / MULTI-TEST EXECUTION STARTED @ ' . date('Y-m-d H:i:s'));
|
||||
pts_client::$pts_logger->log('CONCURRENT RUNS = ' . $env_vars['PTS_CONCURRENT_TEST_RUNS'] . ' TOTAL LOOP TIME = ' . $total_loop_time);
|
||||
$r = self::$test_run_manager->multi_test_stress_run_execute($env_vars['PTS_CONCURRENT_TEST_RUNS'], $total_loop_time);
|
||||
if($r == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
pts_client::$pts_logger->log('STRESS / MULTI-TEST EXECUTION ENDED @ ' . date('Y-m-d H:i:s'));
|
||||
}
|
||||
else
|
||||
{
|
||||
self::$test_run_manager->auto_save_results($phoromatic_save_identifier, $phoromatic_results_identifier, (isset($json['phoromatic']['test_description']) ? $json['phoromatic']['test_description'] : 'A Phoromatic run.'));
|
||||
self::$test_run_manager->pre_execution_process();
|
||||
self::$test_run_manager->call_test_runs();
|
||||
}
|
||||
self::$test_run_manager->auto_save_results($phoromatic_save_identifier, $phoromatic_results_identifier, (isset($json['phoromatic']['test_description']) ? $json['phoromatic']['test_description'] : 'A Phoromatic run.'));
|
||||
self::$test_run_manager->pre_execution_process();
|
||||
self::$test_run_manager->call_test_runs();
|
||||
|
||||
phoromatic::update_system_status('Benchmarks Completed For: ' . $phoromatic_save_identifier);
|
||||
self::$test_run_manager->post_execution_process();
|
||||
@@ -657,13 +703,14 @@ class phoromatic extends pts_module_interface
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($json['phoromatic']['post_install_set_context']))
|
||||
if(isset($json['phoromatic']['post_run_set_context']))
|
||||
{
|
||||
phoromatic::set_user_context($json['phoromatic']['post_install_set_context'], self::$p_trigger_id, self::$p_schedule_id, 'POST_RUN');
|
||||
phoromatic::set_user_context($json['phoromatic']['post_run_set_context'], self::$p_trigger_id, self::$p_schedule_id, 'POST_RUN');
|
||||
}
|
||||
}
|
||||
self::$p_schedule_id = null;
|
||||
self::$is_running_as_phoromatic_node = false;
|
||||
self::$benchmark_ticket_id = null;
|
||||
break;
|
||||
case 'reboot':
|
||||
echo PHP_EOL . 'Phoromatic received a remote command to reboot.' . PHP_EOL;
|
||||
@@ -726,6 +773,8 @@ class phoromatic extends pts_module_interface
|
||||
{
|
||||
if($server_response == false)
|
||||
sleep(rand(10, 30));
|
||||
else if(self::$limit_network_communication)
|
||||
sleep(60, 240);
|
||||
else
|
||||
sleep(60);
|
||||
}
|
||||
@@ -833,6 +882,44 @@ class phoromatic extends pts_module_interface
|
||||
|
||||
return $res;
|
||||
}
|
||||
private static function upload_stress_log($stress_log)
|
||||
{
|
||||
// Upload Logs to Phoromatic
|
||||
if($stress_log == null || self::$benchmark_ticket_id == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$times_tried = 0;
|
||||
do
|
||||
{
|
||||
if($times_tried > 0)
|
||||
{
|
||||
sleep(rand(5, 20));
|
||||
}
|
||||
|
||||
$res = phoromatic::upload_to_remote_server(array(
|
||||
'r' => 'stress_log_upload',
|
||||
'bid' => self::$benchmark_ticket_id,
|
||||
'l' => $stress_log
|
||||
));
|
||||
|
||||
$times_tried++;
|
||||
}
|
||||
while($res == false && $times_tried < 4);
|
||||
|
||||
return $res;
|
||||
}
|
||||
public static function upload_stress_log_sane($stress_log)
|
||||
{
|
||||
static $last_log_upload = 0;
|
||||
|
||||
if(time() > ($last_log_upload + 60))
|
||||
{
|
||||
self::upload_stress_log($stress_log);
|
||||
$last_log_upload = time();
|
||||
}
|
||||
}
|
||||
public static function recent_phoromatic_server_results()
|
||||
{
|
||||
self::setup_server_addressing();
|
||||
@@ -958,6 +1045,13 @@ class phoromatic extends pts_module_interface
|
||||
}
|
||||
public static function __pre_test_install($test_identifier)
|
||||
{
|
||||
/* if(self::$has_run_server_setup_func == false)
|
||||
{
|
||||
self::setup_server_addressing();
|
||||
}
|
||||
*/
|
||||
// XXX finish wiring in the above code to various parts for making auto-reporting from clients
|
||||
|
||||
if(!self::$is_running_as_phoromatic_node)
|
||||
{
|
||||
return false;
|
||||
@@ -971,14 +1065,31 @@ class phoromatic extends pts_module_interface
|
||||
$last_update_time = time();
|
||||
}
|
||||
}
|
||||
public static function __pre_test_run(&$pts_test_result)
|
||||
public static function __pre_test_run($pts_test_result)
|
||||
{
|
||||
if(!self::$is_running_as_phoromatic_node)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
phoromatic::update_system_status('Running: ' . $pts_test_result->test_profile->get_identifier() . ($pts_test_result->get_arguments_description() != null ? ' [' . $pts_test_result->get_arguments_description() . ']' : null),
|
||||
if(self::$in_stress_mode)
|
||||
{
|
||||
static $time_in_stress_run = 0;
|
||||
|
||||
$msg = 'Stress-Run Testing';
|
||||
if(($time_in_stress_run + (60 * 60)) > time())
|
||||
{
|
||||
// Don't report this same string so often...
|
||||
return;
|
||||
}
|
||||
$time_in_stress_run = time();
|
||||
}
|
||||
else
|
||||
{
|
||||
$msg = 'Running: ' . $pts_test_result->test_profile->get_identifier() . ($pts_test_result->get_arguments_description() != null ? ' [' . $pts_test_result->get_arguments_description() . ']' : null);
|
||||
}
|
||||
|
||||
phoromatic::update_system_status($msg,
|
||||
ceil(self::$test_run_manager->get_estimated_run_time() / 60),
|
||||
self::$test_run_manager->get_percent_complete(),
|
||||
null,
|
||||
|
||||
84
pts-core/modules/report_test_run_times.php
Normal file
84
pts-core/modules/report_test_run_times.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2017, Phoronix Media
|
||||
Copyright (C) 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class report_test_run_times extends pts_module_interface
|
||||
{
|
||||
const module_name = 'Report Test Run Time Graphs';
|
||||
const module_version = '1.0.0';
|
||||
const module_description = 'Setting the RUN_TIMES_ARE_A_BENCHMARK=1 environment variable will automatically create additional graphs for each test run plotting the run-time needed for each test being executed.';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
private static $successful_test_run_request = null;
|
||||
private static $result_identifier;
|
||||
|
||||
public static function module_environmental_variables()
|
||||
{
|
||||
return array('RUN_TIMES_ARE_A_BENCHMARK');
|
||||
}
|
||||
public static function module_info()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public static function __run_manager_setup(&$test_run_manager)
|
||||
{
|
||||
if(getenv('RUN_TIMES_ARE_A_BENCHMARK') != false)
|
||||
{
|
||||
echo PHP_EOL . 'The Phoronix Test Suite will generate graphs of test run-times.' . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
return pts_module::MODULE_UNLOAD; // This module doesn't have anything else to do
|
||||
}
|
||||
|
||||
$test_run_manager->force_results_save();
|
||||
}
|
||||
public static function __pre_run_process(&$test_run_manager)
|
||||
{
|
||||
self::$result_identifier = $test_run_manager->get_results_identifier();
|
||||
}
|
||||
public static function __post_test_run($test_run_request)
|
||||
{
|
||||
self::$successful_test_run_request = clone $test_run_request;
|
||||
}
|
||||
public static function __post_test_run_process(&$result_file)
|
||||
{
|
||||
if(self::$successful_test_run_request && !empty(self::$successful_test_run_request->test_run_times))
|
||||
{
|
||||
$result = round(array_sum(self::$successful_test_run_request->test_run_times) / count(self::$successful_test_run_request->test_run_times), 2);
|
||||
if($result > 0)
|
||||
{
|
||||
// This copy isn't needed but it's shorter and from port from system_monitor where there can be multiple items tracked
|
||||
$test_result = clone self::$successful_test_run_request;
|
||||
$test_result->test_profile->set_identifier(null);
|
||||
$test_result->set_used_arguments_description('Test Run Time' . ($test_result->get_arguments_description() != null ? ' - ' . $test_result->get_arguments_description() : null ));
|
||||
$test_result->set_used_arguments('test run time ' . $test_result->get_arguments());
|
||||
$test_result->test_profile->set_result_scale('Seconds');
|
||||
$test_result->test_profile->set_result_proportion('LIB');
|
||||
$test_result->test_result_buffer = new pts_test_result_buffer();
|
||||
$test_result->test_result_buffer->add_test_result(self::$result_identifier, $result, implode(':', self::$successful_test_run_request->test_run_times));
|
||||
$result_file->add_result($test_result);
|
||||
}
|
||||
}
|
||||
self::$successful_test_run_request = null;
|
||||
}
|
||||
}
|
||||
?>
|
||||
98
pts-core/modules/results_custom_export.php
Normal file
98
pts-core/modules/results_custom_export.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2016, Phoronix Media
|
||||
Copyright (C) 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class results_custom_export extends pts_module_interface
|
||||
{
|
||||
const module_name = 'Custom Result Export Methods';
|
||||
const module_version = '1.0.0';
|
||||
const module_description = 'A simple example module about interfacing with Phoronix Test Suite core for dumping result files in a custom format.';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
public static function module_info()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public static function user_commands()
|
||||
{
|
||||
return array('nf' => 'nf_format');
|
||||
}
|
||||
public static function nf_format($r)
|
||||
{
|
||||
if(pts_types::is_result_file($r[0]))
|
||||
{
|
||||
$result_file = new pts_result_file($r[0]);
|
||||
$result_output = $result_file->get_title() . PHP_EOL;
|
||||
$system_identifiers = array();
|
||||
$system_hardware = array();
|
||||
$system_software = array();
|
||||
$test_times = array();
|
||||
foreach($result_file->get_systems() as $system)
|
||||
{
|
||||
$system_identifiers[] = $system->get_identifier();
|
||||
$system_hardware[] = $system->get_hardware();
|
||||
$system_software[] = $system->get_software();
|
||||
$test_times[$system->get_identifier()] = date('Y-m-d', strtotime($system->get_timestamp()));
|
||||
}
|
||||
|
||||
/*
|
||||
// Show the system identifiers?
|
||||
for($i = 0; $i < count($system_identifiers); $i++)
|
||||
{
|
||||
$result_output .= $system_identifiers[$i] . ': ' . PHP_EOL . PHP_EOL;
|
||||
$result_output .= "\t" . $system_hardware[$i] . PHP_EOL . PHP_EOL . "\t" . $system_software[$i] . PHP_EOL . PHP_EOL;
|
||||
}*/
|
||||
|
||||
$result_lines = array();
|
||||
|
||||
foreach($result_file->get_result_objects() as $result_object)
|
||||
{
|
||||
foreach($result_object->test_result_buffer->buffer_items as &$buffer)
|
||||
{
|
||||
// DUMP in DATE/HARDWARE_TYPE/TEST_TYPE/TEST/ARGUMENTS/IDENTIFIER format
|
||||
$l = array(
|
||||
$test_times[$buffer->get_result_identifier()],
|
||||
$result_object->test_profile->get_test_hardware_type(),
|
||||
$result_object->test_profile->get_test_software_type(),
|
||||
$result_object->test_profile->get_title() . ' ' . $result_object->test_profile->get_app_version(),
|
||||
$result_object->get_arguments_description(),
|
||||
$buffer->get_result_identifier()
|
||||
);
|
||||
$result_lines[implode('/', $l)] = $buffer->get_result_value();
|
||||
}
|
||||
}
|
||||
|
||||
ksort($result_lines);
|
||||
$longest_key = max(array_map('strlen', array_keys($result_lines))) + 1;
|
||||
foreach($result_lines as $key => $value)
|
||||
{
|
||||
$result_output .= sprintf('%-' . $longest_key . 'ls = %s', $key, $value) . PHP_EOL;
|
||||
}
|
||||
echo $result_output . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'Not a recognized result file: ' . $r . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
system_monitor.php: System sensor monitoring module for PTS
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -25,12 +25,13 @@
|
||||
class system_monitor extends pts_module_interface
|
||||
{
|
||||
const module_name = 'System Monitor';
|
||||
const module_version = '3.2.0';
|
||||
const module_version = '3.3.0';
|
||||
const module_description = 'This module contains sensor monitoring support.';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
private static $result_identifier = null;
|
||||
private static $to_monitor = array();
|
||||
private static $monitor_pids = array();
|
||||
private static $monitor_test_count = 0;
|
||||
|
||||
private static $individual_test_run_request = null;
|
||||
@@ -51,7 +52,7 @@ class system_monitor extends pts_module_interface
|
||||
|
||||
public static function module_environmental_variables()
|
||||
{
|
||||
return array('MONITOR', 'PERFORMANCE_PER_WATT', 'MONITOR_INTERVAL' );
|
||||
return array('MONITOR', 'PERFORMANCE_PER_WATT', 'MONITOR_INTERVAL', 'MONITOR_PER_RUN' );
|
||||
}
|
||||
|
||||
public static function module_info()
|
||||
@@ -99,7 +100,7 @@ class system_monitor extends pts_module_interface
|
||||
|
||||
self::pts_start_monitoring();
|
||||
}
|
||||
catch (Exception $e)
|
||||
catch(Exception $e)
|
||||
{
|
||||
echo PHP_EOL . "Unloading system monitor: " . $e->getMessage();
|
||||
return pts_module::MODULE_UNLOAD;
|
||||
@@ -114,14 +115,15 @@ class system_monitor extends pts_module_interface
|
||||
return;
|
||||
}
|
||||
|
||||
// We're going to run the test for the first time (but will probably repeat it several times).
|
||||
self::$test_run_try_number = 0;
|
||||
self::$individual_test_run_request = clone $test_run_request;
|
||||
|
||||
// Just to pad in some idling into the run process
|
||||
sleep(self::$sensor_monitoring_frequency);
|
||||
|
||||
self::save_log_offsets('pre-test');
|
||||
// We're going to run the test for the first time (but will probably repeat it several times).
|
||||
self::$test_run_try_number = 0;
|
||||
self::save_log_offsets('run');
|
||||
|
||||
self::$test_run_timer = time();
|
||||
}
|
||||
public static function __test_running($test_process)
|
||||
@@ -133,20 +135,26 @@ class system_monitor extends pts_module_interface
|
||||
$parent_pid = $proc_status['pid'];
|
||||
file_put_contents('/sys/fs/cgroup/' . $controller . '/' . self::$cgroup_name .'/tasks', $parent_pid);
|
||||
}
|
||||
|
||||
if(self::$per_test_try_monitoring)
|
||||
{
|
||||
self::save_log_offsets('try');
|
||||
}
|
||||
}
|
||||
public static function __interim_test_run()
|
||||
{
|
||||
if(self::$per_test_try_monitoring)
|
||||
{
|
||||
self::save_log_offsets('interim');
|
||||
self::$test_run_try_number++;
|
||||
self::save_log_offsets('try');
|
||||
}
|
||||
}
|
||||
public static function __post_test_run_success($test_run_request)
|
||||
{
|
||||
if(self::$per_test_try_monitoring)
|
||||
{
|
||||
self::save_log_offsets('interim');
|
||||
self::$test_run_try_number++;
|
||||
self::save_log_offsets('try');
|
||||
}
|
||||
|
||||
self::$successful_test_run_request = clone $test_run_request;
|
||||
@@ -192,6 +200,27 @@ class system_monitor extends pts_module_interface
|
||||
{
|
||||
self::process_summary_results($sensor, $test_run_manager);
|
||||
}
|
||||
|
||||
foreach(self::$monitor_pids as $pid)
|
||||
{
|
||||
if(function_exists('posix_kill'))
|
||||
{
|
||||
posix_kill($pid, SIGTERM);
|
||||
}
|
||||
else if(pts_client::executable_in_path('kill'))
|
||||
{
|
||||
shell_exec('kill ' . $pid . ' > /dev/null 2>&1');
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO XXX
|
||||
continue;
|
||||
}
|
||||
|
||||
pcntl_waitpid($pid, $status);
|
||||
}
|
||||
|
||||
self::$monitor_pids = array();
|
||||
}
|
||||
public static function __post_run_process()
|
||||
{
|
||||
@@ -211,6 +240,7 @@ class system_monitor extends pts_module_interface
|
||||
if($is_instant === false)
|
||||
{
|
||||
$pid = pts_module::pts_timed_function('pts_monitor_update', self::$sensor_monitoring_frequency, array(array($sensor)));
|
||||
self::$monitor_pids[] = $pid;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -220,7 +250,8 @@ class system_monitor extends pts_module_interface
|
||||
|
||||
if(!empty($instant_sensors))
|
||||
{
|
||||
pts_module::pts_timed_function('pts_monitor_update', self::$sensor_monitoring_frequency, array($instant_sensors));
|
||||
$pid = pts_module::pts_timed_function('pts_monitor_update', self::$sensor_monitoring_frequency, array($instant_sensors));
|
||||
self::$monitor_pids[] = $pid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,14 +259,14 @@ class system_monitor extends pts_module_interface
|
||||
public static function pts_monitor_update($sensor_list)
|
||||
{
|
||||
foreach($sensor_list as $sensor)
|
||||
{
|
||||
$sensor_value = phodevi::read_sensor($sensor);
|
||||
{
|
||||
$sensor_value = phodevi::read_sensor($sensor);
|
||||
|
||||
if($sensor_value != -1 && pts_module::is_file('logs/' . phodevi::sensor_object_identifier($sensor)))
|
||||
{
|
||||
pts_module::save_file('logs/' . phodevi::sensor_object_identifier($sensor), $sensor_value, true);
|
||||
}
|
||||
}
|
||||
if($sensor_value != -1 && pts_module::is_file('logs/' . phodevi::sensor_object_identifier($sensor)))
|
||||
{
|
||||
pts_module::save_file('logs/' . phodevi::sensor_object_identifier($sensor), $sensor_value, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function parse_monitor_log($log_file, $start_offset = 0, $end_offset = -1)
|
||||
@@ -260,7 +291,7 @@ class system_monitor extends pts_module_interface
|
||||
|
||||
if(!empty($line) && $line >= 0)
|
||||
{
|
||||
array_push($results, $line);
|
||||
$results[] = $line;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,17 +313,17 @@ class system_monitor extends pts_module_interface
|
||||
|
||||
if(!in_array('all.' . $sensor[0], $args))
|
||||
{
|
||||
array_push($args, 'all.' . $sensor[0]);
|
||||
$args[] = 'all.' . $sensor[0];
|
||||
}
|
||||
|
||||
array_push($args, phodevi::sensor_identifier($sensor));
|
||||
$args[] = phodevi::sensor_identifier($sensor);
|
||||
|
||||
if($supported_devices !== NULL)
|
||||
{
|
||||
array_push($args, 'all.' . phodevi::sensor_identifier($sensor));
|
||||
$args[] = 'all.' . phodevi::sensor_identifier($sensor);
|
||||
foreach($supported_devices as $device)
|
||||
{
|
||||
array_push($args, phodevi::sensor_identifier($sensor) . '.' . $device);
|
||||
$args[] = phodevi::sensor_identifier($sensor) . '.' . $device;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -343,7 +374,7 @@ class system_monitor extends pts_module_interface
|
||||
|
||||
if($parameter !== NULL)
|
||||
{
|
||||
array_push($to_monitor[$type][$name], $parameter);
|
||||
$to_monitor[$type][$name][] = $parameter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -397,10 +428,10 @@ class system_monitor extends pts_module_interface
|
||||
|
||||
if(count(self::$to_monitor) == 0)
|
||||
{
|
||||
throw new Exception('nothing to monitor');
|
||||
throw new Exception('No Supported Sensors Selected To Monitor');
|
||||
sleep(2);
|
||||
}
|
||||
}
|
||||
|
||||
private static function create_sensor_instances(&$sensor, &$sensor_parameters, $create_all)
|
||||
{
|
||||
if($create_all)
|
||||
@@ -448,7 +479,7 @@ class system_monitor extends pts_module_interface
|
||||
if($sensor[0] === 'cgroup')
|
||||
{
|
||||
$cgroup_controller = call_user_func(array($sensor[2], 'get_cgroup_controller'));
|
||||
array_push(self::$cgroup_enabled_controllers, $cgroup_controller );
|
||||
pts_arrays::unique_push(self::$cgroup_enabled_controllers, $cgroup_controller );
|
||||
self::cgroup_create(self::$cgroup_name, $cgroup_controller);
|
||||
$param = self::$cgroup_name;
|
||||
}
|
||||
@@ -456,7 +487,7 @@ class system_monitor extends pts_module_interface
|
||||
if(call_user_func(array($sensor[2], 'parameter_check'), $param) === true)
|
||||
{
|
||||
$sensor_object = new $sensor[2]($instance, $param);
|
||||
array_push(self::$to_monitor, $sensor_object);
|
||||
self::$to_monitor[] = $sensor_object;
|
||||
pts_module::save_file('logs/' . phodevi::sensor_object_identifier($sensor_object));
|
||||
}
|
||||
}
|
||||
@@ -505,8 +536,7 @@ class system_monitor extends pts_module_interface
|
||||
$current_user = exec('whoami');
|
||||
$mkdir_cmd = 'mkdir ' . $cgroup_path;
|
||||
$chmod_cmd = 'chown ' . $current_user . ' ' . $cgroup_path . '/tasks';
|
||||
$command = $sudo_cmd . '"' . $mkdir_cmd . ' && ' . $chmod_cmd . '"';
|
||||
var_dump($command);
|
||||
$command = $sudo_cmd . '"' . $mkdir_cmd . ' && ' . $chmod_cmd . '"';
|
||||
exec($command);
|
||||
}
|
||||
|
||||
@@ -539,13 +569,13 @@ class system_monitor extends pts_module_interface
|
||||
foreach(self::$to_monitor as &$sensor)
|
||||
{
|
||||
$log_f = pts_module::read_file('logs/' . phodevi::sensor_object_identifier($sensor));
|
||||
$offset = count(explode(PHP_EOL, $log_f));
|
||||
$offset = count(explode(PHP_EOL, $log_f)) - 1; // as log file ends with an empty line
|
||||
|
||||
if($type === 'interim')
|
||||
if($type === 'try')
|
||||
{
|
||||
self::$test_run_tries_offsets[self::$test_run_try_number][phodevi::sensor_object_identifier($sensor)] = $offset;
|
||||
self::$test_run_tries_offsets[phodevi::sensor_object_identifier($sensor)][self::$test_run_try_number] = $offset;
|
||||
}
|
||||
else if($type === 'pre-test')
|
||||
else if($type === 'run')
|
||||
{
|
||||
self::$individual_test_run_offsets[phodevi::sensor_object_identifier($sensor)] = $offset;
|
||||
}
|
||||
@@ -594,7 +624,7 @@ class system_monitor extends pts_module_interface
|
||||
$test_result->test_result_buffer->add_test_result(self::$result_identifier, pts_math::set_precision((1 / $test_result->active->get_result()) / $watt_average));
|
||||
$result_file->add_result($test_result);
|
||||
}
|
||||
array_push(self::$perf_per_watt_collection, $test_result->active->get_result());
|
||||
self::$perf_per_watt_collection[] = $test_result->active->get_result();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -635,7 +665,7 @@ class system_monitor extends pts_module_interface
|
||||
$sensor_results = self::parse_monitor_log('logs/' . phodevi::sensor_object_identifier($sensor),
|
||||
self::$individual_test_run_offsets[phodevi::sensor_object_identifier($sensor)]);
|
||||
|
||||
if(count($sensor_results) > 2)
|
||||
if(count($sensor_results) > 0)
|
||||
{
|
||||
$result_buffer->add_test_result(self::$result_identifier, implode(',', $sensor_results), implode(',', $sensor_results));
|
||||
}
|
||||
@@ -644,48 +674,60 @@ class system_monitor extends pts_module_interface
|
||||
self::write_test_run_results($result_buffer, $result_file, $sensor);
|
||||
|
||||
self::$individual_test_run_offsets[phodevi::sensor_object_identifier($sensor)] = array();
|
||||
self::$test_run_tries_offsets[phodevi::sensor_object_identifier($sensor)] = array();
|
||||
}
|
||||
private static function write_test_run_results(&$result_buffer, &$result_file, &$sensor)
|
||||
{
|
||||
//TODO result count checks should probably be done before cloning the test_result
|
||||
// TODO result count checks should probably be done before cloning the test_result
|
||||
// Copy the value each time as if you are directly writing the original data, each succeeding time in the loop the used arguments gets borked
|
||||
if(!is_object(self::$individual_test_run_request))
|
||||
return;
|
||||
|
||||
$test_result = clone self::$individual_test_run_request;
|
||||
|
||||
if (pts_module_manager::is_module_attached("matisk"))
|
||||
{
|
||||
// TODO find some better way than adding a number to distinguish the results between the MATISK runs
|
||||
$arguments_description = phodevi::sensor_object_name($sensor) . ' Monitor (test ' . count($result_file->get_systems()) . ')';
|
||||
$arguments_try_description = phodevi::sensor_object_name($sensor) . ' Per Test Try Monitor (test ' . count($result_file->get_systems()) . ')';
|
||||
}
|
||||
else
|
||||
{
|
||||
$arguments_description = phodevi::sensor_object_name($sensor) . ' Monitor';
|
||||
$arguments_try_description = phodevi::sensor_object_name($sensor) . ' Per Test Try Monitor';
|
||||
}
|
||||
|
||||
|
||||
$test_result->test_profile->set_identifier(null);
|
||||
$test_result->test_profile->set_result_proportion('LIB');
|
||||
$test_result->test_profile->set_display_format('LINE_GRAPH');
|
||||
$test_result->test_profile->set_result_scale(phodevi::read_sensor_object_unit($sensor));
|
||||
$test_result->set_used_arguments_description(phodevi::sensor_object_name($sensor) . ' Monitor');
|
||||
$test_result->set_used_arguments_description($arguments_description);
|
||||
$test_result->set_used_arguments(phodevi::sensor_object_name($sensor) . ' ' . $test_result->get_arguments());
|
||||
$test_result->test_result_buffer = $result_buffer;
|
||||
|
||||
if(self::$per_test_try_monitoring && $result_buffer->get_count() > 1)
|
||||
{
|
||||
$test_result->set_used_arguments_description(phodevi::sensor_object_name($sensor) . ' Per Test Try Monitor');
|
||||
$test_result->set_used_arguments_description($arguments_try_description);
|
||||
}
|
||||
|
||||
$result_file->add_result($test_result);
|
||||
}
|
||||
private static function prepare_per_try_results(&$sensor, &$result_buffer)
|
||||
{
|
||||
foreach(array_keys(self::$test_run_tries_offsets) as $try_number)
|
||||
$sensor_offsets = self::$test_run_tries_offsets[phodevi::sensor_object_identifier($sensor)];
|
||||
|
||||
for($try_number = 1; $try_number <= self::$test_run_try_number; $try_number++)
|
||||
{
|
||||
if($try_number === 0)
|
||||
{
|
||||
$start_offset = self::$individual_test_run_offsets[phodevi::sensor_object_identifier($sensor)];
|
||||
}
|
||||
else
|
||||
{
|
||||
$start_offset = self::$test_run_tries_offsets[$try_number - 1][phodevi::sensor_object_identifier($sensor)];
|
||||
}
|
||||
$end_offset = self::$test_run_tries_offsets[$try_number][phodevi::sensor_object_identifier($sensor)];
|
||||
$start_offset = $sensor_offsets[$try_number - 1];
|
||||
$end_offset = $sensor_offsets[$try_number];
|
||||
|
||||
$sensor_results = self::parse_monitor_log('logs/' . phodevi::sensor_object_identifier($sensor),
|
||||
$start_offset, $end_offset);
|
||||
|
||||
if(count($sensor_results) > 2)
|
||||
{
|
||||
$result_identifier = self::$result_identifier . " (try " . ($try_number + 1) . ")";
|
||||
$result_identifier = self::$result_identifier . " (try " . ($try_number) . ")";
|
||||
$result_value = implode(',', $sensor_results);
|
||||
$result_buffer->add_test_result($result_identifier, $result_value, $result_value);
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
timed_screenshot.php: A PTS module that takes a screenshot at a pre-defined interval.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -95,7 +95,7 @@ class timed_screenshot extends pts_module_interface
|
||||
|
||||
if(is_file($ss_file))
|
||||
{
|
||||
array_push(self::$screenshots, $ss_file);
|
||||
self::$screenshots[] = $ss_file;
|
||||
return $ss_file;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2014, Phoronix Media
|
||||
Copyright (C) 2008 - 2014, Michael Larabel
|
||||
Copyright (C) 2008 - 2016, Phoronix Media
|
||||
Copyright (C) 2008 - 2016, Michael Larabel
|
||||
update_checker.php: This module checks to see if the Phoronix Test Suite -- and its tests and suites -- are up to date.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -24,7 +24,7 @@
|
||||
class update_checker extends pts_module_interface
|
||||
{
|
||||
const module_name = 'Update Checker';
|
||||
const module_version = '0.2.0';
|
||||
const module_version = '0.3.0';
|
||||
const module_description = 'This module checks to see if the Phoronix Test Suite -- and its tests and suites -- are up to date.';
|
||||
const module_author = 'Phoronix Media';
|
||||
|
||||
@@ -34,14 +34,11 @@ class update_checker extends pts_module_interface
|
||||
if(IS_FIRST_RUN_TODAY && pts_network::internet_support_available())
|
||||
{
|
||||
// Check For pts-core updates
|
||||
$latest_reported_version = pts_network::http_get_contents('http://www.phoronix-test-suite.com/LATEST');
|
||||
$current_e = explode('.', PTS_VERSION);
|
||||
$latest_e = explode('.', $latest_reported_version);
|
||||
|
||||
if($latest_reported_version != PTS_VERSION && $latest_e[0] >= $current_e[0] && ($latest_e[1] > $current_e[1] || ($latest_e[1] == $current_e[1] && $latest_e[2] >= $current_e[2])))
|
||||
$latest_reported_version = pts_network::http_get_contents('http://www.phoronix-test-suite.com/LATEST_CORE');
|
||||
if(is_numeric($latest_reported_version) && $latest_reported_version > PTS_CORE_VERSION)
|
||||
{
|
||||
// New version of PTS is available
|
||||
pts_client::$display->generic_heading('An outdated version of the Phoronix Test Suite is installed.' . PHP_EOL . 'The version in use is v' . PTS_VERSION . ', but the latest is v' . $latest_reported_version . '.' . PHP_EOL . 'Visit http://www.phoronix-test-suite.com/ to update this software.');
|
||||
pts_client::$display->generic_heading(strtoupper('An outdated version of the Phoronix Test Suite is installed.' . PHP_EOL . 'The version in use is ' . PTS_VERSION . ' (' . PTS_CORE_VERSION . '), but the latest is pts-core ' . $latest_reported_version . '.' . PHP_EOL . 'Visit http://www.phoronix-test-suite.com/ to update this software.'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
154
pts-core/modules/watchdog.php
Normal file
154
pts-core/modules/watchdog.php
Normal file
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2016, Phoronix Media
|
||||
Copyright (C) 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class watchdog extends pts_module_interface
|
||||
{
|
||||
const module_name = 'System Event Watchdog';
|
||||
const module_version = '1.0.0';
|
||||
const module_description = 'This module has support for stopping/interrupting tests if various system issues occur, like a temperature sensor exceeds a defined threshold.';
|
||||
const module_author = 'Michael Larabel';
|
||||
|
||||
private static $to_monitor = null;
|
||||
private static $monitor_threshold = 0;
|
||||
|
||||
public static function module_environmental_variables()
|
||||
{
|
||||
return array('WATCHDOG_SENSOR', 'WATCHDOG_SENSOR_THRESHOLD');
|
||||
}
|
||||
|
||||
public static function __startup()
|
||||
{
|
||||
$sensor_list = pts_strings::comma_explode(pts_module::read_variable('WATCHDOG_SENSOR'));
|
||||
$to_monitor = array();
|
||||
// A LOT OF THIS CODE IN THIS FUNCTION PORTED OVER FROM system_monitor MODULE
|
||||
foreach($sensor_list as $sensor)
|
||||
{
|
||||
$sensor_split = pts_strings::trim_explode('.', $sensor);
|
||||
$type = &$sensor_split[0];
|
||||
$name = &$sensor_split[1];
|
||||
$parameter = &$sensor_split[2];
|
||||
|
||||
if(empty($to_monitor[$type][$name]))
|
||||
{
|
||||
$to_monitor[$type][$name] = array();
|
||||
}
|
||||
|
||||
if($parameter !== NULL)
|
||||
{
|
||||
$to_monitor[$type][$name][] = $parameter;
|
||||
}
|
||||
}
|
||||
foreach(phodevi::supported_sensors() as $sensor)
|
||||
{
|
||||
if(array_key_exists($sensor[0], $to_monitor) && array_key_exists($sensor[1], $to_monitor[$sensor[0]]))
|
||||
{
|
||||
$supported_devices = call_user_func(array($sensor[2], 'get_supported_devices'));
|
||||
$instance_no = 0;
|
||||
|
||||
if($supported_devices === NULL)
|
||||
{
|
||||
self::create_single_sensor_instance($sensor, 0, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($supported_devices as $device)
|
||||
{
|
||||
self::create_single_sensor_instance($sensor, $instance_no++, $device);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// END OF PORTED CODE FROM system_monitor
|
||||
|
||||
if(empty(self::$to_monitor))
|
||||
{
|
||||
echo PHP_EOL . 'UNLOADING WATCHDOG AS NO SENSORS TO MONITOR' . PHP_EOL;
|
||||
return pts_module::MODULE_UNLOAD;
|
||||
}
|
||||
|
||||
$watchdog_threshold = getenv('WATCHDOG_SENSOR_THRESHOLD');
|
||||
if(!is_numeric($watchdog_threshold) || $watchdog_threshold < 2)
|
||||
{
|
||||
echo PHP_EOL . 'UNLOADING WATCHDOG AS NO USEFUL DATA SET FOR WATCHDOG_SENSOR_THRESHOLD ENVIRONMENT VARIABLE' . PHP_EOL;
|
||||
return pts_module::MODULE_UNLOAD;
|
||||
}
|
||||
self::$monitor_threshold = $watchdog_threshold;
|
||||
|
||||
echo PHP_EOL . 'WATCHDOG ACTIVATED - TESTS WILL ABORT IF ANY SENSOR CROSSES: ' . self::$monitor_threshold . PHP_EOL;
|
||||
echo 'WATCHDOG MONITORING: ' . PHP_EOL;
|
||||
$monitors = array();
|
||||
foreach(self::$to_monitor as $sensor)
|
||||
{
|
||||
$monitors[] = array(strtoupper(phodevi::sensor_object_name($sensor)), phodevi::read_sensor($sensor), strtoupper(phodevi::read_sensor_object_unit($sensor)));
|
||||
}
|
||||
echo pts_user_io::display_text_table($monitors, ' ', 1) . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
|
||||
public static function __pre_run_process()
|
||||
{
|
||||
self::check_watchdog();
|
||||
}
|
||||
public static function __pre_test_run()
|
||||
{
|
||||
self::check_watchdog();
|
||||
}
|
||||
public static function __interim_test_run()
|
||||
{
|
||||
self::check_watchdog();
|
||||
}
|
||||
protected static function check_watchdog()
|
||||
{
|
||||
foreach(self::$to_monitor as $sensor)
|
||||
{
|
||||
$val = phodevi::read_sensor($sensor);
|
||||
if($val > self::$monitor_threshold)
|
||||
{
|
||||
echo PHP_EOL . PHP_EOL . 'WATCHDOG: ' . strtoupper(phodevi::sensor_object_name($sensor)) . ' EXCEEDED THRESHOLD: ' . $val . ' ' . strtoupper(phodevi::read_sensor_object_unit($sensor)) . PHP_EOL;
|
||||
|
||||
$minutes_to_wait = 3;
|
||||
$freq_to_poll = 5;
|
||||
echo 'SUSPENDING TESTING; WILL WAIT UP TO ' . $minutes_to_wait . ' MINUTES TO SEE IF VALUE LOWERED. ' . PHP_EOL . PHP_EOL;
|
||||
for($i = 0; $i < ($minutes_to_wait * 60); $i += $freq_to_poll)
|
||||
{
|
||||
sleep($freq_to_poll);
|
||||
if(phodevi::read_sensor($sensor) < self::$monitor_threshold)
|
||||
{
|
||||
echo PHP_EOL . 'WATCHDOG RESTORING PROCESS: ' . strtoupper(phodevi::sensor_object_name($sensor)) . ': ' . phodevi::read_sensor($sensor) . ' ' . strtoupper(phodevi::read_sensor_object_unit($sensor)) . PHP_EOL;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
echo 'WATCHDOG: EXITING PROGRAM' . PHP_EOL;
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
private static function create_single_sensor_instance($sensor, $instance, $param)
|
||||
{
|
||||
if(call_user_func(array($sensor[2], 'parameter_check'), $param) === true)
|
||||
{
|
||||
$sensor_object = new $sensor[2]($instance, $param);
|
||||
self::$to_monitor[] = $sensor_object;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -18,7 +18,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
* Author: Olivier PLATHEY *
|
||||
*******************************************************************************/
|
||||
|
||||
// Modifications by Michael Larabel 2015 for PTS adaptation of FPDF
|
||||
// Modifications by Michael Larabel 2015-2016 for PTS adaptation of FPDF
|
||||
|
||||
define('FPDF_VERSION','1.7');
|
||||
|
||||
@@ -86,8 +86,7 @@ var $PDFVersion; // PDF version number
|
||||
* Public methods *
|
||||
* *
|
||||
*******************************************************************************/
|
||||
function FPDF($orientation='P', $unit='mm', $size='A4')
|
||||
{
|
||||
public function __construct($orientation='P',$unit='mm',$size='A4') {
|
||||
// Some checks
|
||||
$this->_dochecks();
|
||||
// Initialization of properties
|
||||
@@ -945,6 +944,55 @@ function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='')
|
||||
if($link)
|
||||
$this->Link($x,$y,$w,$h,$link);
|
||||
}
|
||||
function ImageJPGInline($contents, $x=null, $y=null, $w=0, $h=0, $type='', $link='')
|
||||
{
|
||||
// Put an image on the page
|
||||
$file = md5($contents);
|
||||
if(!isset($this->images[$file]))
|
||||
{
|
||||
$info = $this->_parsejpginline($contents);
|
||||
$info['i'] = count($this->images)+1;
|
||||
$this->images[$file] = $info;
|
||||
}
|
||||
else
|
||||
$info = $this->images[$file];
|
||||
|
||||
// Automatic width and height calculation if needed
|
||||
if($w==0 && $h==0)
|
||||
{
|
||||
// Put image at 96 dpi
|
||||
$w = -96;
|
||||
$h = -96;
|
||||
}
|
||||
if($w<0)
|
||||
$w = -$info['w']*72/$w/$this->k;
|
||||
if($h<0)
|
||||
$h = -$info['h']*72/$h/$this->k;
|
||||
if($w==0)
|
||||
$w = $h*$info['w']/$info['h'];
|
||||
if($h==0)
|
||||
$h = $w*$info['h']/$info['w'];
|
||||
|
||||
// Flowing mode
|
||||
if($y===null)
|
||||
{
|
||||
if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
|
||||
{
|
||||
// Automatic page break
|
||||
$x2 = $this->x;
|
||||
$this->AddPage($this->CurOrientation,$this->CurPageSize);
|
||||
$this->x = $x2;
|
||||
}
|
||||
$y = $this->y;
|
||||
$this->y += $h;
|
||||
}
|
||||
|
||||
if($x===null)
|
||||
$x = $this->x;
|
||||
$this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i']));
|
||||
if($link)
|
||||
$this->Link($x,$y,$w,$h,$link);
|
||||
}
|
||||
|
||||
function GetX()
|
||||
{
|
||||
@@ -1309,6 +1357,23 @@ function _parsejpg($file)
|
||||
$data = file_get_contents($file);
|
||||
return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data);
|
||||
}
|
||||
function _parsejpginline($data)
|
||||
{
|
||||
// Extract info from a JPEG file
|
||||
$a = getimagesizefromstring($data);
|
||||
if(!$a)
|
||||
$this->Error('Missing or incorrect image file: ');
|
||||
if($a[2]!=2)
|
||||
$this->Error('Not a JPEG file: ');
|
||||
if(!isset($a['channels']) || $a['channels']==3)
|
||||
$colspace = 'DeviceRGB';
|
||||
elseif($a['channels']==4)
|
||||
$colspace = 'DeviceCMYK';
|
||||
else
|
||||
$colspace = 'DeviceGray';
|
||||
$bpc = isset($a['bits']) ? $a['bits'] : 8;
|
||||
return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=> $data);
|
||||
}
|
||||
|
||||
function _parsepng($file)
|
||||
{
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2015, Phoronix Media
|
||||
Copyright (C) 2009 - 2015, Michael Larabel
|
||||
Copyright (C) 2009 - 2017, Phoronix Media
|
||||
Copyright (C) 2009 - 2017, Michael Larabel
|
||||
pts_concise_display_mode.php: The batch / concise display mode
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -128,7 +128,7 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
public function test_install_start($identifier)
|
||||
{
|
||||
$this->test_install_pos++;
|
||||
echo $this->tab . $identifier . ':' . PHP_EOL;
|
||||
echo $this->tab . pts_client::cli_colored_text($identifier, 'cyan', true) . ':' . PHP_EOL;
|
||||
echo $this->tab . $this->tab . 'Test Installation ' . $this->test_install_pos . ' of ' . $this->test_install_count . PHP_EOL;
|
||||
}
|
||||
public function test_install_downloads($test_install_request)
|
||||
@@ -220,7 +220,7 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
|
||||
$terminal_width = pts_client::terminal_width() > 1 ? pts_client::terminal_width() : $terminal_width;
|
||||
$text_width = $terminal_width - (strlen($this->tab) * 3);
|
||||
echo PHP_EOL . $this->tab . $this->tab . wordwrap('[NOTICE] ' . $message, $text_width, PHP_EOL . $this->tab . $this->tab) . PHP_EOL;
|
||||
echo PHP_EOL . $this->tab . $this->tab . pts_client::cli_colored_text(wordwrap('[NOTICE] ' . $message, $text_width, PHP_EOL . $this->tab . $this->tab), 'gray', true) . PHP_EOL;
|
||||
}
|
||||
public function test_install_progress_start($process)
|
||||
{
|
||||
@@ -275,7 +275,7 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
}
|
||||
public function test_install_error($error_string)
|
||||
{
|
||||
echo $this->tab . $this->tab . $this->tab . $error_string . PHP_EOL;
|
||||
echo $this->tab . $this->tab . $this->tab . pts_client::cli_colored_text($error_string, 'red', true) . PHP_EOL;
|
||||
}
|
||||
public function test_install_prompt($prompt_string)
|
||||
{
|
||||
@@ -294,14 +294,14 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
}
|
||||
public function test_run_start(&$test_run_manager, &$test_result)
|
||||
{
|
||||
echo PHP_EOL . PHP_EOL . $test_result->test_profile->get_title() . ($test_result->test_profile->get_app_version() != null ? ' ' . $test_result->test_profile->get_app_version() : null) . ':' . PHP_EOL . $this->tab . $test_result->test_profile->get_identifier();
|
||||
$test_title_string = $test_result->test_profile->get_title() . ($test_result->test_profile->get_app_version() != null ? ' ' . $test_result->test_profile->get_app_version() : null) . ':' . PHP_EOL . $this->tab . $test_result->test_profile->get_identifier();
|
||||
|
||||
if(($test_description = $test_result->get_arguments_description()) != false)
|
||||
{
|
||||
echo ' [' . pts_client::swap_variables($test_description, array('pts_client', 'environmental_variables')) . ']';
|
||||
$test_title_string .= ' [' . pts_client::swap_variables($test_description, array('pts_client', 'environmental_variables')) . ']';
|
||||
}
|
||||
|
||||
echo PHP_EOL;
|
||||
echo PHP_EOL . PHP_EOL . pts_client::cli_colored_text($test_title_string, 'cyan', true) . PHP_EOL;
|
||||
echo $this->tab . 'Test ' . $test_run_manager->get_test_run_position() . ' of ' . $test_run_manager->get_test_run_count_reported() . PHP_EOL;
|
||||
|
||||
$this->trial_run_count_current = 0;
|
||||
@@ -324,11 +324,11 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
if((time() % 86400) + $remaining_length > 86400)
|
||||
{
|
||||
// If test run is past current calendar date
|
||||
$est_end_time = date(' (H:i T M j)', time() + $remaining_length);
|
||||
$est_end_time = date(' [H:i T M j]', time() + $remaining_length);
|
||||
}
|
||||
else
|
||||
{
|
||||
$est_end_time = date(' (H:i T)', time() + $remaining_length);
|
||||
$est_end_time = date(' [H:i T]', time() + $remaining_length);
|
||||
}
|
||||
|
||||
array_push($display_table, array($this->tab . 'Estimated Time To Completion:', pts_strings::format_time($remaining_length, 'SECONDS', true, 60) . $est_end_time));
|
||||
@@ -344,10 +344,16 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
{
|
||||
$this->trial_run_count_current++;
|
||||
echo PHP_EOL . $this->tab . $this->tab . 'Started Run ' . $this->trial_run_count_current . ' @ ' . date('H:i:s');
|
||||
|
||||
if($this->expected_trial_run_count > 1 && $this->trial_run_count_current > $this->expected_trial_run_count)
|
||||
{
|
||||
// add a mark since the results are in overtime, deviation likely too high and run count increased
|
||||
echo ' *';
|
||||
}
|
||||
}
|
||||
public function test_run_instance_error($error_string)
|
||||
{
|
||||
echo PHP_EOL . $this->tab . $this->tab . $error_string;
|
||||
echo PHP_EOL . $this->tab . $this->tab . pts_client::cli_colored_text($error_string, 'red', true);
|
||||
}
|
||||
public function test_run_instance_output(&$to_output)
|
||||
{
|
||||
@@ -360,15 +366,7 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
}
|
||||
public function test_run_instance_complete(&$result)
|
||||
{
|
||||
if($this->expected_trial_run_count > 1 && $this->trial_run_count_current >= $this->expected_trial_run_count)
|
||||
{
|
||||
$values = $result->active->results;
|
||||
|
||||
if(count($values) > 1)
|
||||
{
|
||||
echo ($this->trial_run_count_current < 10 ? ' ' : null) . ' [Std. Dev: ' . pts_math::set_precision(pts_math::percent_standard_deviation($values), 2) . '%]';
|
||||
}
|
||||
}
|
||||
return; // if anything to append to string of "Started Run"
|
||||
}
|
||||
public function test_run_end(&$test_result)
|
||||
{
|
||||
@@ -394,28 +392,64 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
else if(in_array($test_result->test_profile->get_display_format(), array('FILLED_LINE_GRAPH', 'LINE_GRAPH')))
|
||||
{
|
||||
$values = explode(',', $test_result->active->get_result());
|
||||
$end_print = null;
|
||||
$end_print = PHP_EOL . $this->tab . ($test_result->get_arguments_description() ? $test_result->get_arguments_description() : 'Test Results') . ':' . PHP_EOL;
|
||||
|
||||
if($test_result->test_profile->get_result_proportion() == 'LIB')
|
||||
{
|
||||
$minimum_color = 'green';
|
||||
$maximum_color = 'red';
|
||||
}
|
||||
else if($test_result->test_profile->get_result_proportion() == 'HIB')
|
||||
{
|
||||
$minimum_color = 'red';
|
||||
$maximum_color = 'green';
|
||||
}
|
||||
|
||||
if(count($values) > 1)
|
||||
{
|
||||
$avg = pts_math::set_precision(array_sum($values) / count($values), 2);
|
||||
$min = pts_math::set_precision(min($values), 2);
|
||||
$max = pts_math::set_precision(max($values), 2);
|
||||
$end_print .= $this->tab . $this->tab . 'Average: ' . $avg . ' (' . $test_result->test_profile->get_result_scale() . ')' . PHP_EOL;
|
||||
$end_print .= $this->tab . $this->tab . 'Minimum: ' . $min . ' (' . $test_result->test_profile->get_result_scale() . ')' . PHP_EOL;
|
||||
$end_print .= $this->tab . $this->tab . 'Maximum: ' . $max . ' (' . $test_result->test_profile->get_result_scale() . ')' . PHP_EOL;
|
||||
$end_print .= $this->tab . 'Average: ' . pts_client::cli_colored_text($avg, 'blue', true) . ' ' . $test_result->test_profile->get_result_scale() . PHP_EOL;
|
||||
$end_print .= $this->tab . 'Minimum: ' . pts_client::cli_colored_text($min, $minimum_color, true) . ' ' . $test_result->test_profile->get_result_scale() . PHP_EOL;
|
||||
$end_print .= $this->tab . 'Maximum: ' . pts_client::cli_colored_text($max, $maximum_color, true) . ' ' . $test_result->test_profile->get_result_scale() . PHP_EOL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$end_print = PHP_EOL . $this->tab . 'Test Results:' . PHP_EOL;
|
||||
|
||||
$end_print = PHP_EOL . $this->tab . ($test_result->get_arguments_description() ? $test_result->get_arguments_description() : 'Test Results') . ':' . PHP_EOL;
|
||||
$result_count = 0;
|
||||
if($test_result->test_profile->get_result_proportion() == 'LIB')
|
||||
{
|
||||
$best_result = $test_result->active->get_min_value();
|
||||
$worst_result = $test_result->active->get_max_value();
|
||||
}
|
||||
else if($test_result->test_profile->get_result_proportion() == 'HIB')
|
||||
{
|
||||
$best_result = $test_result->active->get_max_value();
|
||||
$worst_result = $test_result->active->get_min_value();
|
||||
}
|
||||
foreach($test_result->active->results as $result)
|
||||
{
|
||||
$end_print .= $this->tab . $this->tab . $result . PHP_EOL;
|
||||
$text_color = null;
|
||||
|
||||
if(count($test_result->active->results) > 1)
|
||||
{
|
||||
if($result == $best_result)
|
||||
{
|
||||
$text_color = 'green';
|
||||
}
|
||||
else if($result == $worst_result)
|
||||
{
|
||||
$text_color = 'red';
|
||||
}
|
||||
}
|
||||
|
||||
$end_print .= $this->tab . $this->tab . pts_client::cli_colored_text($result, $text_color, true) . PHP_EOL;
|
||||
$result_count++;
|
||||
}
|
||||
|
||||
$end_print .= PHP_EOL . $this->tab . pts_strings::result_quantifier_to_string($test_result->test_profile->get_result_quantifier()) . ': ' . $test_result->active->get_result() . ' ' . $test_result->test_profile->get_result_scale();
|
||||
$end_print .= PHP_EOL . $this->tab . pts_strings::result_quantifier_to_string($test_result->test_profile->get_result_quantifier()) . ': ' . pts_client::cli_colored_text($test_result->active->get_result() . ' ' . $test_result->test_profile->get_result_scale(), 'blue', true);
|
||||
|
||||
if($test_result->active->get_min_result())
|
||||
{
|
||||
@@ -425,6 +459,10 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
{
|
||||
$end_print .= PHP_EOL . $this->tab . 'Maximum: ' . $test_result->active->get_max_result();
|
||||
}
|
||||
if($result_count > 2)
|
||||
{
|
||||
$end_print .= PHP_EOL . $this->tab . 'Deviation: ' . pts_math::set_precision(pts_math::percent_standard_deviation($test_result->active->results), 2) . '%';
|
||||
}
|
||||
|
||||
if($test_result->active->get_result() == 0)
|
||||
{
|
||||
@@ -438,7 +476,7 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
}
|
||||
public function test_run_error($error_string)
|
||||
{
|
||||
echo $this->tab . $this->tab . $error_string . PHP_EOL;
|
||||
echo $this->tab . $this->tab . pts_client::cli_colored_text($error_string, 'red', true) . PHP_EOL;
|
||||
}
|
||||
public function generic_prompt($prompt_string)
|
||||
{
|
||||
@@ -460,7 +498,7 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
foreach(pts_strings::trim_explode(PHP_EOL, $string) as $line_count => $line_string)
|
||||
{
|
||||
// ($line_count > 0 ? $this->tab : null) .
|
||||
echo $line_string . PHP_EOL;
|
||||
echo pts_client::cli_colored_text($line_string, 'green', true) . PHP_EOL;
|
||||
}
|
||||
|
||||
if($ending_line_break)
|
||||
@@ -484,30 +522,30 @@ class pts_concise_display_mode implements pts_display_mode_interface
|
||||
}
|
||||
public function triggered_system_error($level, $message, $file, $line)
|
||||
{
|
||||
echo PHP_EOL . '[' . $level . '] ';
|
||||
$error_msg = PHP_EOL . '[' . $level . '] ';
|
||||
if(strpos($message, PHP_EOL) === false)
|
||||
{
|
||||
echo $message . ' ';
|
||||
$error_msg .= $message . ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(pts_strings::trim_explode(PHP_EOL, $message) as $line_count => $line_string)
|
||||
{
|
||||
// ($line_count > 0 ? $this->tab : null)
|
||||
echo $line_string . PHP_EOL . str_repeat(' ', strlen($level) + 3);
|
||||
$error_msg .= $line_string . PHP_EOL . str_repeat(' ', strlen($level) + 3);
|
||||
}
|
||||
}
|
||||
|
||||
if($file != null)
|
||||
{
|
||||
echo 'in ' . basename($file, '.php');
|
||||
$error_msg .= 'in ' . basename($file, '.php');
|
||||
}
|
||||
if($line != 0)
|
||||
{
|
||||
echo ':' . $line;
|
||||
$error_msg .= ':' . $line;
|
||||
}
|
||||
|
||||
echo PHP_EOL;
|
||||
echo pts_client::cli_colored_text($error_msg, 'red', true) . PHP_EOL;
|
||||
}
|
||||
public function get_tab()
|
||||
{
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2015, Phoronix Media
|
||||
Copyright (C) 2015, Michael Larabel
|
||||
Copyright (C) 2015 - 2016, Phoronix Media
|
||||
Copyright (C) 2015 - 2016, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -41,22 +41,18 @@ class pts_short_display_mode extends pts_concise_display_mode
|
||||
protected function print_test_identifier_prefix($test)
|
||||
{
|
||||
$ti = $test->test_profile->get_identifier();
|
||||
return $ti . str_repeat(' ', ($this->longest_test_identifier_length - strlen($ti))) . ': ';
|
||||
return pts_client::cli_just_bold($ti) . str_repeat(' ', ($this->longest_test_identifier_length - strlen($ti))) . ': ';
|
||||
}
|
||||
public function test_run_start(&$test_run_manager, &$test_result)
|
||||
{
|
||||
echo $this->print_test_identifier_prefix($test_result);
|
||||
|
||||
$after_print = pts_client::cli_colored_text('Test Started', 'green', true);
|
||||
if(($test_description = $test_result->get_arguments_description()) != false)
|
||||
{
|
||||
echo pts_client::swap_variables($test_description, array('pts_client', 'environmental_variables'));
|
||||
$after_print .= ' - ' . pts_client::swap_variables($test_description, array('pts_client', 'environmental_variables'));
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'Test Starting';
|
||||
}
|
||||
|
||||
echo PHP_EOL;
|
||||
echo $after_print .= PHP_EOL;
|
||||
|
||||
$this->trial_run_count_current = 0;
|
||||
$this->expected_trial_run_count = $test_result->test_profile->get_times_to_run();
|
||||
@@ -80,7 +76,7 @@ class pts_short_display_mode extends pts_concise_display_mode
|
||||
public function test_run_instance_header(&$test_result)
|
||||
{
|
||||
$this->trial_run_count_current++;
|
||||
echo $this->print_test_identifier_prefix($test_result) . 'Started Run ' . $this->trial_run_count_current . ' @ ' . date('H:i:s') . PHP_EOL;
|
||||
//echo $this->print_test_identifier_prefix($test_result) . 'Started Run ' . $this->trial_run_count_current . ' @ ' . date('H:i:s') . PHP_EOL;
|
||||
}
|
||||
public function test_run_instance_complete(&$test_result)
|
||||
{
|
||||
@@ -113,10 +109,11 @@ class pts_short_display_mode extends pts_concise_display_mode
|
||||
}
|
||||
else
|
||||
{
|
||||
$end_print = pts_strings::result_quantifier_to_string($test_result->test_profile->get_result_quantifier()) . ': ' . $test_result->active->get_result() . ' ' . $test_result->test_profile->get_result_scale();
|
||||
$end_print = pts_client::cli_just_bold(pts_strings::result_quantifier_to_string($test_result->test_profile->get_result_quantifier()) . ': ') . $test_result->active->get_result() . ' ' . $test_result->test_profile->get_result_scale();
|
||||
}
|
||||
|
||||
echo $this->print_test_identifier_prefix($test_result) . $end_print;
|
||||
echo $this->print_test_identifier_prefix($test_result) . $end_print . PHP_EOL;
|
||||
echo $this->print_test_identifier_prefix($test_result) . pts_client::cli_colored_text('Test Ended', 'red', true) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2009 - 2012, Phoronix Media
|
||||
Copyright (C) 2009 - 2012, Michael Larabel
|
||||
Copyright (C) 2009 - 2017, Phoronix Media
|
||||
Copyright (C) 2009 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -52,7 +52,7 @@ class pts_argument_check
|
||||
}
|
||||
else if($this->get_function_check() == array('pts_types', 'identifier_to_object'))
|
||||
{
|
||||
$type = 'Test | Suite | OpenBenchmarking.org ID | Test Result';
|
||||
$type = 'Test | Suite | OpenBenchmarking ID | Test Result';
|
||||
}
|
||||
else if($this->get_function_check() == array('pts_types', 'is_test_or_suite'))
|
||||
{
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
/*
|
||||
Phoronix Test Suite
|
||||
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
|
||||
Copyright (C) 2008 - 2015, Phoronix Media
|
||||
Copyright (C) 2008 - 2015, Michael Larabel
|
||||
Copyright (C) 2008 - 2017, Phoronix Media
|
||||
Copyright (C) 2008 - 2017, Michael Larabel
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -29,6 +29,7 @@ class pts_client
|
||||
private static $forked_pids = array();
|
||||
protected static $phoromatic_servers = array();
|
||||
protected static $debug_mode = false;
|
||||
protected static $full_output = false;
|
||||
|
||||
public static function create_lock($lock_file)
|
||||
{
|
||||
@@ -41,6 +42,31 @@ class pts_client
|
||||
chmod($lock_file, 0644);
|
||||
return self::$lock_pointers[$lock_file] != false && flock(self::$lock_pointers[$lock_file], LOCK_EX | LOCK_NB);
|
||||
}
|
||||
public static function is_locked($lock_file)
|
||||
{
|
||||
$fp = fopen($lock_file, 'w');
|
||||
$is_locked = $fp && !flock($fp, LOCK_EX | LOCK_NB);
|
||||
$fp && fclose($fp);
|
||||
|
||||
return $is_locked;
|
||||
}
|
||||
public static function release_lock($lock_file)
|
||||
{
|
||||
// Remove lock
|
||||
if(isset(self::$lock_pointers[$lock_file]) == false)
|
||||
{
|
||||
pts_file_io::unlink($lock_file);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(is_resource(self::$lock_pointers[$lock_file]))
|
||||
{
|
||||
fclose(self::$lock_pointers[$lock_file]);
|
||||
}
|
||||
|
||||
pts_file_io::unlink($lock_file);
|
||||
unset(self::$lock_pointers[$lock_file]);
|
||||
}
|
||||
public static function init()
|
||||
{
|
||||
pts_core::init();
|
||||
@@ -180,7 +206,7 @@ class pts_client
|
||||
{
|
||||
if(!in_array($store_var, $module_store_list))
|
||||
{
|
||||
array_push($module_store_list, $store_var);
|
||||
$module_store_list[] = $store_var;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -277,6 +303,43 @@ class pts_client
|
||||
|
||||
return $runtime_variables;
|
||||
}
|
||||
public static function supports_colored_text_output()
|
||||
{
|
||||
return (function_exists('posix_isatty') && posix_isatty(STDOUT)) || (PTS_IS_CLIENT && getenv('LS_COLORS'));
|
||||
}
|
||||
public static function cli_colored_text($str, $color, $bold = false)
|
||||
{
|
||||
if(!self::supports_colored_text_output() || empty($color))
|
||||
{
|
||||
return $str;
|
||||
}
|
||||
|
||||
$attribute = ($bold ? '1' : '0');
|
||||
$colors = array(
|
||||
'black' => $attribute . ';30',
|
||||
'gray' => '1;30', // gray not bold doesn't look good in all consoles
|
||||
'blue' => $attribute . ';34',
|
||||
'green' => $attribute . ';32',
|
||||
'red' => $attribute . ';31',
|
||||
'cyan' => $attribute . ';36',
|
||||
);
|
||||
|
||||
if(!isset($colors[$color]))
|
||||
{
|
||||
return $str;
|
||||
}
|
||||
|
||||
return "\033[" . $colors[$color] . 'm' . $str . "\033[0m";
|
||||
}
|
||||
public static function cli_just_bold($str)
|
||||
{
|
||||
if(!self::supports_colored_text_output())
|
||||
{
|
||||
return $str;
|
||||
}
|
||||
|
||||
return "\033[1m$str\033[0m";
|
||||
}
|
||||
public static function save_test_result($save_to = null, $save_results = null, $render_graphs = true, $result_identifier = null)
|
||||
{
|
||||
// Saves PTS result file
|
||||
@@ -332,13 +395,13 @@ class pts_client
|
||||
if(phodevi::is_linux())
|
||||
{
|
||||
// the kernel config file might just be too large to upload for now
|
||||
array_push($system_log_files, '/boot/config-' . php_uname('r'));
|
||||
$system_log_files[] = '/boot/config-' . php_uname('r');
|
||||
}
|
||||
*/
|
||||
|
||||
foreach($system_log_files as $file)
|
||||
{
|
||||
if(is_file($file) && is_readable($file))
|
||||
if(is_file($file) && is_readable($file) && filesize($file) < 1000000)
|
||||
{
|
||||
// copy() can't be used in this case since it will result in a blank file for /proc/ file-system
|
||||
$file_contents = file_get_contents($file);
|
||||
@@ -360,6 +423,7 @@ class pts_client
|
||||
'cpufreq-info',
|
||||
'glxinfo',
|
||||
'clinfo',
|
||||
'vulkaninfo',
|
||||
'uname -a',
|
||||
// 'udisks --dump',
|
||||
'upower --dump',
|
||||
@@ -367,12 +431,12 @@ class pts_client
|
||||
|
||||
if(phodevi::is_bsd())
|
||||
{
|
||||
array_push($system_log_commands, 'sysctl -a');
|
||||
array_push($system_log_commands, 'kenv');
|
||||
$system_log_commands[] = 'sysctl -a';
|
||||
$system_log_commands[] = 'kenv';
|
||||
}
|
||||
if(is_readable('/dev/mem'))
|
||||
{
|
||||
array_push($system_log_commands, 'dmidecode');
|
||||
$system_log_commands[] = 'dmidecode';
|
||||
}
|
||||
|
||||
foreach($system_log_commands as $command_string)
|
||||
@@ -383,6 +447,13 @@ class pts_client
|
||||
{
|
||||
$cmd_output = shell_exec('cd ' . dirname($command_bin) . ' && ./' . $command_string . ' 2>&1');
|
||||
|
||||
if(strlen($cmd_output) > 900000)
|
||||
{
|
||||
// Don't preserve really large logs, likely filled with lots of junk
|
||||
$cmd_output = null;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Try to filter out any serial numbers, etc.
|
||||
phodevi_vfs::cleanse_file($cmd_output, $command[0]);
|
||||
$cmd_output = pts_strings::remove_line_timestamps($cmd_output);
|
||||
@@ -425,6 +496,8 @@ class pts_client
|
||||
}
|
||||
file_put_contents($system_log_dir . 'environment-variables', $variable_dump);
|
||||
}
|
||||
|
||||
pts_module_manager::module_process('__post_test_run_system_logs', $system_log_dir);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -458,7 +531,7 @@ class pts_client
|
||||
break;
|
||||
}
|
||||
}
|
||||
public static function program_requirement_checks($only_show_required = false)
|
||||
public static function program_requirement_checks($only_show_required = false, $always_report = false)
|
||||
{
|
||||
$extension_checks = pts_needed_extensions();
|
||||
|
||||
@@ -466,14 +539,21 @@ class pts_client
|
||||
$printed_optional_header = false;
|
||||
foreach($extension_checks as $extension)
|
||||
{
|
||||
if($extension[1] == false)
|
||||
if($extension[1] == false || $always_report)
|
||||
{
|
||||
if($always_report)
|
||||
{
|
||||
$printed_required_header = true;
|
||||
$printed_optional_header = true;
|
||||
echo ($extension[1] == false ? 'MISSING' : 'PRESENT') . ' - ';
|
||||
}
|
||||
|
||||
if($extension[0] == 1)
|
||||
{
|
||||
// Oops, this extension is required
|
||||
if($printed_required_header == false)
|
||||
{
|
||||
echo PHP_EOL . 'The following PHP extensions are REQUIRED by the Phoronix Test Suite:' . PHP_EOL . PHP_EOL;
|
||||
echo PHP_EOL . 'The following PHP extensions are REQUIRED:' . PHP_EOL . PHP_EOL;
|
||||
$printed_required_header = true;
|
||||
}
|
||||
}
|
||||
@@ -492,7 +572,7 @@ class pts_client
|
||||
}
|
||||
}
|
||||
|
||||
echo sprintf('%-8ls %-30ls' . PHP_EOL, $extension[2], $extension[3]);
|
||||
echo sprintf('%-9ls %-30ls' . PHP_EOL, $extension[2], $extension[3]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -500,7 +580,7 @@ class pts_client
|
||||
{
|
||||
echo PHP_EOL;
|
||||
|
||||
if($printed_required_header)
|
||||
if($printed_required_header && !$always_report)
|
||||
{
|
||||
exit;
|
||||
}
|
||||
@@ -665,7 +745,7 @@ class pts_client
|
||||
}
|
||||
public static function register_phoromatic_server($server_ip, $http_port)
|
||||
{
|
||||
array_push(self::$phoromatic_servers, array('ip' => $server_ip, 'http_port' => $http_port));
|
||||
self::$phoromatic_servers[] = array('ip' => $server_ip, 'http_port' => $http_port);
|
||||
}
|
||||
public static function available_phoromatic_servers()
|
||||
{
|
||||
@@ -674,7 +754,7 @@ class pts_client
|
||||
|
||||
foreach(self::$phoromatic_servers as $server)
|
||||
{
|
||||
array_push($possible_servers, array($server['ip'], $server['http_port']));
|
||||
$possible_servers[] = array($server['ip'], $server['http_port']);
|
||||
}
|
||||
|
||||
$user_config_phoromatic_servers = pts_config::read_user_config('PhoronixTestSuite/Options/General/PhoromaticServers', '');
|
||||
@@ -683,7 +763,7 @@ class pts_client
|
||||
$static_server = explode(':', $static_server);
|
||||
if(count($static_server) == 2)
|
||||
{
|
||||
array_push($possible_servers, array($static_server[0], $static_server[1]));
|
||||
$possible_servers[] = array($static_server[0], $static_server[1]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -695,7 +775,7 @@ class pts_client
|
||||
$ps_file_line = explode(':', trim($ps_file_line));
|
||||
if(count($ps_file_line) == 2 && ip2long($ps_file_line[0]) !== false && is_numeric($ps_file_line) && $ps_file_line > 100)
|
||||
{
|
||||
array_push($possible_servers, array($ps_file_line[0], $ps_file_line[1]));
|
||||
$possible_servers[] = array($ps_file_line[0], $ps_file_line[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -885,11 +965,12 @@ class pts_client
|
||||
{
|
||||
if(pts_file_io::mkdir($save_to_dir . '/result-graphs') == false)
|
||||
{
|
||||
// Directory must exist, so remove any old graph files first
|
||||
// Don't delete old files now, in case any modules (e.g. FlameGrapher) output something in there ahead of time
|
||||
/*// Directory must exist, so remove any old graph files first
|
||||
foreach(pts_file_io::glob($save_to_dir . '/result-graphs/*') as $old_file)
|
||||
{
|
||||
unlink($old_file);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -937,7 +1018,7 @@ class pts_client
|
||||
$test_titles = array();
|
||||
foreach($result_objects as &$result_object)
|
||||
{
|
||||
array_push($test_titles, $result_object->test_profile->get_title());
|
||||
$test_titles[] = $result_object->test_profile->get_title();
|
||||
}
|
||||
|
||||
$offset = 0;
|
||||
@@ -960,7 +1041,7 @@ class pts_client
|
||||
{
|
||||
if(isset($test_titles[$key]) && $this_title == $test_titles[$key])
|
||||
{
|
||||
array_push($table_keys, $this_title_index);
|
||||
$table_keys[] = $this_title_index;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -977,7 +1058,13 @@ class pts_client
|
||||
}
|
||||
|
||||
$graph = pts_render::render_graph($result_object, $result_file, $save_to, $extra_attributes);
|
||||
array_push($generated_graphs, $graph);
|
||||
|
||||
if($graph == false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$generated_graphs[] = $graph;
|
||||
}
|
||||
|
||||
// Generate mini / overview graphs
|
||||
@@ -1057,22 +1144,6 @@ class pts_client
|
||||
{
|
||||
return pts_config::read_bool_config('PhoronixTestSuite/Options/OpenBenchmarking/AnonymousUsageReporting', 0);
|
||||
}
|
||||
public static function release_lock($lock_file)
|
||||
{
|
||||
// Remove lock
|
||||
if(isset(self::$lock_pointers[$lock_file]) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(is_resource(self::$lock_pointers[$lock_file]))
|
||||
{
|
||||
fclose(self::$lock_pointers[$lock_file]);
|
||||
}
|
||||
|
||||
pts_file_io::unlink($lock_file);
|
||||
unset(self::$lock_pointers[$lock_file]);
|
||||
}
|
||||
public static function check_command_for_function($option, $check_function)
|
||||
{
|
||||
$in_option = false;
|
||||
@@ -1187,7 +1258,7 @@ class pts_client
|
||||
trigger_error('Phoronix Test Suite Argument Missing.', E_USER_ERROR);
|
||||
}
|
||||
|
||||
echo PHP_EOL . 'CORRECT SYNTAX:' . PHP_EOL . 'phoronix-test-suite ' . str_replace('_', '-', $command_alias) . ' ' . implode(' ', $argument_checks) . PHP_EOL . PHP_EOL;
|
||||
echo PHP_EOL . pts_client::cli_just_bold('CORRECT SYNTAX:') . PHP_EOL . 'phoronix-test-suite ' . str_replace('_', '-', $command_alias) . ' ' . implode(' ', $argument_checks) . PHP_EOL . PHP_EOL;
|
||||
|
||||
if(method_exists($command, 'invalid_command'))
|
||||
{
|
||||
@@ -1466,7 +1537,7 @@ class pts_client
|
||||
}
|
||||
else
|
||||
{
|
||||
$possible_browsers = array('firefox', 'mozilla', 'x-www-browser', 'open', 'xdg-open', 'iceweasel', 'konqueror', 'epiphany', 'google-chrome');
|
||||
$possible_browsers = array('firefox', 'mozilla', 'x-www-browser', 'iceweasel', 'konqueror', 'epiphany', 'google-chrome', 'midori', 'epiphany-browser', 'epiphany', 'midori', 'qupzilla', 'open', 'xdg-open');
|
||||
|
||||
foreach($possible_browsers as &$b)
|
||||
{
|
||||
@@ -1514,7 +1585,7 @@ class pts_client
|
||||
|
||||
if(!in_array($identifier, $ignore_ids))
|
||||
{
|
||||
array_push($results, $identifier);
|
||||
$results[] = $identifier;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1538,7 +1609,7 @@ class pts_client
|
||||
}
|
||||
else if($pid)
|
||||
{
|
||||
array_push(self::$forked_pids, $pid);
|
||||
self::$forked_pids[] = $pid;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1598,7 +1669,7 @@ class pts_client
|
||||
else if($pid)
|
||||
{
|
||||
// PARENT
|
||||
array_push(self::$forked_pids, $pid);
|
||||
self::$forked_pids[] = $pid;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -99,6 +99,7 @@ class pts_config
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/General/UsePhodeviCache', $read_config);
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/General/DefaultDisplayMode', $read_config);
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/General/PhoromaticServers', $read_config);
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/General/FullOutput', $read_config);
|
||||
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/Modules/LoadModules', $read_config);
|
||||
|
||||
@@ -121,6 +122,7 @@ class pts_config
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/TestResultValidation/LimitDynamicToTestLength', $read_config);
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/TestResultValidation/StandardDeviationThreshold', $read_config);
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/TestResultValidation/ExportResultsTo', $read_config);
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/TestResultValidation/MinimalTestTime', $read_config);
|
||||
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/BatchMode/SaveResults', $read_config);
|
||||
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/BatchMode/OpenBrowser', $read_config);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user