Skip to content

Commit

Permalink
chore: integrate Instatus in check script
Browse files Browse the repository at this point in the history
- Add Instatus API support to monitor module status.
- Update GitHub Actions to include Instatus environment variables.
  • Loading branch information
matifali committed Nov 18, 2024
1 parent 90bfbfd commit eb80759
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 7 deletions.
79 changes: 72 additions & 7 deletions .github/scripts/check.sh
Original file line number Diff line number Diff line change
@@ -1,24 +1,73 @@
#!/usr/bin/env bash
set -o pipefail
REGISTRY_BASE_URL="${REGISTRY_BASE_URL:-https://registry.coder.com}"
set -u

if [[ -n "${VERBOSE:-}" ]]; then
set -x
fi
REGISTRY_BASE_URL="${REGISTRY_BASE_URL:-https://registry.coder.com}"
INSTATUS_API_KEY="1ff45b8a5008ae8d7a79619302563717"
INSTATUS_PAGE_ID="cm3inkn4o0004o3jhyy40laus"
INSTATUS_COMPONENT_ID="cm3invkvo003jzwwlx4pyquxn"

status=0
declare -a modules=()
declare -a failures=()

# Collect all module directories containing a main.tf file
for path in $(find . -not -path '*/.*' -type f -name main.tf -maxdepth 2 | cut -d '/' -f 2 | sort -u); do
modules+=("${path}")
done

echo "Checking modules: ${modules[*]}"

# Function to update the component status on Instatus
update_component_status() {
local component_status=$1
# see https://instatus.com/help/api/components
(curl -X PUT "https://api.instatus.com/v1/$INSTATUS_PAGE_ID/components/$INSTATUS_COMPONENT_ID" \
-H "Authorization: Bearer $INSTATUS_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"status\": \"$component_status\"}")
}

# Function to create an incident
create_incident() {
local incident_name="Testing Instatus"
local message="The following modules are experiencing issues:\n"
for i in "${!failures[@]}"; do
message+="$(($i + 1)). ${failures[$i]}\n"
done

component_status="PARTIALOUTAGE"
if (( ${#failures[@]} == ${#modules[@]} )); then
component_status="MAJOROUTAGE"
fi
# see https://instatus.com/help/api/incidents
response=$(curl -s -X POST "https://api.instatus.com/v1/$INSTATUS_PAGE_ID/incidents" \
-H "Authorization: Bearer $INSTATUS_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"$incident_name\",
\"message\": \"$message\",
\"components\": [\"$INSTATUS_COMPONENT_ID\"],
\"status\": \"INVESTIGATING\",
\"notify\": true,
\"statuses\": [
{
\"id\": \"$INSTATUS_COMPONENT_ID\",
\"status\": \"PARTIALOUTAGE\"
}
]
}")

incident_id=$(echo "$response" | jq -r '.id')
echo "$incident_id"
}

# Check each module's accessibility
for module in "${modules[@]}"; do
# Trim leading/trailing whitespace from module name
module=$(echo "${module}" | xargs)
url="${REGISTRY_BASE_URL}/modules/${module}"
printf "=== Check module %s at %s\n" "${module}" "${url}"
printf "=== Checking module %s at %s\n" "${module}" "${url}"
status_code=$(curl --output /dev/null --head --silent --fail --location "${url}" --retry 3 --write-out "%{http_code}")
# shellcheck disable=SC2181
if (( status_code != 200 )); then
Expand All @@ -30,7 +79,23 @@ for module in "${modules[@]}"; do
fi
done

if (( status != 0 )); then
echo "The following modules appear to have issues: ${failures[*]}"
# Determine overall status and update Instatus component
if (( status == 0 )); then
echo "All modules are operational."
# set to
update_component_status "OPERATIONAL"
else
echo "The following modules have issues: ${failures[*]}"
# check if all modules are down
if (( ${#failures[@]} == ${#modules[@]} )); then
update_component_status "MAJOROUTAGE"
else
update_component_status "PARTIALOUTAGE"
fi

# Create a new incident
incident_id=$(create_incident)
echo "Created incident with ID: $incident_id"
fi

exit "${status}"
4 changes: 4 additions & 0 deletions .github/workflows/check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,7 @@ jobs:
- name: Run check.sh
run: |
./.github/scripts/check.sh
env:
INSTATUS_API_KEY: ${{ secrets.INSTATUS_API_KEY }}
INSTATUS_PAGE_ID: ${{ secrets.INSTATUS_PAGE_ID }}
INSTATUS_COMPONENT_ID: ${{ secrets.INSTATUS_COMPONENT_ID }}

0 comments on commit eb80759

Please sign in to comment.