From cbc6ab66cb20c20c59a269b4d35f9b9f4fab7f56 Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 12:57:15 -0400 Subject: [PATCH 1/9] Add get-request --- src/get-request | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 src/get-request diff --git a/src/get-request b/src/get-request new file mode 100755 index 0000000..dce4c3f --- /dev/null +++ b/src/get-request @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +usage() { + echo -n " +get-request METRIC URL + +Get specific information from a web request. + +Possible METRICs: + + time + The amount of time the request took in milliseconds. + + @TODO: size code body headers etc + +Examples + + get-request time https://www.google.com + +" +} + +usage + + From 4fa43f98af4150f3c7398d2fd3533f6432ae792b Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 13:05:48 -0400 Subject: [PATCH 2/9] Add time and server-time metrics to get-request script --- src/get-request | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/get-request b/src/get-request index dce4c3f..66e6ae4 100755 --- a/src/get-request +++ b/src/get-request @@ -8,17 +8,39 @@ Get specific information from a web request. Possible METRICs: time - The amount of time the request took in milliseconds. + The total time the request took in milliseconds. + + server-time + The server response time (time to first byte) in milliseconds. @TODO: size code body headers etc Examples get-request time https://www.google.com + get-request server-time https://www.google.com " } -usage - - +if [[ $# -lt 2 ]]; then + usage + exit 1 +fi + +METRIC=$1 +URL=$2 + +case $METRIC in + time) + curl -s -o /dev/null -w '%{time_total}' "$URL" | awk '{printf "%.0f\n", $1 * 1000}' + ;; + server-time) + curl -s -o /dev/null -w '%{time_starttransfer}' "$URL" | awk '{printf "%.0f\n", $1 * 1000}' + ;; + *) + echo "Unknown metric: $METRIC" + usage + exit 1 + ;; +esac From e011f6f51269ebe6f20b6a963191a02acec44484 Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 13:07:22 -0400 Subject: [PATCH 3/9] Add size, http-code, body, and headers metrics to get-request script --- src/get-request | 50 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/get-request b/src/get-request index 66e6ae4..692ef76 100755 --- a/src/get-request +++ b/src/get-request @@ -1,7 +1,7 @@ #!/usr/bin/env bash usage() { echo -n " -get-request METRIC URL +get-request METRIC URL [OPTIONS] Get specific information from a web request. @@ -13,12 +13,29 @@ Possible METRICs: server-time The server response time (time to first byte) in milliseconds. - @TODO: size code body headers etc + size [FORMAT] + The response body size. FORMAT can be: byte (default), KB, MB + + http-code + The HTTP status code returned by the server. + + body + The response body content. + + headers + The response headers. + + @TODO: more options Examples get-request time https://www.google.com get-request server-time https://www.google.com + get-request size https://www.google.com + get-request size https://www.google.com KB + get-request http-code https://www.google.com + get-request body https://www.google.com + get-request headers https://www.google.com " } @@ -30,6 +47,7 @@ fi METRIC=$1 URL=$2 +FORMAT=${3:-byte} case $METRIC in time) @@ -38,6 +56,34 @@ case $METRIC in server-time) curl -s -o /dev/null -w '%{time_starttransfer}' "$URL" | awk '{printf "%.0f\n", $1 * 1000}' ;; + size) + size_bytes=$(curl -s -o /dev/null -w '%{size_download}' "$URL") + case "$FORMAT" in + byte) + printf "%.0f\n" "$size_bytes" + ;; + KB) + awk "BEGIN {printf \"%.2f\n\", $size_bytes / 1024}" + ;; + MB) + awk "BEGIN {printf \"%.2f\n\", $size_bytes / (1024 * 1024)}" + ;; + *) + echo "Unknown format: $FORMAT (use byte, KB, or MB)" + exit 1 + ;; + esac + ;; + http-code) + curl -s -o /dev/null -w '%{http_code}' "$URL" + echo "" + ;; + body) + curl -s "$URL" + ;; + headers) + curl -s -i "$URL" | head -n -1 + ;; *) echo "Unknown metric: $METRIC" usage From f5a163f180be5661355532945c1459d977686155 Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 13:08:17 -0400 Subject: [PATCH 4/9] Add test script for get-request metrics --- tests/get-request-test | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 tests/get-request-test diff --git a/tests/get-request-test b/tests/get-request-test new file mode 100644 index 0000000..11befce --- /dev/null +++ b/tests/get-request-test @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Test script for get-request + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +GET_REQUEST="$SCRIPT_DIR/src/get-request" +TEST_URL="https://www.github.com" + +# Colors for output +GREEN='\033[0;32m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +test_count=0 +passed_count=0 + +run_test() { + local test_name=$1 + local metric=$2 + local args=${3:-} + + test_count=$((test_count + 1)) + echo -n "Test $test_count: $test_name ... " + + if output=$("$GET_REQUEST" "$metric" "$TEST_URL" $args 2>&1); then + echo -e "${GREEN}PASSED${NC}" + echo " Output: $output" + passed_count=$((passed_count + 1)) + else + echo -e "${RED}FAILED${NC}" + echo " Error: $output" + fi +} + +echo "Running get-request tests against $TEST_URL" +echo "===========================================" +echo "" + +run_test "time metric" "time" +run_test "server-time metric" "server-time" +run_test "size metric (bytes)" "size" +run_test "size metric (KB)" "size" "KB" +run_test "size metric (MB)" "size" "MB" +run_test "http-code metric" "http-code" +run_test "body metric" "body" +run_test "headers metric" "headers" + +echo "" +echo "===========================================" +echo "Tests completed: $passed_count/$test_count passed" + +if [ $passed_count -eq $test_count ]; then + exit 0 +else + exit 1 +fi From c74c84caaf535d5eb50bc1e3b0e4bb737b347dc7 Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 15:33:38 -0400 Subject: [PATCH 5/9] chmod --- tests/get-request-test | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tests/get-request-test diff --git a/tests/get-request-test b/tests/get-request-test old mode 100644 new mode 100755 From a61b2f09f116aa0ae555b7e86bf732d4712f1d26 Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 15:35:47 -0400 Subject: [PATCH 6/9] different url --- tests/get-request-test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/get-request-test b/tests/get-request-test index 11befce..966175b 100755 --- a/tests/get-request-test +++ b/tests/get-request-test @@ -6,7 +6,7 @@ set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" GET_REQUEST="$SCRIPT_DIR/src/get-request" -TEST_URL="https://www.github.com" +TEST_URL="https://api.github.com" # Colors for output GREEN='\033[0;32m' From 4e8a2a85bfc327100de568f9529ffcf424e43433 Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 15:45:43 -0400 Subject: [PATCH 7/9] Fix headers metric: replace head -n -1 with sed '/^$/q' for portability --- src/get-request | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/get-request b/src/get-request index 692ef76..7780782 100755 --- a/src/get-request +++ b/src/get-request @@ -82,7 +82,7 @@ case $METRIC in curl -s "$URL" ;; headers) - curl -s -i "$URL" | head -n -1 + curl -s -i "$URL" | sed '/^$/q' ;; *) echo "Unknown metric: $METRIC" From 3f53db42cab187d99f641bfff82efe7c9d30d698 Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 15:48:08 -0400 Subject: [PATCH 8/9] Add get-request script to workflow --- .github/workflows/scripts.tests.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/scripts.tests.yml b/.github/workflows/scripts.tests.yml index 9ea513f..bc74687 100644 --- a/.github/workflows/scripts.tests.yml +++ b/.github/workflows/scripts.tests.yml @@ -105,3 +105,13 @@ jobs: echo "git-ref did not return 'branch'." fi + get-request: + name: get-request script + runs-on: ubuntu-latest + steps: + + - uses: actions/checkout@v4 + - uses: jonpugh/goatscripts@main + - run: | + run-with-summary \ + ./tests/get-request-test From 4d7445317648d0207f1fe12d607e023e7fae7703 Mon Sep 17 00:00:00 2001 From: Jon Pugh Date: Fri, 22 May 2026 15:49:53 -0400 Subject: [PATCH 9/9] new line --- tests/get-request-test | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/get-request-test b/tests/get-request-test index 966175b..d9ee9bb 100755 --- a/tests/get-request-test +++ b/tests/get-request-test @@ -32,6 +32,7 @@ run_test() { echo -e "${RED}FAILED${NC}" echo " Error: $output" fi + echo } echo "Running get-request tests against $TEST_URL"