From 1d7ca477d6bc173c315663e100e43058addbc1c8 Mon Sep 17 00:00:00 2001 From: Guangyuan Yang Date: Sat, 28 Nov 2020 00:51:21 +0800 Subject: [PATCH 1/3] Add -test results to the panel --- example.json | 1 + json-server.js | 19 +++++++++++ server.js => proxy-server.js | 0 script.js | 65 ++++++++++++++++++++++++++++++++++-- 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 example.json create mode 100644 json-server.js rename server.js => proxy-server.js (100%) diff --git a/example.json b/example.json new file mode 100644 index 0000000..927e369 --- /dev/null +++ b/example.json @@ -0,0 +1 @@ +{"_class":"hudson.model.ListView","jobs":[{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-doc-head","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r54716","result":"SUCCESS","timestamp":1606418166692,"url":"https://ci.FreeBSD.org/job/FreeBSD-doc-head/4029/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r54716","result":"SUCCESS","timestamp":1606418166692,"url":"https://ci.FreeBSD.org/job/FreeBSD-doc-head/4029/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-doc-head-igor","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r","result":"SUCCESS","timestamp":1606420808673,"url":"https://ci.FreeBSD.org/job/FreeBSD-doc-head-igor/3637/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r","result":"SUCCESS","timestamp":1606420808673,"url":"https://ci.FreeBSD.org/job/FreeBSD-doc-head-igor/3637/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-aarch64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606470659981,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-aarch64-build/19075/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606470659981,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-aarch64-build/19075/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-aarch64-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474359330,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-aarch64-LINT/5632/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474359330,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-aarch64-LINT/5632/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-aarch64-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368083","result":"UNSTABLE","timestamp":1606428000836,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-aarch64-test/86/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368083","result":"UNSTABLE","timestamp":1606428000836,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-aarch64-test/86/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-aarch64-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474359406,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-aarch64-testvm/2310/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474359406,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-aarch64-testvm/2310/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606468886163,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-build/19684/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606468886163,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-build/19684/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-dtrace_build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473142591,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-dtrace_build/14727/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473142591,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-dtrace_build/14727/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-dtrace_test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"UNSTABLE","timestamp":1606475940456,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-dtrace_test/13565/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"UNSTABLE","timestamp":1606475940456,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-dtrace_test/13565/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-dtrace_testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606475708800,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-dtrace_testvm/14189/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606475708800,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-dtrace_testvm/14189/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-gcc6_build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"FAILURE","timestamp":1606473063956,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-gcc6_build/2975/"},"lastSuccessfulBuild":null},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-images","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473138865,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-images/18593/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473138865,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-images/18593/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473110324,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-LINT/18572/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473110324,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-LINT/18572/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"UNSTABLE","timestamp":1606473415911,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-test/17320/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"UNSTABLE","timestamp":1606473415911,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-test/17320/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-test_ltp","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368092","result":"UNSTABLE","timestamp":1606469362326,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-test_ltp/2999/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368092","result":"UNSTABLE","timestamp":1606469362326,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-test_ltp/2999/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-test_zfs","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368091","result":"UNSTABLE","timestamp":1606458840698,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-test_zfs/7824/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368091","result":"UNSTABLE","timestamp":1606458840698,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-test_zfs/7824/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-amd64-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473027198,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-testvm/18616/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473027198,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-amd64-testvm/18616/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-armv6-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606470920183,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-armv6-build/11604/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606470920183,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-armv6-build/11604/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-armv7-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606471815763,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-armv7-build/11505/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606471815763,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-armv7-build/11505/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-armv7-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368083","result":"FAILURE","timestamp":1606428000937,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-armv7-test/127/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r365739","result":"UNSTABLE","timestamp":1600148862470,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-armv7-test/72/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-armv7-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606475136616,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-armv7-testvm/2656/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606475136616,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-armv7-testvm/2656/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-i386-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606469473195,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-build/18889/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606469473195,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-build/18889/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-i386-images","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473748499,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-images/16895/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473748499,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-images/16895/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-i386-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473748572,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-LINT/16888/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473748572,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-LINT/16888/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-i386-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"FAILURE","timestamp":1606474020246,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-test/11424/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368053","result":"UNSTABLE","timestamp":1606388268621,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-test/11414/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-i386-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473748451,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-testvm/16915/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473748451,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-i386-testvm/16915/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-mips-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606472074574,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-mips-build/15398/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606472074574,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-mips-build/15398/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-mips64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606469719093,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-mips64-build/15458/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606469719093,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-mips64-build/15458/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-mips64-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368083","result":"UNSTABLE","timestamp":1606428001005,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-mips64-test/82/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368083","result":"UNSTABLE","timestamp":1606428001005,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-mips64-test/82/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-mips64-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606472870078,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-mips64-testvm/2388/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606472870078,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-mips64-testvm/2388/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpc-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606470478458,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc-build/18545/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606470478458,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc-build/18545/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpc-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473944711,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc-LINT/5213/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606473944711,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc-LINT/5213/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpc64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606471473611,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-build/17861/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606471473611,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-build/17861/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpc64-images","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474319264,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-images/2678/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474319264,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-images/2678/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpc64-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474319225,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-LINT/5047/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474319225,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-LINT/5047/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpc64-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r367963","result":"FAILURE","timestamp":1606167526189,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-test/68/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r367817","result":"UNSTABLE","timestamp":1605736800774,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-test/65/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpc64-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474319189,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-testvm/2680/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606474319189,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64-testvm/2680/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpc64le-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606470258456,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64le-build/762/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606470258456,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpc64le-build/762/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-powerpcspe-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606469834013,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpcspe-build/18710/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606469834013,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-powerpcspe-build/18710/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-riscv64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606469865248,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-riscv64-build/21285/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606469865248,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-riscv64-build/21285/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-riscv64-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606472872687,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-riscv64-LINT/577/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606472872687,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-riscv64-LINT/577/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-riscv64-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368083","result":"UNSTABLE","timestamp":1606428001040,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-riscv64-test/14566/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368083","result":"UNSTABLE","timestamp":1606428001040,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-riscv64-test/14566/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-riscv64-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606472952692,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-riscv64-testvm/17836/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368097","result":"SUCCESS","timestamp":1606472952692,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-riscv64-testvm/17836/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-head-scan_build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368084","result":"SUCCESS","timestamp":1606440720729,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-scan_build/1424/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368084","result":"SUCCESS","timestamp":1606440720729,"url":"https://ci.FreeBSD.org/job/FreeBSD-head-scan_build/1424/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-aarch64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"FAILURE","timestamp":1606447911566,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-aarch64-build/5315/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r367748","result":"SUCCESS","timestamp":1605593249892,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-aarch64-build/5312/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-amd64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447209234,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-build/5623/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447209234,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-build/5623/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-amd64-images","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606450754728,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-images/5413/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606450754728,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-images/5413/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-amd64-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606450754650,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-LINT/5412/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606450754650,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-LINT/5412/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-amd64-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606451043772,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-test/5359/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606451043772,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-test/5359/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-amd64-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606450754794,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-testvm/5417/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606450754794,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-amd64-testvm/5417/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-armv6-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447148997,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-armv6-build/2351/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447148997,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-armv6-build/2351/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-i386-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447269502,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-build/5248/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447269502,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-build/5248/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-i386-images","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606449658728,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-images/4825/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606449658728,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-images/4825/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-i386-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606449658656,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-LINT/4822/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606449658656,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-LINT/4822/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-i386-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606449880163,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-test/2947/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606449880163,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-test/2947/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-i386-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606449658604,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-testvm/4826/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606449658604,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-i386-testvm/4826/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-powerpc-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447148867,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-powerpc-build/2481/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447148867,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-powerpc-build/2481/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-powerpc64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447209165,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-powerpc64-build/2459/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447209165,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-powerpc64-build/2459/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-11-sparc64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447088616,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-sparc64-build/5237/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368089","result":"SUCCESS","timestamp":1606447088616,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-11-sparc64-build/5237/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-aarch64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606475587131,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-aarch64-build/3372/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606475587131,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-aarch64-build/3372/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-amd64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606475829713,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-build/3395/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606475829713,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-build/3395/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-amd64-images","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606479450489,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-images/3312/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606479450489,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-images/3312/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-amd64-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368095","result":"SUCCESS","timestamp":1606472691794,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-LINT/3315/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368095","result":"SUCCESS","timestamp":1606472691794,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-LINT/3315/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-amd64-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368095","result":"UNSTABLE","timestamp":1606473073004,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-test/3145/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368095","result":"UNSTABLE","timestamp":1606473073004,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-test/3145/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-amd64-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606479450548,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-testvm/3322/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606479450548,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-amd64-testvm/3322/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-armv6-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606477988302,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-armv6-build/3438/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606477988302,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-armv6-build/3438/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-armv7-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368102","result":"SUCCESS","timestamp":1606477866266,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-armv7-build/3435/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368102","result":"SUCCESS","timestamp":1606477866266,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-armv7-build/3435/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-armv7-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606477613691,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-armv7-LINT/1759/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606477613691,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-armv7-LINT/1759/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-i386-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606475587180,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-build/3363/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606475587180,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-build/3363/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-i386-images","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606478074108,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-images/3273/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606478074108,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-images/3273/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-i386-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606478074034,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-LINT/3275/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606478074034,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-LINT/3275/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-i386-test","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368095","result":"UNSTABLE","timestamp":1606472880430,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-test/3113/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368095","result":"UNSTABLE","timestamp":1606472880430,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-test/3113/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-i386-testvm","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606478187120,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-testvm/3278/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368101","result":"SUCCESS","timestamp":1606478187120,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-i386-testvm/3278/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-mips-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606478667711,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-mips-build/3583/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606478667711,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-mips-build/3583/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-mips64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606477927252,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-mips64-build/3625/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606477927252,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-mips64-build/3625/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-powerpc-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606477988317,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpc-build/3580/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606477988317,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpc-build/3580/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-powerpc-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606479011731,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpc-LINT/1810/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606479011731,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpc-LINT/1810/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-powerpc64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606478988340,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpc64-build/3505/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606478988340,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpc64-build/3505/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-powerpc64-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606480193626,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpc64-LINT/1781/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606480193626,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpc64-LINT/1781/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-powerpcspe-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606477927271,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpcspe-build/3630/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606477927271,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-powerpcspe-build/3630/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-sparc64-build","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606478583287,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-sparc64-build/3653/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606478583287,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-sparc64-build/3653/"}},{"_class":"hudson.model.FreeStyleProject","name":"FreeBSD-stable-12-sparc64-LINT","lastCompletedBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606479399760,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-sparc64-LINT/1860/"},"lastSuccessfulBuild":{"_class":"hudson.model.FreeStyleBuild","description":"r368103","result":"SUCCESS","timestamp":1606479399760,"url":"https://ci.FreeBSD.org/job/FreeBSD-stable-12-sparc64-LINT/1860/"}}]} \ No newline at end of file diff --git a/json-server.js b/json-server.js new file mode 100644 index 0000000..c53fe29 --- /dev/null +++ b/json-server.js @@ -0,0 +1,19 @@ +var http = require('http'); +var fs = require('fs'); +var path = require('path'); + +http.createServer(function(req, res) { + var filePath = path.join(__dirname, 'example.json'); + var stat = fs.statSync(filePath); + + res.writeHead(200, { + 'Content-Type': 'application/json', + 'Content-Length': stat.size, + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization' + }); + + var readStream = fs.createReadStream(filePath); + readStream.pipe(res); +}) +.listen(8000); diff --git a/server.js b/proxy-server.js similarity index 100% rename from server.js rename to proxy-server.js diff --git a/script.js b/script.js index 1237678..4e9940c 100644 --- a/script.js +++ b/script.js @@ -4,11 +4,30 @@ * Refer to LICENSE */ + +// global options + +var RUN_ENV = 'local' // one of ['local', 'stage', 'prod'] + + +// configurations + +var JENKINS_URL = 'https://ci.freebsd.org'; +var PAYLOAD_URL = '/view/FreeBSD/api/json?tree=jobs[name,lastCompletedBuild[result,timestamp,url,description],lastSuccessfulBuild[result,timestamp,url,description]]'; + +if (RUN_ENV === 'local') { + JENKINS_URL = 'http://localhost:8000'; +} else if (RUN_ENV === 'stage') { + JENKINS_URL = 'https://people.freebsd.org/~ygy/tinderbox'; + PAYLOAD_URL = '/example.json'; +} + + // utility functions function getJSON(path, callback) { var xmlhttp = new XMLHttpRequest(); - // var url = "origin" + path; + var url = JENKINS_URL + path; xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { @@ -104,6 +123,23 @@ function generateFormattedCell(job) { href.appendChild(document.createTextNode('details')); links.appendChild(href); td.appendChild(links); + td.appendChild(_br_.cloneNode(false)); + + // add test result when available + if (job.testResult) { + var testResult = _span_.cloneNode(false); + testResult.setAttribute('class', 'tiny ' + job.testResult.lastCompletedBuild.result.toLowerCase()); + var testBuildLink = _span_.cloneNode(false); + var testA = document.createElement('a'); + testA.setAttribute('href', job.testResult.lastCompletedBuild.url); + testA.appendChild(document.createTextNode('Test suite')); + testBuildLink.appendChild(testA); + testResult.appendChild(testBuildLink); + testResult.appendChild(document.createTextNode(' ')); + testResult.appendChild(document.createTextNode(job.testResult.lastCompletedBuild.result)); + td.appendChild(testResult); + td.appendChild(_br_.cloneNode(false)); + } } else { td.appendChild(document.createTextNode('-')); } @@ -158,8 +194,27 @@ function generateTable(tableData) { document.body.appendChild(table); } -getJSON('/view/FreeBSD/api/json?tree=jobs[name,lastCompletedBuild[result,timestamp,url,description],lastSuccessfulBuild[result,timestamp,url,description]]', function(data) { +getJSON(PAYLOAD_URL, function(data) { + var testData = {}; var tableData = {}; + + // -test + data.jobs.forEach(function(job) { + // e.g. 1. FreeBSD-stable-11-aarch64-test + // e.g. 2. FreeBSD-head-aarch64-test + var splitName = job.name.split('-'); + if (splitName.shift() === 'FreeBSD' && splitName.pop() === 'test') { + // splitName contains version-[number-]arch + var arch = splitName.pop(); + var version = splitName.join('/'); + if (!testData[arch]) { + testData[arch] = {_order: getVersionOrder(splitName)}; + } + testData[arch][version] = job; + } + }); + + // -build data.jobs.forEach(function(job) { // e.g. 1. FreeBSD-stable-10-amd64-build // e.g. 2. FreeBSD-head-amd64-build @@ -171,10 +226,16 @@ getJSON('/view/FreeBSD/api/json?tree=jobs[name,lastCompletedBuild[result,timesta if (!tableData[arch]) { tableData[arch] = {_order: getVersionOrder(splitName)}; } + if (testData[arch] && testData[arch][version]) { + job['testResult'] = testData[arch][version]; + } tableData[arch][version] = job; } }); + if (RUN_ENV === 'local' || RUN_ENV === 'stage') { + document.body.appendChild(document.createTextNode("You are viewing a static (preview) version of the site on " + RUN_ENV +'.')); + } generateTable(tableData); document.body.appendChild(document.createTextNode("Last updated: " + new Date())); }); From fda18cdffad65a6e1fc689831baef8935b99acb8 Mon Sep 17 00:00:00 2001 From: Guangyuan Yang Date: Fri, 4 Dec 2020 14:19:26 +0800 Subject: [PATCH 2/3] Use side-by-side layout While I was there, also: - Made the table header sticky (on modern browsers) - Only show last successful build for jobs with FAILURE --- script.js | 128 +++++++++++++++++++++++++++++------------------------- style.css | 21 +++++++-- 2 files changed, 86 insertions(+), 63 deletions(-) diff --git a/script.js b/script.js index 4e9940c..aae63a3 100644 --- a/script.js +++ b/script.js @@ -71,75 +71,85 @@ var _td_ = document.createElement('td'); var _br_ = document.createElement('br'); var _span_ = document.createElement('span'); +// generates an info block for build/test info +function generateInfoBlock(td, job) { + // last build time and status + var info = _span_.cloneNode(false); + info.setAttribute('class', job.lastCompletedBuild.result.toLowerCase()); + var lastCompletedBuildDate = new Date(job.lastCompletedBuild.timestamp); + info.appendChild(document.createTextNode([ + lastCompletedBuildDate.getUTCFullYear(), + twoDigits(lastCompletedBuildDate.getUTCMonth() + 1), + twoDigits(lastCompletedBuildDate.getUTCDate()) + ].join('-'))); + info.appendChild(_br_.cloneNode(false)); + info.appendChild(document.createTextNode( + twoDigits(lastCompletedBuildDate.getUTCHours()) + ':' + + twoDigits(lastCompletedBuildDate.getUTCMinutes()) + ' UTC' + )); + td.appendChild(info); + td.appendChild(_br_.cloneNode(false)); + + // SVN revision number + var revision = document.createElement('i'); + revision.appendChild(document.createTextNode(job.lastCompletedBuild.description || 'unknown revision')); + td.appendChild(revision); + td.appendChild(_br_.cloneNode(false)); + + var links = _span_.cloneNode(false); + links.setAttribute('class', 'tiny'); + if (job.lastCompletedBuild.result === 'FAILURE') { + var failingSince = document.createElement('i'); + failingSince.appendChild(document.createTextNode( + '(failing since ' + (job.lastSuccessfulBuild ? (job.lastSuccessfulBuild.description || 'n/a') : 'n/a') + ')' + )); + td.appendChild(failingSince); + td.appendChild(_br_.cloneNode(false)); + + // link to full jenkins job detail + var lastSuccessful = document.createElement('a'); + lastSuccessful.setAttribute('href', job.lastSuccessfulBuild ? job.lastSuccessfulBuild.url : '#'); + lastSuccessful.appendChild(document.createTextNode('last successful build')); + links.appendChild(lastSuccessful); + links.appendChild(document.createTextNode(' | ')); + } + + // link to details + var href = document.createElement('a'); + href.setAttribute('href', job.lastCompletedBuild.url); + href.appendChild(document.createTextNode('details')); + links.appendChild(href); + td.appendChild(links); + td.appendChild(_br_.cloneNode(false)); +} + // generates a formatted cell, with two designs based // on whether the build succeeded or failed function generateFormattedCell(job) { var td = _td_.cloneNode(false); if (job && job.lastCompletedBuild) { - // last build time and status - var info = _span_.cloneNode(false); - info.setAttribute('class', job.lastCompletedBuild.result.toLowerCase()); - var lastCompletedBuildDate = new Date(job.lastCompletedBuild.timestamp); - info.appendChild(document.createTextNode([ - lastCompletedBuildDate.getUTCFullYear(), - twoDigits(lastCompletedBuildDate.getUTCMonth() + 1), - twoDigits(lastCompletedBuildDate.getUTCDate()) - ].join('-'))); - info.appendChild(_br_.cloneNode(false)); - info.appendChild(document.createTextNode( - twoDigits(lastCompletedBuildDate.getUTCHours()) + ':' + - twoDigits(lastCompletedBuildDate.getUTCMinutes()) + ' UTC' - )); - td.appendChild(info); - td.appendChild(_br_.cloneNode(false)); + var innerTable = _table_.cloneNode(false); + var innerTbody = document.createElement('tbody'); + var innerTr = _tr_.cloneNode(false); - // SVN revision number - var revision = document.createElement('i'); - revision.appendChild(document.createTextNode(job.lastCompletedBuild.description || 'unknown revision')); - td.appendChild(revision); - td.appendChild(_br_.cloneNode(false)); - if (job.lastCompletedBuild.result !== 'SUCCESS') { - var failingSince = document.createElement('i'); - failingSince.appendChild(document.createTextNode( - '(failing since ' + (job.lastSuccessfulBuild ? (job.lastSuccessfulBuild.description || 'n/a') : 'n/a') + ')' - )); - td.appendChild(failingSince); - td.appendChild(_br_.cloneNode(false)); - } + var innerTd1 = _td_.cloneNode(false); + innerTd1.setAttribute('class', 'inner'); + generateInfoBlock(innerTd1, job); - // link to full jenkins job detail - var links = _span_.cloneNode(false); - links.setAttribute('class', 'tiny'); - if (job.lastCompletedBuild.result !== 'SUCCESS') { - var lastSuccessful = document.createElement('a'); - lastSuccessful.setAttribute('href', job.lastSuccessfulBuild ? job.lastSuccessfulBuild.url : '#'); - lastSuccessful.appendChild(document.createTextNode('last successful build')); - links.appendChild(lastSuccessful); - links.appendChild(document.createTextNode(' | ')); - } - var href = document.createElement('a'); - href.setAttribute('href', job.lastCompletedBuild.url); - href.appendChild(document.createTextNode('details')); - links.appendChild(href); - td.appendChild(links); - td.appendChild(_br_.cloneNode(false)); - - // add test result when available + var innerTd2 = _td_.cloneNode(false); + innerTd2.setAttribute('class', 'inner'); if (job.testResult) { - var testResult = _span_.cloneNode(false); - testResult.setAttribute('class', 'tiny ' + job.testResult.lastCompletedBuild.result.toLowerCase()); - var testBuildLink = _span_.cloneNode(false); - var testA = document.createElement('a'); - testA.setAttribute('href', job.testResult.lastCompletedBuild.url); - testA.appendChild(document.createTextNode('Test suite')); - testBuildLink.appendChild(testA); - testResult.appendChild(testBuildLink); - testResult.appendChild(document.createTextNode(' ')); - testResult.appendChild(document.createTextNode(job.testResult.lastCompletedBuild.result)); - td.appendChild(testResult); - td.appendChild(_br_.cloneNode(false)); + generateInfoBlock(innerTd2, job.testResult); + } else { + innerTd2.appendChild(document.createTextNode('-')); } + + innerTr.appendChild(innerTd1); + innerTr.appendChild(innerTd2); + innerTbody.appendChild(innerTr); + innerTable.appendChild(innerTbody); + td.appendChild(innerTable); } else { td.appendChild(document.createTextNode('-')); } diff --git a/style.css b/style.css index 452bd23..a52667f 100644 --- a/style.css +++ b/style.css @@ -17,13 +17,26 @@ table { } tr { border: none; } -th { background-color: #eeeeff; } -td { border: grey 1px solid; } -td, th { - width: 18ex; +th { + background-color: #eeeeff; text-align: center; padding: 3pt; + position: sticky; + top: 0px; +} + +td.inner { + width: 18ex; + padding: 2pt; + border: none; +} + +td { + width: 36ex; + text-align: center; + padding: 4pt; + border: grey 1px solid; } i { From 7d98bc57b7932763524bc289e87294d91f9b899d Mon Sep 17 00:00:00 2001 From: Guangyuan Yang Date: Fri, 4 Dec 2020 15:17:53 +0800 Subject: [PATCH 3/3] Add a second level of header and cleanup code --- script.js | 46 +++++++++++++++++++++++++++++----------------- style.css | 6 +++--- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/script.js b/script.js index aae63a3..92e01f4 100644 --- a/script.js +++ b/script.js @@ -123,32 +123,36 @@ function generateInfoBlock(td, job) { td.appendChild(_br_.cloneNode(false)); } +// generates a table with two columns and no borderlines +// to use inside the main table +function generateInnerTable(td1, td2) { + var table = _table_.cloneNode(false); + var tbody = document.createElement('tbody'); + var tr = _tr_.cloneNode(false); + td1.setAttribute('class', 'inner'); + td2.setAttribute('class', 'inner'); + tr.appendChild(td1); + tr.appendChild(td2); + tbody.appendChild(tr); + table.appendChild(tbody); + return table; +} + // generates a formatted cell, with two designs based // on whether the build succeeded or failed function generateFormattedCell(job) { var td = _td_.cloneNode(false); if (job && job.lastCompletedBuild) { - var innerTable = _table_.cloneNode(false); - var innerTbody = document.createElement('tbody'); - var innerTr = _tr_.cloneNode(false); - - var innerTd1 = _td_.cloneNode(false); - innerTd1.setAttribute('class', 'inner'); - generateInfoBlock(innerTd1, job); - - var innerTd2 = _td_.cloneNode(false); - innerTd2.setAttribute('class', 'inner'); + var td1 = _td_.cloneNode(false); + var td2 = _td_.cloneNode(false); + generateInfoBlock(td1, job); if (job.testResult) { - generateInfoBlock(innerTd2, job.testResult); + generateInfoBlock(td2, job.testResult); } else { - innerTd2.appendChild(document.createTextNode('-')); + td2.appendChild(document.createTextNode('-')); } - - innerTr.appendChild(innerTd1); - innerTr.appendChild(innerTd2); - innerTbody.appendChild(innerTr); - innerTable.appendChild(innerTbody); + var innerTable = generateInnerTable(td1, td2); td.appendChild(innerTable); } else { td.appendChild(document.createTextNode('-')); @@ -174,6 +178,14 @@ function generateTable(tableData) { var th = _th_.cloneNode(false); th.setAttribute('scope', 'col'); th.appendChild(document.createTextNode(c)); + + var td1 = _td_.cloneNode(false); + var td2 = _td_.cloneNode(false); + td1.appendChild(document.createTextNode('Build')); + td2.appendChild(document.createTextNode('Test')); + var innerTable = generateInnerTable(td1, td2) + + th.appendChild(innerTable); columnHeaders.appendChild(th); }); thead.appendChild(columnHeaders); diff --git a/style.css b/style.css index a52667f..4ee29a7 100644 --- a/style.css +++ b/style.css @@ -27,13 +27,13 @@ th { } td.inner { - width: 18ex; - padding: 2pt; + width: 16ex; + padding: 1pt; border: none; } td { - width: 36ex; + width: 32ex; text-align: center; padding: 4pt; border: grey 1px solid;