2 # ============LICENSE_START=======================================================
3 # dcaegen2-collectors-veshv
4 # ================================================================================
5 # Copyright (C) 2019 NOKIA
6 # ================================================================================
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
11 # http://www.apache.org/licenses/LICENSE-2.0
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 # ============LICENSE_END=========================================================
20 SCRIPT_DIRECTORY="$(pwd "$0")"
22 PROPERTIES_FILE=${SCRIPT_DIRECTORY}/test.properties
23 CONFIG_MAP_NAME=performance-test-config
24 PRODUCER_APPS_LABEL=hv-collector-producer
25 CONSUMER_APPS_LABEL=hv-collector-kafka-consumer
26 PROMETHEUS_CONF_LABEL=prometheus-server-conf
27 PROMETHEUS_APPS_LABEL=hv-collector-prometheus
28 GRAFANA_APPS_LABEL=hv-collector-grafana
29 GRAFANA_DATASOURCE=grafana-datasources
30 GRAFANA_DASHBOARD=grafana-dashboards
31 GRAFANA_DASHBOARD_PROVIDERS=grafana-dashboards-providers
33 MAXIMUM_BACK_OFF_CHECK_ITERATIONS=30
35 NAME_REASON_PATTERN="custom-columns=NAME:.metadata.name,REASON:.status.containerStatuses[].state.waiting.reason"
38 echo "Cleaning up environment"
40 echo "Attempting to delete test parameters ConfigMap"
41 kubectl delete configmap ${CONFIG_MAP_NAME} -n ${ONAP_NAMESPACE}
43 echo "Attempting to delete prometheus ConfigMap"
44 kubectl delete configmap -l name=${PROMETHEUS_CONF_LABEL} -n ${ONAP_NAMESPACE}
46 echo "Attempting to delete prometheus deployment and service"
47 kubectl delete service,deployments -l app=${PROMETHEUS_APPS_LABEL} -n ${ONAP_NAMESPACE}
49 echo "Attempting to delete grafana deployment and service"
50 kubectl delete service,deployments -l app=${GRAFANA_APPS_LABEL} -n ${ONAP_NAMESPACE}
52 echo "Attempting to delete grafana ConfigMap(DASHBOARD)"
53 kubectl delete configmap -l name=${GRAFANA_DASHBOARD} -n ${ONAP_NAMESPACE}
55 echo "Attempting to delete grafana ConfigMap(GRAFANA_DASHBOARD_PROVIDERS)"
56 kubectl delete configmap -l name=${GRAFANA_DASHBOARD_PROVIDERS} -n ${ONAP_NAMESPACE}
58 echo "Attempting to delete grafana ConfigMap(GRAFANA_DATASOURCE)"
59 kubectl delete configmap -l name=${GRAFANA_DATASOURCE} -n ${ONAP_NAMESPACE}
61 echo "Attempting to delete consumer deployments"
62 kubectl delete deployments -l app=${CONSUMER_APPS_LABEL} -n ${ONAP_NAMESPACE}
64 echo "Attempting to delete producer pods"
65 kubectl delete pods -l app=${PRODUCER_APPS_LABEL} -n ${ONAP_NAMESPACE}
67 echo "Environment clean up finished!"
70 function create_producers() {
72 for i in $(seq 1 ${CONTAINERS_COUNT});
74 echo "Creating ${i}/${CONTAINERS_COUNT} producer"
75 kubectl create -f producer-pod.yaml -n ${ONAP_NAMESPACE}
77 echo "Producers created"
83 echo "Run cloud based HV-VES performance test"
84 echo "Usage $0 setup|start|clean|help"
85 echo " setup : set up ConfigMap and consumers"
86 echo " start : create producers - start the performance test"
87 echo " Optional parameters:"
88 echo " --containers : number of producer containers to create (1)"
89 echo " --properties-file : path to file with benchmark properties (./test.properties)"
90 echo " clean : remove ConfigMap, HV-VES consumers and producers"
91 echo " help : print usage"
92 echo "Example invocations:"
93 echo "./cloud-based-performance-test.sh setup"
94 echo "./cloud-based-performance-test.sh start"
95 echo "./cloud-based-performance-test.sh start --containers 10"
96 echo "./cloud-based-performance-test.sh start --properties-file ~/other_test.properties"
97 echo "./cloud-based-performance-test.sh clean"
101 function setup_environment() {
102 echo "Setting up environment"
103 echo "Creating test properties ConfigMap from: $PROPERTIES_FILE"
104 kubectl create configmap ${CONFIG_MAP_NAME} --from-env-file=${PROPERTIES_FILE} -n ${ONAP_NAMESPACE}
106 echo "Creating consumer deployment"
107 kubectl apply -f consumer-deployment.yaml
109 echo "Creating ConfigMap for prometheus deployment"
110 kubectl apply -f prometheus-config-map.yaml
112 echo "Creating prometheus deployment"
113 kubectl apply -f prometheus-deployment.yaml
115 echo "Creating ConfigMap for grafana connections dashboard"
116 kubectl apply -f grafana/dashboards/connections.yaml
118 echo "Creating ConfigMap for grafana processing dashboard"
119 kubectl apply -f grafana/dashboards/processing.yaml
121 echo "Creating ConfigMap for grafana grafana-performance-tests dashboard"
122 kubectl apply -f grafana/dashboards/performance-tests.yaml
124 echo "Creating ConfigMap for grafana datasource"
125 kubectl apply -f grafana/datasources/datasource.yaml
127 echo "Creating ConfigMap for grafana dashboards-providers"
128 kubectl apply -f grafana/dashboards-providers/dashboards.yaml
130 echo "Creating grafana deployment"
131 kubectl apply -f grafana-deployment.yaml
133 echo "Waiting for consumers to be running."
134 while [[ $(kubectl get pods -l app=${CONSUMER_APPS_LABEL} -n ${ONAP_NAMESPACE} | grep -c "unhealthy\|starting") -ne 0 ]] ; do
137 echo "Setting up environment finished!"
140 function start_performance_test() {
141 echo "Starting cloud based performance tests"
142 echo "________________________________________"
143 echo "Test configuration:"
144 echo "Producer containers count: ${CONTAINERS_COUNT}"
145 echo "Properties file path: ${PROPERTIES_FILE}"
146 echo "________________________________________"
150 echo "Waiting for producers completion"
152 COMPLETED_PRODUCERS=$(kubectl get pods -l app=${PRODUCER_APPS_LABEL} -n ${ONAP_NAMESPACE} | grep -c "Completed")
153 IMAGE_PULL_BACK_OFFS=$(kubectl get pods -l app=${PRODUCER_APPS_LABEL} -n ${ONAP_NAMESPACE} -o ${NAME_REASON_PATTERN} | grep -c "ImagePullBackOff \| ErrImagePull")
155 if [[ ${IMAGE_PULL_BACK_OFFS} -gt 0 ]]; then
156 CHECK_NUMBER=$((CHECK_NUMBER + 1))
157 if [[ ${CHECK_NUMBER} -gt ${MAXIMUM_BACK_OFF_CHECK_ITERATIONS} ]]; then
158 echo "Error: Image pull problem"
163 [[ ${COMPLETED_PRODUCERS} -eq ${CONTAINERS_COUNT} || ${CHECK_NUMBER} -gt ${MAXIMUM_BACK_OFF_CHECK_ITERATIONS} ]] && break
167 echo "Attempting to delete producer pods"
168 kubectl delete pods -l app=${PRODUCER_APPS_LABEL} -n ${ONAP_NAMESPACE}
169 echo "Performance test finished"
173 cd ${SCRIPT_DIRECTORY}
175 if [[ $# -eq 0 ]]; then
186 while [[ $(($#)) -gt 0 ]]; do
189 CONTAINERS_COUNT=${2}
195 echo "Unknown option: ${1}"
201 start_performance_test
210 echo "Unknown action: ${arg}" >&2