diff --git a/.gitea/workflows/sanity.yaml b/.gitea/workflows/sanity.yaml index 78859db..0c1bff2 100644 --- a/.gitea/workflows/sanity.yaml +++ b/.gitea/workflows/sanity.yaml @@ -1,21 +1,20 @@ -name: Sanity Check -run-name: 🟢 System Health Check +name: Infrastructure Audit +run-name: 📊 Server Status Report on: [push] jobs: - health-check: + audit: runs-on: ubuntu-latest + container: + image: docker:cli # Використовуємо образ з Docker клієнтом! + volumes: + - /var/run/docker.sock:/var/run/docker.sock # Даємо доступ до докера хоста steps: - name: 📥 Check out repository uses: actions/checkout@v3 - - name: 🐍 Run Sanity Script + - name: 🐍 Run Audit Script + # Встановлюємо python прямо в docker контейнері run: | - # Встановлюємо python3, якщо його немає (на всяк випадок) - if ! command -v python3 &> /dev/null; then - echo "Installing Python..." - apt-get update && apt-get install -y python3 - fi - - # Запускаємо скрипт - python3 sanity_check.py + apk add --no-cache python3 + python3 audit.py diff --git a/audit.py b/audit.py index 600af94..c9add84 100644 --- a/audit.py +++ b/audit.py @@ -1,47 +1,29 @@ -import docker +import os import datetime -def generate_report(): - try: - client = docker.from_env() - except Exception as e: - print(f"❌ CRITICAL: Cannot connect to Docker. Is the socket mounted?\n{e}") - return - +# Простий спосіб перевірити докер без важких бібліотек +def check_docker(): print("="*40) - print(f"🛡️ ANTIGRAVITY INFRASTRUCTURE REPORT") - print(f"📅 Date: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + print(f"🛡️ INFRASTRUCTURE REPORT") + print(f"📅 {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print("="*40) - - # 1. Check Watchtower - print("\n🔍 CHECKING WATCHTOWER:") - try: - wt = client.containers.get('watchtower') - status_icon = "🟢" if wt.status == 'running' else "🔴" - print(f"{status_icon} Status: {wt.status.upper()}") - print(f"⏱️ Uptime: {wt.attrs['State']['StartedAt']}") - except docker.errors.NotFound: - print("🔴 Watchtower container NOT FOUND on this server!") - except Exception as e: - print(f"⚠️ Error checking Watchtower: {e}") - - # 2. List All Tools - print("\n🛠️ ACTIVE TOOLSET STATUS:") - print(f"{'CONTAINER NAME':<25} {'STATUS':<15} {'IMAGE TAG'}") - print("-" * 60) - for container in client.containers.list(): - # Get image tag safely - tags = container.image.tags - tag_name = tags[0] if tags else "unknown" - # Shorten tag for display - if "/" in tag_name: - tag_name = tag_name.split("/")[-1] - - print(f"{container.name:<25} {container.status:<15} {tag_name}") - - print("\n" + "="*40) - print("✅ Audit Complete.") + # Перевіряємо запущені контейнери через системну команду + stream = os.popen('docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"') + output = stream.read() + + if not output: + print("❌ Error: Cannot connect to Docker or no containers running.") + return + + print(output) + + if "watchtower" in output: + print("\n✅ WATCHTOWER IS ACTIVE AND MONITORING.") + else: + print("\n⚠️ WATCHTOWER NOT FOUND!") + + print("="*40) if __name__ == "__main__": - generate_report() \ No newline at end of file + check_docker() \ No newline at end of file