diff --git a/api.py b/api.py new file mode 100644 index 0000000..df389ef --- /dev/null +++ b/api.py @@ -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"} diff --git a/cli.py b/cli.py new file mode 100644 index 0000000..7567bb1 --- /dev/null +++ b/cli.py @@ -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) diff --git a/dataworker.py b/dataworker.py new file mode 100644 index 0000000..d048dd9 --- /dev/null +++ b/dataworker.py @@ -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