diff --git a/.gitea/workflows/audit-report.yaml b/.gitea/workflows/audit-report.yaml new file mode 100644 index 0000000..7b1b24e --- /dev/null +++ b/.gitea/workflows/audit-report.yaml @@ -0,0 +1,25 @@ +name: Infrastructure Audit +run-name: šŸ“Š Running Watchtower & Tools Audit + +on: + push: + branches: + - main + +jobs: + server-report: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' + + - name: Install Dependencies + run: pip install -r requirements.txt + + - name: Run Audit Script + run: python audit.py \ No newline at end of file diff --git a/audit.py b/audit.py new file mode 100644 index 0000000..600af94 --- /dev/null +++ b/audit.py @@ -0,0 +1,47 @@ +import docker +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 + + print("="*40) + print(f"šŸ›”ļø ANTIGRAVITY INFRASTRUCTURE REPORT") + print(f"šŸ“… Date: {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.") + +if __name__ == "__main__": + generate_report() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index fb330d7..2af4400 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ psycopg2-binary -requests \ No newline at end of file +requests +docker \ No newline at end of file