diff --git a/print_jupyter_link.sh b/print_jupyter_link.sh index 8e77ca2..ab8f49d 100644 --- a/print_jupyter_link.sh +++ b/print_jupyter_link.sh @@ -1,15 +1,15 @@ #!/usr/bin/env bash - -# Script to extract where is the jupyter session running by parsing the log file -# This is useful when re-loging to the same node or if one misses it when the new jupyter session is initiated with start_jupyter.sh +# Print the JupyterLab URL from the latest jupyterlab_*.log. +# On Cristallina the real token is redacted in the log ("token=..."), +# so if the token is missing or redacted we replace it with the most commonly used +# token "Cristallina" to produce a usable URL. set -euo pipefail +# Find newest Jupyter log in $HOME LOGFILE=$( find "$HOME" -maxdepth 1 -type f -name "jupyterlab_*.log" -printf "%T@ %p\n" 2>/dev/null \ - | sort -n \ - | awk '{print $2}' \ - | tail -n 1 + | sort -n | awk '{print $2}' | tail -n 1 ) if [[ -z "${LOGFILE:-}" || ! -f "$LOGFILE" ]]; then @@ -17,38 +17,23 @@ if [[ -z "${LOGFILE:-}" || ! -f "$LOGFILE" ]]; then exit 1 fi -# Slurp the whole logfile and try multiple patterns. -perl -0777 -ne ' - my $s = $_; - $s =~ s/\r//g; - $s =~ s/\n/ /g; +# Slurp logfile into one line to handle wrapped URLs +URL=$( + tr '\n' ' ' < "$LOGFILE" \ + | grep -Eo 'https?://[^[:space:]]+' \ + | grep -E '/(lab|tree)\?' \ + | head -n 1 || true +) - # 1) Direct URL that already contains token= - if ($s =~ m{(https?://[^\s"'"'"']+\?token=[^\s"'"'"'&]+)} ) { - print "$1\n"; exit 0; - } - if ($s =~ m{(https?://[^\s"'"'"']+/lab\?token=[^\s"'"'"'&]+)} ) { - print "$1\n"; exit 0; - } - if ($s =~ m{(https?://[^\s"'"'"']+/tree\?token=[^\s"'"'"'&]+)} ) { - print "$1\n"; exit 0; - } - - # 2) URL and token appear separately (wrapped / split) - my ($base) = ($s =~ m{(https?://[^\s"'"'"']+)}); # first URL-looking thing - my ($token) = ($s =~ m{token=([A-Za-z0-9]+)}); # token value - if ($base && $token) { - $base =~ s/\?token=.*$//; - print $base . "?token=" . $token . "\n"; - exit 0; - } - - exit 1; -' "$LOGFILE" || { - echo "Could not find a Jupyter token link in:" +if [[ -z "${URL:-}" ]]; then + echo "Could not find a Jupyter URL in:" echo " $LOGFILE" - echo - echo "Try:" - echo " grep -n -E \"token=|http://|https://\" \"$LOGFILE\" | head -n 80" exit 1 -} +fi + +# If token is missing or redacted, replace with a 'Cristallina' token +if [[ "$URL" != *"token="* || "$URL" == *"token=..."* ]]; then + URL="${URL%%\?*}?token=Cristallina" +fi + +echo "$URL" \ No newline at end of file