#!/usr/bin/env bash
set -ex

source ./$(dirname "$0")/common.sh

export PIPELINE_NAME='gen_es'

# update pipeline and check response code
index_pipeline() {
  RESP_CODE=$(curl -s -w "%{http_code}" -X PUT -H "Authorization: ApiKey $TESTER_API_KEY_ENCODED" "$ES_ENDPOINT/_logstash/pipeline/$1" \
                   -H 'x-elastic-product-origin: logstash' -H 'Content-Type: application/json' -d "$2")
  if [[ $RESP_CODE -ge '400' ]]; then
    echo "failed to update pipeline for Central Pipeline Management. Got $RESP_CODE from Elasticsearch"
    exit 1
  fi
}

# index pipeline to serverless ES
index_cpm_pipelines() {
  index_pipeline "$PIPELINE_NAME" '{
    "pipeline": "input { generator { count => 100 } } output { elasticsearch { hosts => \"${ES_ENDPOINT}\" api_key => \"${PLUGIN_API_KEY}\" index=> \"${INDEX_NAME}\" } }",
    "last_modified": "2023-07-04T22:22:22.222Z",
    "pipeline_metadata": { "version": "1"},
    "username": "log.stash",
    "pipeline_settings": {"pipeline.batch.delay": "50"}
  }'
}

check_es_output() {
  check_logstash_api '.pipelines.gen_es.plugins.outputs[0].documents.successes' '100'
}

check_plugin() {
  add_check check_es_output "Failed central pipeline management check."
}

delete_pipeline() {
  curl -H "Authorization: ApiKey $TESTER_API_KEY_ENCODED" -H 'x-elastic-product-origin: logstash' -X DELETE "$ES_ENDPOINT/_logstash/pipeline/$PIPELINE_NAME"  -H 'Content-Type: application/json';
}

cpm_clean_up_and_get_result() {
  delete_pipeline
  clean_up_and_get_result
}

setup
trap cpm_clean_up_and_get_result INT TERM EXIT
index_cpm_pipelines
run_cpm_logstash check_plugin
