From 1f0c0d22c88a5d8bdb10ed3c105223a172e64ae2 Mon Sep 17 00:00:00 2001
From: serr <sc7227484@gmail.com>
Date: Sat, 12 Apr 2025 18:56:24 +0300
Subject: [PATCH] eye.sh

---
 .gitignore     |  2 --
 eye.sh         | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++
 posts/test2.md |  3 --
 3 files changed, 98 insertions(+), 5 deletions(-)
 create mode 100755 eye.sh
 delete mode 100644 posts/test2.md

diff --git a/.gitignore b/.gitignore
index a9a7e52..e2d4c0f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,2 @@
 config.json
-restart.sh
-eye.sh
 hikan.ru
\ No newline at end of file
diff --git a/eye.sh b/eye.sh
new file mode 100755
index 0000000..d2db1e4
--- /dev/null
+++ b/eye.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+stty -echoctl # Отключает вывод управляющих символов по типу ^C
+
+# НАСТРОЙКА СКРИПТА ТУТ ###########################################################
+DURATION=1 # Задержка между проверками в секундах
+WATCH_DIRS=("posts" "mvc" "assets") # Массив директорий для наблюдения
+BINARY_PATH="./main" # Путь до бинарного файла
+BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки
+###################################################################################
+
+# Массивы для хранения информации о директориях
+declare -A LAST_MODS
+declare -A LAST_COUNTS
+CLEANUP_DONE=0
+#
+
+# Вывод в синем цвете
+blue() {
+    echo -e "\033[34m$1\033[0m"
+}
+
+# Очистка при завершении работы скрипта
+cleanup() {
+    [ $CLEANUP_DONE -eq 1 ] && exit 0
+    blue "EYE | cleanup..."
+    kill_proc $1
+    rm -f $BINARY_PATH
+    blue "EYE | see you later!"
+    CLEANUP_DONE=1
+    exit 0
+}
+
+# Убийство процесса по его pid
+kill_proc() {
+    local pid=$1
+    if [ -n "$pid" ] && kill -0 $pid 2>/dev/null; then
+        kill $pid
+        blue "EYE | process killed (PID: $pid)"
+    fi
+}
+
+# Проверка изменений в директориях
+check_changes() {
+    local changed=0
+
+    for dir in "${WATCH_DIRS[@]}"; do
+        local current_mod=$(find "$dir" -type f -exec stat -c %Y {} \; | sort -nr | head -1)
+        local current_count=$(find "$dir" -type f 2>/dev/null | wc -l)
+
+        if { [ -n "$current_mod" ] && [ "$current_mod" -gt "${LAST_MODS[$dir]}" ]; } || [ "$current_count" -ne "${LAST_COUNTS[$dir]}" ]; then
+            changed=1
+            LAST_MODS["$dir"]=$current_mod
+            LAST_COUNTS["$dir"]=$current_count
+            [ -n "$1" ] && blue "EYE | changes detected in \033[94m$dir\033[0m"
+        fi
+    done
+
+    return $changed
+}
+
+# Основная функция
+main() {
+    local pid=""
+
+    # Ловушка для сигналов завершения
+    trap 'cleanup $pid' SIGINT SIGTERM SIGHUP SIGQUIT EXIT
+    #
+
+    # Инициализация массивов
+    for dir in "${WATCH_DIRS[@]}"; do
+        LAST_MODS["$dir"]=0
+        LAST_COUNTS["$dir"]=$(find "$dir" -type f 2>/dev/null | wc -l)
+        blue "EYE | started watching the directory \033[94m$dir\033[0m"
+    done
+    #
+
+    # Основной цикл работы скрипта
+    while true; do
+        check_changes $pid
+        if [ $? -eq 1 ]; then
+            blue "EYE | rebuilding..."
+            $BUILD_CMD
+            if [ $? -eq 0 ]; then
+                blue "EYE | build successful. restarting..."
+                kill_proc $pid
+                $BINARY_PATH &
+                pid=$!
+                blue "EYE | started new process (PID: $pid)"
+            else
+                blue "EYE | build failed"
+            fi
+        fi
+
+        sleep $DURATION
+    done
+}
+
+main
\ No newline at end of file
diff --git a/posts/test2.md b/posts/test2.md
deleted file mode 100644
index c8c491e..0000000
--- a/posts/test2.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# TEST 2
-
-123
\ No newline at end of file