add rest api and cli basics

This commit is contained in:
lucaspalomodevelop 2024-01-03 20:44:37 +01:00
parent b8435faeb0
commit 7d9bb1f212
3 changed files with 146 additions and 0 deletions

53
api.py Normal file
View File

@ -0,0 +1,53 @@
from typing import Union
import uvicorn
from fastapi import FastAPI
import dataworker
import json
app = FastAPI()
dataworker = dataworker.dataworker()
class api:
def __init__(self):
self._commands = {}
def run(self):
uvicorn.run(app, host="0.0.0.0", port=8000)
@app.get("/api/v1")
def read_root():
return {"Hello": "World"}
@app.get("/api/v1/services")
def get_services():
services = {}
services["exists"] = []
services["running"] = []
for service in dataworker.get_services():
services["exists"].append(service)
for service in dataworker.get_running_services():
services["running"].append(service)
return services
@app.get("/api/v1/service/{service_name}/start")
def start_service(service_name: str):
if dataworker.is_valid_service(service_name):
if dataworker.DockerComunicator.is_service_running(service_name):
return {"status": "Service already running"}
else:
dataworker.DockerComunicator.start_service(service_name)
return {"status": "Service started"}
else:
return {"status": "Service not found"}
@app.get("/api/v1/service/{service_name}/stop")
def stop_service(service_name: str):
if dataworker.is_valid_service(service_name):
if dataworker.DockerComunicator.is_service_running(service_name):
dataworker.DockerComunicator.stop_service(service_name)
return {"status": "Service stopped"}
else:
return {"status": "Service already stopped"}
else:
return {"status": "Service not found"}

43
cli.py Normal file
View File

@ -0,0 +1,43 @@
import os
import dataworker
VERSION = "0.0.1"
call_dir = ""
class cli_style:
BLACK = "\033[30m"
RED = "\033[31m"
GREEN = "\033[32m"
YELLOW = "\033[33m"
BLUE = "\033[34m"
MAGENTA = "\033[35m"
CYAN = "\033[36m"
WHITE = "\033[37m"
UNDERLINE = "\033[4m"
RESET = "\033[0m"
class cli:
def __init__(self):
self.call_dir = "."
self.dataworker = dataworker.dataworker()
def run(self):
self.call_dir = os.getcwd()
print("DoOrg v" + VERSION)
print("call dir: " + self.call_dir)
services = self.dataworker.get_services()
print("Services:")
for service in services:
color = (
cli_style.GREEN
if self.dataworker.DockerComunicator.is_service_running(service)
else cli_style.RED
)
print(color + " - " + service + cli_style.RESET)
print("Docker services:")
docker_services = self.dataworker.DockerComunicator.get_services()
for service in docker_services:
print(" - " + service.name)

50
dataworker.py Normal file
View File

@ -0,0 +1,50 @@
import os
import sys
import DockerComunicator as DockerComunicator
class dataworker:
def __init__(self):
self.call_dir = "."
self.accepted_dockerfiles = [
"docker-compose.yml",
"docker-compose.yaml",
"docker-compose.yml.j2",
"docker-compose.yaml.j2",
]
self.DockerComunicator = DockerComunicator.DockerComunicator()
def is_valid_service(self, service):
service_dir = self.call_dir + "/services/" + service
for dockerfile in self.accepted_dockerfiles:
if os.path.isfile(service_dir + "/" + dockerfile):
return True
return False
def get_services(self):
services = []
services_dir = self.call_dir + "/services"
for service in os.listdir(services_dir):
# print("Checking service " + service)
if os.path.isdir(services_dir + "/" + service) and self.is_valid_service(
service
):
services.append(service)
else:
print(
cli_style.RED
+ "Service "
+ services_dir
+ "/"
+ service
+ " is not a valid service"
+ cli_style.RESET
)
return services
def get_running_services(self):
services = []
docker_services = self.DockerComunicator.get_services()
for service in docker_services:
services.append(service.name)
return services