vibetunnel/mac/scripts/vtlog.sh
Helmut Januschka f3b2022d48
Integrate screencap functionality for remote screen sharing (#209)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2025-07-06 03:31:34 +01:00

143 lines
No EOL
3.5 KiB
Bash
Executable file

#!/bin/bash
# Default values
LINES=50
TIME="5m"
LEVEL="info"
CATEGORY=""
SEARCH=""
OUTPUT=""
DEBUG=false
FOLLOW=false
ERRORS_ONLY=false
SERVER_ONLY=false
NO_TAIL=false
JSON=false
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-n|--lines)
LINES="$2"
shift 2
;;
-l|--last)
TIME="$2"
shift 2
;;
-c|--category)
CATEGORY="$2"
shift 2
;;
-s|--search)
SEARCH="$2"
shift 2
;;
-o|--output)
OUTPUT="$2"
shift 2
;;
-d|--debug)
DEBUG=true
LEVEL="debug"
shift
;;
-f|--follow)
FOLLOW=true
shift
;;
-e|--errors)
ERRORS_ONLY=true
LEVEL="error"
shift
;;
--server)
SERVER_ONLY=true
shift
;;
--all)
NO_TAIL=true
shift
;;
--json)
JSON=true
shift
;;
-h|--help)
echo "Usage: vtlog.sh [options]"
echo ""
echo "Options:"
echo " -n, --lines NUM Number of lines to show (default: 50)"
echo " -l, --last TIME Time range to search (default: 5m)"
echo " -c, --category CAT Filter by category"
echo " -s, --search TEXT Search for specific text"
echo " -o, --output FILE Output to file"
echo " -d, --debug Show debug level logs"
echo " -f, --follow Stream logs continuously"
echo " -e, --errors Show only errors"
echo " --server Show only server output"
echo " --all Show all logs without tail limit"
echo " --json Output in JSON format"
echo " -h, --help Show this help"
exit 0
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
# Build predicate
PREDICATE="subsystem == \"sh.vibetunnel.vibetunnel\""
if [[ -n "$CATEGORY" ]]; then
PREDICATE="$PREDICATE AND category == \"$CATEGORY\""
fi
if [[ "$SERVER_ONLY" == true ]]; then
PREDICATE="$PREDICATE AND category == \"ServerOutput\""
fi
if [[ -n "$SEARCH" ]]; then
PREDICATE="$PREDICATE AND eventMessage CONTAINS[c] \"$SEARCH\""
fi
# Build command
if [[ "$FOLLOW" == true ]]; then
CMD="log stream --predicate '$PREDICATE' --level $LEVEL"
else
# log show uses different flags for log levels
case $LEVEL in
debug)
CMD="log show --predicate '$PREDICATE' --debug --last $TIME"
;;
error)
# For errors, we need to filter by eventType in the predicate
PREDICATE="$PREDICATE AND eventType == \"error\""
CMD="log show --predicate '$PREDICATE' --info --debug --last $TIME"
;;
*)
CMD="log show --predicate '$PREDICATE' --info --last $TIME"
;;
esac
fi
if [[ "$JSON" == true ]]; then
CMD="$CMD --style json"
fi
# Execute command
if [[ -n "$OUTPUT" ]]; then
if [[ "$NO_TAIL" == true ]]; then
eval $CMD > "$OUTPUT"
else
eval $CMD | tail -n $LINES > "$OUTPUT"
fi
else
if [[ "$NO_TAIL" == true ]]; then
eval $CMD
else
eval $CMD | tail -n $LINES
fi
fi