Implement flicker-free soft updates for live dashboard
This commit is contained in:
89
conduit.sh
89
conduit.sh
@@ -645,19 +645,19 @@ print_header() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
print_live_stats_header() {
|
print_live_stats_header() {
|
||||||
echo -e "${CYAN}"
|
local EL="\033[K"
|
||||||
echo "╔═══════════════════════════════════════════════════════════════════╗"
|
echo -e "${CYAN}╔═══════════════════════════════════════════════════════════════════╗${EL}"
|
||||||
echo "║ CONDUIT LIVE STATISTICS ║"
|
echo -e "║ CONDUIT LIVE STATISTICS ║${EL}"
|
||||||
echo "╠═══════════════════════════════════════════════════════════════════╣"
|
echo -e "╠═══════════════════════════════════════════════════════════════════╣${EL}"
|
||||||
printf "║ Max Clients: ${GREEN}%-52s${CYAN}║\n" "${MAX_CLIENTS}"
|
printf "║ Max Clients: ${GREEN}%-52s${CYAN}║${EL}\n" "${MAX_CLIENTS}"
|
||||||
if [ "$BANDWIDTH" == "-1" ]; then
|
if [ "$BANDWIDTH" == "-1" ]; then
|
||||||
printf "║ Bandwidth: ${GREEN}%-52s${CYAN}║\n" "Unlimited"
|
printf "║ Bandwidth: ${GREEN}%-52s${CYAN}║${EL}\n" "Unlimited"
|
||||||
else
|
else
|
||||||
printf "║ Bandwidth: ${GREEN}%-52s${CYAN}║\n" "${BANDWIDTH} Mbps"
|
printf "║ Bandwidth: ${GREEN}%-52s${CYAN}║${EL}\n" "${BANDWIDTH} Mbps"
|
||||||
fi
|
fi
|
||||||
echo "║ ║"
|
echo -e "║ ║${EL}"
|
||||||
echo "╚═══════════════════════════════════════════════════════════════════╝"
|
echo -e "╚═══════════════════════════════════════════════════════════════════╝${EL}"
|
||||||
echo -e "${NC}"
|
echo -e "${NC}\033[K"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -685,17 +685,12 @@ show_dashboard() {
|
|||||||
clear
|
clear
|
||||||
|
|
||||||
while [ $stop_dashboard -eq 0 ]; do
|
while [ $stop_dashboard -eq 0 ]; do
|
||||||
# Move cursor to top-left (0,0) and clear screen
|
# Move cursor to top-left (0,0)
|
||||||
# Using both tput and ANSI codes for maximum compatibility
|
# We NO LONGER clear the screen here to avoid the "full black" flash
|
||||||
if ! tput cup 0 0 2>/dev/null; then
|
if ! tput cup 0 0 2>/dev/null; then
|
||||||
printf "\033[H"
|
printf "\033[H"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clear from cursor to end of screen (Erase Down)
|
|
||||||
if ! tput ed 2>/dev/null; then
|
|
||||||
printf "\033[J"
|
|
||||||
fi
|
|
||||||
|
|
||||||
print_live_stats_header
|
print_live_stats_header
|
||||||
|
|
||||||
show_status "live"
|
show_status "live"
|
||||||
@@ -705,11 +700,17 @@ show_dashboard() {
|
|||||||
if [ -n "$node_id" ]; then
|
if [ -n "$node_id" ]; then
|
||||||
echo -e "${CYAN}═══ CONDUIT ID ═══${NC}\033[K"
|
echo -e "${CYAN}═══ CONDUIT ID ═══${NC}\033[K"
|
||||||
echo -e " ${CYAN}${node_id}${NC}\033[K"
|
echo -e " ${CYAN}${node_id}${NC}\033[K"
|
||||||
echo ""
|
echo -e "\033[K"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${BOLD}Refreshes every 5 seconds. Press any key to return to menu...${NC}\033[K"
|
echo -e "${BOLD}Refreshes every 5 seconds. Press any key to return to menu...${NC}\033[K"
|
||||||
|
|
||||||
|
# Clear any leftover lines below the dashboard content (Erase to End of Display)
|
||||||
|
# This only cleans up if the dashboard gets shorter
|
||||||
|
if ! tput ed 2>/dev/null; then
|
||||||
|
printf "\033[J"
|
||||||
|
fi
|
||||||
|
|
||||||
# Wait 4 seconds for keypress (compensating for processing time)
|
# Wait 4 seconds for keypress (compensating for processing time)
|
||||||
# Redirect from /dev/tty ensures it works when the script is piped
|
# Redirect from /dev/tty ensures it works when the script is piped
|
||||||
if read -t 4 -n 1 -s <> /dev/tty 2>/dev/null; then
|
if read -t 4 -n 1 -s <> /dev/tty 2>/dev/null; then
|
||||||
@@ -870,43 +871,43 @@ show_status() {
|
|||||||
connecting=${connecting:-0}
|
connecting=${connecting:-0}
|
||||||
connected=${connected:-0}
|
connected=${connected:-0}
|
||||||
|
|
||||||
echo -e "🚀 PSIPHON CONDUIT MANAGER v${VERSION}"
|
echo -e "🚀 PSIPHON CONDUIT MANAGER v${VERSION}${EL}"
|
||||||
echo -e "${NC}"
|
echo -e "${NC}${EL}"
|
||||||
|
|
||||||
if [ -n "$uptime" ]; then
|
if [ -n "$uptime" ]; then
|
||||||
echo -e "${BOLD}Status:${NC} ${GREEN}Running${NC} (${uptime}) | ${BOLD}Clients:${NC} ${GREEN}${connected}${NC} connected, ${YELLOW}${connecting}${NC} connecting"
|
echo -e "${BOLD}Status:${NC} ${GREEN}Running${NC} (${uptime}) | ${BOLD}Clients:${NC} ${GREEN}${connected}${NC} connected, ${YELLOW}${connecting}${NC} connecting${EL}"
|
||||||
else
|
else
|
||||||
echo -e "${BOLD}Status:${NC} ${GREEN}Running${NC} | ${BOLD}Clients:${NC} ${GREEN}${connected}${NC} connected, ${YELLOW}${connecting}${NC} connecting"
|
echo -e "${BOLD}Status:${NC} ${GREEN}Running${NC} | ${BOLD}Clients:${NC} ${GREEN}${connected}${NC} connected, ${YELLOW}${connecting}${NC} connecting${EL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo -e "${EL}"
|
||||||
echo -e "${CYAN}═══ Traffic ═══${NC}"
|
echo -e "${CYAN}═══ Traffic ═══${NC}${EL}"
|
||||||
[ -n "$upload" ] && echo -e " Upload: ${CYAN}${upload}${NC}"
|
[ -n "$upload" ] && echo -e " Upload: ${CYAN}${upload}${NC}${EL}"
|
||||||
[ -n "$download" ] && echo -e " Download: ${CYAN}${download}${NC}"
|
[ -n "$download" ] && echo -e " Download: ${CYAN}${download}${NC}${EL}"
|
||||||
|
|
||||||
echo ""
|
echo -e "${EL}"
|
||||||
echo -e "${CYAN}═══ Resource Usage ═══${NC}"
|
echo -e "${CYAN}═══ Resource Usage ═══${NC}${EL}"
|
||||||
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}\n" "App:" "$app_cpu_display" "$app_ram"
|
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}${EL}\n" "App:" "$app_cpu_display" "$app_ram"
|
||||||
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}\n" "System:" "$sys_cpu" "$sys_ram_used / $sys_ram_total"
|
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}${EL}\n" "System:" "$sys_cpu" "$sys_ram_used / $sys_ram_total"
|
||||||
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}\n" "Total:" "$sys_cpu" "$sys_ram_pct"
|
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}${EL}\n" "Total:" "$sys_cpu" "$sys_ram_pct"
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "🚀 PSIPHON CONDUIT MANAGER v${VERSION}"
|
echo -e "🚀 PSIPHON CONDUIT MANAGER v${VERSION}${EL}"
|
||||||
echo -e "${NC}"
|
echo -e "${NC}${EL}"
|
||||||
echo -e "${BOLD}Status:${NC} ${GREEN}Running${NC}"
|
echo -e "${BOLD}Status:${NC} ${GREEN}Running${NC}${EL}"
|
||||||
echo ""
|
echo -e "${EL}"
|
||||||
echo -e "${CYAN}═══ Resource Usage ═══${NC}"
|
echo -e "${CYAN}═══ Resource Usage ═══${NC}${EL}"
|
||||||
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}\n" "App:" "$app_cpu_display" "$app_ram"
|
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}${EL}\n" "App:" "$app_cpu_display" "$app_ram"
|
||||||
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}\n" "System:" "$sys_cpu" "$sys_ram_used / $sys_ram_total"
|
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}${EL}\n" "System:" "$sys_cpu" "$sys_ram_used / $sys_ram_total"
|
||||||
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}\n" "Total:" "$sys_cpu" "$sys_ram_pct"
|
printf " %-8s CPU: ${YELLOW}%-20s${NC} | RAM: ${YELLOW}%-20s${NC}${EL}\n" "Total:" "$sys_cpu" "$sys_ram_pct"
|
||||||
echo ""
|
echo -e "${EL}"
|
||||||
echo -e " Stats: ${YELLOW}Waiting for first stats...${NC}"
|
echo -e " Stats: ${YELLOW}Waiting for first stats...${NC}${EL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "🚀 PSIPHON CONDUIT MANAGER v${VERSION}"
|
echo -e "🚀 PSIPHON CONDUIT MANAGER v${VERSION}${EL}"
|
||||||
echo -e "${NC}"
|
echo -e "${NC}${EL}"
|
||||||
echo -e "${BOLD}Status:${NC} ${RED}Stopped${NC}"
|
echo -e "${BOLD}Status:${NC} ${RED}Stopped${NC}${EL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user