Skip to content

Instantly share code, notes, and snippets.

@pjgeutjens
Last active November 7, 2020 04:11
Show Gist options
  • Save pjgeutjens/77eaeef25c136f6291f5a8450bfba8b3 to your computer and use it in GitHub Desktop.
Save pjgeutjens/77eaeef25c136f6291f5a8450bfba8b3 to your computer and use it in GitHub Desktop.
generate tmuxinator config for all services in a docker-compose.yml file, with color output
import yaml
import argparse
parser = argparse.ArgumentParser(description="Show docker logs in tmuxinator session")
parser.add_argument(
"-d", "--delay", help="delay in seconds before opening logs", default=5
)
parser.add_argument("-o", "--out", help="output file path", default="tmuxinator.yml")
parser.add_argument("-l", "--layout", help="tmuxinator layout", default="tiled")
parser.add_argument(
"-c", "--colorize", help="colorize output, requires xcolorize", action="store_true"
)
args = parser.parse_args()
colors = ["yellow", "red", "cyan", "purple", "pink", "fawn"]
def populateConfig(log_panes, layout):
configIn = {
"name": "docker-logs",
"root": ".",
"windows": [{"logs": {"layout": layout, "panes": log_panes}}],
}
configOut = yaml.dump(configIn)
return configOut
if __name__ == "__main__":
try:
docker_config = open("docker-compose.yaml").read()
except IOError:
docker_config = open("docker-compose.yml").read()
config = yaml.load(docker_config, Loader=yaml.FullLoader)
services = list(config["services"].keys())
log_panes = list()
log_panes.append(
"clear && docker-compose up -d"
) # add a first pane to spin up the containers
for i, s in enumerate(services):
# build docker-compose logs command, including delay to allow container spinup
panel_command = f"sleep {args.delay} && clear && docker-compose logs -f {s}"
if args.colorize:
panel_command += (
f"| xcolorize --unbuffered {colors[i % len(colors)]} '{s}.+'"
)
log_panes.append(panel_command)
tmux_config = populateConfig(log_panes, args.layout)
with open(args.out, "w") as outFile:
outFile.write(tmux_config)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment