91 lines
4.6 KiB
Bash
Executable File
91 lines
4.6 KiB
Bash
Executable File
set -ex -o pipefail
|
|
|
|
case "${TEST_FORMAT}" in
|
|
http|flux-http)
|
|
;;
|
|
*)
|
|
>&2 echo "Unknown query format: ${TEST_FORMAT}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# get latest ubuntu 20.04 ami for us-west-2
|
|
ami_id=$(aws --region us-west-2 ssm get-parameters --names /aws/service/canonical/ubuntu/server/20.04/stable/current/amd64/hvm/ebs-gp2/ami-id --query 'Parameters[0].[Value]' --output text)
|
|
|
|
# launch ec2 instance
|
|
instance_type="r5.2xlarge"
|
|
datestring=$(date +%Y%m%d)
|
|
instance_info=$(aws --region us-west-2 ec2 run-instances \
|
|
--image-id $ami_id \
|
|
--instance-type $instance_type \
|
|
--block-device-mappings DeviceName=/dev/sda1,Ebs={VolumeSize=200} \
|
|
--key-name circleci-oss-test \
|
|
--security-group-ids sg-03004366a38eccc97 \
|
|
--subnet-id subnet-0c079d746f27ede5e \
|
|
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=oss-perftest-$datestring-${CIRCLE_BRANCH}-${CIRCLE_SHA1}-${TEST_FORMAT}}]")
|
|
|
|
# get instance info
|
|
ec2_instance_id=$(echo $instance_info | jq -r .Instances[].InstanceId)
|
|
|
|
# pull down the latest influx_tools
|
|
AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} aws --region us-west-2 s3 cp s3://perftest-binaries-influxdb/influx_tools/latest_1.8.txt ./latest.txt
|
|
latest_tools=$(cat latest.txt | cut -d ' ' -f1)
|
|
AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} aws --region us-west-2 s3 cp s3://perftest-binaries-influxdb/influx_tools/$latest_tools ./influx_tools
|
|
sleep 60
|
|
|
|
ec2_ip=$(aws \
|
|
--region us-west-2 \
|
|
ec2 describe-instances \
|
|
--instance-ids $ec2_instance_id \
|
|
--query "Reservations[].Instances[].PublicIpAddress" \
|
|
--output text)
|
|
|
|
while [ -z $ec2_ip ]; do
|
|
sleep 5
|
|
ec2_ip=$(aws \
|
|
--region us-west-2 \
|
|
ec2 describe-instances \
|
|
--instance-ids $ec2_instance_id \
|
|
--query "Reservations[].Instances[].PublicIpAddress" \
|
|
--output text)
|
|
done
|
|
|
|
trap "aws --region us-west-2 ec2 terminate-instances --instance-ids $ec2_instance_id" KILL
|
|
|
|
# push binary and script to instance
|
|
debname=$(find /tmp/workspace/artifacts/influxdb2*amd64.deb)
|
|
base_debname=$(basename $debname)
|
|
source_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
|
|
scp influx_tools ubuntu@$ec2_ip:/home/ubuntu/influx_tools
|
|
scp $debname ubuntu@$ec2_ip:/home/ubuntu/$base_debname
|
|
scp ${source_dir}/run_perftest.sh ubuntu@$ec2_ip:/home/ubuntu/run_perftest.sh
|
|
|
|
# install deb in remote vm and create ramdisk for dataset files
|
|
RAMDISK_DIR=/mnt/ramdisk
|
|
ssh ubuntu@$ec2_ip << EOF
|
|
sudo chmod +x /home/ubuntu/influx_tools
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get install --assume-yes /home/ubuntu/$base_debname
|
|
sudo systemctl unmask influxdb.service
|
|
sudo systemctl start influxdb
|
|
sudo mkdir -p ${RAMDISK_DIR}
|
|
sudo mount -t tmpfs -o size=32G tmpfs ${RAMDISK_DIR}
|
|
EOF
|
|
|
|
# setup influxdb2
|
|
export INFLUXDB2=true
|
|
export TEST_ORG=example_org
|
|
export TEST_TOKEN=token
|
|
result=$(ssh ubuntu@$ec2_ip "curl -s -o /dev/null -H \"Content-Type: application/json\" -XPOST -d '{\"username\": \"default\", \"password\": \"thisisnotused\", \"retentionPeriodSeconds\": 0, \"org\": \"$TEST_ORG\", \"bucket\": \"unused_bucket\", \"token\": \"$TEST_TOKEN\"}' http://localhost:8086/api/v2/setup -w %{http_code}")
|
|
if [ "$result" != "201" ]; then
|
|
echo "Influxdb2 failed to setup correctly"
|
|
exit 1
|
|
fi
|
|
|
|
# run tests
|
|
set +x
|
|
export COMMIT_TIME=$(git show -s --format=%ct)
|
|
echo "running 'ssh ubuntu@$ec2_ip \"nohup sudo AWS_ACCESS_KEY_ID=REDACTED AWS_SECRET_ACCESS_KEY=REDACTED CIRCLE_TEARDOWN=true CIRCLE_TOKEN=REDACTED CLOUD2_BUCKET=${CLOUD2_PERFTEST_BUCKET} CLOUD2_ORG=${CLOUD2_PERFTEST_ORG} DATASET_DIR=${RAMDISK_DIR} DATA_I_TYPE=${instance_type} DB_TOKEN=REDACTED INFLUXDB2=${INFLUXDB2} INFLUXDB_VERSION=${CIRCLE_BRANCH} TEST_FORMAT=${TEST_FORMAT} TEST_RECORD_INGEST_RESULTS=${TEST_RECORD_INGEST_RESULTS} NGINX_HOST=localhost TEST_COMMIT=${CIRCLE_SHA1} TEST_COMMIT_TIME=${COMMIT_TIME} TEST_ORG=${TEST_ORG} TEST_TOKEN=${TEST_TOKEN} CIRCLE_TEARDOWN_DATESTRING=$datestring ./run_perftest.sh > /home/ubuntu/perftest_log.txt 2>&1 &\"'"
|
|
ssh ubuntu@$ec2_ip "nohup sudo AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} CIRCLE_TEARDOWN=true CIRCLE_TOKEN=${CIRCLE_API_CALLBACK_TOKEN} CLOUD2_BUCKET=${CLOUD2_PERFTEST_BUCKET} CLOUD2_ORG=${CLOUD2_PERFTEST_ORG} DATASET_DIR=${RAMDISK_DIR} DATA_I_TYPE=${instance_type} DB_TOKEN=${CLOUD2_PERFTEST_TOKEN} INFLUXDB2=${INFLUXDB2} INFLUXDB_VERSION=${CIRCLE_BRANCH} TEST_FORMAT=${TEST_FORMAT} TEST_RECORD_INGEST_RESULTS=${TEST_RECORD_INGEST_RESULTS} NGINX_HOST=localhost TEST_COMMIT=${CIRCLE_SHA1} TEST_COMMIT_TIME=${COMMIT_TIME} TEST_ORG=${TEST_ORG} TEST_TOKEN=${TEST_TOKEN} CIRCLE_TEARDOWN_DATESTRING=$datestring ./run_perftest.sh > /home/ubuntu/perftest_log.txt 2>&1 &"
|
|
|