@@ -4,53 +4,55 @@ const { promisify } = require("util");
44const exec = promisify ( require ( "child_process" ) . exec ) ;
55const spawn = require ( "child_process" ) . spawn ;
66
7- async function startServer ( firewallEnabled ) {
8- console . log ( "Spawning server. Firewall enabled:" , firewallEnabled ) ;
7+ async function runBenchmarks ( ) {
8+ console . log ( "Spawning servers..." ) ;
99
1010 let env = { ...process . env , AIKIDO_CI : "true" } ;
11- if ( firewallEnabled ) {
12- env = {
11+
12+ const serverWithFirewall = spawn ( "node" , [ "server.js" , "4000" ] , {
13+ env : {
1314 ...env ,
1415 AIKIDO_BLOCKING : "true" ,
1516 NODE_OPTIONS : "-r @aikidosec/firewall" ,
16- } ;
17- }
17+ } ,
18+ cwd : join ( __dirname , "app" ) ,
19+ } ) ;
1820
19- const server = spawn ( "node" , [ "server.js" , "4000" ] , {
20- env,
21+ const serverWithoutFirewall = spawn ( "node" , [ "server.js" , "4001" ] , {
22+ env : {
23+ ...env ,
24+ } ,
2125 cwd : join ( __dirname , "app" ) ,
2226 } ) ;
2327
2428 try {
25- server . on ( "error" , ( err ) => {
26- throw err ;
27- } ) ;
28-
29- server . on ( "close" , ( ) => {
30- console . log ( "Closing test server..." ) ;
31- } ) ;
32-
33- server . stderr . on ( "data" , ( data ) => {
34- throw new Error ( data . toString ( ) ) ;
35- } ) ;
29+ for ( const server of [ serverWithFirewall , serverWithoutFirewall ] ) {
30+ server . on ( "error" , ( err ) => {
31+ throw err ;
32+ } ) ;
33+
34+ server . stderr . on ( "data" , ( data ) => {
35+ throw new Error ( data . toString ( ) ) ;
36+ } ) ;
37+ }
3638
37- console . log ( "Waiting for server to start..." ) ;
38- await new Promise ( ( resolve ) => setTimeout ( resolve , 2500 ) ) ;
39+ console . log ( "Waiting for servers to start..." ) ;
40+ await new Promise ( ( resolve ) => setTimeout ( resolve , 3000 ) ) ;
3941
4042 console . log ( "Running k6..." ) ;
4143 const result = await exec ( "k6 run requests.mjs" ) ;
4244 if ( result . stderr ) {
4345 throw new Error ( result . stderr ) ;
4446 }
4547
46- server . kill ( ) ;
47- // Wait for the server to close
48- await new Promise ( ( resolve ) => server . on ( "close" , resolve ) ) ;
48+ serverWithFirewall . kill ( ) ;
49+ serverWithoutFirewall . kill ( ) ;
4950 } catch ( error ) {
5051 console . error ( error ) ;
5152 return false ;
5253 } finally {
53- server . kill ( ) ;
54+ serverWithFirewall . kill ( ) ;
55+ serverWithoutFirewall . kill ( ) ;
5456 return true ;
5557 }
5658}
@@ -74,69 +76,52 @@ async function getResult() {
7476 process . exit ( 1 ) ;
7577 }
7678
77- // Start with firewall enabled
78- if ( ! ( await startServer ( true ) ) ) {
79- process . exit ( 1 ) ;
80- }
81-
82- const resultWithFirewall = await getResult ( ) ;
83-
84- // Start with firewall disabled
85- if ( ! ( await startServer ( false ) ) ) {
79+ if ( ! ( await runBenchmarks ( ) ) ) {
8680 process . exit ( 1 ) ;
8781 }
8882
89- const resultWithoutFirewall = await getResult ( ) ;
83+ const results = await getResult ( ) ;
9084
9185 console . log ( "====================================" ) ;
92- console . log ( "Results with firewall enabled:" ) ;
93- const customGetFirewall =
94- resultWithFirewall . metrics . custom_get_duration . values ;
86+ console . log ( "Results with Zen enabled:" ) ;
87+ const getResultsWithZen = results . metrics . get_with_zen . values ;
9588 console . log (
96- `GET duration: avg=${ customGetFirewall . avg } ms, min=${ customGetFirewall . min } ms, max=${ customGetFirewall . max } ms`
89+ `GET duration: avg=${ getResultsWithZen . avg } ms, min=${ getResultsWithZen . min } ms, max=${ getResultsWithZen . max } ms`
9790 ) ;
98- const customPostFirewall =
99- resultWithFirewall . metrics . custom_post_duration . values ;
91+ const postResultsWithZen = results . metrics . post_with_zen . values ;
10092 console . log (
101- `POST duration: avg=${ customPostFirewall . avg } ms, min=${ customPostFirewall . min } ms, max=${ customPostFirewall . max } ms`
102- ) ;
103- console . log (
104- `Total requests: ${ resultWithFirewall . metrics . http_reqs . values . count } `
93+ `POST duration: avg=${ postResultsWithZen . avg } ms, min=${ postResultsWithZen . min } ms, max=${ postResultsWithZen . max } ms`
10594 ) ;
10695
10796 console . log ( "------------------------------------" ) ;
108- console . log ( "Results with firewall disabled:" ) ;
109- const customGetNoFirewall =
110- resultWithoutFirewall . metrics . custom_get_duration . values ;
111- console . log (
112- `GET duration: avg=${ customGetNoFirewall . avg } ms, min=${ customGetNoFirewall . min } ms, max=${ customGetNoFirewall . max } ms`
113- ) ;
114- const customPostNoFirewall =
115- resultWithoutFirewall . metrics . custom_post_duration . values ;
97+ console . log ( "Results with Zen disabled:" ) ;
98+ const getResultsWithoutZen = results . metrics . get_without_zen . values ;
11699 console . log (
117- `POST duration: avg=${ customPostNoFirewall . avg } ms, min=${ customPostNoFirewall . min } ms, max=${ customPostNoFirewall . max } ms`
100+ `GET duration: avg=${ getResultsWithoutZen . avg } ms, min=${ getResultsWithoutZen . min } ms, max=${ getResultsWithoutZen . max } ms`
118101 ) ;
102+ const postResultsWithoutZen = results . metrics . post_without_zen . values ;
119103 console . log (
120- `Total requests: ${ resultWithoutFirewall . metrics . http_reqs . values . count } `
104+ `POST duration: avg= ${ postResultsWithoutZen . avg } ms, min= ${ postResultsWithoutZen . min } ms, max= ${ postResultsWithoutZen . max } ms `
121105 ) ;
122106
123- const getMedDiff = customGetFirewall . med - customGetNoFirewall . med ;
124- const postMedDiff = customPostFirewall . med - customPostNoFirewall . med ;
125- const getDiffPercent = ( getMedDiff / customGetNoFirewall . med ) * 100 ;
126- const postDiffPercent = ( postMedDiff / customPostNoFirewall . med ) * 100 ;
107+ const getDiff = results . metrics . get_delta . values . avg ;
108+ const postDiff = results . metrics . post_delta . values . avg ;
109+
110+ const getDiffPercent = ( getDiff / getResultsWithoutZen . avg ) * 100 ;
111+ const postDiffPercent = ( postDiff / postResultsWithoutZen . avg ) * 100 ;
127112
128113 console . log ( "------------------------------------" ) ;
129- console . log ( "Firewall performance impact:" ) ;
130- console . log ( `GET med diff: ${ getMedDiff } ms (${ getDiffPercent . toFixed ( 2 ) } %)` ) ;
114+ console . log ( "Zen performance impact:" ) ;
131115 console . log (
132- `POST med diff: ${ postMedDiff } ms (${ postDiffPercent . toFixed ( 2 ) } %)`
116+ `GET avg diff: ${ getDiff . toFixed ( 3 ) } ms (${ getDiffPercent . toFixed ( 2 ) } %)`
117+ ) ;
118+ console . log (
119+ `POST avg diff: ${ postDiff . toFixed ( 3 ) } ms (${ postDiffPercent . toFixed ( 2 ) } %)`
133120 ) ;
134121
135122 // Check if difference is larger than 3ms
136- if ( getMedDiff > 3 || postMedDiff > 3 ) {
137- console . log (
138- "Firewall is causing a performance impact thats larger than 3ms"
139- ) ;
123+ if ( getDiff > 3 || postDiff > 3 ) {
124+ console . log ( "Zen is causing a performance impact thats larger than 3ms" ) ;
140125 process . exit ( 1 ) ;
141126 }
142127
0 commit comments