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:
Executable
+122
@@ -0,0 +1,122 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
NAMESPACE="socktop"
|
||||
LABEL="app=socktop-webterm"
|
||||
REFRESH_INTERVAL=5
|
||||
|
||||
echo -e "${GREEN}=== Socktop WebTerm Session Monitor ===${NC}"
|
||||
echo ""
|
||||
echo "Monitoring namespace: $NAMESPACE"
|
||||
echo "Refresh interval: ${REFRESH_INTERVAL}s"
|
||||
echo "Press Ctrl+C to exit"
|
||||
echo ""
|
||||
|
||||
# Function to get connection count from a pod
|
||||
get_connections() {
|
||||
local pod=$1
|
||||
kubectl exec -n "$NAMESPACE" "$pod" -- netstat -tn 2>/dev/null | \
|
||||
grep :8082 | grep ESTABLISHED | wc -l
|
||||
}
|
||||
|
||||
# Function to get recent timeout events
|
||||
get_timeout_events() {
|
||||
kubectl logs -n "$NAMESPACE" -l "$LABEL" --tail=50 --since=60s 2>/dev/null | \
|
||||
grep -i "timeout\|idle\|disconnect" | tail -10
|
||||
}
|
||||
|
||||
# Function to get active terminal sessions
|
||||
get_active_terminals() {
|
||||
kubectl logs -n "$NAMESPACE" -l "$LABEL" --tail=100 --since=300s 2>/dev/null | \
|
||||
grep "Started Terminal" | wc -l
|
||||
}
|
||||
|
||||
# Function to get stopped terminal sessions
|
||||
get_stopped_terminals() {
|
||||
kubectl logs -n "$NAMESPACE" -l "$LABEL" --tail=100 --since=300s 2>/dev/null | \
|
||||
grep "Stopping Terminal" | wc -l
|
||||
}
|
||||
|
||||
# Main monitoring loop
|
||||
while true; do
|
||||
clear
|
||||
|
||||
echo -e "${CYAN}╔═══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${CYAN}║ Socktop WebTerm - Session Monitor ║${NC}"
|
||||
echo -e "${CYAN}║ $(date '+%Y-%m-%d %H:%M:%S') ║${NC}"
|
||||
echo -e "${CYAN}╚═══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
|
||||
# Get pod information
|
||||
echo -e "${BLUE}Pods:${NC}"
|
||||
kubectl get pods -n "$NAMESPACE" -l "$LABEL" -o wide 2>/dev/null
|
||||
echo ""
|
||||
|
||||
# Get connection counts per pod
|
||||
echo -e "${BLUE}Active WebSocket Connections per Pod:${NC}"
|
||||
TOTAL_CONNECTIONS=0
|
||||
PODS=$(kubectl get pods -n "$NAMESPACE" -l "$LABEL" -o jsonpath='{.items[*].metadata.name}' 2>/dev/null)
|
||||
|
||||
if [ -z "$PODS" ]; then
|
||||
echo -e "${RED} No pods found${NC}"
|
||||
else
|
||||
for pod in $PODS; do
|
||||
CONN_COUNT=$(get_connections "$pod")
|
||||
TOTAL_CONNECTIONS=$((TOTAL_CONNECTIONS + CONN_COUNT))
|
||||
|
||||
if [ "$CONN_COUNT" -gt 0 ]; then
|
||||
echo -e " ${GREEN}$pod: $CONN_COUNT connections${NC}"
|
||||
else
|
||||
echo -e " ${YELLOW}$pod: $CONN_COUNT connections${NC}"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
echo -e "${CYAN}Total Active Connections: $TOTAL_CONNECTIONS${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Session statistics (last 5 minutes)
|
||||
echo -e "${BLUE}Session Statistics (last 5 minutes):${NC}"
|
||||
STARTED=$(get_active_terminals)
|
||||
STOPPED=$(get_stopped_terminals)
|
||||
echo -e " ${GREEN}Sessions started: $STARTED${NC}"
|
||||
echo -e " ${YELLOW}Sessions stopped: $STOPPED${NC}"
|
||||
echo ""
|
||||
|
||||
# Recent timeout events
|
||||
echo -e "${BLUE}Recent Timeout/Disconnect Events (last 60 seconds):${NC}"
|
||||
EVENTS=$(get_timeout_events)
|
||||
|
||||
if [ -z "$EVENTS" ]; then
|
||||
echo -e " ${GREEN}No timeout events${NC}"
|
||||
else
|
||||
echo "$EVENTS" | while IFS= read -r line; do
|
||||
if echo "$line" | grep -qi "timeout"; then
|
||||
echo -e " ${RED}$line${NC}"
|
||||
elif echo "$line" | grep -qi "disconnect"; then
|
||||
echo -e " ${YELLOW}$line${NC}"
|
||||
else
|
||||
echo -e " $line"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Resource usage
|
||||
echo -e "${BLUE}Resource Usage:${NC}"
|
||||
kubectl top pods -n "$NAMESPACE" -l "$LABEL" 2>/dev/null || echo " (metrics-server not available)"
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}───────────────────────────────────────────────────────────────${NC}"
|
||||
echo -e "Refreshing in ${REFRESH_INTERVAL}s... (Ctrl+C to exit)"
|
||||
|
||||
sleep "$REFRESH_INTERVAL"
|
||||
done
|
||||
Reference in New Issue
Block a user