(results)
| 182 | |
| 183 | // Calculate and print query statistics |
| 184 | function print_statistics(results) { |
| 185 | const total_queries = results.length; |
| 186 | const successful = results.filter(r => r.code === 200 && r.total > 0); |
| 187 | const successful_count = successful.length; |
| 188 | const failed_count = total_queries - successful_count; |
| 189 | |
| 190 | process.stderr.write('\n=== Query Statistics ===\n'); |
| 191 | process.stderr.write(`Total queries: ${total_queries}\n`); |
| 192 | process.stderr.write(`Successful: ${successful_count}\n`); |
| 193 | process.stderr.write(`Failed: ${failed_count}\n`); |
| 194 | |
| 195 | if (successful_count === 0) { |
| 196 | // Show sample of error codes to help debug |
| 197 | const error_codes = {}; |
| 198 | results.forEach(r => { |
| 199 | error_codes[r.code] = (error_codes[r.code] || 0) + 1; |
| 200 | }); |
| 201 | process.stderr.write('\nError breakdown:\n'); |
| 202 | Object.entries(error_codes).forEach(([code, count]) => { |
| 203 | process.stderr.write(` ${code}: ${count} queries\n`); |
| 204 | }); |
| 205 | process.stderr.write('========================\n\n'); |
| 206 | return; |
| 207 | } |
| 208 | |
| 209 | // Extract total times from successful queries (filter out any 0 or invalid times) |
| 210 | const times = successful.map(r => r.total).filter(t => t > 0).sort((a, b) => a - b); |
| 211 | |
| 212 | if (times.length === 0) { |
| 213 | process.stderr.write('No valid response times recorded\n'); |
| 214 | process.stderr.write('========================\n\n'); |
| 215 | return; |
| 216 | } |
| 217 | |
| 218 | const min = times[0]; |
| 219 | const max = times[times.length - 1]; |
| 220 | const avg = times.reduce((sum, t) => sum + t, 0) / times.length; |
| 221 | |
| 222 | // Calculate median |
| 223 | let median; |
| 224 | const mid = Math.floor(times.length / 2); |
| 225 | if (times.length % 2 === 0) { |
| 226 | median = (times[mid - 1] + times[mid]) / 2; |
| 227 | } else { |
| 228 | median = times[mid]; |
| 229 | } |
| 230 | |
| 231 | process.stderr.write(`\nResponse times (ms):\n`); |
| 232 | process.stderr.write(` Min: ${min.toFixed(2)}\n`); |
| 233 | process.stderr.write(` Max: ${max.toFixed(2)}\n`); |
| 234 | process.stderr.write(` Avg: ${avg.toFixed(2)}\n`); |
| 235 | process.stderr.write(` Median: ${median.toFixed(2)}\n`); |
| 236 | process.stderr.write('========================\n\n'); |
| 237 | } |
no test coverage detected