Skip to content

Instantly share code, notes, and snippets.

@szepeviktor
Last active November 3, 2023 10:59
Show Gist options
  • Save szepeviktor/bada91914b9829f39dbaaa161185a3c4 to your computer and use it in GitHub Desktop.
Save szepeviktor/bada91914b9829f39dbaaa161185a3c4 to your computer and use it in GitHub Desktop.
CLI tool to list Laravel queue jobs and failed jobs
#!/bin/bash
REDIS_DB="0"
QUEUE_REDIS_KEY="app_name_database_queues:default:delayed"
DB_NAME="sql_db_name"
redis()
{
redis-cli -n "${REDIS_DB}" --raw "$@"
}
sql()
{
mysql --skip-column-names --raw "${DB_NAME}" <<<"$1"
}
is_int()
{
[[ "$1" =~ ^[0-9]+$ ]]
}
is_uuid()
{
[[ "$1" =~ ^[0-9a-f-]+$ ]]
}
case "$1" in
"count")
redis ZCARD "${QUEUE_REDIS_KEY}"
;;
"get-mono")
is_int "$2" || exit 11
redis ZRANGE "${QUEUE_REDIS_KEY}" "$2" "$2" \
| jq --raw-output --monochrome-output '.'
;;
"get")
is_int "$2" || exit 11
redis ZRANGE "${QUEUE_REDIS_KEY}" "$2" "$2" \
| jq --raw-output --color-output '.'
;;
"get-command-name")
is_int "$2" || exit 11
redis ZRANGE "${QUEUE_REDIS_KEY}" "$2" "$2" \
| jq --raw-output --monochrome-output '."data"."commandName"'
;;
"get-command-mono")
is_int "$2" || exit 11
redis ZRANGE "${QUEUE_REDIS_KEY}" "$2" "$2" \
| jq --raw-output --monochrome-output '."data"."command"' \
| php -r 'var_export(unserialize(stream_get_contents(STDIN)));'
;;
"get-command")
is_int "$2" || exit 11
redis ZRANGE "${QUEUE_REDIS_KEY}" "$2" "$2" \
| jq --raw-output --color-output '."data"."command"' \
| php -r 'highlight_string("<?php\n".var_export(unserialize(stream_get_contents(STDIN)), true));' \
| elinks -dump -dump-color-mode 3
;;
"get-id")
is_int "$2" || exit 11
redis ZRANGE "${QUEUE_REDIS_KEY}" "$2" "$2" \
| jq --raw-output --monochrome-output '."data"."command"' \
| php -r 'var_export(unserialize(stream_get_contents(STDIN)));' \
| sed -n -e "s#^\\s*'id' => '\\(\\S\\+\\)',\$#\\1#p"
;;
"list-ids")
redis ZRANGE "${QUEUE_REDIS_KEY}" 0 -1 \
| jq --raw-output --monochrome-output '."data"."command"' \
| tr '\0' '~' \
| while read -r DATA_COMMAND; do php -r 'var_export(unserialize(stream_get_contents(STDIN)));' <<<"${DATA_COMMAND}"; done \
| sed -n -e "s#^\\s*'id' => '\\(\\S\\+\\)',\$#\\1#p"
;;
"get-class")
is_int "$2" || exit 11
redis ZRANGE "${QUEUE_REDIS_KEY}" "$2" "$2" \
| jq --raw-output --monochrome-output '."data"."command"' \
| php -r 'var_export(unserialize(stream_get_contents(STDIN)));' \
| sed -n -e "s#^\\s*'class' => '\\(\\S\\+\\)',\$#\\1#p"
;;
"get-failed-count")
sql 'SELECT COUNT(*) FROM `failed_jobs`;'
;;
"list-failed-ids")
sql 'SELECT `uuid` FROM `failed_jobs`;'
;;
"get-failed-payload-mono")
is_uuid "$2" || exit 12
printf -v SQL_QUERY 'SELECT `payload` FROM `failed_jobs` WHERE `uuid` = "%s";' "$2"
sql "${SQL_QUERY}" \
| jq --raw-output --monochrome-output '.'
;;
"get-failed-payload")
is_uuid "$2" || exit 12
printf -v SQL_QUERY 'SELECT `payload` FROM `failed_jobs` WHERE `uuid` = "%s";' "$2"
sql "${SQL_QUERY}" \
| jq --raw-output --color-output '.'
;;
"get-failed-command-mono")
is_uuid "$2" || exit 12
printf -v SQL_QUERY 'SELECT `payload` FROM `failed_jobs` WHERE `uuid` = "%s";' "$2"
sql "${SQL_QUERY}" \
| jq --raw-output --monochrome-output '."data"."command"' \
| php -r 'var_export(unserialize(stream_get_contents(STDIN)));'
;;
"get-failed-command")
is_uuid "$2" || exit 12
printf -v SQL_QUERY 'SELECT `payload` FROM `failed_jobs` WHERE `uuid` = "%s";' "$2"
sql "${SQL_QUERY}" \
| jq --raw-output --color-output '."data"."command"' \
| php -r 'highlight_string("<?php\n".var_export(unserialize(stream_get_contents(STDIN)), true));' \
| elinks -dump -dump-color-mode 3
;;
"get-failed-stacktrace")
is_uuid "$2" || exit 12
printf -v SQL_QUERY 'SELECT `exception` FROM `failed_jobs` WHERE `uuid` = "%s";' "$2"
sql "${SQL_QUERY}"
;;
"get-failed-exception")
is_uuid "$2" || exit 12
printf -v SQL_QUERY 'SELECT SUBSTRING_INDEX(`exception`, "\n", 1) FROM `failed_jobs` WHERE `uuid` = "%s";' "$2"
sql "${SQL_QUERY}"
;;
"get-failed-date")
is_uuid "$2" || exit 12
printf -v SQL_QUERY 'SELECT `failed_at` FROM `failed_jobs` WHERE `uuid` = "%s";' "$2"
sql "${SQL_QUERY}"
;;
"get-failed-timestamp")
is_uuid "$2" || exit 12
printf -v SQL_QUERY 'SELECT `failed_at` FROM `failed_jobs` WHERE `uuid` = "%s";' "$2"
date --date "$(sql "${SQL_QUERY}")" "+%s"
;;
*)
echo "Valid subcommands: count|get|get-command-name|get-command|get-id|list-ids|get-class|get-failed-count|list-failed-ids|get-failed-payload|get-failed-command|get-failed-stacktrace|get-failed-exception|get-failed-date|get-failed-timestamp" 1>&2
exit 10
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment