|
| 1 | +-- Script that runs at wrk's "done" stage collecting the stats in JSON and CSV formats. |
| 2 | +-- https://github.com/wg/wrk/blob/master/SCRIPTING |
| 3 | +done = function(summary, latency, requests) |
| 4 | + local json = string.format("{\n") |
| 5 | + json = json .. string.format('\t"requests": %d,\n', summary.requests) |
| 6 | + json = json .. string.format('\t"duration_ms": %0.2f,\n', summary.duration / 1000) |
| 7 | + json = json .. string.format('\t"requests_per_sec": %0.2f,\n', (summary.requests / summary.duration) * 1e6) |
| 8 | + json = json .. string.format('\t"bytes": %d,\n', summary.bytes) |
| 9 | + json = json .. string.format('\t"bytes_transfer_per_sec": %0.2f,\n', (summary.bytes / summary.duration) * 1e6) |
| 10 | + json = json .. string.format('\t"connect_errors": %d,\n', summary.errors.connect) |
| 11 | + json = json .. string.format('\t"read_errors": %d,\n', summary.errors.read) |
| 12 | + json = json .. string.format('\t"write_errors": %d,\n', summary.errors.write) |
| 13 | + json = json .. string.format('\t"http_errors": %d,\n', summary.errors.status) |
| 14 | + json = json .. string.format('\t"timeouts": %d,\n', summary.errors.timeout) |
| 15 | + json = json .. string.format('\t"latency_min": %0.2f,\n', latency.min) |
| 16 | + json = json .. string.format('\t"latency_max": %0.2f,\n', latency.max) |
| 17 | + json = json .. string.format('\t"latency_mean_ms": %0.2f,\n', latency.mean / 1000) |
| 18 | + json = json .. string.format('\t"latency_stdev": %0.2f,\n', latency.stdev) |
| 19 | + |
| 20 | + json = json .. string.format('\t"latency_distribution": [\n') |
| 21 | + for _, pair in pairs({50, 75, 90, 99}) do |
| 22 | + json = json .. string.format("\t\t{\n") |
| 23 | + |
| 24 | + local percent = latency:percentile(pair) |
| 25 | + json = json .. string.format('\t\t\t"percentile": %g,\n\t\t\t"latency_ms": %0.2f\n', pair, percent / 1000) |
| 26 | + json = json .. string.format("\t\t}%s\n", pair > 90 and "" or ",") |
| 27 | + end |
| 28 | + |
| 29 | + json = json .. string.format("\t]\n}\n") |
| 30 | + |
| 31 | + local file, err = io.open("benchmark/wrk_results.json", "w") |
| 32 | + if file then |
| 33 | + file:write(json) |
| 34 | + file:close() |
| 35 | + else |
| 36 | + print("error saving json results file:", err) |
| 37 | + end |
| 38 | + |
| 39 | + local csv = '' |
| 40 | + csv = csv .. string.format('requests,') |
| 41 | + csv = csv .. string.format('duration_ms,') |
| 42 | + csv = csv .. string.format('requests_per_sec,') |
| 43 | + csv = csv .. string.format('bytes,') |
| 44 | + csv = csv .. string.format('bytes_transfer_per_sec,') |
| 45 | + csv = csv .. string.format('connect_errors,') |
| 46 | + csv = csv .. string.format('read_errors,') |
| 47 | + csv = csv .. string.format('write_errors,') |
| 48 | + csv = csv .. string.format('http_errors,') |
| 49 | + csv = csv .. string.format('timeouts,') |
| 50 | + csv = csv .. string.format('latency_min,') |
| 51 | + csv = csv .. string.format('latency_max,') |
| 52 | + csv = csv .. string.format('latency_mean_ms,') |
| 53 | + csv = csv .. string.format('latency_stdev\n') |
| 54 | + |
| 55 | + csv = csv .. string.format('%d,', summary.requests) |
| 56 | + csv = csv .. string.format('%0.2f,', summary.duration / 1000) |
| 57 | + csv = csv .. string.format('%0.2f,', (summary.requests / summary.duration) * 1e6) |
| 58 | + csv = csv .. string.format('%d,', summary.bytes) |
| 59 | + csv = csv .. string.format('%0.2f,', (summary.bytes / summary.duration) * 1e6) |
| 60 | + csv = csv .. string.format('%d,', summary.errors.connect) |
| 61 | + csv = csv .. string.format('%d,', summary.errors.read) |
| 62 | + csv = csv .. string.format('%d,', summary.errors.write) |
| 63 | + csv = csv .. string.format('%d,', summary.errors.status) |
| 64 | + csv = csv .. string.format('%d,', summary.errors.timeout) |
| 65 | + csv = csv .. string.format('%0.2f,', latency.min) |
| 66 | + csv = csv .. string.format('%0.2f,', latency.max) |
| 67 | + csv = csv .. string.format('%0.2f,', latency.mean / 1000) |
| 68 | + csv = csv .. string.format('%0.2f\n', latency.stdev) |
| 69 | + |
| 70 | + local file, err = io.open("benchmark/wrk_results.csv", "w") |
| 71 | + if file then |
| 72 | + file:write(csv) |
| 73 | + file:close() |
| 74 | + else |
| 75 | + print("error saving csv results file:", err) |
| 76 | + end |
| 77 | +end |
0 commit comments