#!/bin/bash # Define the Slack webhook URL script_dir=$(dirname "$0") webhooks_file="slack_webhook_urls.txt" env_file="$script_dir/$webhooks_file" if [ -f "$env_file" ]; then export $(grep -v '^#' "$env_file" | xargs) else echo "Error: $webhooks_file file not found in the script directory." exit 1 fi # Messages to be sent to Slack slack_failure_message=":rotating_light::rotating_light::rotating_light: One or more failures during scheduled xexe run in production. :rotating_light::rotating_light::rotating_light:" slack_success_message=":white_check_mark::white_check_mark::white_check_mark: xexe run executed successfully in production. :white_check_mark::white_check_mark::white_check_mark:" # Initialize the failure flag has_any_step_failed=0 cd /home/azureuser/data-xexe # Update from git echo "Updating xexe project from git." | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 git checkout master | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 git pull | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 # DWH-healthcheck echo "Running DWH healthcheck..." | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 poetry run xexe dwh-healthcheck | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 if [ $? -ne 0 ]; then has_any_step_failed=1 echo "Something went wrong when healthchecking DWH." | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 fi # xe healthcheck echo "Running XE.com healthcheck..." | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 poetry run xexe xe-healthcheck | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 if [ $? -ne 0 ]; then has_any_step_failed=1 echo "Something went wrong when healthchecking xe.com." | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 fi # Define some options here. You might want to change this some day. currencies="CAD,EUR,NZD,ZAR,AUD,USD,PLN,GBP" start_date=$(date -d "yesterday" +"%Y-%m-%d") end_date=$(date -d "yesterday" +"%Y-%m-%d") # run the actual thing echo "Getting rates from xe.com..." | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 poetry run xexe get-rates --currencies "$currencies" --start-date "$start_date" --end-date "$end_date" --rates-source xe --output dwh --ignore-warnings | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 if [ $? -ne 0 ]; then has_any_step_failed=1 echo "Something went wrong when getting rates." | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >> /home/azureuser/xexe_run.log 2>&1 fi # Check if any step failed and send a Slack message if [ $has_any_step_failed -eq 1 ]; then curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$slack_failure_message\"}" $SLACK_ALERT_WEBHOOK_URL fi if [ $has_any_step_failed -eq 0 ]; then curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$slack_success_message\"}" $SLACK_RECEIPT_WEBHOOK_URL fi