Skip to content

Instantly share code, notes, and snippets.

@robkooper
Created October 23, 2021 19:06
Show Gist options
  • Save robkooper/11f9b0fed740bcd6492bed94f6594587 to your computer and use it in GitHub Desktop.
Save robkooper/11f9b0fed740bcd6492bed94f6594587 to your computer and use it in GitHub Desktop.
using diragrams to crate an image of the PEcAn infrastructure
#!/usr/bin/env python
from urllib.request import urlretrieve
from diagrams import Diagram, Cluster, Edge
from diagrams.custom import Custom
from diagrams.generic.storage import Storage
from diagrams.onprem.queue import Rabbitmq
from diagrams.onprem.network import Traefik
from diagrams.onprem.database import Postgresql
from diagrams.programming.language import Php, R, Python
from diagrams.k8s.controlplane import API
from diagrams.oci.monitoring import Telemetry, Workflow
from diagrams.oci.devops import APIService
urlretrieve('https://www.socallinuxexpo.org/sites/default/files/logos/C2qJE7_XEAEn2MQ.png', 'diagram_minio.png')
urlretrieve('https://github.com/PecanProject/bety/raw/develop/app/assets/images/logo-ebi.png', 'diagram_bety.png')
services = {}
with Diagram('PEcAn', direction='TB'):
# external containers
traefik = Traefik('Traefik')
# data
postgres = Postgresql('PostgreSQL')
rabbitmq = Rabbitmq('RabbitMQ')
# storage
storage = Storage('storage')
# minio
minio = Custom('minio', 'diagram_minio.png')
traefik >> minio
minio >> storage
# executor
executor = Workflow('executor')#Custom('executor', 'pecan_logo.png')
executor >> rabbitmq
executor >> postgres
executor >> storage
# rstudio
rstudio = R('rstudio')
traefik >> rstudio
rstudio >> storage
#rstudio >> rabbitmq
rstudio >> postgres
# web frontend
web = Php('web')
traefik >> web
web >> storage
web >> rabbitmq
web >> postgres
# api frontend
api = APIService('api')
traefik >> api
api >> storage
api >> rabbitmq
api >> postgres
# bety
bety = Custom('bety', 'diagram_bety.png')
traefik >> bety
bety >> postgres
# thredds
# monitor tool
monitor = Telemetry('monitor')
traefik >> monitor
rabbitmq >> monitor
monitor >> postgres
# models
with Cluster('models'):
for model in ['sipnet', 'ED2', 'BASGRA', 'maespa']:
m = Custom(model, 'pecan_logo.png')
rabbitmq >> m
m >> storage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment