diff --git a/throughput/canvas_rects.txt b/throughput/canvas_rects.txt new file mode 100644 index 0000000..4fe9e2c --- /dev/null +++ b/throughput/canvas_rects.txt @@ -0,0 +1,1000 @@ +O8:P9 +V6:W7 +D41:E42 +AB24:AC25 +AB43:AC44 +O40:P41 +L22:M23 +E33:F34 +AB22:AC23 +A40:B41 +AD14:AE15 +X15:Y16 +R48:S49 +P39:Q40 +T33:U34 +M13:N14 +S2:T3 +AC20:AD21 +AB51:AC52 +AB2:AC3 +Y3:Z4 +E48:F49 +M36:N37 +O30:P31 +W17:X18 +L21:M22 +B12:C13 +Z2:AA3 +B7:C8 +Z39:AA40 +N41:O42 +J17:K18 +H45:I46 +V11:W12 +T41:U42 +X52:Y53 +H31:I32 +O3:P4 +X2:Y3 +D38:E39 +U46:V47 +O17:P18 +C11:D12 +AA21:AB22 +I12:J13 +B18:C19 +Y44:Z45 +E21:F22 +AA28:AB29 +S5:T6 +E24:F25 +Z4:AA5 +T24:U25 +E17:F18 +F39:G40 +U1:V2 +V4:W5 +E52:F53 +R32:S33 +Q22:R23 +H33:I34 +O54:P55 +A53:B54 +W7:X8 +T29:U30 +M45:N46 +C29:D30 +D20:E21 +AC31:AD32 +C9:D10 +Q38:R39 +W14:X15 +U3:V4 +P52:Q53 +I53:J54 +C42:D43 +L47:M48 +B42:C43 +J21:K22 +M54:N55 +A36:B37 +J34:K35 +C47:D48 +O41:P42 +D32:E33 +S41:T42 +D24:E25 +J40:K41 +O47:P48 +C36:D37 +K38:L39 +C45:D46 +Z10:AA11 +AA38:AB39 +U14:V15 +B17:C18 +J18:K19 +V39:W40 +I8:J9 +B24:C25 +X19:Y20 +C22:D23 +K35:L36 +B25:C26 +F42:G43 +B52:C53 +Y30:Z31 +S23:T24 +U22:V23 +T52:U53 +S7:T8 +U5:V6 +AA18:AB19 +AA12:AB13 +M38:N39 +W48:X49 +AD12:AE13 +I29:J30 +AC2:AD3 +C25:D26 +W13:X14 +M4:N5 +F28:G29 +M10:N11 +AB10:AC11 +K24:L25 +R5:S6 +AA45:AB46 +AC18:AD19 +Y41:Z42 +E31:F32 +P4:Q5 +B11:C12 +T34:U35 +Y1:Z2 +H6:I7 +F5:G6 +AC40:AD41 +E44:F45 +P37:Q38 +C14:D15 +AD10:AE11 +AC30:AD31 +W30:X31 +A2:B3 +AC42:AD43 +X40:Y41 +M41:N42 +AB32:AC33 +Z31:AA32 +Y33:Z34 +N15:O16 +AD25:AE26 +L29:M30 +P38:Q39 +I27:J28 +S30:T31 +S49:T50 +R39:S40 +E50:F51 +H13:I14 +AD34:AE35 +L45:M46 +E11:F12 +AA35:AB36 +AC11:AD12 +R20:S21 +O53:P54 +K40:L41 +L23:M24 +K16:L17 +AA48:AB49 +O51:P52 +M2:N3 +D5:E6 +U21:V22 +O52:P53 +J45:K46 +AD13:AE14 +B50:C51 +A44:B45 +R51:S52 +Z36:AA37 +N25:O26 +U28:V29 +H1:I2 +AD6:AE7 +N3:O4 +N45:O46 +O44:P45 +AA26:AB27 +L35:M36 +AC25:AD26 +R40:S41 +Y2:Z3 +F46:G47 +J47:K48 +S50:T51 +Q25:R26 +E13:F14 +J20:K21 +C30:D31 +S43:T44 +N32:O33 +R43:S44 +Z29:AA30 +X29:Y30 +E8:F9 +P25:Q26 +V22:W23 +G12:H13 +D45:E46 +S53:T54 +AB19:AC20 +J31:K32 +U26:V27 +S26:T27 +J3:K4 +I16:J17 +C13:D14 +E40:F41 +Q11:R12 +R11:S12 +Y39:Z40 +Q2:R3 +J22:K23 +D21:E22 +Z23:AA24 +N29:O30 +B22:C23 +F10:G11 +AA37:AB38 +AC1:AD2 +E37:F38 +P47:Q48 +T45:U46 +X44:Y45 +Y6:Z7 +X53:Y54 +F17:G18 +AB1:AC2 +V20:W21 +AA9:AB10 +V37:W38 +D27:E28 +Q10:R11 +U2:V3 +B20:C21 +Q39:R40 +J53:K54 +Q8:R9 +Q49:R50 +U38:V39 +AD15:AE16 +M30:N31 +G32:H33 +I36:J37 +R16:S17 +D2:E3 +A14:B15 +F14:G15 +AC53:AD54 +J23:K24 +Z14:AA15 +V47:W48 +Q50:R51 +Q40:R41 +P15:Q16 +AB23:AC24 +Z40:AA41 +D13:E14 +M1:N2 +T53:U54 +F23:G24 +M9:N10 +J28:K29 +Y15:Z16 +AD18:AE19 +T26:U27 +R21:S22 +AB8:AC9 +N31:O32 +AC44:AD45 +I51:J52 +X23:Y24 +E29:F30 +K44:L45 +AA31:AB32 +V49:W50 +V36:W37 +W47:X48 +L54:M55 +M19:N20 +Z18:AA19 +J30:K31 +H26:I27 +G18:H19 +W9:X10 +O46:P47 +AC33:AD34 +Y29:Z30 +A19:B20 +S6:T7 +O33:P34 +V18:W19 +Z25:AA26 +R1:S2 +Q6:R7 +K26:L27 +B9:C10 +H53:I54 +T30:U31 +D48:E49 +G35:H36 +P7:Q8 +I4:J5 +L15:M16 +M24:N25 +C46:D47 +J54:K55 +S19:T20 +F16:G17 +X24:Y25 +J27:K28 +K34:L35 +P9:Q10 +G38:H39 +H39:I40 +O18:P19 +AC12:AD13 +K12:L13 +X49:Y50 +R27:S28 +W49:X50 +N7:O8 +B40:C41 +G1:H2 +L7:M8 +Z34:AA35 +AD41:AE42 +Z11:AA12 +H7:I8 +N14:O15 +S12:T13 +AC43:AD44 +S36:T37 +J42:K43 +R47:S48 +H52:I53 +B3:C4 +F29:G30 +T10:U11 +AB20:AC21 +O13:P14 +AD31:AE32 +X50:Y51 +N17:O18 +P23:Q24 +N11:O12 +X54:Y55 +E19:F20 +C48:D49 +P13:Q14 +A29:B30 +R44:S45 +AD2:AE3 +G24:H25 +AC48:AD49 +AD37:AE38 +K18:L19 +AB17:AC18 +X45:Y46 +E46:F47 +I42:J43 +E54:F55 +C5:D6 +V12:W13 +L4:M5 +R25:S26 +AC8:AD9 +J7:K8 +M34:N35 +V29:W30 +E41:F42 +A47:B48 +S1:T2 +M23:N24 +T16:U17 +AD19:AE20 +A8:B9 +L14:M15 +X34:Y35 +T11:U12 +N27:O28 +H3:I4 +G30:H31 +G11:H12 +X36:Y37 +B8:C9 +W10:X11 +C34:D35 +X7:Y8 +S17:T18 +B16:C17 +H54:I55 +U17:V18 +K14:L15 +AA34:AB35 +N39:O40 +U16:V17 +R14:S15 +D1:E2 +S9:T10 +Q18:R19 +N21:O22 +AC23:AD24 +G50:H51 +AB48:AC49 +S27:T28 +R23:S24 +AD22:AE23 +U9:V10 +A24:B25 +H23:I24 +A31:B32 +Y54:Z55 +AC36:AD37 +A1:B2 +D14:E15 +V28:W29 +G8:H9 +H10:I11 +R9:S10 +G26:H27 +AA10:AB11 +AA3:AB4 +I13:J14 +B44:C45 +W51:X52 +G37:H38 +R46:S47 +L34:M35 +P50:Q51 +D50:E51 +AD9:AE10 +AD21:AE22 +L24:M25 +Q51:R52 +V33:W34 +R2:S3 +V44:W45 +B14:C15 +A7:B8 +X12:Y13 +T12:U13 +K51:L52 +Y5:Z6 +N43:O44 +I35:J36 +Q54:R55 +AB39:AC40 +AD53:AE54 +W36:X37 +AA5:AB6 +R6:S7 +I44:J45 +I45:J46 +T6:U7 +L12:M13 +H22:I23 +U37:V38 +R52:S53 +U12:V13 +G13:H14 +X13:Y14 +Q52:R53 +U11:V12 +F2:G3 +N40:O41 +D35:E36 +N10:O11 +H11:I12 +A49:B50 +L53:M54 +K37:L38 +AA1:AB2 +G19:H20 +AD44:AE45 +G22:H23 +T8:U9 +O31:P32 +AC47:AD48 +V26:W27 +B35:C36 +K8:L9 +N12:O13 +E34:F35 +D37:E38 +H44:I45 +O20:P21 +Y12:Z13 +J46:K47 +H50:I51 +I41:J42 +W53:X54 +AB28:AC29 +Q28:R29 +X3:Y4 +T23:U24 +K22:L23 +A30:B31 +T38:U39 +AB33:AC34 +Y35:Z36 +P12:Q13 +N6:O7 +F12:G13 +E42:F43 +W43:X44 +Q16:R17 +O23:P24 +L19:M20 +Q37:R38 +U35:V36 +B15:C16 +S37:T38 +AD48:AE49 +K53:L54 +A22:B23 +C33:D34 +M40:N41 +T42:U43 +H49:I50 +G44:H45 +Z37:AA38 +K23:L24 +AC4:AD5 +AD51:AE52 +M32:N33 +X8:Y9 +H51:I52 +Q46:R47 +P30:Q31 +L33:M34 +I30:J31 +Z21:AA22 +F51:G52 +A27:B28 +E39:F40 +P28:Q29 +X48:Y49 +B45:C46 +O25:P26 +K33:L34 +I14:J15 +D8:E9 +AD35:AE36 +AB50:AC51 +K17:L18 +K19:L20 +V31:W32 +O36:P37 +Q1:R2 +E49:F50 +O43:P44 +W20:X21 +U34:V35 +V17:W18 +F13:G14 +H43:I44 +X1:Y2 +V1:W2 +T31:U32 +AD40:AE41 +J32:K33 +K1:L2 +Q34:R35 +P20:Q21 +AB18:AC19 +B38:C39 +D54:E55 +S32:T33 +M52:N53 +D18:E19 +F41:G42 +T48:U49 +D34:E35 +G45:H46 +P3:Q4 +D4:E5 +P45:Q46 +H4:I5 +M46:N47 +F47:G48 +X21:Y22 +Y51:Z52 +Z15:AA16 +V24:W25 +I28:J29 +L44:M45 +W44:X45 +AD29:AE30 +S52:T53 +A34:B35 +I40:J41 +R45:S46 +J44:K45 +P54:Q55 +I23:J24 +F31:G32 +A42:B43 +N46:O47 +L30:M31 +C43:D44 +W39:X40 +S42:T43 +A11:B12 +AA7:AB8 +I3:J4 +AD23:AE24 +M3:N4 +D33:E34 +AB7:AC8 +S13:T14 +O16:P17 +Y40:Z41 +B49:C50 +B28:C29 +F21:G22 +L10:M11 +Y24:Z25 +M20:N21 +O11:P12 +T37:U38 +AC32:AD33 +K43:L44 +AC7:AD8 +A28:B29 +N19:O20 +P11:Q12 +R19:S20 +Z52:AA53 +N22:O23 +V16:W17 +O42:P43 +AC10:AD11 +AC13:AD14 +H38:I39 +I22:J23 +C12:D13 +AD26:AE27 +AA40:AB41 +I33:J34 +I19:J20 +G48:H49 +S45:T46 +G6:H7 +G2:H3 +AA33:AB34 +E6:F7 +Q44:R45 +T27:U28 +L42:M43 +Z5:AA6 +M5:N6 +J9:K10 +C32:D33 +M47:N48 +J19:K20 +Z32:AA33 +AA46:AB47 +J12:K13 +W25:X26 +Y27:Z28 +Z54:AA55 +F15:G16 +G4:H5 +X39:Y40 +E3:F4 +A5:B6 +A16:B17 +A46:B47 +AB15:AC16 +H30:I31 +O50:P51 +F36:G37 +AD33:AE34 +S25:T26 +I52:J53 +D28:E29 +AB3:AC4 +AD11:AE12 +T17:U18 +F22:G23 +U50:V51 +P16:Q17 +H15:I16 +L9:M10 +W41:X42 +B53:C54 +AC6:AD7 +L16:M17 +AB30:AC31 +L27:M28 +I47:J48 +D44:E45 +T51:U52 +AB45:AC46 +L50:M51 +Q36:R37 +P29:Q30 +D30:E31 +Z26:AA27 +N54:O55 +K15:L16 +I43:J44 +D31:E32 +V48:W49 +X27:Y28 +Y20:Z21 +A54:B55 +R10:S11 +X5:Y6 +A37:B38 +L26:M27 +L5:M6 +G7:H8 +W54:X55 +A52:B53 +B51:C52 +D39:E40 +AC37:AD38 +Y45:Z46 +T18:U19 +R8:S9 +L2:M3 +S38:T39 +V3:W4 +H20:I21 +A15:B16 +N26:O27 +AB42:AC43 +O29:P30 +F7:G8 +L38:M39 +AB34:AC35 +O38:P39 +R24:S25 +P2:Q3 +W31:X32 +N8:O9 +F43:G44 +G51:H52 +T46:U47 +E26:F27 +I21:J22 +U44:V45 +AD42:AE43 +J26:K27 +J13:K14 +X38:Y39 +B26:C27 +AA50:AB51 +G47:H48 +M14:N15 +P42:Q43 +O27:P28 +N49:O50 +H9:I10 +X18:Y19 +V32:W33 +J49:K50 +T13:U14 +G21:H22 +V40:W41 +Z1:AA2 +F37:G38 +W6:X7 +AC46:AD47 +T54:U55 +J2:K3 +X10:Y11 +M35:N36 +B54:C55 +W2:X3 +R18:S19 +M16:N17 +O24:P25 +G27:H28 +Q26:R27 +O12:P13 +Q13:R14 +J41:K42 +S31:T32 +Z38:AA39 +Y16:Z17 +L41:M42 +I2:J3 +T50:U51 +N28:O29 +X47:Y48 +H29:I30 +O37:P38 +E27:F28 +AA17:AB18 +Z28:AA29 +H35:I36 +J11:K12 +S21:T22 +J6:K7 +AA44:AB45 +T47:U48 +P49:Q50 +Q3:R4 +I18:J19 +AC41:AD42 +H8:I9 +Q33:R34 +D46:E47 +L1:M2 +K41:L42 +W28:X29 +AC27:AD28 +E38:F39 +AA6:AB7 +H25:I26 +R36:S37 +N52:O53 +Y49:Z50 +F33:G34 +K11:L12 +AC26:AD27 +G46:H47 +E32:F33 +J48:K49 +K10:L11 +C17:D18 +I24:J25 +U32:V33 +E20:F21 +D42:E43 +V30:W31 +C27:D28 +C20:D21 +E14:F15 +X22:Y23 +U42:V43 +I17:J18 +AC19:AD20 +AB31:AC32 +H40:I41 +H32:I33 +N38:O39 +I50:J51 +Y22:Z23 +G15:H16 +N48:O49 +E45:F46 +AA53:AB54 +W29:X30 +AB26:AC27 +G5:H6 +AB37:AC38 +Y38:Z39 +W3:X4 +V54:W55 +AA14:AB15 +Y31:Z32 +AA52:AB53 +P24:Q25 +D52:E53 +M33:N34 +Y42:Z43 +AD46:AE47 +V46:W47 +S51:T52 +M17:N18 +J25:K26 +E51:F52 +P48:Q49 +W33:X34 +A35:B36 +R35:S36 +D51:E52 +C54:D55 +U53:V54 +M42:N43 +AA11:AB12 +X43:Y44 +M26:N27 +D19:E20 +Q27:R28 +K46:L47 +A39:B40 +Q45:R46 +AA42:AB43 +V7:W8 +AB4:AC5 +AA49:AB50 +Q14:R15 +A48:B49 +N13:O14 +A20:B21 +K28:L29 +F11:G12 +O2:P3 +AC9:AD10 +K20:L21 +G41:H42 +AC34:AD35 +E12:F13 +F19:G20 +F52:G53 +AB38:AC39 +G52:H53 +B32:C33 +U20:V21 +Q19:R20 +R13:S14 +U40:V41 +F27:G28 +Y52:Z53 +N18:O19 +V5:W6 +I37:J38 +F18:G19 +A33:B34 +R38:S39 +B21:C22 +O5:P6 +C35:D36 +Y17:Z18 +E23:F24 +Q7:R8 +Y48:Z49 +A9:B10 +D7:E8 +P35:Q36 +B1:C2 +D6:E7 +L48:M49 +Y53:Z54 +Z47:AA48 +AD38:AE39 +Z48:AA49 +X30:Y31 +Y18:Z19 +R17:S18 +AD52:AE53 +N44:O45 +X14:Y15 +N33:O34 +Z51:AA52 +V41:W42 +F3:G4 +Y25:Z26 +U6:V7 +S33:T34 +T49:U50 +N5:O6 +W18:X19 +B34:C35 +U54:V55 +A3:B4 +U24:V25 +S47:T48 +N24:O25 +Z46:AA47 +R29:S30 +N34:O35 +Z20:AA21 +O15:P16 +P46:Q47 +V34:W35 +I25:J26 +AA25:AB26 +A10:B11 +V53:W54 +S29:T30 +Y47:Z48 +X33:Y34 +Q42:R43 +L28:M29 +A51:B52 +E30:F31 +A26:B27 +W34:X35 +R7:S8 +N47:O48 +AB21:AC22 +F8:G9 +T25:U26 +AD39:AE40 +L49:M50 +X42:Y43 +AB25:AC26 +W16:X17 +D36:E37 +T35:U36 +V42:W43 diff --git a/throughput/request.sh b/throughput/request.sh index f29b0df..b012e99 100755 --- a/throughput/request.sh +++ b/throughput/request.sh @@ -5,8 +5,9 @@ JMETER_CMD="jmeter" DEFAULT_THREADS=10 DEFAULT_LOOPS=10 -APP_NAME="" +SAVE_OUTPUT="" TARGET_URL="" +TARGET_PORT=5000 THREADS=$DEFAULT_THREADS LOOPS=$DEFAULT_LOOPS @@ -16,10 +17,11 @@ show_help() { echo "Runs a JMeter benchmark test with specified parameters." echo "" echo "Required Flags:" - echo " -o, --output The name of the app or user for organizing results." + echo " -o, --output The output location for the benchmark results." echo " -H, --host The target URL or IP address for the test (e.g., 10.250.22.29)." echo "" echo "Optional Flags:" + echo " -p, --port The target port for the test. Default: 5000." echo " -t, --threads Number of concurrent threads (users). Default: ${DEFAULT_THREADS}." echo " -l, --loops Number of loops each thread will execute. Default: ${DEFAULT_LOOPS}." echo " -h, --help Display this help message and exit." @@ -29,7 +31,7 @@ while [[ $# -gt 0 ]]; do key="$1" case $key in -o|--output) - APP_NAME="$2" + SAVE_OUTPUT="$2" shift shift ;; @@ -38,6 +40,11 @@ while [[ $# -gt 0 ]]; do shift shift ;; + -p|--port) + TARGET_PORT="$2" + shift + shift + ;; -t|--threads) THREADS="$2" shift @@ -60,7 +67,7 @@ while [[ $# -gt 0 ]]; do esac done -if [ -z "$APP_NAME" ] || [ -z "$TARGET_URL" ]; then +if [ -z "$SAVE_OUTPUT" ] || [ -z "$TARGET_URL" ]; then echo "ERROR: Missing required arguments." echo "" show_help @@ -68,12 +75,14 @@ if [ -z "$APP_NAME" ] || [ -z "$TARGET_URL" ]; then fi # --- Define Output Structure --- -MAIN_OUTPUT_DIR="./${APP_NAME}" -RESULT_CSV="${MAIN_OUTPUT_DIR}/${APP_NAME}_benchmark.csv" -RESULT_DASHBOARD="${MAIN_OUTPUT_DIR}/${APP_NAME}_dashboard" -JMETER_LOG_FILE="${MAIN_OUTPUT_DIR}/${APP_NAME}_jmeter.log" +MAIN_OUTPUT_DIR="${SAVE_OUTPUT}" +FOLDER_NAME=$(basename "$SAVE_OUTPUT") -echo "--- Preparing for test run: '$APP_NAME' ---" +RESULT_CSV="${MAIN_OUTPUT_DIR}/${FOLDER_NAME}_benchmark.csv" +RESULT_DASHBOARD="${MAIN_OUTPUT_DIR}/${FOLDER_NAME}_dashboard" +JMETER_LOG_FILE="${MAIN_OUTPUT_DIR}/${FOLDER_NAME}_jmeter.log" + +echo "--- Preparing for test run: '$FOLDER_NAME' ---" mkdir -p "$MAIN_OUTPUT_DIR" echo "Output will be saved in: $MAIN_OUTPUT_DIR" @@ -98,7 +107,8 @@ $JMETER_CMD -n \ -j "$JMETER_LOG_FILE" \ -Jthreads="$THREADS" \ -Jloops="$LOOPS" \ - -Jurl="$TARGET_URL" + -Jurl="$TARGET_URL" \ + -Jport="$TARGET_PORT" if [ $? -eq 0 ]; then echo "" diff --git a/throughput/stitcher-benchmark.jmx b/throughput/stitcher-benchmark.jmx index c93b114..68efa02 100644 --- a/throughput/stitcher-benchmark.jmx +++ b/throughput/stitcher-benchmark.jmx @@ -5,6 +5,8 @@ + false + false @@ -18,9 +20,21 @@ + + , + + canvas_rects.txt + false + false + true + shareMode.all + false + canvasRect + + ${__P(url, stitchaton.local)} - 5000 + ${__P(port, 5000)} http /api/image/generate true @@ -43,52 +57,6 @@ - - true - - - // Function to convert a numeric index (1-31) to the SBS Plate Row format (A-AE) -String indexToRow(int num) { - if (num <= 0) return ""; - if (num <= 26) { - // A-Z is ASCII 65-90. 'A' is char 65. So (num - 1) + 65. - return (char)(num + 64) as String; - } else { - // For AA-AE, the first char is 'A'. - // 27 -> AA, 28 -> AB, etc. - // The second char is (num - 27) + 65 -> 'A', 'B', etc. - return "A" + (char)(num - 26 + 64) as String; - } -} - -// Define the maximum starting indices for a 2x2 grid -// Max row is AE (31), so max starting row is AD (30) -// Max col is 55, so max starting col is 54 -int maxStartRowIndex = 30; -int maxStartCol = 54; - -// Generate random starting coordinates -// nextInt(bound) generates 0 to bound-1, so add 1 -int randomRowStartIndex = new Random().nextInt(maxStartRowIndex) + 1; -int randomColStart = new Random().nextInt(maxStartCol) + 1; - -// Calculate the end coordinates for the 2x2 grid -String rowStart = indexToRow(randomRowStartIndex); -String rowEnd = indexToRow(randomRowStartIndex + 1); -int colEnd = randomColStart + 1; - -// Construct the final canvas_rect string -String canvasRectValue = "${rowStart}${randomColStart}:${rowEnd}${colEnd}"; - -// Store the generated string in a JMeter variable named "canvasRect" -// This makes it available to the HTTP Request sampler -vars.put("canvasRect", canvasRectValue); - -// Optional: Log the generated value to see it in the JMeter log (for debugging) -log.info("Generated canvas_rect: " + canvasRectValue); - groovy - -