From 96d33bc0df2ddfba96bd1680060f6f8d91a39ad9 Mon Sep 17 00:00:00 2001 From: Muhammad Atif Ali Date: Fri, 22 Nov 2024 12:10:25 +0500 Subject: [PATCH] Improve incident management in Instatus check script - Change incident naming for better clarity. - Ensure new incidents are not created if unresolved ones exist. --- .github/scripts/check.sh | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/.github/scripts/check.sh b/.github/scripts/check.sh index abb47907..37157e78 100755 --- a/.github/scripts/check.sh +++ b/.github/scripts/check.sh @@ -42,7 +42,7 @@ update_component_status() { # Function to create an incident create_incident() { - local incident_name="Testing Instatus" + local incident_name="Degraded Service" local message="The following modules are experiencing issues:\n" for i in "${!failures[@]}"; do message+="$(($i + 1)). ${failures[$i]}\n" @@ -53,7 +53,7 @@ create_incident() { 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" \ + incident_id=$(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 "{ @@ -68,10 +68,25 @@ create_incident() { \"status\": \"PARTIALOUTAGE\" } ] - }") + }" | jq -r '.id') - incident_id=$(echo "$response" | jq -r '.id') - echo "$incident_id" + echo "Created incident with ID: $incident_id" +} + +# Function to check for existing unresolved incidents +check_existing_incident() { + # Fetch the latest incidents with status not equal to "RESOLVED" + local unresolved_incidents=$(curl -s -X GET "https://api.instatus.com/v1/$INSTATUS_PAGE_ID/incidents" \ + -H "Authorization: Bearer $INSTATUS_API_KEY" \ + -H "Content-Type: application/json" | jq -r '.incidents[] | select(.status != "RESOLVED") | .id') + + if [[ -n "$unresolved_incidents" ]]; then + echo "Unresolved incidents found: $unresolved_incidents" + return 0 # Indicate that there are unresolved incidents + else + echo "No unresolved incidents found." + return 1 # Indicate that no unresolved incidents exist + fi } # Check each module's accessibility @@ -94,20 +109,19 @@ done # 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" + # Check if there is an existing incident before creating a new one + if ! check_existing_incident; then + create_incident + fi fi exit "${status}"