From c3ca0689f09ca3d6ac4eb1e739f9811c6615c0f5 Mon Sep 17 00:00:00 2001 From: George Date: Thu, 1 Oct 2026 13:22:28 +0530 Subject: [PATCH] feat: --ADDED DOCKER API --- instructions.txt | 13 +++++++++++++ main.py | 47 ++++++++++++++++++++++++++++++++++++++++++++++- requirements.txt | 27 ++++++++++++++++++--------- 3 files changed, 77 insertions(+), 10 deletions(-) diff --git a/instructions.txt b/instructions.txt index cddf454..eceb7c9 100644 --- a/instructions.txt +++ b/instructions.txt @@ -11,3 +11,16 @@ tail -f server.log ps aux | grep main.py kill + +MAKE A DEDICATED USER FOR ACCESSING DOCKER +sudo useradd --system --shell /usr/sbin/nologin fastapi-docker + +sudo usermod -aG docker fastapi-docker + +sudo setfacl -m u:fastapi-docker:x /home/george +sudo setfacl -m u:fastapi-docker:x /home/george/Desktop +sudo setfacl -m u:fastapi-docker:x /home/george/Desktop/PROJECT26 + +RUN APP + +(venv) george@george-Lenovo-ideapad-320-15IKB:~/Desktop/PROJECT26/pgMultiMasterCPUmemoryAgent$ sudo -u fastapi-docker /home/george/Desktop/PROJECT26/psqlDB/venv/bin/python3 /home/george/Desktop/PROJECT26/pgMultiMasterCPUmemoryAgent/main.py \ No newline at end of file diff --git a/main.py b/main.py index 690d86f..633c7a3 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,8 @@ import psutil import asyncio -from fastapi import FastAPI, WebSocket, WebSocketDisconnect +from fastapi import FastAPI, WebSocket, WebSocketDisconnect,HTTPException +import docker + app = FastAPI() @@ -84,6 +86,49 @@ async def hardware_status_monitor(websocket: WebSocket): print("Hardware monitoring WebSocket disconnected") + +# GET DOCKER CONTAINERS +@app.get("/docker/containers") +def get_containers(): + + try: + # Connect to the Docker daemon running on this VM + client = docker.from_env() + + # all=True means: + # running + stopped + exited containers + containers = client.containers.list(all=True) + + result = [] + + for container in containers: + + result.append({ + "id": container.short_id, + "name": container.name, + "image": ( + container.image.tags[0] + if container.image.tags + else container.image.short_id + ), + "status": container.status, + "ports": container.attrs[ + "NetworkSettings" + ]["Ports"] + }) + + return { + "count": len(result), + "containers": result + } + + except docker.errors.DockerException as e: + + raise HTTPException( + status_code=500, + detail=f"Docker error: {str(e)}" + ) + if __name__ == "__main__": import uvicorn diff --git a/requirements.txt b/requirements.txt index 9ed8fef..81655b6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,21 +1,30 @@ +alembic==1.19.2 annotated-doc==0.0.5 annotated-types==0.8.0 -anyio==4.15.1 +anyio==4.14.2 +certifi==2026.7.22 +charset-normalizer==3.5.2 click==8.5.0 -exceptiongroup==1.3.1 +docker==7.2.0 fastapi==0.141.1 +greenlet==3.5.5 h11==0.16.0 -httptools==0.8.0 -idna==3.20 +idna==3.19 +Mako==1.4.1 +MarkupSafe==3.0.3 psutil==7.2.2 +psycopg==3.3.4 +psycopg-binary==3.3.4 +psycopg2-binary==2.9.12 pydantic==2.13.5 pydantic_core==2.46.5 +PyJWT==2.13.0 python-dotenv==1.2.3 -PyYAML==6.0.3 +requests==2.34.2 +SQLAlchemy==2.0.52 starlette==1.6.0 typing-inspection==0.4.4 typing_extensions==4.16.0 -uvicorn==0.53.0 -uvloop==0.22.1 -watchfiles==1.3.0 -websockets==16.1.1 +urllib3==2.8.0 +uvicorn==0.52.4 +websockets==17.1