#!/bin/bash # Quick status checker for thesis work tracker # Shows current work progress and access status set -euo pipefail STATE_FILE="${STATE_FILE:-/var/lib/thesis-work-tracker/work-time.state}" # Colors GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[0;33m' BLUE='\033[0;34m' BOLD='\033[1m' NC='\033[0m' # Check if state file exists if [[ ! -f $STATE_FILE ]]; then echo -e "${RED}Error:${NC} Thesis work tracker is not installed or has not been initialized." echo "Install with: sudo scripts/digital_wellbeing/setup_thesis_work_tracker.sh" exit 1 fi # Load state (need sudo to read immutable file) if [[ -z ${THESIS_STATUS_SKIP_SUDO:-} ]] && [[ $EUID -ne 0 ]]; then exec sudo -E bash "$0" "$@" fi # Temporarily remove immutable to read sudo chattr -i "$STATE_FILE" 2>/dev/null || true # Parse state file with a single while-read pass (no grep/cut forks) TOTAL_WORK_SECONDS=0 STEAM_ACCESS_GRANTED=0 CURRENT_SESSION_SECONDS=0 LAST_WORK_SESSION_START=0 local_key='' local_value='' while IFS='=' read -r local_key local_value; do case $local_key in TOTAL_WORK_SECONDS) TOTAL_WORK_SECONDS=$local_value ;; STEAM_ACCESS_GRANTED) STEAM_ACCESS_GRANTED=$local_value ;; CURRENT_SESSION_SECONDS) CURRENT_SESSION_SECONDS=$local_value ;; LAST_WORK_SESSION_START) LAST_WORK_SESSION_START=$local_value ;; esac done < "$STATE_FILE" 2>/dev/null || true # Validate that values are numeric if ! [[ $TOTAL_WORK_SECONDS =~ ^[0-9]+$ ]]; then TOTAL_WORK_SECONDS=0; fi if ! [[ $STEAM_ACCESS_GRANTED =~ ^[01]$ ]]; then STEAM_ACCESS_GRANTED=0; fi if ! [[ $CURRENT_SESSION_SECONDS =~ ^[0-9]+$ ]]; then CURRENT_SESSION_SECONDS=0; fi if ! [[ $LAST_WORK_SESSION_START =~ ^[0-9]+$ ]]; then LAST_WORK_SESSION_START=0; fi # Re-apply immutable sudo chattr +i "$STATE_FILE" 2>/dev/null || true # Test mode: skip display and return to caller if [[ -n ${THESIS_STATUS_SKIP_OUTPUT:-} ]]; then return 0 2>/dev/null || exit 0 fi # Default values if not set TOTAL_WORK_SECONDS=${TOTAL_WORK_SECONDS:-0} STEAM_ACCESS_GRANTED=${STEAM_ACCESS_GRANTED:-0} CURRENT_SESSION_SECONDS=${CURRENT_SESSION_SECONDS:-0} LAST_WORK_SESSION_START=${LAST_WORK_SESSION_START:-0} # Constants (should match tracker script) WORK_QUOTA_REQUIRED=7200 # 2 hours default # Calculate values work_minutes=$((TOTAL_WORK_SECONDS / 60)) work_hours=$((work_minutes / 60)) work_remaining_minutes=$((work_minutes % 60)) quota_minutes=$((WORK_QUOTA_REQUIRED / 60)) quota_hours=$((quota_minutes / 60)) quota_remaining_minutes=$((quota_minutes % 60)) remaining_seconds=$((WORK_QUOTA_REQUIRED - TOTAL_WORK_SECONDS)) if [[ $remaining_seconds -lt 0 ]]; then remaining_seconds=0 fi remaining_minutes=$((remaining_seconds / 60)) session_minutes=$((CURRENT_SESSION_SECONDS / 60)) percentage=$((TOTAL_WORK_SECONDS * 100 / WORK_QUOTA_REQUIRED)) if [[ $percentage -gt 100 ]]; then percentage=100 fi # Display status echo "" echo "╔════════════════════════════════════════════════════════════════╗" echo "║ Bachelor Thesis Work Tracker - Status ║" echo "╚════════════════════════════════════════════════════════════════╝" echo "" # Work progress echo -e "${BOLD}Work Progress:${NC}" echo -e " Total work time: ${GREEN}${work_hours}h ${work_remaining_minutes}m${NC}" echo -e " Required quota: ${BLUE}${quota_hours}h ${quota_remaining_minutes}m${NC}" # Progress bar echo -n " Progress: [" bar_length=40 filled=$((percentage * bar_length / 100)) for ((i=0; i/dev/null; then echo -e " Tracker daemon: ${GREEN}RUNNING${NC} ✓" else echo -e " Tracker daemon: ${RED}NOT RUNNING${NC} ⚠" echo -e " ${YELLOW}Start with: sudo systemctl start thesis-work-tracker@\$(whoami).service${NC}" fi echo "" # Useful commands echo -e "${BOLD}Useful Commands:${NC}" echo " • View live logs: tail -f /var/log/thesis-work-tracker/tracker.log" echo " • Service status: systemctl status thesis-work-tracker@\$(whoami).service" echo " • Restart tracker: sudo systemctl restart thesis-work-tracker@\$(whoami).service" echo ""