├── diagrams └── EI_Performance_Deployment.jpg ├── components └── perftest-capp │ ├── src │ └── main │ │ └── capp │ │ ├── EchoProxy │ │ ├── artifact.xml │ │ └── EchoApi-1.0.0.xml │ │ ├── DirectAPI_1.0.0 │ │ ├── artifact.xml │ │ └── DirectAPI-1.0.0.xml │ │ ├── CBRProxy_1.0.0 │ │ ├── artifact.xml │ │ └── CBRProxy-1.0.0.xml │ │ ├── DMPerfTest_1.0.0 │ │ ├── artifact.xml │ │ ├── registry-info.xml │ │ └── resources │ │ │ └── DMPerfTest.dmc │ │ ├── XSLTProxy_1.0.0 │ │ ├── artifact.xml │ │ └── XSLTProxy-1.0.0.xml │ │ ├── RealService_1.0.0 │ │ ├── artifact.xml │ │ └── RealService-1.0.0.xml │ │ ├── proxy_wsdl_1.0.0 │ │ └── artifact.xml │ │ ├── DirectProxy_1.0.0 │ │ ├── artifact.xml │ │ └── DirectProxy-1.0.0.xml │ │ ├── SecureProxy_1.0.0 │ │ ├── artifact.xml │ │ └── SecureProxy-1.0.0.xml │ │ ├── XSLT_Datatransform_1.0.0 │ │ ├── artifact.xml │ │ ├── registry-info.xml │ │ └── resources │ │ │ └── XSLT_Datatransform.xslt │ │ ├── xslt_transform_1.0.0 │ │ ├── artifact.xml │ │ └── xslt_transform-1.0.0.xml │ │ ├── DMPerfTest_inputSchema_1.0.0 │ │ ├── artifact.xml │ │ ├── registry-info.xml │ │ └── resources │ │ │ └── DMPerfTest_inputSchema.json │ │ ├── DatamapperProxy_1.0.0 │ │ ├── artifact.xml │ │ └── DatamapperProxy-1.0.0.xml │ │ ├── JsonToSOAPProxy_1.0.0 │ │ ├── artifact.xml │ │ └── JsonToSOAPProxy-1.0.0.xml │ │ ├── security_policy_1.0.0 │ │ ├── artifact.xml │ │ └── security_policy-1.0.0.xml │ │ ├── DMPerfTest_outputSchema_1.0.0 │ │ ├── artifact.xml │ │ ├── registry-info.xml │ │ └── resources │ │ │ └── DMPerfTest_outputSchema.json │ │ ├── XSLTEnhancedProxy_1.0.0 │ │ ├── artifact.xml │ │ └── XSLTEnhancedProxy-1.0.0.xml │ │ ├── fastxslt_transform_1.0.0 │ │ ├── artifact.xml │ │ └── fastxslt_transform-1.0.0.xml │ │ ├── CBRSOAPHeaderProxy_1.0.0 │ │ ├── artifact.xml │ │ └── CBRSOAPHeaderProxy-1.0.0.xml │ │ ├── DMPerfTest_xsltStyleSheet_1.0.0 │ │ ├── artifact.xml │ │ ├── registry-info.xml │ │ └── resources │ │ │ └── DMPerfTest_xsltStyleSheet.xml │ │ ├── XSLTTransformProxy_1.0.0 │ │ ├── artifact.xml │ │ └── XSLTTransformProxy-1.0.0.xml │ │ ├── MessageBuildingProxy_1.0.0 │ │ ├── artifact.xml │ │ └── MessageBuildingProxy-1.0.0.xml │ │ ├── xslt_transform_reverse_1.0.0 │ │ ├── artifact.xml │ │ └── xslt_transform_reverse-1.0.0.xml │ │ ├── CBRTransportHeaderProxy_1.0.0 │ │ ├── artifact.xml │ │ └── CBRTransportHeaderProxy-1.0.0.xml │ │ ├── EnrichBackAndForthProxy_1.0.0 │ │ ├── artifact.xml │ │ └── EnrichBackAndForthProxy-1.0.0.xml │ │ ├── IterateAndAggregateProxy_1.0.0 │ │ ├── artifact.xml │ │ └── IterateAndAggregateProxy-1.0.0.xml │ │ ├── fastxslt_transform_reverse_1.0.0 │ │ ├── artifact.xml │ │ └── fastxslt_transform_reverse-1.0.0.xml │ │ ├── PayloadFactoryWith100ElementsProxy_1.0.0 │ │ └── artifact.xml │ │ ├── PayloadFactoryWith20ElementsProxy_1.0.0 │ │ ├── artifact.xml │ │ └── PayloadFactoryWith20ElementsProxy-1.0.0.xml │ │ ├── PayloadFactoryWith50ElementsProxy_1.0.0 │ │ └── artifact.xml │ │ ├── CloneAndAggregateWithFourBackendProxy_1.0.0 │ │ ├── artifact.xml │ │ └── CloneAndAggregateWithFourBackendProxy-1.0.0.xml │ │ ├── CloneAndAggregateWithTwoBackendProxy_1.0.0 │ │ ├── artifact.xml │ │ └── CloneAndAggregateWithTwoBackendProxy-1.0.0.xml │ │ ├── CloneAndAggregateWithEightBackendProxy_1.0.0 │ │ ├── artifact.xml │ │ └── CloneAndAggregateWithEightBackendProxy-1.0.0.xml │ │ └── artifacts.xml │ ├── build.xml │ └── pom.xml ├── .github └── CODEOWNERS ├── .gitignore ├── distribution ├── scripts │ ├── jmeter │ │ ├── requests │ │ │ ├── 500B_buyStocks.xml │ │ │ ├── payload-creator-script │ │ │ │ ├── README.md │ │ │ │ ├── payload-creator-with-iterations │ │ │ │ ├── payload-creator-json │ │ │ │ └── payload-creator │ │ │ ├── 5Elements_buyStocks.xml │ │ │ ├── 500B_JSONPayload.json │ │ │ ├── 1000B_buyStocks.xml │ │ │ ├── 10Elements_buyStocks.xml │ │ │ ├── 1000B_JSONPayload.json │ │ │ ├── 20Elements_buyStocks.xml │ │ │ ├── 50Elements_buyStocks.xml │ │ │ └── 100Elements_buyStocks.xml │ │ ├── run-ei-performance-tests.sh │ │ ├── run-mi-docker-performance-tests.sh │ │ ├── templates │ │ │ └── summary.md │ │ ├── ei-test-json.jmx │ │ ├── ei-test-without-soap.jmx │ │ ├── ei-test.jmx │ │ └── performance-test-scenarios.sh │ ├── ei │ │ ├── mi-docker-stop.sh │ │ ├── mi-start.sh │ │ ├── ei-start.sh │ │ └── mi-docker-start.sh │ ├── setup │ │ ├── setup-mi-docker.sh │ │ ├── setup-mi.sh │ │ └── setup-ei.sh │ └── cloudformation │ │ ├── templates │ │ ├── mi_docker_perf_test_cfn.yaml │ │ ├── mi_perf_test_cfn.yaml │ │ └── ei_perf_test_cfn.yaml │ │ ├── run-mi-docker-performance-tests.sh │ │ ├── run-ei-performance-tests.sh │ │ └── run-mi-performance-tests.sh ├── bin.xml └── pom.xml ├── issue_template.md ├── pull_request_template.md ├── pom.xml └── README.md /diagrams/EI_Performance_Deployment.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wso2/performance-ei/HEAD/diagrams/EI_Performance_Deployment.jpg -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/EchoProxy/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | EchoApi-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DirectAPI_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | DirectAPI-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CBRProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | CBRProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | registry-info.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLTProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | XSLTProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/RealService_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | RealService-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/proxy_wsdl_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | proxy_wsdl-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DirectProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | DirectProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/SecureProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | SecureProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLT_Datatransform_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | registry-info.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/xslt_transform_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | xslt_transform-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_inputSchema_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | registry-info.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DatamapperProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | DatamapperProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/JsonToSOAPProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | JsonToSOAPProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/security_policy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | security_policy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Lines starting with '#' are comments. 2 | # Each line is a file pattern followed by one or more owners. 3 | 4 | # See: https://help.github.com/articles/about-codeowners/ 5 | 6 | # These owners will be the default owners for everything in the repo. 7 | * @arunans23 8 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_outputSchema_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | registry-info.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLTEnhancedProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | XSLTEnhancedProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLT_Datatransform_1.0.0/registry-info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | XSLT_Datatransform.xslt 4 | /_system/config 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/fastxslt_transform_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | fastxslt_transform-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CBRSOAPHeaderProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | CBRSOAPHeaderProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_xsltStyleSheet_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | registry-info.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLTTransformProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | XSLTTransformProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/MessageBuildingProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | MessageBuildingProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/xslt_transform_reverse_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | xslt_transform_reverse-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CBRTransportHeaderProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | CBRTransportHeaderProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_1.0.0/registry-info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DMPerfTest.dmc 4 | /_system/governance/datamapper 5 | text/plain 6 | 7 | 8 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/EnrichBackAndForthProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | EnrichBackAndForthProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/IterateAndAggregateProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | IterateAndAggregateProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/fastxslt_transform_reverse_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | fastxslt_transform_reverse-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_inputSchema_1.0.0/registry-info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DMPerfTest_inputSchema.json 4 | /_system/governance/datamapper 5 | text/plain 6 | 7 | 8 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_outputSchema_1.0.0/registry-info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DMPerfTest_outputSchema.json 4 | /_system/governance/datamapper 5 | text/plain 6 | 7 | 8 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_xsltStyleSheet_1.0.0/registry-info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DMPerfTest_xsltStyleSheet.xml 4 | /_system/governance/datamapper 5 | text/plain 6 | 7 | 8 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/PayloadFactoryWith100ElementsProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | PayloadFactoryWith100ElementsProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/PayloadFactoryWith20ElementsProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | PayloadFactoryWith20ElementsProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/PayloadFactoryWith50ElementsProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | PayloadFactoryWith50ElementsProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CloneAndAggregateWithFourBackendProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | CloneAndAggregateWithFourBackendProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CloneAndAggregateWithTwoBackendProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | CloneAndAggregateWithTwoBackendProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CloneAndAggregateWithEightBackendProxy_1.0.0/artifact.xml: -------------------------------------------------------------------------------- 1 | 2 | CloneAndAggregateWithEightBackendProxy-1.0.0.xml 3 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Log file 2 | *.log 3 | 4 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 5 | hs_err_pid* 6 | 7 | #Idea files 8 | .idea 9 | *.iml 10 | 11 | # Maven Target 12 | target 13 | 14 | # Generated POM 15 | dependency-reduced-pom.xml 16 | 17 | # Logs 18 | logs 19 | 20 | # Python Cache 21 | __pycache__ 22 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DirectAPI_1.0.0/DirectAPI-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/500B_buyStocks.xml: -------------------------------------------------------------------------------- 1 | 2 | xadmin;server1;community#1.0## 3 | 4 | SUNindika14.56500 5 | MSFTdoe23.568030 6 | 7 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLTTransformProxy_1.0.0/XSLTTransformProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/payload-creator-script/README.md: -------------------------------------------------------------------------------- 1 | # Execution 2 | 3 | ./payload-creator {size_In_Bytes} 4 | 5 | eg: ./payload-creator 512 6 | 7 | Output: 8 | 9 | Creating file ... 10 | File Name : 512B_buyStocks.xml 11 | Size requested : 512 bytes 12 | Size created : 499 bytes 13 | Difference : 13 bytes 14 | 15 | 16 | ./payload-creator-with-iterations {no._of_iterations} 17 | 18 | eg: ./payload-creator-with-iterations 12 19 | 20 | Creating file ... 21 | File Name : 12Elements_buyStocks.xml 22 | No. of elements : 12 23 | 24 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/5Elements_buyStocks.xml: -------------------------------------------------------------------------------- 1 | 2 | IBMjohn140.345 3 | IBMjohn140.344 4 | IBMjohn140.343 5 | IBMjohn140.342 6 | IBMjohn140.341 7 | 8 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/500B_JSONPayload.json: -------------------------------------------------------------------------------- 1 | { 2 | "payload": { 3 | "symbol": [ 4 | "json", 5 | "json", 6 | "json", 7 | "json", 8 | "json", 9 | "json", 10 | "json", 11 | "json", 12 | "json", 13 | "json", 14 | "json", 15 | "json", 16 | "json", 17 | "json", 18 | "json", 19 | "json", 20 | "json", 21 | "json", 22 | "json", 23 | "json", 24 | "json", 25 | "json" 26 | ] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLT_Datatransform_1.0.0/resources/XSLT_Datatransform.xslt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | XYZdoe23.568030 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DatamapperProxy_1.0.0/DatamapperProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/MessageBuildingProxy_1.0.0/MessageBuildingProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | $1 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /issue_template.md: -------------------------------------------------------------------------------- 1 | **Description:** 2 | 3 | 4 | **Suggested Labels:** 5 | 6 | 7 | **Suggested Assignees:** 8 | 9 | 10 | **Affected Product Version:** 11 | 12 | **OS, DB, other environment details and versions:** 13 | 14 | **Steps to reproduce:** 15 | 16 | 17 | **Related Issues:** 18 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/payload-creator-script/payload-creator-with-iterations: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | writeHead(){ 5 | echo "" > $1 6 | } 7 | 8 | writeTail() { 9 | echo "" >> $1 10 | } 11 | 12 | writeIBM(){ 13 | echo "IBMjohn140.34$2" >> $1 14 | } 15 | 16 | #################### START ########################### 17 | 18 | iterations=$1 19 | file_name=$1Elements_buyStocks.xml 20 | 21 | echo "Creating file ..." 22 | 23 | writeHead "$file_name" 24 | 25 | loop=$iterations 26 | 27 | while [ "$loop" != "0" ] 28 | do 29 | writeIBM "$file_name" "$loop" 30 | loop=`expr $loop - 1` 31 | done 32 | 33 | writeTail "$file_name" 34 | 35 | echo "File Name : $file_name" 36 | echo "No. of elements : $iterations" 37 | 38 | #################### END ########################### 39 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/1000B_buyStocks.xml: -------------------------------------------------------------------------------- 1 | 2 | xadmin;server1;community#1.0## 3 | 4 | Nn1.01 5 | SUNindika14.56500 6 | MSFTdoe23.568030 7 | IBMjohn140.342000 8 | Nn1.01 9 | SUNindika14.56500 10 | MSFTdoe23.568030 11 | 12 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/EchoProxy/EchoApi-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/EnrichBackAndForthProxy_1.0.0/EnrichBackAndForthProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | world 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/10Elements_buyStocks.xml: -------------------------------------------------------------------------------- 1 | 2 | IBMjohn140.3410 3 | IBMjohn140.349 4 | IBMjohn140.348 5 | IBMjohn140.347 6 | IBMjohn140.346 7 | IBMjohn140.345 8 | IBMjohn140.344 9 | IBMjohn140.343 10 | IBMjohn140.342 11 | IBMjohn140.341 12 | 13 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CloneAndAggregateWithTwoBackendProxy_1.0.0/CloneAndAggregateWithTwoBackendProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /distribution/scripts/ei/mi-docker-stop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright 2019 WSO2 Inc. (http://wso2.org) 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | # ---------------------------------------------------------------------------- 17 | # Stop WSO2 Enterprise Micro Integrator 18 | # ---------------------------------------------------------------------------- 19 | container_id=$(docker ps -f name=microei -q -a) 20 | if [[ -n "$container_id" ]]; then 21 | echo "Stopping docker container: $container_id" 22 | docker stop ${container_id} 23 | echo "Removing docker container: $container_id" 24 | docker rm ${container_id} 25 | fi 26 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DirectProxy_1.0.0/DirectProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/JsonToSOAPProxy_1.0.0/JsonToSOAPProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | $1 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CloneAndAggregateWithFourBackendProxy_1.0.0/CloneAndAggregateWithFourBackendProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/1000B_JSONPayload.json: -------------------------------------------------------------------------------- 1 | { 2 | "payload": { 3 | "symbol": [ 4 | "json", 5 | "json", 6 | "json", 7 | "json", 8 | "json", 9 | "json", 10 | "json", 11 | "json", 12 | "json", 13 | "json", 14 | "json", 15 | "json", 16 | "json", 17 | "json", 18 | "json", 19 | "json", 20 | "json", 21 | "json", 22 | "json", 23 | "json", 24 | "json", 25 | "json", 26 | "json", 27 | "json", 28 | "json", 29 | "json", 30 | "json", 31 | "json", 32 | "json", 33 | "json", 34 | "json", 35 | "json", 36 | "json", 37 | "json", 38 | "json", 39 | "json", 40 | "json", 41 | "json", 42 | "json", 43 | "json", 44 | "json", 45 | "json", 46 | "json", 47 | "json", 48 | "json", 49 | "json", 50 | "json" 51 | ] 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/IterateAndAggregateProxy_1.0.0/IterateAndAggregateProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLTProxy_1.0.0/XSLTProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /components/perftest-capp/build.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/XSLTEnhancedProxy_1.0.0/XSLTEnhancedProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/RealService_1.0.0/RealService-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 |
19 | 20 | 30000 21 | fault 22 | 23 | 24 | -1 25 | 1.0 26 | 27 | 28 | -1 29 | 30 |
31 |
32 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_xsltStyleSheet_1.0.0/resources/DMPerfTest_xsltStyleSheet.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CloneAndAggregateWithEightBackendProxy_1.0.0/CloneAndAggregateWithEightBackendProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/SecureProxy_1.0.0/SecureProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/payload-creator-script/payload-creator-json: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 59 bytes 4 | writeHead(){ 5 | echo "{ 6 | \"payload\": { 7 | \"symbol\": [ 8 | \"json\"," > $1 9 | } 10 | 11 | # 96-59 bytes 12 | writeTail() { 13 | echo " \"json\" 14 | ] 15 | } 16 | }" >> $1 17 | } 18 | 19 | # 20 bytes 20 | writeJSON(){ 21 | echo " \"json\"," >> $1 22 | } 23 | 24 | 25 | writeSymbol(){ 26 | 27 | writeJSON "$2" 28 | accumulatedSize=`expr $accumulatedSize + $JSON` 29 | } 30 | 31 | #################### START ########################### 32 | 33 | size=$1 34 | file_name=$1B_JSONPayload.json 35 | headAndTail=96 36 | JSON=20 37 | minPayloadSymbolSize=20 ## Avg size 38 | reamainingSize=`expr $size - $headAndTail` 39 | minPayloadSize=`expr $minPayloadSymbolSize + $headAndTail` 40 | accumulatedSize=$headAndTail 41 | 42 | if [[ "$reamainingSize" -lt "$minPayloadSymbolSize" ]]; then 43 | echo "Provided size is less than minimum payload size $minPayloadSize bytes" 44 | exit 0 45 | fi 46 | 47 | symbol_repetition=`expr $reamainingSize / $minPayloadSymbolSize` 48 | 49 | echo "Creating file ..." 50 | 51 | writeHead "$file_name" 52 | 53 | while [ "$symbol_repetition" != "0" ] 54 | do 55 | writeSymbol "$symbol_repetition" "$file_name" 56 | symbol_repetition=`expr $symbol_repetition - 1` 57 | done 58 | 59 | writeTail "$file_name" 60 | 61 | mv $file_name ../$file_name 62 | 63 | echo "File Name : $file_name" 64 | echo "Size requested : $size bytes" 65 | echo "Size created : $accumulatedSize bytes" 66 | echo "Difference : `expr $size - $accumulatedSize` bytes" 67 | 68 | #################### END ########################### 69 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_1.0.0/resources/DMPerfTest.dmc: -------------------------------------------------------------------------------- 1 | map_S_Envelope_S_Envelope = function(){ 2 | var outputsoapenv_Envelope={}; 3 | 4 | var count_i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d = 0; 5 | outputsoapenv_Envelope = {}; 6 | outputsoapenv_Envelope.soapenv_Header = {}; 7 | outputsoapenv_Envelope.soapenv_Header.routing = {}; 8 | outputsoapenv_Envelope.soapenv_Header.routing.content = inputsoapenv_Envelope.soapenv_Header.routing.content; 9 | outputsoapenv_Envelope.soapenv_Body = {}; 10 | outputsoapenv_Envelope.soapenv_Body.m_buyStocks = {}; 11 | outputsoapenv_Envelope.soapenv_Body.m_buyStocks.order = []; 12 | 13 | for(i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d in inputsoapenv_Envelope.soapenv_Body.m_buyStocks.order){ 14 | outputsoapenv_Envelope.soapenv_Body.m_buyStocks.order[count_i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d] = {}; 15 | outputsoapenv_Envelope.soapenv_Body.m_buyStocks.order[count_i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d].symbol = 'XYZ'; 16 | outputsoapenv_Envelope.soapenv_Body.m_buyStocks.order[count_i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d].buyerID = inputsoapenv_Envelope.soapenv_Body.m_buyStocks.order[i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d].buyerID; 17 | outputsoapenv_Envelope.soapenv_Body.m_buyStocks.order[count_i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d].price = inputsoapenv_Envelope.soapenv_Body.m_buyStocks.order[i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d].price; 18 | outputsoapenv_Envelope.soapenv_Body.m_buyStocks.order[count_i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d].volume = inputsoapenv_Envelope.soapenv_Body.m_buyStocks.order[i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d].volume; 19 | 20 | count_i_order_4d726c35_c54d_4cc6_a302_2c9fc981f93d++; 21 | } 22 | return outputsoapenv_Envelope; 23 | }; 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /distribution/bin.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | false 19 | performance-ei 20 | 21 | tar.gz 22 | 23 | 24 | 25 | 26 | 27 | org.wso2.performance.common:performance-common-distribution:tar.gz 28 | 29 | true 30 | false 31 | true 32 | . 33 | 34 | 35 | 36 | 37 | 38 | ../components/perftest-capp/target/EIPerformanceTestArtifacts-1.0.0.car 39 | ei/capp 40 | 41 | 42 | 43 | 44 | 45 | scripts 46 | . 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CBRProxy_1.0.0/CBRProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CBRTransportHeaderProxy_1.0.0/CBRTransportHeaderProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/CBRSOAPHeaderProxy_1.0.0/CBRSOAPHeaderProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/20Elements_buyStocks.xml: -------------------------------------------------------------------------------- 1 | 2 | IBMjohn140.3420 3 | IBMjohn140.3419 4 | IBMjohn140.3418 5 | IBMjohn140.3417 6 | IBMjohn140.3416 7 | IBMjohn140.3415 8 | IBMjohn140.3414 9 | IBMjohn140.3413 10 | IBMjohn140.3412 11 | IBMjohn140.3411 12 | IBMjohn140.3410 13 | IBMjohn140.349 14 | IBMjohn140.348 15 | IBMjohn140.347 16 | IBMjohn140.346 17 | IBMjohn140.345 18 | IBMjohn140.344 19 | IBMjohn140.343 20 | IBMjohn140.342 21 | IBMjohn140.341 22 | 23 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/xslt_transform_1.0.0/xslt_transform-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/fastxslt_transform_1.0.0/fastxslt_transform-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /components/perftest-capp/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | org.wso2.performance.ei 24 | performance-ei 25 | 0.1.0-SNAPSHOT 26 | ../../pom.xml 27 | 28 | 29 | 4.0.0 30 | perftest-capp 31 | pom 32 | 33 | 34 | 35 | 36 | maven-antrun-plugin 37 | 38 | 39 | process-resources 40 | 41 | 42 | 43 | 44 | 45 | 46 | run 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/xslt_transform_reverse_1.0.0/xslt_transform_reverse-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/fastxslt_transform_reverse_1.0.0/fastxslt_transform_reverse-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /distribution/scripts/setup/setup-mi-docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright 2019 WSO2 Inc. (http://wso2.org) 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | # ---------------------------------------------------------------------------- 17 | # Setup WSO2 Enterprise Integrator 18 | # ---------------------------------------------------------------------------- 19 | # Make sure the script is running as root. 20 | if [ "$UID" -ne "0" ]; then 21 | echo "You must be root to run $0. Try following" 22 | echo "sudo $0" 23 | exit 9 24 | fi 25 | 26 | export script_dir=$(dirname "$0") 27 | export micro_ei_docker_image="" 28 | export user="" 29 | export netty_host="" 30 | 31 | function usageHelp() { 32 | echo "-n: The hostname of Netty Service." 33 | echo "-u: General user of the OS." 34 | } 35 | export -f usageHelp 36 | 37 | while getopts "n:u:h" opt; do 38 | case "${opt}" in 39 | n) 40 | netty_host=${OPTARG} 41 | ;; 42 | u) 43 | user=${OPTARG} 44 | ;; 45 | h) 46 | usageHelp 47 | exit 0 48 | ;; 49 | *) 50 | opts+=("-${opt}") 51 | [[ -n "$OPTARG" ]] && opts+=("$OPTARG") 52 | ;; 53 | esac 54 | done 55 | shift "$((OPTIND - 1))" 56 | 57 | # Validating input parameters 58 | validate() { 59 | if [[ -z $netty_host ]]; then 60 | echo "Please provide netty host." 61 | exit 1 62 | fi 63 | 64 | if [[ -z $user ]]; then 65 | echo "Please provide the username of the general os user" 66 | exit 1 67 | fi 68 | } 69 | export -f validate 70 | 71 | function setup() { 72 | $script_dir/../docker/install-docker.sh -u $user 73 | echo "$netty_host netty" >>/etc/hosts 74 | } 75 | export -f setup 76 | 77 | $script_dir/../setup/setup-common.sh "${opts[@]}" "$@" -p curl -p jq -p unzip 78 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/run-ei-performance-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright (c) 2018, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | # ---------------------------------------------------------------------------- 19 | # Run WSO2 Enterprise Integrator Performance Tests 20 | # ---------------------------------------------------------------------------- 21 | script_dir=$(dirname "$0") 22 | # Execute common script 23 | . $script_dir/perf-test-common.sh "${ARGS[@]}" 24 | 25 | function initialize() { 26 | export ei_ssh_host=ei 27 | export ei_host=$(get_ssh_hostname $ei_ssh_host) 28 | } 29 | export -f initialize 30 | 31 | # Include Test Scenarios 32 | . $script_dir/performance-test-scenarios.sh 33 | 34 | function before_execute_test_scenario() { 35 | local service_path=${scenario[path]} 36 | local protocol=${scenario[protocol]} 37 | local response_pattern="soapenv:Body" 38 | 39 | jmeter_params+=("host=$ei_host" "path=$service_path" "response_pattern=${response_pattern}") 40 | jmeter_params+=("response_size=${msize}B" "protocol=$protocol") 41 | 42 | if [[ "${scenario[name]}" == "SecureProxy" ]]; then 43 | jmeter_params+=("port=8243") 44 | jmeter_params+=("payload=$HOME/jmeter/requests/${msize}B_buyStocks_secure.xml") 45 | else 46 | jmeter_params+=("port=8280") 47 | jmeter_params+=("payload=$HOME/jmeter/requests/${msize}B_buyStocks.xml") 48 | fi 49 | 50 | echo "Starting Enterprise Integrator..." 51 | ssh $ei_ssh_host "./ei/ei-start.sh -m $heap" 52 | } 53 | 54 | function after_execute_test_scenario() { 55 | write_server_metrics ei $ei_ssh_host carbon 56 | download_file $ei_ssh_host wso2ei/repository/logs/wso2carbon.log wso2carbon.log 57 | download_file $ei_ssh_host wso2ei/repository/logs/gc.log ei_gc.log 58 | } 59 | 60 | test_scenarios 61 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_inputSchema_1.0.0/resources/DMPerfTest_inputSchema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema" : "http://wso2.org/json-schema/wso2-data-mapper-v5.0.0/schema#", 3 | "inputType" : "XML", 4 | "id" : "http://wso2jsonschema.org", 5 | "title" : "soapenv:Envelope", 6 | "type" : "object", 7 | "properties" : { 8 | "soapenv:Header" : { 9 | "id" : "http://wso2jsonschema.org/soapenv:Header", 10 | "type" : "object", 11 | "properties" : { 12 | "routing" : { 13 | "id" : "http://wso2jsonschema.org/soapenv:Header/routing", 14 | "type" : "object", 15 | "properties" : { 16 | "content" : { 17 | "id" : "http://wso2jsonschema.org/soapenv:Header/routing/content", 18 | "type" : "string" 19 | } 20 | } 21 | } 22 | } 23 | }, 24 | "soapenv:Body" : { 25 | "id" : "http://wso2jsonschema.org/soapenv:Body", 26 | "type" : "object", 27 | "properties" : { 28 | "m:buyStocks" : { 29 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks", 30 | "type" : "object", 31 | "properties" : { 32 | "order" : { 33 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order", 34 | "type" : "array", 35 | "items" : [ { 36 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0", 37 | "type" : "object", 38 | "properties" : { 39 | "symbol" : { 40 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0/symbol", 41 | "type" : "string" 42 | }, 43 | "buyerID" : { 44 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0/buyerID", 45 | "type" : "string" 46 | }, 47 | "price" : { 48 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0/price", 49 | "type" : "number" 50 | }, 51 | "volume" : { 52 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0/volume", 53 | "type" : "number" 54 | } 55 | } 56 | } ] 57 | } 58 | } 59 | } 60 | } 61 | } 62 | }, 63 | "namespaces" : [ { 64 | "prefix" : "soapenv", 65 | "url" : "http://schemas.xmlsoap.org/soap/envelope/" 66 | }, { 67 | "prefix" : "m", 68 | "url" : "http://services.samples/xsd" 69 | }, { 70 | "prefix" : "axis2ns5", 71 | "url" : "http://someuri" 72 | } ] 73 | } -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/DMPerfTest_outputSchema_1.0.0/resources/DMPerfTest_outputSchema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema" : "http://wso2.org/json-schema/wso2-data-mapper-v5.0.0/schema#", 3 | "outputType" : "XML", 4 | "id" : "http://wso2jsonschema.org", 5 | "title" : "soapenv:Envelope", 6 | "type" : "object", 7 | "properties" : { 8 | "soapenv:Header" : { 9 | "id" : "http://wso2jsonschema.org/soapenv:Header", 10 | "type" : "object", 11 | "properties" : { 12 | "routing" : { 13 | "id" : "http://wso2jsonschema.org/soapenv:Header/routing", 14 | "type" : "object", 15 | "properties" : { 16 | "content" : { 17 | "id" : "http://wso2jsonschema.org/soapenv:Header/routing/content", 18 | "type" : "string" 19 | } 20 | } 21 | } 22 | } 23 | }, 24 | "soapenv:Body" : { 25 | "id" : "http://wso2jsonschema.org/soapenv:Body", 26 | "type" : "object", 27 | "properties" : { 28 | "m:buyStocks" : { 29 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks", 30 | "type" : "object", 31 | "properties" : { 32 | "order" : { 33 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order", 34 | "type" : "array", 35 | "items" : [ { 36 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0", 37 | "type" : "object", 38 | "properties" : { 39 | "symbol" : { 40 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0/symbol", 41 | "type" : "string" 42 | }, 43 | "buyerID" : { 44 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0/buyerID", 45 | "type" : "string" 46 | }, 47 | "price" : { 48 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0/price", 49 | "type" : "number" 50 | }, 51 | "volume" : { 52 | "id" : "http://wso2jsonschema.org/soapenv:Body/m:buyStocks/order/0/volume", 53 | "type" : "number" 54 | } 55 | } 56 | } ] 57 | } 58 | } 59 | } 60 | } 61 | } 62 | }, 63 | "namespaces" : [ { 64 | "prefix" : "soapenv", 65 | "url" : "http://schemas.xmlsoap.org/soap/envelope/" 66 | }, { 67 | "prefix" : "m", 68 | "url" : "http://services.samples/xsd" 69 | }, { 70 | "prefix" : "axis2ns6", 71 | "url" : "http://someuri" 72 | } ] 73 | } -------------------------------------------------------------------------------- /pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Purpose 2 | > Describe the problems, issues, or needs driving this feature/fix and include links to related issues in the following format: Resolves issue1, issue2, etc. 3 | 4 | ## Goals 5 | > Describe the solutions that this feature/fix will introduce to resolve the problems described above 6 | 7 | ## Approach 8 | > Describe how you are implementing the solutions. Include an animated GIF or screenshot if the change affects the UI (email documentation@wso2.com to review all UI text). Include a link to a Markdown file or Google doc if the feature write-up is too long to paste here. 9 | 10 | ## User stories 11 | > Summary of user stories addressed by this change> 12 | 13 | ## Release note 14 | > Brief description of the new feature or bug fix as it will appear in the release notes 15 | 16 | ## Documentation 17 | > Link(s) to product documentation that addresses the changes of this PR. If no doc impact, enter “N/A” plus brief explanation of why there’s no doc impact 18 | 19 | ## Training 20 | > Link to the PR for changes to the training content in https://github.com/wso2/WSO2-Training, if applicable 21 | 22 | ## Certification 23 | > Type “Sent” when you have provided new/updated certification questions, plus four answers for each question (correct answer highlighted in bold), based on this change. Certification questions/answers should be sent to certification@wso2.com and NOT pasted in this PR. If there is no impact on certification exams, type “N/A” and explain why. 24 | 25 | ## Marketing 26 | > Link to drafts of marketing content that will describe and promote this feature, including product page changes, technical articles, blog posts, videos, etc., if applicable 27 | 28 | ## Automation tests 29 | - Unit tests 30 | > Code coverage information 31 | - Integration tests 32 | > Details about the test cases and coverage 33 | 34 | ## Security checks 35 | - Followed secure coding standards in http://wso2.com/technical-reports/wso2-secure-engineering-guidelines? yes/no 36 | - Ran FindSecurityBugs plugin and verified report? yes/no 37 | - Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets? yes/no 38 | 39 | ## Samples 40 | > Provide high-level details about the samples related to this feature 41 | 42 | ## Related PRs 43 | > List any other related PRs 44 | 45 | ## Migrations (if applicable) 46 | > Describe migration steps and platforms on which migration has been tested 47 | 48 | ## Test environment 49 | > List all JDK versions, operating systems, databases, and browser/versions on which this feature/fix was tested 50 | 51 | ## Learning 52 | > Describe the research phase and any blog posts, patterns, libraries, or add-ons you used to solve the problem. -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/payload-creator-script/payload-creator: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 249 bytes 4 | writeHead(){ 5 | echo " 6 | xadmin;server1;community#1.0## 7 | " > $1 8 | } 9 | 10 | # 47 bytes 11 | writeTail() { 12 | echo "" >> $1 13 | } 14 | 15 | # 101 bytes 16 | writeIBM(){ 17 | echo "IBMjohn140.342000" >> $1 18 | } 19 | 20 | # 100 bytes 21 | writeMSFT(){ 22 | echo "MSFTdoe23.568030" >> $1 23 | } 24 | 25 | # 101 bytes 26 | writeSUN(){ 27 | echo "SUNindika14.56500" >> $1 28 | } 29 | 30 | # 90 bytes 31 | writeSimple(){ 32 | echo "Nn1.01" >> $1 33 | } 34 | 35 | writeSymbol(){ 36 | 37 | mod=`expr $1 % 4` 38 | #echo "mod value ========= $mod" 39 | if [ $mod -eq 0 ] 40 | then 41 | writeIBM "$2" 42 | accumulatedSize=`expr $accumulatedSize + $IBM` 43 | elif [ $mod -eq 1 ] 44 | then 45 | writeMSFT "$2" 46 | accumulatedSize=`expr $accumulatedSize + $MSFT` 47 | elif [ $mod -eq 2 ] 48 | then 49 | writeSUN "$2" 50 | accumulatedSize=`expr $accumulatedSize + $SUN` 51 | else 52 | writeSimple "$2" 53 | accumulatedSize=`expr $accumulatedSize + $Simple` 54 | fi 55 | } 56 | 57 | #################### START ########################### 58 | 59 | size=$1 60 | file_name=$1B_buyStocks.xml 61 | headAndTail=298 62 | IBM=101 63 | MSFT=100 64 | SUN=101 65 | Simple=90 66 | minPayloadSymbolSize=98 ## Avg size 67 | reamainingSize=`expr $size - $headAndTail` 68 | minPayloadSize=`expr $minPayloadSymbolSize + $headAndTail` 69 | accumulatedSize=$headAndTail 70 | 71 | if [[ "$reamainingSize" -lt "$minPayloadSymbolSize" ]]; then 72 | echo "Provided size is less than minimum payload size $minPayloadSize bytes" 73 | exit 0 74 | fi 75 | 76 | symbol_repetition=`expr $reamainingSize / $minPayloadSymbolSize` 77 | 78 | echo "Creating file ..." 79 | 80 | writeHead "$file_name" 81 | 82 | while [ "$symbol_repetition" != "0" ] 83 | do 84 | writeSymbol "$symbol_repetition" "$file_name" 85 | symbol_repetition=`expr $symbol_repetition - 1` 86 | done 87 | 88 | writeTail "$file_name" 89 | 90 | echo "File Name : $file_name" 91 | echo "Size requested : $size bytes" 92 | echo "Size created : $accumulatedSize bytes" 93 | echo "Difference : `expr $size - $accumulatedSize` bytes" 94 | 95 | #################### END ########################### 96 | -------------------------------------------------------------------------------- /distribution/scripts/cloudformation/templates/mi_docker_perf_test_cfn.yaml: -------------------------------------------------------------------------------- 1 | {# 2 | # Copyright (c) 2019, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | #} 18 | {% extends "common_perf_test_cfn.yaml" %} 19 | {% block parameters -%} 20 | WSO2MicroIntegratorInstanceType: 21 | Description: MI EC2 instance type 22 | Type: String 23 | BackendInstanceType: 24 | Description: Backend EC2 instance type 25 | Type: String 26 | {%- endblock %} 27 | {% block ec2instances -%} 28 | # JMeter Client 29 | {% call ec2instance('JMeterClientInstance', 'jmeter-client', '!Ref JMeterClientInstanceType', 30 | files=[{'name': 'apache-jmeter.tgz', 'ref': 'JMeterDistributionName'}, {'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}], 31 | public=True, volume_size=100) -%} 32 | /home/ubuntu/setup/setup-jmeter-client.sh -g -k /home/ubuntu/private_key.pem \ 33 | -i /home/ubuntu \ 34 | -d /home/ubuntu/jdk-8-linux-x64.tar.gz \ 35 | -f /home/ubuntu/apache-jmeter.tgz \ 36 | -c /home/ubuntu \ 37 | {%- if jmeter_servers >= 2 %} 38 | {%- for i in range(1, jmeter_servers+1) %} 39 | -a jmeter{{ i }} -n ${JMeterServer{{ i }}Instance.PrivateIp} \ 40 | {%- endfor %} 41 | {%- endif %} 42 | -a mi -n ${WSO2MicroIntegratorInstance.PrivateIp} \ 43 | -a netty -n ${BackendInstance.PrivateIp} 44 | {%- endcall %} 45 | {%- if jmeter_servers >= 2 %} 46 | # JMeter Servers 47 | {%- for i in range(1, jmeter_servers+1) -%} 48 | {% call ec2instance('JMeterServer' + i|string + 'Instance', 'jmeter-server-' + i|string, '!Ref JMeterServerInstanceType', 49 | files = [{'name': 'apache-jmeter.tgz', 'ref': 'JMeterDistributionName'}, {'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 50 | /home/ubuntu/setup/setup-jmeter.sh -g -i /home/ubuntu -d /home/ubuntu/jdk-8-linux-x64.tar.gz -f /home/ubuntu/apache-jmeter.tgz 51 | {%- endcall %} 52 | {% endfor -%} 53 | {%- endif %} 54 | # MI 55 | {% call ec2instance('WSO2MicroIntegratorInstance', 'mi', '!Ref WSO2MicroIntegratorInstanceType', 56 | files=[{'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 57 | /home/ubuntu/setup/setup-mi-docker.sh -n ${BackendInstance.PrivateIp} -u ubuntu 58 | {%- endcall %} 59 | # Backend 60 | {% call ec2instance('BackendInstance', 'backend', '!Ref BackendInstanceType', 61 | files=[{'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 62 | /home/ubuntu/setup/setup-netty.sh -g -d /home/ubuntu/jdk-8-linux-x64.tar.gz 63 | {%- endcall %} 64 | {%- endblock %} 65 | {% block outputs %} 66 | JMeterClientPublicIP: 67 | Description: JMeter Client Public IP 68 | Value: !GetAtt JMeterClientInstance.PublicIp 69 | {% endblock %} 70 | -------------------------------------------------------------------------------- /distribution/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 20 | org.wso2.performance.ei 21 | performance-ei 22 | 0.1.0-SNAPSHOT 23 | ../pom.xml 24 | 25 | 26 | 4.0.0 27 | performance-ei-distribution 28 | pom 29 | Performance EI Distribution 30 | Package for all scripts 31 | 32 | 33 | 34 | org.wso2.performance.common 35 | performance-common-distribution 36 | tar.gz 37 | 38 | 39 | 40 | 41 | 42 | 43 | org.apache.maven.plugins 44 | maven-assembly-plugin 45 | 46 | 47 | distribution 48 | package 49 | 50 | single 51 | 52 | 53 | 54 | ${basedir}/bin.xml 55 | 56 | false 57 | 58 | 59 | 60 | 61 | 62 | org.apache.maven.plugins 63 | maven-clean-plugin 64 | 65 | 66 | 67 | scripts 68 | 69 | **/target 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /distribution/scripts/cloudformation/templates/mi_perf_test_cfn.yaml: -------------------------------------------------------------------------------- 1 | {# 2 | # Copyright (c) 2020, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | #} 18 | {% extends "common_perf_test_cfn.yaml" %} 19 | {% block parameters -%} 20 | WSO2MicroIntegratorDistributionName: 21 | Description: The name of the 'WSO2 Micro Integrator Distribution' in S3 Bucket 22 | Type: String 23 | ConstraintDescription: must be a valid zip package 24 | AllowedPattern: ^.*\.(zip|docker)$ 25 | WSO2MicroIntegratorInstanceType: 26 | Description: MI EC2 instance type 27 | Type: String 28 | BackendInstanceType: 29 | Description: Backend EC2 instance type 30 | Type: String 31 | {%- endblock %} 32 | {% block ec2instances -%} 33 | # JMeter Client 34 | {% call ec2instance('JMeterClientInstance', 'jmeter-client', '!Ref JMeterClientInstanceType', 35 | files=[{'name': 'apache-jmeter.tgz', 'ref': 'JMeterDistributionName'}, {'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}], 36 | public=True, volume_size=100) -%} 37 | /home/ubuntu/setup/setup-jmeter-client.sh -g -k /home/ubuntu/private_key.pem \ 38 | -i /home/ubuntu \ 39 | -d /home/ubuntu/jdk-8-linux-x64.tar.gz \ 40 | -f /home/ubuntu/apache-jmeter.tgz \ 41 | -c /home/ubuntu \ 42 | {%- if jmeter_servers >= 2 %} 43 | {%- for i in range(1, jmeter_servers+1) %} 44 | -a jmeter{{ i }} -n ${JMeterServer{{ i }}Instance.PrivateIp} \ 45 | {%- endfor %} 46 | {%- endif %} 47 | -a mi -n ${WSO2MicroIntegratorInstance.PrivateIp} \ 48 | -a netty -n ${BackendInstance.PrivateIp} 49 | {%- endcall %} 50 | {%- if jmeter_servers >= 2 %} 51 | # JMeter Servers 52 | {%- for i in range(1, jmeter_servers+1) -%} 53 | {% call ec2instance('JMeterServer' + i|string + 'Instance', 'jmeter-server-' + i|string, '!Ref JMeterServerInstanceType', 54 | files = [{'name': 'apache-jmeter.tgz', 'ref': 'JMeterDistributionName'}, {'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 55 | /home/ubuntu/setup/setup-jmeter.sh -g -i /home/ubuntu -d /home/ubuntu/jdk-8-linux-x64.tar.gz -f /home/ubuntu/apache-jmeter.tgz 56 | {%- endcall %} 57 | {% endfor -%} 58 | {%- endif %} 59 | # MI 60 | {% call ec2instance('WSO2MicroIntegratorInstance', 'mi', '!Ref WSO2MicroIntegratorInstanceType', 61 | files=[{'name': 'wso2mi.zip', 'ref': 'WSO2MicroIntegratorDistributionName'}, {'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 62 | /home/ubuntu/setup/setup-mi.sh -d /home/ubuntu/wso2mi.zip -n ${BackendInstance.PrivateIp} -u ubuntu -j /home/ubuntu/jdk-8-linux-x64.tar.gz 63 | {%- endcall %} 64 | # Backend 65 | {% call ec2instance('BackendInstance', 'backend', '!Ref BackendInstanceType', 66 | files=[{'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 67 | /home/ubuntu/setup/setup-netty.sh -g -d /home/ubuntu/jdk-8-linux-x64.tar.gz 68 | {%- endcall %} 69 | {%- endblock %} 70 | {% block outputs %} 71 | JMeterClientPublicIP: 72 | Description: JMeter Client Public IP 73 | Value: !GetAtt JMeterClientInstance.PublicIp 74 | {% endblock %} 75 | -------------------------------------------------------------------------------- /distribution/scripts/cloudformation/run-mi-docker-performance-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright (c) 2018, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | # ---------------------------------------------------------------------------- 19 | # Run performance tests on AWS Cloudformation Stacks 20 | # ---------------------------------------------------------------------------- 21 | 22 | export script_name="$0" 23 | export script_dir=$(dirname "$0") 24 | 25 | export aws_cloudformation_template_filename="mi_docker_perf_test_cfn.yaml" 26 | 27 | export application_name="WSO2 Micro Integrator" 28 | export product_version="" 29 | export ec2_instance_name="mi" 30 | export metrics_file_prefix="mi" 31 | export run_performance_tests_script_name="run-mi-docker-performance-tests.sh" 32 | 33 | export wso2mi_ec2_instance_type="" 34 | 35 | function usageCommand() { 36 | echo "-E -V " 37 | } 38 | export -f usageCommand 39 | 40 | function usageHelp() { 41 | echo "-E: Amazon EC2 Instance Type for $application_name." 42 | echo "-V: Product version for $application_name." 43 | } 44 | export -f usageHelp 45 | 46 | while getopts ":u:f:d:k:n:j:o:g:s:b:r:J:S:N:t:p:w:he:E:V:" opt; do 47 | case "${opt}" in 48 | E) 49 | wso2mi_ec2_instance_type=${OPTARG} 50 | ;; 51 | V) 52 | product_version=${OPTARG} 53 | ;; 54 | *) 55 | opts+=("-${opt}") 56 | [[ -n "$OPTARG" ]] && opts+=("$OPTARG") 57 | ;; 58 | esac 59 | done 60 | shift "$((OPTIND - 1))" 61 | 62 | function validate() { 63 | if [[ -z $wso2mi_ec2_instance_type ]]; then 64 | echo "Please provide the Amazon EC2 Instance Type for $application_name." 65 | exit 1 66 | fi 67 | if [[ -z $product_version ]]; then 68 | echo "Please provide the version for $application_name." 69 | exit 1 70 | fi 71 | } 72 | export -f validate 73 | 74 | export application_name=$application_name" "$product_version 75 | 76 | function get_test_metadata() { 77 | echo "wso2mi_ec2_instance_type=$wso2mi_ec2_instance_type" 78 | } 79 | export -f get_test_metadata 80 | 81 | function get_cf_parameters() { 82 | echo "WSO2MicroIntegratorInstanceType=$wso2mi_ec2_instance_type" 83 | } 84 | export -f get_cf_parameters 85 | 86 | function get_columns() { 87 | echo "Scenario Name" 88 | echo "Heap Size" 89 | echo "Concurrent Users" 90 | echo "Message Size (Bytes)" 91 | echo "Back-end Service Delay (ms)" 92 | echo "Error %" 93 | echo "Throughput (Requests/sec)" 94 | echo "Average Response Time (ms)" 95 | echo "Standard Deviation of Response Time (ms)" 96 | echo "99th Percentile of Response Time (ms)" 97 | echo "$application_name GC Throughput (%)" 98 | echo "Average $application_name Memory Footprint After Full GC (M)" 99 | } 100 | export -f get_columns 101 | 102 | $script_dir/cloudformation-common.sh "${opts[@]}" -- "$@" 103 | -------------------------------------------------------------------------------- /distribution/scripts/cloudformation/templates/ei_perf_test_cfn.yaml: -------------------------------------------------------------------------------- 1 | {# 2 | # Copyright (c) 2018, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | #} 18 | {% extends "common_perf_test_cfn.yaml" %} 19 | {% block parameters -%} 20 | WSO2EnterpriseIntegratorDistributionName: 21 | Description: The name of the 'WSO2 Enterprise Integrator Distribution' in S3 Bucket 22 | Type: String 23 | ConstraintDescription: must be a valid zip package 24 | AllowedPattern: ^.*\.(zip|docker)$ 25 | WSO2EnterpriseIntegratorInstanceType: 26 | Description: EI EC2 instance type 27 | Type: String 28 | BackendInstanceType: 29 | Description: Backend EC2 instance type 30 | Type: String 31 | {%- endblock %} 32 | {% block ec2instances -%} 33 | # JMeter Client 34 | {% call ec2instance('JMeterClientInstance', 'jmeter-client', '!Ref JMeterClientInstanceType', 35 | files=[{'name': 'apache-jmeter.tgz', 'ref': 'JMeterDistributionName'}, {'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}], 36 | public=True, volume_size=100) -%} 37 | /home/ubuntu/setup/setup-jmeter-client.sh -g -k /home/ubuntu/private_key.pem \ 38 | -i /home/ubuntu \ 39 | -d /home/ubuntu/jdk-8-linux-x64.tar.gz \ 40 | -f /home/ubuntu/apache-jmeter.tgz \ 41 | -c /home/ubuntu \ 42 | {%- if jmeter_servers >= 2 %} 43 | {%- for i in range(1, jmeter_servers+1) %} 44 | -a jmeter{{ i }} -n ${JMeterServer{{ i }}Instance.PrivateIp} \ 45 | {%- endfor %} 46 | {%- endif %} 47 | -a ei -n ${WSO2EnterpriseIntegratorInstance.PrivateIp} \ 48 | -a netty -n ${BackendInstance.PrivateIp} 49 | {%- endcall %} 50 | {%- if jmeter_servers >= 2 %} 51 | # JMeter Servers 52 | {%- for i in range(1, jmeter_servers+1) -%} 53 | {% call ec2instance('JMeterServer' + i|string + 'Instance', 'jmeter-server-' + i|string, '!Ref JMeterServerInstanceType', 54 | files = [{'name': 'apache-jmeter.tgz', 'ref': 'JMeterDistributionName'}, {'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 55 | /home/ubuntu/setup/setup-jmeter.sh -g -i /home/ubuntu -d /home/ubuntu/jdk-8-linux-x64.tar.gz -f /home/ubuntu/apache-jmeter.tgz 56 | {%- endcall %} 57 | {% endfor -%} 58 | {%- endif %} 59 | # EI 60 | {% call ec2instance('WSO2EnterpriseIntegratorInstance', 'ei', '!Ref WSO2EnterpriseIntegratorInstanceType', 61 | files=[{'name': 'wso2ei.zip', 'ref': 'WSO2EnterpriseIntegratorDistributionName'}, {'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 62 | /home/ubuntu/setup/setup-ei.sh -d /home/ubuntu/wso2ei.zip -n ${BackendInstance.PrivateIp} -u ubuntu -j /home/ubuntu/jdk-8-linux-x64.tar.gz 63 | {%- endcall %} 64 | # Backend 65 | {% call ec2instance('BackendInstance', 'backend', '!Ref BackendInstanceType', 66 | files=[{'name': 'jdk-8-linux-x64.tar.gz', 'ref': 'OracleJDKDistributionName'}]) -%} 67 | /home/ubuntu/setup/setup-netty.sh -g -d /home/ubuntu/jdk-8-linux-x64.tar.gz 68 | {%- endcall %} 69 | {%- endblock %} 70 | {% block outputs %} 71 | JMeterClientPublicIP: 72 | Description: JMeter Client Public IP 73 | Value: !GetAtt JMeterClientInstance.PublicIp 74 | {% endblock %} 75 | -------------------------------------------------------------------------------- /distribution/scripts/ei/mi-start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright 2018 WSO2 Inc. (http://wso2.org) 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | # ---------------------------------------------------------------------------- 17 | # Start WSO2 Micro Integrator 18 | # ---------------------------------------------------------------------------- 19 | 20 | default_heap_size="4G" 21 | heap_size="$default_heap_size" 22 | 23 | function usage() { 24 | echo "" 25 | echo "Usage: " 26 | echo "$0 [-m ] [-h]" 27 | echo "-m: The heap memory size of WSO2 Micro Integrator. Default: $default_heap_size." 28 | echo "-h: Display this help and exit." 29 | echo "" 30 | } 31 | 32 | while getopts "m:h" opt; do 33 | case "${opt}" in 34 | m) 35 | heap_size=${OPTARG} 36 | ;; 37 | h) 38 | usage 39 | exit 0 40 | ;; 41 | \?) 42 | usage 43 | exit 1 44 | ;; 45 | esac 46 | done 47 | shift "$((OPTIND - 1))" 48 | 49 | if [[ -z $heap_size ]]; then 50 | echo "Please provide the heap size for WSO2 Micro Integrator." 51 | exit 1 52 | fi 53 | 54 | jvm_dir="" 55 | for dir in /usr/lib/jvm/jdk1.8*; do 56 | [ -d "${dir}" ] && jvm_dir="${dir}" && break 57 | done 58 | export JAVA_HOME="${jvm_dir}" 59 | 60 | carbon_bootstrap_class=org.wso2.carbon.bootstrap.Bootstrap 61 | product_path=$HOME/wso2mi 62 | startup_script=$product_path/bin/micro-integrator.sh 63 | 64 | if [[ ! -f $startup_script ]]; then 65 | startup_script=$product_path/bin/wso2server.sh 66 | fi 67 | 68 | if pgrep -f "$carbon_bootstrap_class" >/dev/null; then 69 | echo "Shutting down Micro Integrator" 70 | $startup_script stop 71 | 72 | echo "Waiting for MI to stop" 73 | while true; do 74 | if ! pgrep -f "$carbon_bootstrap_class" >/dev/null; then 75 | echo "MI stopped" 76 | break 77 | else 78 | sleep 10 79 | fi 80 | done 81 | fi 82 | 83 | log_files=($product_path/repository/logs/*) 84 | if [ ${#log_files[@]} -gt 1 ]; then 85 | echo "Log files exists. Moving to /tmp" 86 | mv "${log_files[@]}" /tmp/ 87 | fi 88 | 89 | echo "Setting Heap to ${heap_size}" 90 | export JVM_MEM_OPTS="-Xms${heap_size} -Xmx${heap_size}" 91 | 92 | echo "Enabling GC Logs" 93 | export JAVA_OPTS="-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$product_path/repository/logs/gc.log" 94 | 95 | echo "Starting MI" 96 | $startup_script start -DenablePrometheusApi=true 97 | 98 | echo "Waiting for MI to start" 99 | 100 | exit_status=100 101 | 102 | n=0 103 | until [ $n -ge 60 ]; do 104 | response_code=$(curl -s -w '%{http_code}' -o /dev/null http://localhost:9201/metric-service/metrics || echo "") 105 | if [ $response_code -eq 200 ]; then 106 | echo "MI is up and running" 107 | exit_status=0 108 | break 109 | fi 110 | sleep 5 111 | n=$(($n + 1)) 112 | done 113 | 114 | # Wait for another 5 seconds to make sure that the server is ready to accept API requests. 115 | sleep 5 116 | exit $exit_status 117 | -------------------------------------------------------------------------------- /distribution/scripts/ei/ei-start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright 2018 WSO2 Inc. (http://wso2.org) 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | # ---------------------------------------------------------------------------- 17 | # Start WSO2 Enterprise Integrator 18 | # ---------------------------------------------------------------------------- 19 | 20 | default_heap_size="4G" 21 | heap_size="$default_heap_size" 22 | 23 | function usage() { 24 | echo "" 25 | echo "Usage: " 26 | echo "$0 [-m ] [-h]" 27 | echo "-m: The heap memory size of WSO2 Enterprise Integrator. Default: $default_heap_size." 28 | echo "-h: Display this help and exit." 29 | echo "" 30 | } 31 | 32 | while getopts "m:h" opt; do 33 | case "${opt}" in 34 | m) 35 | heap_size=${OPTARG} 36 | ;; 37 | h) 38 | usage 39 | exit 0 40 | ;; 41 | \?) 42 | usage 43 | exit 1 44 | ;; 45 | esac 46 | done 47 | shift "$((OPTIND - 1))" 48 | 49 | if [[ -z $heap_size ]]; then 50 | echo "Please provide the heap size for WSO2 Enterprise Integrator." 51 | exit 1 52 | fi 53 | 54 | jvm_dir="" 55 | for dir in /usr/lib/jvm/jdk1.8*; do 56 | [ -d "${dir}" ] && jvm_dir="${dir}" && break 57 | done 58 | export JAVA_HOME="${jvm_dir}" 59 | 60 | carbon_bootstrap_class=org.wso2.carbon.bootstrap.Bootstrap 61 | product_path=$HOME/wso2ei 62 | startup_script=$product_path/bin/integrator.sh 63 | 64 | if [[ ! -f $startup_script ]]; then 65 | startup_script=$product_path/bin/wso2server.sh 66 | fi 67 | 68 | if pgrep -f "$carbon_bootstrap_class" >/dev/null; then 69 | echo "Shutting down EI" 70 | $startup_script stop 71 | 72 | echo "Waiting for EI to stop" 73 | while true; do 74 | if ! pgrep -f "$carbon_bootstrap_class" >/dev/null; then 75 | echo "EI stopped" 76 | break 77 | else 78 | sleep 10 79 | fi 80 | done 81 | fi 82 | 83 | log_files=($product_path/repository/logs/*) 84 | if [ ${#log_files[@]} -gt 1 ]; then 85 | echo "Log files exists. Moving to /tmp" 86 | mv "${log_files[@]}" /tmp/ 87 | fi 88 | 89 | echo "Setting Heap to ${heap_size}" 90 | export JVM_MEM_OPTS="-Xms${heap_size} -Xmx${heap_size}" 91 | 92 | echo "Enabling GC Logs" 93 | export JAVA_OPTS="-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$product_path/repository/logs/gc.log" 94 | 95 | echo "Starting EI" 96 | $startup_script start 97 | 98 | echo "Waiting for EI to start" 99 | 100 | exit_status=100 101 | 102 | n=0 103 | until [ $n -ge 60 ]; do 104 | response_code=$(curl -s -w '%{http_code}' -o /dev/null -d '1' -H 'Content-Type: application/soap+xml; charset=UTF-8; action="urn:echoInt"' http://localhost:8280/services/echo || echo "") 105 | if [ $response_code -eq 200 ]; then 106 | echo "EI started" 107 | exit_status=0 108 | break 109 | fi 110 | sleep 10 111 | n=$(($n + 1)) 112 | done 113 | 114 | # Wait for another 10 seconds to make sure that the server is ready to accept API requests. 115 | sleep 10 116 | exit $exit_status 117 | -------------------------------------------------------------------------------- /distribution/scripts/cloudformation/run-ei-performance-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright (c) 2018, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | # ---------------------------------------------------------------------------- 19 | # Run performance tests on AWS Cloudformation Stacks 20 | # ---------------------------------------------------------------------------- 21 | 22 | export script_name="$0" 23 | export script_dir=$(dirname "$0") 24 | 25 | export aws_cloudformation_template_filename="ei_perf_test_cfn.yaml" 26 | export application_name="WSO2 Enterprise Integrator" 27 | export ec2_instance_name="ei" 28 | export metrics_file_prefix="ei" 29 | export run_performance_tests_script_name="run-ei-performance-tests.sh" 30 | 31 | export wso2ei_distribution="" 32 | export wso2ei_ec2_instance_type="" 33 | 34 | function usageCommand() { 35 | echo "-e -E " 36 | } 37 | export -f usageCommand 38 | 39 | function usageHelp() { 40 | echo "-e: $application_name Distribution." 41 | echo "-E: Amazon EC2 Instance Type for $application_name." 42 | } 43 | export -f usageHelp 44 | 45 | while getopts ":u:f:d:k:n:j:o:g:s:b:r:J:S:N:t:p:w:he:E:" opt; do 46 | case "${opt}" in 47 | e) 48 | wso2ei_distribution=${OPTARG} 49 | ;; 50 | E) 51 | wso2ei_ec2_instance_type=${OPTARG} 52 | ;; 53 | *) 54 | opts+=("-${opt}") 55 | [[ -n "$OPTARG" ]] && opts+=("$OPTARG") 56 | ;; 57 | esac 58 | done 59 | shift "$((OPTIND - 1))" 60 | 61 | function validate() { 62 | if [[ ! -f $wso2ei_distribution ]]; then 63 | echo "Please provide $application_name distribution." 64 | exit 1 65 | fi 66 | 67 | export wso2ei_distribution_filename=$(basename $wso2ei_distribution) 68 | 69 | if [[ ${wso2ei_distribution_filename: -4} != ".zip" ]]; then 70 | echo "$application_name distribution must have .zip extension" 71 | exit 1 72 | fi 73 | 74 | if [[ -z $wso2ei_ec2_instance_type ]]; then 75 | echo "Please provide the Amazon EC2 Instance Type for $application_name." 76 | exit 1 77 | fi 78 | } 79 | export -f validate 80 | 81 | function create_links() { 82 | wso2ei_distribution=$(realpath $wso2ei_distribution) 83 | ln -s $wso2ei_distribution $temp_dir/$wso2ei_distribution_filename 84 | } 85 | export -f create_links 86 | 87 | function get_test_metadata() { 88 | echo "wso2ei_ec2_instance_type=$wso2ei_ec2_instance_type" 89 | } 90 | export -f get_test_metadata 91 | 92 | function get_cf_parameters() { 93 | echo "WSO2EnterpriseIntegratorDistributionName=$wso2ei_distribution_filename" 94 | echo "WSO2EnterpriseIntegratorInstanceType=$wso2ei_ec2_instance_type" 95 | } 96 | export -f get_cf_parameters 97 | 98 | function get_columns() { 99 | echo "Scenario Name" 100 | echo "Heap Size" 101 | echo "Concurrent Users" 102 | echo "Message Size (Bytes)" 103 | echo "Back-end Service Delay (ms)" 104 | echo "Error %" 105 | echo "Throughput (Requests/sec)" 106 | echo "Average Response Time (ms)" 107 | echo "Standard Deviation of Response Time (ms)" 108 | echo "99th Percentile of Response Time (ms)" 109 | echo "$application_name GC Throughput (%)" 110 | echo "Average $application_name Memory Footprint After Full GC (M)" 111 | } 112 | export -f get_columns 113 | 114 | $script_dir/cloudformation-common.sh "${opts[@]}" -- "$@" 115 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/run-mi-docker-performance-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright (c) 2019, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | # ---------------------------------------------------------------------------- 19 | # Run WSO2 Enterprise Micro Integrator Performance Tests 20 | # ---------------------------------------------------------------------------- 21 | script_dir=$(dirname "$0") 22 | 23 | export cpus 24 | export memory 25 | export wso2_mi_version 26 | 27 | function usageCommand() { 28 | echo "-c -r -v " 29 | } 30 | export -f usageCommand 31 | 32 | function usageHelp() { 33 | echo "-c: Number of CPU resources to be used by the WSO2 Micro Integrator container." 34 | echo "-r: The maximum amount of memory to be used by WSO2 Micro Integrator container." 35 | echo "-v: WSO2 Micro Integrator version." 36 | } 37 | export -f usageHelp 38 | 39 | while getopts ":u:b:s:m:d:w:n:j:k:l:i:e:tp:hc:r:v:" opt; do 40 | case "${opt}" in 41 | c) 42 | cpus=${OPTARG} 43 | ;; 44 | r) 45 | memory=${OPTARG} 46 | ;; 47 | v) 48 | wso2_mi_version=${OPTARG} 49 | ;; 50 | *) 51 | opts+=("-${opt}") 52 | [[ -n "$OPTARG" ]] && opts+=("$OPTARG") 53 | ;; 54 | esac 55 | done 56 | shift "$((OPTIND - 1))" 57 | 58 | function validate() { 59 | if [[ -z $cpus ]]; then 60 | echo "Please provide the number of CPU resources to be used by the container." 61 | exit 1 62 | fi 63 | if [[ -z $memory ]]; then 64 | echo "Please provide the maximum amount of memory the container can use." 65 | exit 1 66 | fi 67 | if [[ -z $wso2_mi_version ]]; then 68 | echo "Please provide WSO2 Micro Integrator version." 69 | exit 1 70 | fi 71 | } 72 | export -f validate 73 | 74 | # Execute common script 75 | . $script_dir/perf-test-common.sh "${opts[@]}" 76 | 77 | function initialize() { 78 | export mi_ssh_host=mi 79 | export mi_host=$(get_ssh_hostname $mi_ssh_host) 80 | } 81 | export -f initialize 82 | 83 | # Include Test Scenarios 84 | . $script_dir/performance-test-scenarios.sh 85 | 86 | function before_execute_test_scenario() { 87 | local service_path=${scenario[path]} 88 | local protocol=${scenario[protocol]} 89 | local response_pattern="soapenv:Body" 90 | 91 | jmeter_params+=("host=$mi_host" "path=$service_path" "response_pattern=${response_pattern}") 92 | jmeter_params+=("response_size=${msize}B" "protocol=$protocol") 93 | 94 | if [[ "${scenario[name]}" == "SecureProxy" ]]; then 95 | jmeter_params+=("port=8253") 96 | jmeter_params+=("payload=$HOME/jmeter/requests/${msize}B_buyStocks_secure.xml") 97 | else 98 | jmeter_params+=("port=8290") 99 | jmeter_params+=("payload=$HOME/jmeter/requests/${msize}B_buyStocks.xml") 100 | fi 101 | 102 | echo "Starting Micro Integrator Docker..." 103 | ssh $mi_ssh_host "./ei/mi-docker-start.sh -m $heap -c $cpus -r $memory -v $wso2_mi_version" 104 | } 105 | 106 | function after_execute_test_scenario() { 107 | ssh $mi_ssh_host docker stats --no-stream microei >${report_location}/docker_stats.txt 108 | write_server_metrics mi $mi_ssh_host carbon 109 | download_file $mi_ssh_host logs/wso2carbon.log wso2carbon.log 110 | download_file $mi_ssh_host logs/gc.log mi_gc.log 111 | ssh $mi_ssh_host "./ei/mi-docker-stop.sh" 112 | } 113 | 114 | test_scenarios 115 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/templates/summary.md: -------------------------------------------------------------------------------- 1 | # {{ parameters.application_name }} Performance Test Results 2 | 3 | During each release, we execute various automated performance test scenarios and publish the results. 4 | 5 | | Test Scenarios | Description | 6 | | --- | --- | 7 | {%- for test_scenario in parameters.test_scenarios %} 8 | | {{test_scenario.display_name}} | {{test_scenario.description}} | 9 | {%- endfor %} 10 | 11 | Our test client is [Apache JMeter](https://jmeter.apache.org/index.html). We test each scenario for a fixed duration of 12 | time. We split the test results into warmup and measurement parts and use the measurement part to compute the 13 | performance metrics. 14 | 15 | Test scenarios use a [Netty](https://netty.io/) based back-end service which echoes back any request 16 | posted to it after a specified period of time. 17 | 18 | We run the performance tests under different numbers of concurrent users, message sizes (payloads) and back-end service 19 | delays. 20 | 21 | The main performance metrics: 22 | 23 | 1. **Throughput**: The number of requests that the {{ parameters.application_name }} processes during a specific time interval (e.g. per second). 24 | 2. **Response Time**: The end-to-end latency for an operation of invoking a service in {{ parameters.application_name }} . The complete distribution of response times was recorded. 25 | 26 | In addition to the above metrics, we measure the load average and several memory-related metrics. 27 | 28 | The following are the test parameters. 29 | 30 | | Test Parameter | Description | Values | 31 | | --- | --- | --- | 32 | | Scenario Name | The name of the test scenario. | Refer to the above table. | 33 | | Heap Size | The amount of memory allocated to the application | {{ parameters.heap_sizes|join(', ') }} | 34 | | Concurrent Users | The number of users accessing the application at the same time. | {{ parameters.concurrent_users|join(', ') }} | 35 | | Message Size (Bytes) | The request payload size in Bytes. | {{ parameters.message_sizes|join(', ') }} | 36 | | Back-end Delay (ms) | The delay added by the Back-end service. | {{ parameters.backend_sleep_times|join(', ') }} | 37 | 38 | The duration of each test is **{{ parameters.test_duration }} seconds**. The warm-up period is **{{ parameters.warmup_time }} seconds**. 39 | The measurement results are collected after the warm-up period. 40 | 41 | The performance tests were executed on {{ parameters.number_of_stacks }} AWS CloudFormation stack{{ parameters.number_of_stacks|pluralize }}. 42 | 43 | {% for instance in instances %} 44 | System information for {{ parameters.application_name }} in {{ loop.index|humanize_ordinal }} AWS CloudFormation stack. 45 | 46 | | Class | Subclass | Description | Value | 47 | | --- | --- | --- | --- | 48 | {%- for system_info in instance.system_info %} 49 | | {{ system_info['class'] }} | {{ system_info['subclass'] }} | {{ system_info['description'] }} | {{ system_info['value'] }} | 50 | {%- endfor %} 51 | 52 | {%- endfor %} 53 | 54 | 55 | The following are the measurements collected from each performance test conducted for a given combination of 56 | test parameters. 57 | 58 | | Measurement | Description | 59 | | --- | --- | 60 | | Error % | Percentage of requests with errors | 61 | | Average Response Time (ms) | The average response time of a set of results | 62 | | Standard Deviation of Response Time (ms) | The “Standard Deviation” of the response time. | 63 | | 99th Percentile of Response Time (ms) | 99% of the requests took no more than this time. The remaining samples took at least as long as this | 64 | | Throughput (Requests/sec) | The throughput measured in requests per second. | 65 | | Average Memory Footprint After Full GC (M) | The average memory consumed by the application after a full garbage collection event. | 66 | 67 | The following is the summary of performance test results collected for the measurement period. 68 | 69 | | {% for column_name in column_names %} {{ column_name }} |{%- endfor %} 70 | | {%- for column_name in column_names %}---{% if not loop.first %}:{% endif%}|{%- endfor %} 71 | {%- for row in rows %} 72 | | {% for column_name in column_names %} {{ row[column_name] }} |{% endfor %} 73 | {%- endfor %} 74 | -------------------------------------------------------------------------------- /distribution/scripts/setup/setup-mi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright 2018 WSO2 Inc. (http://wso2.org) 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | # ---------------------------------------------------------------------------- 17 | # Setup WSO2 Micro Integrator 18 | # ---------------------------------------------------------------------------- 19 | # Make sure the script is running as root. 20 | if [ "$UID" -ne "0" ]; then 21 | echo "You must be root to run $0. Try following" 22 | echo "sudo $0" 23 | exit 9 24 | fi 25 | 26 | export script_dir=$(dirname "$0") 27 | export netty_host="" 28 | export mi_product="" 29 | export user="" 30 | export oracle_jdk_dist="" 31 | # Default value for product extraction directory 32 | export product_home="wso2mi" 33 | 34 | function usageHelp() { 35 | echo "-n: The hostname of Netty Service." 36 | echo "-d: MI distribution." 37 | echo "-u: General user of the OS." 38 | echo "-j: Oracle JDK distribution. (If not provided, OpenJDK will be installed)" 39 | } 40 | export -f usageHelp 41 | 42 | while getopts "hn:d:u:j:" opt; do 43 | case "${opt}" in 44 | n) 45 | netty_host=${OPTARG} 46 | ;; 47 | d) 48 | mi_product=${OPTARG} 49 | ;; 50 | u) 51 | user=${OPTARG} 52 | ;; 53 | j) 54 | oracle_jdk_dist=${OPTARG} 55 | ;; 56 | h) 57 | usageHelp 58 | exit 0 59 | ;; 60 | *) 61 | opts+=("-${opt}") 62 | [[ -n "$OPTARG" ]] && opts+=("$OPTARG") 63 | ;; 64 | esac 65 | done 66 | shift "$((OPTIND - 1))" 67 | 68 | # Validating input parameters 69 | validate() { 70 | if [[ -z $netty_host ]]; then 71 | echo "Please provide netty host." 72 | exit 1 73 | fi 74 | 75 | if [[ ! -f $mi_product ]]; then 76 | echo "Product not provided. Please provide the MI product." 77 | exit 1 78 | fi 79 | 80 | if [[ -z $user ]]; then 81 | echo "Please provide the username of the general os user" 82 | exit 1 83 | fi 84 | } 85 | export -f validate 86 | 87 | function setup() { 88 | install_dir=/home/$user 89 | if [[ -f $oracle_jdk_dist ]]; then 90 | $script_dir/../java/install-java.sh -f $oracle_jdk_dist 91 | fi 92 | 93 | pushd ${install_dir} 94 | 95 | #Remove Micro Integrator if it is already there 96 | if [[ -d wso2mi ]]; then 97 | sudo -u $user rm -rf wso2mi 98 | fi 99 | 100 | #Extract the downloaded zip 101 | echo "Extracting WSO2 Micro Integrator" 102 | dirname=$(unzip -Z -1 $mi_product | head -1 | sed -e 's@/.*@@') 103 | sudo -u $user unzip -q -o $mi_product 104 | sudo -u $user mv -v $dirname wso2mi 105 | echo "Enterprise Integrator is extracted" 106 | 107 | # Sample CAPP location 108 | capp_file=$script_dir/../ei/capp/EIPerformanceTestArtifacts-1.0.0.car 109 | 110 | if [ -f $capp_file ]; then 111 | echo "Deploying CAPP.." 112 | sudo -u $user cp -v $capp_file wso2mi/repository/deployment/server/carbonapps/ 113 | echo "CAPP Deployed.." 114 | else 115 | echo "CAPP is not available." 116 | exit 1 117 | fi 118 | 119 | # Add Netty Host to /etc/hosts 120 | echo "$netty_host netty" >>/etc/hosts 121 | 122 | popd 123 | echo "Completed Micro Integrator setup..." 124 | } 125 | export -f setup 126 | 127 | if [[ ! -f $oracle_jdk_dist ]]; then 128 | SETUP_COMMON_ARGS+="-p openjdk-8-jdk" 129 | fi 130 | 131 | $script_dir/../setup/setup-common.sh "${opts[@]}" "$@" -p curl -p jq -p unzip $SETUP_COMMON_ARGS 132 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/artifacts.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /distribution/scripts/setup/setup-ei.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright 2018 WSO2 Inc. (http://wso2.org) 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | # ---------------------------------------------------------------------------- 17 | # Setup WSO2 Enterprise Integrator 18 | # ---------------------------------------------------------------------------- 19 | # Make sure the script is running as root. 20 | if [ "$UID" -ne "0" ]; then 21 | echo "You must be root to run $0. Try following" 22 | echo "sudo $0" 23 | exit 9 24 | fi 25 | 26 | export script_dir=$(dirname "$0") 27 | export netty_host="" 28 | export ei_product="" 29 | export user="" 30 | export oracle_jdk_dist="" 31 | # Default value for product extraction directory 32 | export product_home="wso2ei" 33 | 34 | function usageHelp() { 35 | echo "-n: The hostname of Netty Service." 36 | echo "-d: EI distribution." 37 | echo "-u: General user of the OS." 38 | echo "-j: Oracle JDK distribution. (If not provided, OpenJDK will be installed)" 39 | } 40 | export -f usageHelp 41 | 42 | while getopts "hn:d:u:j:" opt; do 43 | case "${opt}" in 44 | n) 45 | netty_host=${OPTARG} 46 | ;; 47 | d) 48 | ei_product=${OPTARG} 49 | ;; 50 | u) 51 | user=${OPTARG} 52 | ;; 53 | j) 54 | oracle_jdk_dist=${OPTARG} 55 | ;; 56 | h) 57 | usageHelp 58 | exit 0 59 | ;; 60 | *) 61 | opts+=("-${opt}") 62 | [[ -n "$OPTARG" ]] && opts+=("$OPTARG") 63 | ;; 64 | esac 65 | done 66 | shift "$((OPTIND - 1))" 67 | 68 | # Validating input parameters 69 | validate() { 70 | if [[ -z $netty_host ]]; then 71 | echo "Please provide netty host." 72 | exit 1 73 | fi 74 | 75 | if [[ ! -f $ei_product ]]; then 76 | echo "Product not provided. Please provide the EI product." 77 | exit 1 78 | fi 79 | 80 | if [[ -z $user ]]; then 81 | echo "Please provide the username of the general os user" 82 | exit 1 83 | fi 84 | } 85 | export -f validate 86 | 87 | function setup() { 88 | install_dir=/home/$user 89 | if [[ -f $oracle_jdk_dist ]]; then 90 | $script_dir/../java/install-java.sh -f $oracle_jdk_dist 91 | fi 92 | 93 | pushd ${install_dir} 94 | 95 | #Remove Enterprise Integrator if it is already there 96 | if [[ -d wso2ei ]]; then 97 | sudo -u $user rm -rf wso2ei 98 | fi 99 | 100 | #Extract the downloaded zip 101 | echo "Extracting WSO2 Enterprise Integrator" 102 | dirname=$(unzip -Z -1 $ei_product | head -1 | sed -e 's@/.*@@') 103 | sudo -u $user unzip -q -o $ei_product 104 | sudo -u $user mv -v $dirname wso2ei 105 | echo "Enterprise Integrator is extracted" 106 | 107 | # Sample CAPP location 108 | capp_file=$script_dir/../ei/capp/EIPerformanceTestArtifacts-1.0.0.car 109 | 110 | if [ -f $capp_file ]; then 111 | echo "Deploying CAPP.." 112 | sudo -u $user cp -v $capp_file wso2ei/repository/deployment/server/carbonapps/ 113 | echo "CAPP Deployed.." 114 | else 115 | echo "CAPP is not available." 116 | exit 1 117 | fi 118 | 119 | # Add Netty Host to /etc/hosts 120 | echo "$netty_host netty" >>/etc/hosts 121 | 122 | popd 123 | echo "Completed Enterprise Integrator setup..." 124 | } 125 | export -f setup 126 | 127 | if [[ ! -f $oracle_jdk_dist ]]; then 128 | SETUP_COMMON_ARGS+="-p openjdk-8-jdk" 129 | fi 130 | 131 | $script_dir/../setup/setup-common.sh "${opts[@]}" "$@" -p curl -p jq -p unzip $SETUP_COMMON_ARGS 132 | -------------------------------------------------------------------------------- /distribution/scripts/ei/mi-docker-start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright 2019 WSO2 Inc. (http://wso2.org) 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | # ---------------------------------------------------------------------------- 17 | # Start WSO2 Micro Integrator Docker 18 | # ---------------------------------------------------------------------------- 19 | script_dir=$(dirname "$0") 20 | default_heap_size="1G" 21 | heap_size="$default_heap_size" 22 | cpus="" 23 | memory="" 24 | wso2_mi_version="" 25 | 26 | function usage() { 27 | echo "" 28 | echo "Usage: " 29 | echo "$0 -c -r -v [-m ] [-h]" 30 | echo "-c: Number of CPU resources to be used by the container." 31 | echo "-r: The maximum amount of memory the container can use." 32 | echo "-v: WSO2 Micro Integrator Integrator version." 33 | echo "-m: The heap memory size of Micro Integrator. Default: $default_heap_size." 34 | echo "-h: Display this help and exit." 35 | echo "" 36 | } 37 | 38 | while getopts "c:r:v:m:h" opt; do 39 | case "${opt}" in 40 | c) 41 | cpus=${OPTARG} 42 | ;; 43 | r) 44 | memory=${OPTARG} 45 | ;; 46 | v) 47 | wso2_mi_version=${OPTARG} 48 | ;; 49 | m) 50 | heap_size=${OPTARG} 51 | ;; 52 | h) 53 | usage 54 | exit 0 55 | ;; 56 | \?) 57 | usage 58 | exit 1 59 | ;; 60 | esac 61 | done 62 | shift "$((OPTIND - 1))" 63 | 64 | if [[ -z $cpus ]]; then 65 | echo "Please provide the number of CPU resources to be used by the container." 66 | exit 1 67 | fi 68 | 69 | if [[ -z $memory ]]; then 70 | echo "Please provide the maximum amount of memory the container can use." 71 | exit 1 72 | fi 73 | 74 | if [[ -z $wso2_mi_version ]]; then 75 | echo "Please provide WSO2 Micro Integrator version." 76 | exit 1 77 | fi 78 | 79 | if [[ -z $heap_size ]]; then 80 | echo "Please provide the heap size for Micro Integrator." 81 | exit 1 82 | fi 83 | 84 | netty_host=$(getent hosts netty | awk '{ print $1 }') 85 | 86 | echo "Setting Heap to ${heap_size}" 87 | JVM_MEM_OPTS="JVM_MEM_OPTS=-Xms${heap_size} -Xmx${heap_size}" 88 | 89 | echo "Enabling GC Logs" 90 | JAVA_OPTS="JAVA_OPTS=-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/wso2carbon/wso2mi-${wso2_mi_version}/repository/logs/gc.log" 91 | 92 | if [[ ! -d ${HOME}/logs ]]; then 93 | mkdir -p ${HOME}/logs 94 | chmod -R 777 ${HOME}/logs 95 | fi 96 | 97 | echo -n >${HOME}/logs/wso2carbon.log 98 | echo -n >${HOME}/logs/gc.log 99 | chmod o+w ${HOME}/logs/wso2carbon.log 100 | chmod o+w ${HOME}/logs/gc.log 101 | 102 | # Sample CAPP location 103 | capp_dir=$script_dir/capp/ 104 | 105 | set -x 106 | docker run --name=microei -d -p 8290:8290 -p 9201:9201 -p 8253:8253 --add-host=netty:$netty_host --cpus=${cpus} --memory=${memory} \ 107 | --volume $(realpath $capp_dir):/home/wso2carbon/wso2mi-${wso2_mi_version}/repository/deployment/server/carbonapps \ 108 | --volume ${HOME}/logs/wso2carbon.log:/home/wso2carbon/wso2mi-${wso2_mi_version}/repository/logs/wso2carbon.log \ 109 | --volume ${HOME}/logs/gc.log:/home/wso2carbon/wso2mi-${wso2_mi_version}/repository/logs/gc.log \ 110 | -e "${JVM_MEM_OPTS}" -e "${JAVA_OPTS}" wso2/wso2mi:${wso2_mi_version} 111 | 112 | echo "Waiting for MI to start." 113 | 114 | exit_status=100 115 | n=0 116 | until [ $n -ge 60 ]; do 117 | response_code=$(curl -s -w '%{http_code}' -o /dev/null http://localhost:9201/healthz || echo "") 118 | if [ $response_code -eq 200 ]; then 119 | echo "MI container is up and running" 120 | exit_status=0 121 | break 122 | fi 123 | sleep 5 124 | n=$(($n + 1)) 125 | done 126 | 127 | # Wait for 5 seconds to make sure that the server is ready to accept API requests. 128 | sleep 5 129 | exit $exit_status 130 | -------------------------------------------------------------------------------- /distribution/scripts/cloudformation/run-mi-performance-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright (c) 2018, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | # ---------------------------------------------------------------------------- 19 | # Run performance tests on AWS Cloudformation Stacks 20 | # ---------------------------------------------------------------------------- 21 | 22 | export script_name="$0" 23 | export script_dir=$(dirname "$0") 24 | 25 | export aws_cloudformation_template_filename="mi_perf_test_cfn.yaml" 26 | export application_name="WSO2 Micro Integrator" 27 | export product_version="" 28 | export ec2_instance_name="mi" 29 | export metrics_file_prefix="mi" 30 | export run_performance_tests_script_name="run-mi-performance-tests.sh" 31 | 32 | export wso2mi_distribution="" 33 | export wso2mi_ec2_instance_type="" 34 | 35 | function usageCommand() { 36 | echo "-e -E " 37 | } 38 | export -f usageCommand 39 | 40 | function usageHelp() { 41 | echo "-e: $application_name Distribution." 42 | echo "-E: Amazon EC2 Instance Type for $application_name." 43 | echo "-V: Product version for $application_name." 44 | } 45 | export -f usageHelp 46 | 47 | while getopts ":u:f:d:k:n:j:o:g:s:b:r:J:S:N:t:p:w:he:E:V:" opt; do 48 | case "${opt}" in 49 | e) 50 | wso2mi_distribution=${OPTARG} 51 | ;; 52 | E) 53 | wso2mi_ec2_instance_type=${OPTARG} 54 | ;; 55 | V) 56 | product_version=${OPTARG} 57 | ;; 58 | *) 59 | opts+=("-${opt}") 60 | [[ -n "$OPTARG" ]] && opts+=("$OPTARG") 61 | ;; 62 | esac 63 | done 64 | shift "$((OPTIND - 1))" 65 | 66 | function validate() { 67 | if [[ ! -f $wso2mi_distribution ]]; then 68 | echo "Please provide $application_name distribution." 69 | exit 1 70 | fi 71 | 72 | export wso2mi_distribution_filename=$(basename $wso2mi_distribution) 73 | 74 | if [[ ${wso2mi_distribution_filename: -4} != ".zip" ]]; then 75 | echo "$application_name distribution must have .zip extension" 76 | exit 1 77 | fi 78 | 79 | if [[ -z $wso2mi_ec2_instance_type ]]; then 80 | echo "Please provide the Amazon EC2 Instance Type for $application_name." 81 | exit 1 82 | fi 83 | 84 | if [[ -z $product_version ]]; then 85 | echo "Please provide the version for $application_name." 86 | exit 1 87 | fi 88 | } 89 | export -f validate 90 | 91 | export application_name=$application_name" "$product_version 92 | 93 | function create_links() { 94 | wso2mi_distribution=$(realpath $wso2mi_distribution) 95 | ln -s $wso2mi_distribution $temp_dir/$wso2mi_distribution_filename 96 | } 97 | export -f create_links 98 | 99 | function get_test_metadata() { 100 | echo "wso2mi_ec2_instance_type=$wso2mi_ec2_instance_type" 101 | } 102 | export -f get_test_metadata 103 | 104 | function get_cf_parameters() { 105 | echo "WSO2MicroIntegratorDistributionName=$wso2mi_distribution_filename" 106 | echo "WSO2MicroIntegratorInstanceType=$wso2mi_ec2_instance_type" 107 | } 108 | export -f get_cf_parameters 109 | 110 | function get_columns() { 111 | echo "Scenario Name" 112 | echo "Heap Size" 113 | echo "Concurrent Users" 114 | echo "Message Size (Bytes)" 115 | echo "Back-end Service Delay (ms)" 116 | echo "Error %" 117 | echo "Throughput (Requests/sec)" 118 | echo "Average Response Time (ms)" 119 | echo "Standard Deviation of Response Time (ms)" 120 | echo "99th Percentile of Response Time (ms)" 121 | echo "$application_name GC Throughput (%)" 122 | echo "Average $application_name Memory Footprint After Full GC (M)" 123 | } 124 | export -f get_columns 125 | 126 | $script_dir/cloudformation-common.sh "${opts[@]}" -- "$@" 127 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/50Elements_buyStocks.xml: -------------------------------------------------------------------------------- 1 | 2 | IBMjohn140.3450 3 | IBMjohn140.3449 4 | IBMjohn140.3448 5 | IBMjohn140.3447 6 | IBMjohn140.3446 7 | IBMjohn140.3445 8 | IBMjohn140.3444 9 | IBMjohn140.3443 10 | IBMjohn140.3442 11 | IBMjohn140.3441 12 | IBMjohn140.3440 13 | IBMjohn140.3439 14 | IBMjohn140.3438 15 | IBMjohn140.3437 16 | IBMjohn140.3436 17 | IBMjohn140.3435 18 | IBMjohn140.3434 19 | IBMjohn140.3433 20 | IBMjohn140.3432 21 | IBMjohn140.3431 22 | IBMjohn140.3430 23 | IBMjohn140.3429 24 | IBMjohn140.3428 25 | IBMjohn140.3427 26 | IBMjohn140.3426 27 | IBMjohn140.3425 28 | IBMjohn140.3424 29 | IBMjohn140.3423 30 | IBMjohn140.3422 31 | IBMjohn140.3421 32 | IBMjohn140.3420 33 | IBMjohn140.3419 34 | IBMjohn140.3418 35 | IBMjohn140.3417 36 | IBMjohn140.3416 37 | IBMjohn140.3415 38 | IBMjohn140.3414 39 | IBMjohn140.3413 40 | IBMjohn140.3412 41 | IBMjohn140.3411 42 | IBMjohn140.3410 43 | IBMjohn140.349 44 | IBMjohn140.348 45 | IBMjohn140.347 46 | IBMjohn140.346 47 | IBMjohn140.345 48 | IBMjohn140.344 49 | IBMjohn140.343 50 | IBMjohn140.342 51 | IBMjohn140.341 52 | 53 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/ei-test-json.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | continue 16 | 17 | false 18 | -1 19 | 20 | ${__P(users)} 21 | ${__P(rampUpPeriod,60)} 22 | 1492579439000 23 | 1491462821000 24 | true 25 | ${__P(duration)} 26 | 27 | 28 | 29 | 30 | 31 | 32 | Content-Type 33 | application/json 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | ${__P(payload)} 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | ${__P(host,localhost)} 52 | ${__P(port,8243)} 53 | ${__P(protocol,https)} 54 | 55 | ${__P(path)} 56 | POST 57 | true 58 | false 59 | true 60 | false 61 | 62 | HttpClient4 63 | 120000 64 | 120000 65 | 66 | 67 | 68 | 69 | ${__P(response_pattern)} 70 | 71 | Assertion.response_data 72 | false 73 | 16 74 | Test failed! 75 | 76 | 77 | 78 | 79 | 80 | true 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/ei-test-without-soap.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | continue 16 | 17 | false 18 | -1 19 | 20 | ${__P(users)} 21 | ${__P(rampUpPeriod,60)} 22 | 1492579439000 23 | 1491462821000 24 | true 25 | ${__P(duration)} 26 | 27 | 28 | 29 | 30 | 31 | 32 | Content-Type 33 | text/xml 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | ${__P(payload)} 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | ${__P(host,localhost)} 52 | ${__P(port,8243)} 53 | ${__P(protocol,https)} 54 | 55 | ${__P(path)} 56 | POST 57 | true 58 | false 59 | true 60 | false 61 | 62 | HttpClient4 63 | 120000 64 | 120000 65 | 66 | 67 | 68 | 69 | ${__P(response_pattern)} 70 | 71 | Assertion.response_data 72 | false 73 | 16 74 | Test failed! 75 | 76 | 77 | 78 | 79 | 80 | true 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/ei-test.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | continue 16 | 17 | false 18 | -1 19 | 20 | ${__P(users)} 21 | ${__P(rampUpPeriod,60)} 22 | 1492579439000 23 | 1491462821000 24 | true 25 | ${__P(duration)} 26 | 27 | 28 | 29 | 30 | 31 | 32 | SOAPAction 33 | urn:buyStocks 34 | 35 | 36 | routing 37 | xadmin;server1;community#1.0## 38 | 39 | 40 | Content-Type 41 | text/xml 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | ${__P(payload)} 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | ${__P(host,localhost)} 60 | ${__P(port,8243)} 61 | ${__P(protocol,https)} 62 | 63 | ${__P(path)} 64 | POST 65 | true 66 | false 67 | true 68 | false 69 | 70 | HttpClient4 71 | 120000 72 | 120000 73 | 74 | 75 | 76 | 77 | ${__P(response_pattern)} 78 | 79 | Assertion.response_data 80 | false 81 | 16 82 | Test failed! 83 | 84 | 85 | 86 | 87 | 88 | true 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/security_policy_1.0.0/security_policy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | wso2carbon 83 | useReqSigCert 84 | true 85 | 300 86 | 300 87 | false 88 | org.wso2.carbon.security.util.SecurityTokenStore 89 | 90 | 300 91 | 92 | 94 | wso2carbon 95 | wso2carbon.jks 96 | -1234 97 | wso2carbon.jks 98 | wso2carbon 99 | 100 | 101 | 102 | 104 | wso2carbon 105 | wso2carbon.jks 106 | -1234 107 | wso2carbon.jks 108 | wso2carbon 109 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /components/perftest-capp/src/main/capp/PayloadFactoryWith20ElementsProxy_1.0.0/PayloadFactoryWith20ElementsProxy-1.0.0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | $1 10 | john 11 | 140.34 12 | 1 13 | 14 | 15 | $1 16 | john 17 | 140.34 18 | 1 19 | 20 | 21 | $1 22 | john 23 | 140.34 24 | 1 25 | 26 | 27 | $1 28 | john 29 | 140.34 30 | 1 31 | 32 | 33 | $1 34 | john 35 | 140.34 36 | 1 37 | 38 | 39 | $1 40 | john 41 | 140.34 42 | 1 43 | 44 | 45 | $1 46 | john 47 | 140.34 48 | 1 49 | 50 | 51 | $1 52 | john 53 | 140.34 54 | 1 55 | 56 | 57 | $1 58 | john 59 | 140.34 60 | 1 61 | 62 | 63 | $1 64 | john 65 | 140.34 66 | 1 67 | 68 | 69 | $1 70 | john 71 | 140.34 72 | 1 73 | 74 | 75 | $1 76 | john 77 | 140.34 78 | 1 79 | 80 | 81 | $1 82 | john 83 | 140.34 84 | 1 85 | 86 | 87 | $1 88 | john 89 | 140.34 90 | 1 91 | 92 | 93 | $1 94 | john 95 | 140.34 96 | 1 97 | 98 | 99 | $1 100 | john 101 | 140.34 102 | 1 103 | 104 | 105 | $1 106 | john 107 | 140.34 108 | 1 109 | 110 | 111 | $1 112 | john 113 | 140.34 114 | 1 115 | 116 | 117 | $1 118 | john 119 | 140.34 120 | 1 121 | 122 | 123 | $1 124 | john 125 | 140.34 126 | 1 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 20 | org.wso2 21 | wso2 22 | 5 23 | 24 | 25 | 4.0.0 26 | org.wso2.performance.ei 27 | performance-ei 28 | 0.1.0-SNAPSHOT 29 | pom 30 | Artifacts for WSO2 Enterprise Integrator Performance Tests 31 | 2018 32 | http://wso2.com 33 | 34 | 35 | 36 | The Apache Software License, Version 2.0 37 | http://www.apache.org/licenses/LICENSE-2.0.txt 38 | repo 39 | 40 | 41 | 42 | 43 | https://github.com/wso2/performance-ei.git 44 | scm:git:https://github.com/wso2/performance-ei.git 45 | scm:git:https://github.com/wso2/performance-ei.git 46 | HEAD 47 | 48 | 49 | 50 | components/perftest-capp 51 | distribution 52 | 53 | 54 | 55 | 56 | 57 | org.wso2.performance.common 58 | performance-common-distribution 59 | ${performance.common.version} 60 | tar.gz 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | org.apache.maven.plugins 69 | maven-release-plugin 70 | ${maven.release.plugin.version} 71 | 72 | clean install 73 | true 74 | 75 | 76 | 77 | org.apache.maven.plugins 78 | maven-deploy-plugin 79 | ${maven.deploy.plugin.version} 80 | 81 | 82 | org.apache.maven.plugins 83 | maven-compiler-plugin 84 | ${maven.compiler.plugin.version} 85 | 86 | 1.8 87 | 1.8 88 | -Xlint:unchecked 89 | 90 | 91 | 92 | org.apache.maven.plugins 93 | maven-javadoc-plugin 94 | ${maven.javadoc.plugin.version} 95 | 96 | 97 | org.apache.maven.plugins 98 | maven-source-plugin 99 | ${maven.source.plugin.version} 100 | 101 | 102 | org.codehaus.mojo 103 | findbugs-maven-plugin 104 | ${findbugs.maven.plugin.version} 105 | 106 | Max 107 | Low 108 | true 109 | ${project.parent.basedir}/findbugs-exclude.xml 110 | 111 | 112 | 113 | 114 | check 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | pedantic 125 | 126 | 127 | 128 | org.apache.rat 129 | apache-rat-plugin 130 | ${apache.rat.plugin.version} 131 | 132 | 133 | **/*.md 134 | **/*.jmx 135 | **/dependency-reduced-pom.xml 136 | 137 | 138 | 139 | 140 | verify 141 | 142 | check 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | UTF-8 154 | 0.1.0-SNAPSHOT 155 | 0.4.6-SNAPSHOT 156 | 157 | 2.5.3 158 | 2.8.2 159 | 3.6.1 160 | 2.10.4 161 | 3.0.1 162 | 3.1.1 163 | 0.12 164 | 3.0.4 165 | 166 | 167 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Artifacts for WSO2 Enterprise Integrator Performance Tests 2 | 3 | --- 4 | | Branch | Build Status | 5 | | :------ |:------------ | 6 | | master | [![Build Status](https://wso2.org/jenkins/buildStatus/icon?job=platform-builds/performance-ei)](https://wso2.org/jenkins/job/platform-builds/job/performance-ei/) | 7 | --- 8 | 9 | This repository has artifacts to be used for WSO2 Enterprise Integrator Performance Tests. 10 | 11 | The [distribution](distribution) directory has the scripts and the Maven project to build the final distribution package 12 | to be used for performance tests. 13 | 14 | The package (**performance-ei-distribution-${version}.tar.gz**) built by the distribution maven module is the 15 | package required for Enterprise Integrator performance tests from this repository. 16 | 17 | The (**performance-common-distribution-${version}.tar.gz**) package is also required for performance tests. 18 | 19 | The scripts in this repository depend on the scripts in 20 | "[performance-common](https://github.com/wso2/performance-common/)" repository. 21 | 22 | **Note:** The scripts are only compatible with **WSO2 Enterprise Integrator 6.x.x**. 23 | 24 | Following is the recommended deployment for performance testing. 25 | 26 | ![Enterprise Integrator Deployment](diagrams/EI_Performance_Deployment.jpg) 27 | 28 | ## Package contents 29 | 30 | Following is the tree view of the contents inside distribution package. 31 | 32 | ``` 33 | |-- ei 34 | | |-- capp 35 | | | `-- ESBPerformanceTestArtifacts_1.0.0.car 36 | | |-- ei-start.sh 37 | | `-- setup.sh 38 | `-- jmeter 39 | |-- ei-test.jmx 40 | |-- requests 41 | | |-- 100K_buyStocks_secure.xml 42 | | |-- 100K_buyStocks.xml 43 | | |-- 10K_buyStocks_secure.xml 44 | | |-- 10K_buyStocks.xml 45 | | |-- 1K_buyStocks_secure.xml 46 | | |-- 1K_buyStocks.xml 47 | | |-- 200K_buyStocks.xml 48 | | |-- 500B_buyStocks_secure.xml 49 | | |-- 500B_buyStocks.xml 50 | | |-- 500K_buyStocks_secure.xml 51 | | |-- 500K_buyStocks.xml 52 | | |-- 5K_buyStocks_secure.xml 53 | | `-- 5K_buyStocks.xml 54 | `-- run-performance-test.sh 55 | ``` 56 | 57 | Each directory has executable scripts. 58 | 59 | This package must be extracted in user home directory of all JMeter nodes and the Enterprise Integrator node used for the 60 | performance tests. 61 | 62 | In addition, please make sure to extract the "performance-common" package to all nodes and install Java, JMeter, and SAR 63 | to all nodes by using scripts provided. 64 | 65 | **Note:** These scripts will work only on Debian based systems like Ubuntu. 66 | 67 | See following sections for more details. 68 | 69 | ### WSO2 Enterprise Integrator 70 | 71 | The "ei" directory has the scripts related to WSO2 Enterprise Integrator and the configurations. These scripts must be run in 72 | WSO2 Enterprise Integrator node. 73 | 74 | Following sections have more details about each script. 75 | 76 | #### setup.sh 77 | 78 | The `setup.sh` script extracts WSO2 Enterprise Integrator to user home directory and copies the CAPP containing the services. 79 | 80 | How to run: 81 | 82 | `./setup.sh netty_host` 83 | 84 | #### ei-start.sh 85 | 86 | This script starts the WSO2 Enterprise Integrator with the given Java heap size and enable Garbage Collection (GC) logs in the 87 | server. 88 | 89 | How to run: 90 | 91 | `./ei-start.sh wso2ei-6.1.1 4` 92 | 93 | Above example will start the Enterprise Integrator version 6.1.1 with 4GB of heap. 94 | 95 | **Note:** This script is called from `setup.sh` and the performance test script. 96 | 97 | ### Apache JMeter 98 | 99 | Inside "jmeter", directory there are scripts to run the performance tests and create a summary CSV from the JMeter 100 | results. 101 | 102 | #### run-performance-test.sh 103 | 104 | The `run-performance-test.sh` script runs the performance tests for different test scenarios. This script must be used 105 | in the JMeter client node and it uses the two JMeter servers to load test WSO2 Enterprise Integrator 106 | 107 | This script is using ssh config to connect with other nodes from JMeter client and get server metrics and log files. 108 | Therefore, it is important use a configuration as follows in `~/.ssh/config` 109 | 110 | ``` 111 | Host jmeter1 112 | HostName x.x.x.1 113 | User ubuntu 114 | IdentityFile ~/keys/ei.pem 115 | 116 | Host jmeter2 117 | HostName x.x.x.2 118 | User ubuntu 119 | IdentityFile ~/keys/ei.pem 120 | 121 | Host ei 122 | HostName x.x.x.3 123 | User ubuntu 124 | IdentityFile ~/keys/ei.pem 125 | 126 | Host netty 127 | HostName x.x.x.4 128 | User ubuntu 129 | IdentityFile ~/keys/ei.pem 130 | ``` 131 | 132 | There are multiple parameters inside the script and the values should be changed as required. 133 | 134 | Parameter | Description 135 | ------------ | ------------- 136 | concurrent_users | The different number of concurrent users. This an array and the brackets are important. 137 | backend_sleep_time | The different backend sleep times in milliseconds. This is an array. 138 | proxy_types | Different proxy types used for tests. Default `proxy_types=(DirectProxy CBRProxy CBRSOAPHeaderProxy CBRTransportHeaderProxy SecureProxy XSLTEnhancedProxy XSLTProxy`) 139 | request_payloads | Payloads used for proxy types excepts for SecureProxy 140 | secure_payloads | Payloads used for SecureProxy 141 | ei_host | The Enterprise Integrator IP 142 | ei_ssh_host | The ssh host for the API Manager node 143 | backend_ssh_host | The ssh host for the node with Netty HTTP Echo Service 144 | netty_port | The port of Netty HTTP Echo Service. Default: 9000 145 | test_duration | Duration of the test in seconds. 146 | warmup_time | The warmup time in minutes. This is used for JTL Splitter, which is from `performance-common` 147 | jmeter1_host | The hostname or IP of the JMeter Server 01 148 | jmeter2_host | The hostname or IP of the JMeter Server 02 149 | jmeter1_ssh_host | The ssh host for the JMeter Server 01 150 | jmeter2_ssh_host | The ssh host for the JMeter Server 02 151 | heap_size | Heap Size in GBs 152 | 153 | After changing parameters, the performance tests can be started from the script in the JMeter Client node as shown in 154 | above diagram. It's recommended to run the tests in `nohup` mode. 155 | 156 | For example: 157 | 158 | `nohup ./run-performance-test.sh > test.out 2>&1 &` 159 | 160 | The results of performance tests will be saved in `results` directory. 161 | 162 | #### create-summary-csv.sh 163 | 164 | After the performance tests are completed, a summary CSV for all results can be created using this script file. 165 | 166 | The script expects the [GCViewer](https://github.com/chewiebug/GCViewer) jar file to analyze GC logs. The latest 167 | GCViewer JAR file can be downloaded from [Maven](http://repo1.maven.org/maven2/com/github/chewiebug/gcviewer/) 168 | 169 | The script must be run inside the results directory. 170 | 171 | How to run: 172 | 173 | `~/jmeter/create-summary-csv.sh /path/to/gcviewer*.jar` 174 | 175 | ## Steps to run performance tests 176 | 177 | Following are the high-level steps to run the performance tests. 178 | 179 | * Copy the `performance-ei` and `performance-common` packages to all servers. 180 | * Extract the packages in user home directory 181 | * Download latest Oracle JDK 8 to all servers. 182 | * Download latest Apache JMeter to all JMeter servers. 183 | * Download WSO2 Enterprise Integrator product to EI server. 184 | * Install Java in all servers using the `install-java.sh` script inside `java` directory. 185 | * Install 'System Activity Report' in all servers using the `install-sar.sh` script inside `sar` directory. 186 | * Install 'Apache JMeter' in all JMeter servers using the `install-jmeter.sh` script inside `jmeter` directory 187 | * Setup WSO2 Enterprise Integrator in EI server using `setup.sh` script. 188 | * Run the performance test using `run-performance-test.sh` script. 189 | * Use `create-summary-csv.sh` to generate a summary.csv file from the test results. 190 | 191 | ## License 192 | 193 | Copyright 2018 WSO2 Inc. (http://wso2.com) 194 | 195 | Licensed under the Apache License, Version 2.0 196 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/performance-test-scenarios.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | # Copyright (c) 2018, WSO2 Inc. (http://wso2.org) All Rights Reserved. 3 | # 4 | # WSO2 Inc. licenses this file to you under the Apache License, 5 | # Version 2.0 (the "License"); you may not use this file except 6 | # in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | # ---------------------------------------------------------------------------- 19 | # Performance Test Scenarios 20 | # ---------------------------------------------------------------------------- 21 | 22 | # Message Sizes in bytes for sample payloads 23 | declare -a available_message_sizes=("500" "1000" "10000" "100000" "200000" "500000" "1000000") 24 | declare -a available_message_iterations=("5" "10" "20" "50" "100") 25 | 26 | # Verifying if payloads for each message size exists in the 'requests' directory 27 | function verifyRequestPayloads() { 28 | for i in "$@"; do 29 | if ! ls $script_dir/requests/${i}B_buyStocks*.xml 1>/dev/null 2>&1; then 30 | echo "ERROR: Payload file for $i bytes is missing!" 31 | exit 1 32 | fi 33 | done 34 | } 35 | 36 | # Verifying if payloads for each message size exists in the 'requests' directory 37 | function verifyIteratePayloads() { 38 | for i in "$@"; do 39 | if ! ls $script_dir/requests/${i}Elements_buyStocks*.xml 1>/dev/null 2>&1; then 40 | echo "ERROR: Payload file for $i elements is missing!" 41 | exit 1 42 | fi 43 | done 44 | } 45 | 46 | verifyRequestPayloads "${available_message_sizes[@]}" 47 | verifyRequestPayloads "${message_sizes_array[@]}" 48 | 49 | verifyIteratePayloads "${message_iteratations_array[@]}" 50 | verifyIteratePayloads "${message_iteratations_array[@]}" 51 | 52 | # Test scenarios 53 | declare -A test_scenario0=( 54 | [name]="DirectProxy" 55 | [display_name]="Direct Proxy" 56 | [description]="Passthrough proxy service" 57 | [path]="/services/DirectProxy/buyStocksOperation" 58 | [jmx]="ei-test.jmx" 59 | [protocol]="http" 60 | [use_backend]=true 61 | [skip]=false 62 | ) 63 | declare -A test_scenario1=( 64 | [name]="CBRProxy" 65 | [display_name]="CBR Proxy" 66 | [description]="Routing the message based on the content of the message body" 67 | [path]="/services/CBRProxy/buyStocksOperation" 68 | [jmx]="ei-test.jmx" 69 | [protocol]="http" 70 | [use_backend]=true 71 | [skip]=false 72 | ) 73 | declare -A test_scenario2=( 74 | [name]="CBRSOAPHeaderProxy" 75 | [display_name]="CBR SOAP Header Proxy" 76 | [description]="Routing the message based on a SOAP header in the message payload" 77 | [path]="/services/CBRSOAPHeaderProxy/buyStocksOperation" 78 | [jmx]="ei-test.jmx" 79 | [protocol]="http" 80 | [use_backend]=true 81 | [skip]=false 82 | ) 83 | declare -A test_scenario3=( 84 | [name]="CBRTransportHeaderProxy" 85 | [display_name]="CBR Transport Header Proxy" 86 | [description]="Routing the message based on an HTTP header in the message" 87 | [path]="/services/CBRTransportHeaderProxy/buyStocksOperation" 88 | [jmx]="ei-test.jmx" 89 | [protocol]="http" 90 | [use_backend]=true 91 | [skip]=false 92 | ) 93 | declare -A test_scenario4=( 94 | [name]="SecureProxy" 95 | [display_name]="Secure Proxy" 96 | [description]="Secured proxy service" 97 | [path]="/services/SecureProxy/buyStocksOperation" 98 | [jmx]="ei-test.jmx" 99 | [protocol]="https" 100 | [use_backend]=true 101 | [skip]=false 102 | ) 103 | declare -A test_scenario5=( 104 | [name]="XSLTEnhancedProxy" 105 | [display_name]="XSLT Enhanced Proxy" 106 | [description]="Having enhanced, Fast XSLT transformations in request and response paths" 107 | [path]="/services/XSLTEnhancedProxy/buyStocksOperation" 108 | [jmx]="ei-test.jmx" 109 | [protocol]="http" 110 | [use_backend]=true 111 | [skip]=false 112 | ) 113 | declare -A test_scenario10=( 114 | [name]="XSLTProxy" 115 | [display_name]="XSLT Proxy" 116 | [description]="Having XSLT transformations in request and response paths" 117 | [path]="/services/XSLTProxy/buyStocksOperation" 118 | [jmx]="ei-test.jmx" 119 | [protocol]="http" 120 | [use_backend]=true 121 | [skip]=false 122 | ) 123 | declare -A test_scenario11=( 124 | [name]="DirectAPI" 125 | [display_name]="Direct API" 126 | [description]="Passthrough API service" 127 | [path]="/directApi" 128 | [jmx]="ei-test.jmx" 129 | [protocol]="http" 130 | [use_backend]=true 131 | [skip]=false 132 | ) 133 | declare -A test_scenario12=( 134 | [name]="MessageBuildingProxy" 135 | [display_name]="Message Building Proxy" 136 | [description]="Message Building Proxy service" 137 | [path]="/services/MessageBuildingProxy" 138 | [jmx]="ei-test.jmx" 139 | [protocol]="http" 140 | [use_backend]=true 141 | [skip]=false 142 | ) 143 | declare -A test_scenario14=( 144 | [name]="CloneAndAggregateWithTwoBackendProxy" 145 | [display_name]="Clone & Aggregate With 2 Backend Proxy" 146 | [description]="Clone payload and send to 2 backends and aggregate the response back" 147 | [path]="/services/CloneAndAggregateWithTwoBackendProxy" 148 | [jmx]="ei-test.jmx" 149 | [protocol]="http" 150 | [use_backend]=true 151 | [skip]=false 152 | ) 153 | declare -A test_scenario15=( 154 | [name]="CloneAndAggregateWithFourBackendProxy" 155 | [display_name]="Clone & Aggregate With 4 Backend Proxy" 156 | [description]="Clone payload and send to 4 backends and aggregate the response back" 157 | [path]="/services/CloneAndAggregateWithTwoBackendProxy" 158 | [jmx]="ei-test.jmx" 159 | [protocol]="http" 160 | [use_backend]=true 161 | [skip]=false 162 | ) 163 | declare -A test_scenario16=( 164 | [name]="CloneAndAggregateWithEightBackendProxy" 165 | [display_name]="Clone & Aggregate With 8 Backend Proxy" 166 | [description]="Clone payload and send to 8 backends and aggregate the response back" 167 | [path]="/services/CloneAndAggregateWithTwoBackendProxy" 168 | [jmx]="ei-test.jmx" 169 | [protocol]="http" 170 | [use_backend]=true 171 | [skip]=false 172 | ) 173 | declare -A test_scenario17=( 174 | [name]="EnrichBackAndForthProxy" 175 | [display_name]="Enrich Back & Forth Proxy" 176 | [description]="Enrich payload to a property and enrich back in the response" 177 | [path]="/services/EnrichBackAndForthProxy" 178 | [jmx]="ei-test.jmx" 179 | [protocol]="http" 180 | [use_backend]=true 181 | [skip]=false 182 | ) 183 | declare -A test_scenario18=( 184 | [name]="IterateAndAggregateProxy" 185 | [display_name]="Iterate and Aggregate Proxy" 186 | [description]="Iterate over a payload and call backend and aggregate the response" 187 | [path]="/services/IterateAndAggregateProxy" 188 | [jmx]="ei-test-without-soap.jmx" 189 | [protocol]="http" 190 | [use_backend]=true 191 | [skip]=false 192 | ) 193 | declare -A test_scenario19=( 194 | [name]="XSLTTransformProxy" 195 | [display_name]="XSLT Transform Proxy" 196 | [description]="Do a XSLT Transformation" 197 | [path]="/services/XSLTTransformProxy" 198 | [jmx]="ei-test-without-soap.jmx" 199 | [protocol]="http" 200 | [use_backend]=true 201 | [skip]=false 202 | ) 203 | declare -A test_scenario20=( 204 | [name]="DatamapperProxy" 205 | [display_name]="Datamapper Transform Proxy" 206 | [description]="Do a XML transformation same as XSLTTransformProxy" 207 | [path]="/services/DatamapperProxy" 208 | [jmx]="ei-test-without-soap.jmx" 209 | [protocol]="http" 210 | [use_backend]=true 211 | [skip]=false 212 | ) 213 | declare -A test_scenario21=( 214 | [name]="PayloadFactoryWith20ElementsProxy" 215 | [display_name]="PayloadFactory with 20 Elements Proxy" 216 | [description]="Do a XML transformation same as XSLTTransformProxy" 217 | [path]="/services/PayloadFactoryWith20ElementsProxy" 218 | [jmx]="ei-test-without-soap.jmx" 219 | [protocol]="http" 220 | [use_backend]=true 221 | [skip]=false 222 | ) 223 | declare -A test_scenario22=( 224 | [name]="PayloadFactoryWith50ElementsProxy" 225 | [display_name]="PayloadFactory with 50 Elements Proxy" 226 | [description]="Do a XML transformation same as XSLTTransformProxy" 227 | [path]="/services/PayloadFactoryWith50ElementsProxy" 228 | [jmx]="ei-test-without-soap.jmx" 229 | [protocol]="http" 230 | [use_backend]=true 231 | [skip]=false 232 | ) 233 | declare -A test_scenario23=( 234 | [name]="PayloadFactoryWith100ElementsProxy" 235 | [display_name]="PayloadFactory with 100 Elements Proxy" 236 | [description]="Do a XML transformation same as XSLTTransformProxy" 237 | [path]="/services/PayloadFactoryWith100ElementsProxy" 238 | [jmx]="ei-test-without-soap.jmx" 239 | [protocol]="http" 240 | [use_backend]=true 241 | [skip]=false 242 | ) 243 | declare -A test_scenario24=( 244 | [name]="JsonToSOAPProxy" 245 | [display_name]="JSON to SOAP Transformation" 246 | [description]="Convert JSON payload to SOAP format and send to the back end" 247 | [path]="/services/JsonToSOAPProxy" 248 | [jmx]="ei-test-json.jmx" 249 | [protocol]="http" 250 | [use_backend]=true 251 | [skip]=false 252 | ) 253 | declare -A test_scenario25=( 254 | [name]="DirectHTTPSAPI" 255 | [display_name]="Direct HTTPS API" 256 | [description]="Passthrough API HTTPS service" 257 | [path]="/directApi" 258 | [jmx]="ei-test.jmx" 259 | [protocol]="https" 260 | [use_backend]=true 261 | [skip]=false 262 | ) 263 | 264 | -------------------------------------------------------------------------------- /distribution/scripts/jmeter/requests/100Elements_buyStocks.xml: -------------------------------------------------------------------------------- 1 | 2 | IBMjohn140.34100 3 | IBMjohn140.3499 4 | IBMjohn140.3498 5 | IBMjohn140.3497 6 | IBMjohn140.3496 7 | IBMjohn140.3495 8 | IBMjohn140.3494 9 | IBMjohn140.3493 10 | IBMjohn140.3492 11 | IBMjohn140.3491 12 | IBMjohn140.3490 13 | IBMjohn140.3489 14 | IBMjohn140.3488 15 | IBMjohn140.3487 16 | IBMjohn140.3486 17 | IBMjohn140.3485 18 | IBMjohn140.3484 19 | IBMjohn140.3483 20 | IBMjohn140.3482 21 | IBMjohn140.3481 22 | IBMjohn140.3480 23 | IBMjohn140.3479 24 | IBMjohn140.3478 25 | IBMjohn140.3477 26 | IBMjohn140.3476 27 | IBMjohn140.3475 28 | IBMjohn140.3474 29 | IBMjohn140.3473 30 | IBMjohn140.3472 31 | IBMjohn140.3471 32 | IBMjohn140.3470 33 | IBMjohn140.3469 34 | IBMjohn140.3468 35 | IBMjohn140.3467 36 | IBMjohn140.3466 37 | IBMjohn140.3465 38 | IBMjohn140.3464 39 | IBMjohn140.3463 40 | IBMjohn140.3462 41 | IBMjohn140.3461 42 | IBMjohn140.3460 43 | IBMjohn140.3459 44 | IBMjohn140.3458 45 | IBMjohn140.3457 46 | IBMjohn140.3456 47 | IBMjohn140.3455 48 | IBMjohn140.3454 49 | IBMjohn140.3453 50 | IBMjohn140.3452 51 | IBMjohn140.3451 52 | IBMjohn140.3450 53 | IBMjohn140.3449 54 | IBMjohn140.3448 55 | IBMjohn140.3447 56 | IBMjohn140.3446 57 | IBMjohn140.3445 58 | IBMjohn140.3444 59 | IBMjohn140.3443 60 | IBMjohn140.3442 61 | IBMjohn140.3441 62 | IBMjohn140.3440 63 | IBMjohn140.3439 64 | IBMjohn140.3438 65 | IBMjohn140.3437 66 | IBMjohn140.3436 67 | IBMjohn140.3435 68 | IBMjohn140.3434 69 | IBMjohn140.3433 70 | IBMjohn140.3432 71 | IBMjohn140.3431 72 | IBMjohn140.3430 73 | IBMjohn140.3429 74 | IBMjohn140.3428 75 | IBMjohn140.3427 76 | IBMjohn140.3426 77 | IBMjohn140.3425 78 | IBMjohn140.3424 79 | IBMjohn140.3423 80 | IBMjohn140.3422 81 | IBMjohn140.3421 82 | IBMjohn140.3420 83 | IBMjohn140.3419 84 | IBMjohn140.3418 85 | IBMjohn140.3417 86 | IBMjohn140.3416 87 | IBMjohn140.3415 88 | IBMjohn140.3414 89 | IBMjohn140.3413 90 | IBMjohn140.3412 91 | IBMjohn140.3411 92 | IBMjohn140.3410 93 | IBMjohn140.349 94 | IBMjohn140.348 95 | IBMjohn140.347 96 | IBMjohn140.346 97 | IBMjohn140.345 98 | IBMjohn140.344 99 | IBMjohn140.343 100 | IBMjohn140.342 101 | IBMjohn140.341 102 | 103 | --------------------------------------------------------------------------------