Initial commit: Socktop WebTerm with k3s deployment
- Multi-architecture Docker image (ARM64 + AMD64) - Kubernetes manifests for 3-replica deployment - Traefik ingress configuration - NGINX Proxy Manager integration - ConfigMap-based configuration - Automated build and deployment scripts - Session monitoring tools
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
#!/bin/bash
|
||||
# Restricted shell for socktop webterm
|
||||
# Only allows 'socktop' and 'help' commands
|
||||
|
||||
# Colors for output
|
||||
BLUE='\033[0;34m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
MAGENTA='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# History file
|
||||
HISTFILE="/home/socktop/.socktop_history"
|
||||
HISTSIZE=1000
|
||||
|
||||
# Load history from file
|
||||
load_history() {
|
||||
if [ -f "$HISTFILE" ]; then
|
||||
history -r "$HISTFILE"
|
||||
fi
|
||||
}
|
||||
|
||||
# Save history to file
|
||||
save_history() {
|
||||
history -w "$HISTFILE"
|
||||
}
|
||||
|
||||
# Welcome message
|
||||
show_welcome() {
|
||||
echo -e "${MAGENTA}"
|
||||
cat << "EOF"
|
||||
╔═══════════════════════════════════════════════════════════╗
|
||||
║ Welcome to socktop ║
|
||||
║ A TUI-first Remote System Monitor ║
|
||||
╚═══════════════════════════════════════════════════════════╝
|
||||
EOF
|
||||
echo -e "${NC}"
|
||||
echo -e "${CYAN}Available commands:${NC}"
|
||||
echo -e " ${GREEN}socktop${NC} - Launch the socktop TUI"
|
||||
echo -e " ${GREEN}help${NC} - Show this help message"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Type 'help' for more information${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Help message
|
||||
show_help() {
|
||||
echo -e "${BLUE}╔═══════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${BLUE}║${NC} socktop Help ${BLUE}║${NC}"
|
||||
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}What is socktop?${NC}"
|
||||
echo " socktop is a beautiful, TUI-first system monitor built with Rust."
|
||||
echo " It allows you to monitor local and remote Linux systems in real-time"
|
||||
echo " with an elegant terminal interface."
|
||||
echo ""
|
||||
echo -e "${CYAN}Available Commands:${NC}"
|
||||
echo ""
|
||||
echo -e " ${GREEN}socktop${NC}"
|
||||
echo " Launch socktop with the local profile (monitors this container)"
|
||||
echo ""
|
||||
echo -e " ${GREEN}socktop -P <profile>${NC}"
|
||||
echo " Launch socktop with a specific profile from profiles.json"
|
||||
echo " Example: socktop -P rpi-master"
|
||||
echo ""
|
||||
echo -e " ${GREEN}socktop <websocket_url>${NC}"
|
||||
echo " Connect to a remote socktop-agent directly"
|
||||
echo " Example: socktop ws://192.168.1.100:3000"
|
||||
echo ""
|
||||
echo -e " ${GREEN}help${NC}"
|
||||
echo " Show this help message"
|
||||
echo ""
|
||||
echo -e "${CYAN}Available Profiles:${NC}"
|
||||
echo " • local - Monitor this container (localhost:3000)"
|
||||
echo " • rpi-master - Raspberry Pi Master node"
|
||||
echo " • rpi-worker-1 - Raspberry Pi Worker 1"
|
||||
echo " • rpi-worker-2 - Raspberry Pi Worker 2"
|
||||
echo " • rpi-worker-3 - Raspberry Pi Worker 3"
|
||||
echo ""
|
||||
echo -e "${CYAN}Keyboard Shortcuts (inside socktop):${NC}"
|
||||
echo " q - Quit socktop"
|
||||
echo " Tab - Switch between views"
|
||||
echo " ↑/↓ - Navigate lists"
|
||||
echo " PageUp/Down - Scroll faster"
|
||||
echo ""
|
||||
echo -e "${CYAN}Features:${NC}"
|
||||
echo " ✓ Real-time CPU, memory, disk, and network monitoring"
|
||||
echo " ✓ Process list with sorting and filtering"
|
||||
echo " ✓ Remote monitoring via SSH"
|
||||
echo " ✓ Beautiful Catppuccin Frappe theme"
|
||||
echo " ✓ Lightweight and fast"
|
||||
echo ""
|
||||
echo -e "${CYAN}Links:${NC}"
|
||||
echo " GitHub: https://github.com/jasonwitty/socktop"
|
||||
echo " Documentation: https://jasonwitty.github.io/socktop/"
|
||||
echo " Crates.io: https://crates.io/crates/socktop"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Ready to monitor? Type: ${GREEN}socktop${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Main restricted shell loop
|
||||
main() {
|
||||
# Load command history
|
||||
load_history
|
||||
|
||||
# Show welcome on first run
|
||||
if [ ! -f /tmp/.socktop_welcome_shown ]; then
|
||||
show_welcome
|
||||
touch /tmp/.socktop_welcome_shown
|
||||
fi
|
||||
|
||||
while true; do
|
||||
# Display prompt
|
||||
echo -ne "${GREEN}socktop${NC}@${BLUE}demo${NC} ${YELLOW}▶${NC} "
|
||||
|
||||
# Read user input with readline support (enables arrow keys, history, etc.)
|
||||
read -e -r input
|
||||
|
||||
# Add non-empty commands to history
|
||||
if [ -n "$input" ]; then
|
||||
history -s "$input"
|
||||
save_history
|
||||
fi
|
||||
|
||||
# Trim whitespace
|
||||
input=$(echo "$input" | xargs)
|
||||
|
||||
# Skip empty input
|
||||
if [ -z "$input" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Parse command (first word)
|
||||
cmd=$(echo "$input" | awk '{print $1}')
|
||||
args=$(echo "$input" | cut -d' ' -f2-)
|
||||
|
||||
case "$cmd" in
|
||||
socktop)
|
||||
# Allow socktop with any arguments
|
||||
if [ "$cmd" = "$input" ]; then
|
||||
# No arguments, use default (local profile)
|
||||
/usr/bin/socktop -P local
|
||||
else
|
||||
# Pass arguments to socktop
|
||||
/usr/bin/socktop $args
|
||||
fi
|
||||
;;
|
||||
help|--help|-h)
|
||||
show_help
|
||||
;;
|
||||
exit|quit|logout)
|
||||
echo -e "${YELLOW}Use Ctrl+D to exit the shell${NC}"
|
||||
;;
|
||||
clear|cls)
|
||||
clear
|
||||
echo -e "${YELLOW}Screen cleared. Type 'help' for available commands.${NC}"
|
||||
;;
|
||||
"")
|
||||
# Empty command, do nothing
|
||||
;;
|
||||
*)
|
||||
# Unknown command
|
||||
echo -e "${RED}Error:${NC} Command '$cmd' is not allowed"
|
||||
echo -e "${YELLOW}Available commands:${NC} ${GREEN}socktop${NC}, ${GREEN}help${NC}"
|
||||
echo -e "Type ${GREEN}help${NC} for more information"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# Handle Ctrl+C gracefully
|
||||
trap 'echo -e "\n${YELLOW}Use Ctrl+D to exit${NC}"; continue' INT
|
||||
|
||||
# Run main loop
|
||||
main
|
||||
Reference in New Issue
Block a user