Files
linux-workspace/bin/dcm
Martin Blazik 545c8809ab WIP: dcm
2020-11-24 12:50:51 +01:00

159 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""
dcm down -v --remove-orphans
"""
import subprocess
import yaml
import pprint
import os
import re
from sys import argv
from time import time, sleep
def split(text):
return re.split(r'\s+', text)
def prefix_join(prefix, array):
return " ".join([prefix + " " + item for item in array])
def dc_files(files):
return prefix_join("-f", files)
def load_dc_file(dc_file):
with open(dc_file) as yamlFile:
dc = yaml.load(yamlFile, Loader=yaml.FullLoader)
return dc
def dc_cmd(args):
# split join
args = " ".join(args)
return " ".join([DOCKER_COMPOSE, DC_FILES_ARGS, args])
def dc_run(args):
cmd = dc_cmd(args)
print(cmd)
returned_value = subprocess.call(cmd, shell=True)
exit(returned_value)
def dc_log(args):
args = ["logs", "--no-color"] + args + [r"| sed -r 's/^[^|]+\| //g'"]
dc_run(args)
def dc_services(dc_file):
dc = load_dc_file(dc_file)
return [service for service in dc["services"].keys()]
def dump_services(files):
for filename in files:
for service in dc_services(filename):
print(service)
def service_dependencies(service, dc_files):
pass
def dump_files(files):
for file in files:
print(file)
# AFM exec API: curl -fs -o /dev/null http://localhost:9001/actuator/health/readiness
# AQE: /opt/bin/aqe ping
# md-api-new: curl -fs -o /dev/null http://localhost:9008/actuator/health/readiness
# potgres: s6-setuidgid postgres; /usr/bin/pg_isready
# pulsar: curl -fs -o /dev/null http://localhost:8080/admin/v2/tenants/public
# redis: /usr/bin/redis-cli ping
# result-cache: curl -fs -o /dev/null http://localhost:9041/actuator/health/readiness
# scan-model: curl -fs -o /dev/null http://localhost:9061/actuator/health/readiness
# sql-executor: curl -fs -o /dev/null http://localhost:9101/actuator/health/readiness
def curl_check(uri):
cmd = "curl -f -s -o /dev/null " + uri
print(cmd)
return subprocess.call(cmd, shell=True) == 0
def check_pulsar():
return curl_check("http://localhost:8080/admin/v2/tenants/public")
def check_postgres():
return False
def wait_for(check, delay, duration):
start = time()
while time() - start < duration:
if check():
return True
else:
sleep(delay)
def up_and_wait(service, check, delay, duration):
pass
def start_tiger():
up_and_wait("pulsar", check_pulsar, 5, 60)
up(["redis", "jaeger", "router"])
up_and_wait("postgres", check_postgres, 5, 60)
up(["aqe", "afm-exec-api", "result-cache", "scan-model", "sql-executor", "metadata-api-new"])
def try_load_list(name, default):
if name in os.environ:
return split(os.environ[name])
else:
return default
DOCKER_COMPOSE = "docker-compose"
DEFAULT_DCF = ["docker-compose.yaml"]
DC_FILES = try_load_list("DCF", DEFAULT_DCF)
DC_FILES_ARGS = dc_files(DC_FILES)
DEFAULT_TIGER_SERVICES = [
"afm-exec-api",
"metadata-api-new",
"aqe",
"result-cache",
"scan-model",
"sql-executor"
]
TIGER_SERVICES = try_load_list("SERVICES", DEFAULT_TIGER_SERVICES)
COMMANDS = {
"files": lambda args: dump_files(DC_FILES),
"services": lambda args: dump_services(DC_FILES),
"log": dc_log
# "dep":
}
def main():
args = argv[1:]
action = args[0] if args else None
if action in COMMANDS:
COMMANDS[action](args[1:])
else:
dc_run(args)
if __name__ == '__main__':
main()