47 lines
1.8 KiB
Text
47 lines
1.8 KiB
Text
![]() |
def main [bench_size:int=5] {
|
||
|
let res_dir = 'start_results'
|
||
|
(mkdir $res_dir)
|
||
|
let bench = [
|
||
|
['tag', 'image', 'hport', 'dport'];
|
||
|
['simple-dockerfile', 'react-simple', 3000, 3000],
|
||
|
['multi-stage-dockerfile', 'react-multistage', 3000, 3000],
|
||
|
['node-alpine-dockerfile', 'react-multistage-alpine', 3000, 3000],
|
||
|
['nginx-dockerfile', 'react-nginx', 80, 80],
|
||
|
['nginx-alpine-dockerfile', 'react-nginx-alpine', 80, 80],
|
||
|
['bun-rspack-dockerfile', 'react-bun-rspack', 80, 80],
|
||
|
['nginx-distroless-dockerfile', 'react-nginx-distroless', 80, 8080]
|
||
|
]
|
||
|
|
||
|
mut bench_results = []
|
||
|
|
||
|
for entry in $bench {
|
||
|
(docker stop $entry.image)
|
||
|
(docker container rm $entry.image)
|
||
|
(docker run -d -p $'($entry.hport):($entry.dport)' --name $entry.image $entry.image)
|
||
|
(docker stop $entry.image)
|
||
|
print $'Starting bench for image ($entry.image)'
|
||
|
let total_time = timeit {
|
||
|
mut csv_results = []
|
||
|
for i in 1..$bench_size {
|
||
|
let time = timeit {
|
||
|
(docker start $entry.image)
|
||
|
let hport = $entry.hport
|
||
|
mut curl_res = curl -s --write-out '%{http_code}' $'http://localhost:($entry.hport)' | str substring (-3..)
|
||
|
while curl_res != '200' {
|
||
|
$curl_res = (curl -s --write-out '%{http_code}' $'http://localhost:($entry.hport)' | str substring (-3..))
|
||
|
if $curl_res == '200' {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
(docker stop $entry.image)
|
||
|
}
|
||
|
$csv_results = ($csv_results ++ [['tag', 'image', 'time']; [$entry.tag, $entry.image, $time]])
|
||
|
print $'Time for ($i) out of ($bench_size) for image ($entry.image) : ($time)'
|
||
|
}
|
||
|
$csv_results | to csv | save -f $'./($res_dir)/($entry.tag).csv'
|
||
|
print $csv_results
|
||
|
}
|
||
|
print $'Total time for image ($entry.image): ($total_time)'
|
||
|
}
|
||
|
}
|