chipling commited on
Commit
f8d6c3f
·
verified ·
1 Parent(s): a2ec119

Upload 25 files

Browse files
Files changed (4) hide show
  1. app.py +4 -4
  2. docker_client.py +12 -0
  3. routers/controls.py +11 -8
  4. routers/deploy.py +9 -3
app.py CHANGED
@@ -1,9 +1,9 @@
1
  from fastapi import FastAPI
2
- import docker
3
  import dotenv
4
  from routers.deploy import router as deploy_router
5
  from routers.controls import router as controls_router
6
  from routers.logs import router as logs_router
 
7
 
8
  # Load environment variables
9
  dotenv.load_dotenv()
@@ -13,11 +13,11 @@ app.include_router(controls_router, prefix="/controls")
13
  app.include_router(logs_router, prefix="/logs")
14
  app.include_router(deploy_router, prefix="/deploy")
15
 
16
- client = docker.from_env()
17
-
18
  @app.get("/")
19
  def dashboard():
20
- containers = client.containers.list(all=True)
 
 
21
  container_list = [
22
  {
23
  "id": container.id,
 
1
  from fastapi import FastAPI
 
2
  import dotenv
3
  from routers.deploy import router as deploy_router
4
  from routers.controls import router as controls_router
5
  from routers.logs import router as logs_router
6
+ from docker_client import docker_client
7
 
8
  # Load environment variables
9
  dotenv.load_dotenv()
 
13
  app.include_router(logs_router, prefix="/logs")
14
  app.include_router(deploy_router, prefix="/deploy")
15
 
 
 
16
  @app.get("/")
17
  def dashboard():
18
+ if not docker_client:
19
+ return {"message": "Docker is not available"}
20
+ containers = docker_client.containers.list(all=True)
21
  container_list = [
22
  {
23
  "id": container.id,
docker_client.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import docker
2
+
3
+ def get_docker_client():
4
+ try:
5
+ # Check if Docker is available
6
+ client = docker.from_env()
7
+ client.ping()
8
+ return client
9
+ except Exception:
10
+ return None
11
+
12
+ docker_client = get_docker_client()
routers/controls.py CHANGED
@@ -1,16 +1,15 @@
1
  from fastapi import APIRouter, HTTPException
2
- from fastapi.responses import JSONResponse, HTMLResponse
3
- import docker
4
- from docker import client
5
 
6
  router = APIRouter()
7
 
8
- docker_client = docker.from_env()
9
-
10
  @router.get("/start/{container_name}")
11
  def start_container(container_name: str):
 
 
12
  try:
13
- container = client.containers.get(container_name)
14
  container.unpause()
15
  return JSONResponse({"status": "started"})
16
  except Exception as e:
@@ -18,8 +17,10 @@ def start_container(container_name: str):
18
 
19
  @router.get("/pause/{container_name}")
20
  def pause_container(container_name: str):
 
 
21
  try:
22
- container = client.containers.get(container_name)
23
  container.pause()
24
  return JSONResponse({"status": "paused"})
25
  except Exception as e:
@@ -27,8 +28,10 @@ def pause_container(container_name: str):
27
 
28
  @router.get("/stop/{container_name}")
29
  def stop_container(container_name: str):
 
 
30
  try:
31
- container = client.containers.get(container_name)
32
  container.stop()
33
  container.remove(force=True)
34
  return JSONResponse({"status": "stopped and removed"})
 
1
  from fastapi import APIRouter, HTTPException
2
+ from fastapi.responses import JSONResponse
3
+ from docker_client import docker_client
 
4
 
5
  router = APIRouter()
6
 
 
 
7
  @router.get("/start/{container_name}")
8
  def start_container(container_name: str):
9
+ if not docker_client:
10
+ raise HTTPException(status_code=503, detail="Docker is not available")
11
  try:
12
+ container = docker_client.containers.get(container_name)
13
  container.unpause()
14
  return JSONResponse({"status": "started"})
15
  except Exception as e:
 
17
 
18
  @router.get("/pause/{container_name}")
19
  def pause_container(container_name: str):
20
+ if not docker_client:
21
+ raise HTTPException(status_code=503, detail="Docker is not available")
22
  try:
23
+ container = docker_client.containers.get(container_name)
24
  container.pause()
25
  return JSONResponse({"status": "paused"})
26
  except Exception as e:
 
28
 
29
  @router.get("/stop/{container_name}")
30
  def stop_container(container_name: str):
31
+ if not docker_client:
32
+ raise HTTPException(status_code=503, detail="Docker is not available")
33
  try:
34
+ container = docker_client.containers.get(container_name)
35
  container.stop()
36
  container.remove(force=True)
37
  return JSONResponse({"status": "stopped and removed"})
routers/deploy.py CHANGED
@@ -1,6 +1,6 @@
1
  from fastapi import APIRouter, HTTPException, UploadFile, Form
2
  from fastapi.responses import JSONResponse
3
- import docker
4
  import uuid
5
  import zipfile
6
  import os
@@ -11,6 +11,8 @@ router = APIRouter()
11
 
12
  @router.post("/project")
13
  async def deploy_code(file: UploadFile, app_name: str = Form(...)):
 
 
14
  if not file.filename.endswith(".zip"):
15
  raise HTTPException(status_code=400, detail="Only .zip files are supported")
16
 
@@ -81,7 +83,6 @@ async def deploy_code(file: UploadFile, app_name: str = Form(...)):
81
  container_name = image_name
82
 
83
  try:
84
- docker_client = docker.from_env()
85
  for c in docker_client.containers.list(all=True):
86
  if c.status in ["created", "exited"]:
87
  print(f"Removing leftover container {c.name} ({c.id})")
@@ -118,4 +119,9 @@ async def deploy_code(file: UploadFile, app_name: str = Form(...)):
118
  })
119
 
120
  except Exception as e:
121
- return JSONResponse({"error": str(e)}, status_code=500)
 
 
 
 
 
 
1
  from fastapi import APIRouter, HTTPException, UploadFile, Form
2
  from fastapi.responses import JSONResponse
3
+ from docker_client import docker_client
4
  import uuid
5
  import zipfile
6
  import os
 
11
 
12
  @router.post("/project")
13
  async def deploy_code(file: UploadFile, app_name: str = Form(...)):
14
+ if not docker_client:
15
+ raise HTTPException(status_code=503, detail="Docker is not available")
16
  if not file.filename.endswith(".zip"):
17
  raise HTTPException(status_code=400, detail="Only .zip files are supported")
18
 
 
83
  container_name = image_name
84
 
85
  try:
 
86
  for c in docker_client.containers.list(all=True):
87
  if c.status in ["created", "exited"]:
88
  print(f"Removing leftover container {c.name} ({c.id})")
 
119
  })
120
 
121
  except Exception as e:
122
+ return JSONResponse({"error": str(e)}, status_code=500)
123
+
124
+ @router.get("/project/{project_id}")
125
+ def get_project_status(project_id: str):
126
+ # Placeholder for project status logic
127
+ return JSONResponse({"project_id": project_id, "status": "running"})