mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-25 09:25:50 +00:00
Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
143 lines
No EOL
3.5 KiB
Bash
Executable file
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 |