landscape/diagram.py

255 lines
10 KiB
Python

from diagrams import Diagram, Cluster, Edge
from diagrams.custom import Custom
from diagrams.saas.chat import Discord
from diagrams.saas.filesharing import Nextcloud
from diagrams.saas.social import Facebook, Twitter
from diagrams.programming.language import Python, Nodejs, Php
from diagrams.programming.framework import Rails
from diagrams.elastic.elasticsearch import Beats, Elasticsearch, Kibana, Logstash
wordpress = "./resources/wordpress.png"
wings = "./resources/wings.png"
trello = "./resources/trello.png"
gitlab_logo = "./resources/gitlab.png"
github_logo = "./resources/github.svg"
mailchimp = "./resources/mailchimp.png"
nginx = "./resources/nginx.png"
www = "./resources/www.png"
instagram = "./resources/instagram.png"
tiktok_logo = "./resources/tiktok.svg"
youtube_logo = "./resources/youtube.png"
linkedin_logo = "./resources/linkedin.svg"
heroku = "./resources/heroku.png"
transip_logo = "./resources/transip.png"
greenhost_logo = "./resources/greenhost.png"
email_logo = "./resources/email.png"
telegram_logo = "./resources/telegram.png"
antivirus_logo = "./resources/antivirus.png"
with Diagram("BIJ1 IT landscape"):
with Cluster("Socials"):
with Cluster("BIJ1 socials landelijk"):
fb = Facebook("facebook.com/www.bij1.org")
tw = Twitter("twitter.com/PolitiekBIJ1")
insta = Custom("instagram.com/politiek_bij1", instagram)
yt = Custom("youtube.com/c/BIJ1Politiek", youtube_logo)
vimeo = Custom("vimeo.com/bij1", "./resources/vimeo.svg")
linkedin = Custom("linkedin.com/company/bij1", linkedin_logo)
with Cluster("BIJ1 local socials"):
local_fb = Facebook("Local FBs")
local_tw = Twitter("Local Twitters")
local_insta = Custom("Local Instagrams", instagram)
local_yt = Custom("Local Youtubes", youtube_logo)
local_li = Custom("Local LinkedIns", linkedin_logo)
with Cluster("Radicaal socials"):
fb_radicaal = Facebook("facebook.com/pjo.radicaal")
tw_radicaal = Twitter("twitter.com/pjo_radicaal")
insta_radicaal = Custom("instagram.com/pjo_radicaal", instagram)
tiktok_radicaal = Custom("tiktok.com/@pjo_radicaal", tiktok_logo)
with Cluster("Hosting"):
transip = Custom("TransIP BIJ1", transip_logo)
transip_kennis = Custom("TransIP Audre Lorde", transip_logo)
transip_intl = Custom("TransIP Clemencia Redmond", transip_logo)
greenhost = Custom("GreenHost BIJ1", greenhost_logo)
greenhost_pjo = Custom("GreenHost Radicaal", greenhost_logo)
hetzner = Custom("Hetzner", "./resources/hetzner.png")
wpengine = Custom("WpEngine", "./resources/wpengine.jpg")
# servercow = Custom("ServerCow", "./resources/servercow.svg")
email = Custom("transip.email (BIJ1)", email_logo)
# mailcow = Custom("MailCow", "./resources/mailcow.svg")
email_intl = Custom("transip.email (Audre Lorde)", email_logo)
email_kennis = Custom("transip.email (Clemencia Redmond)", email_logo)
email_pjo = Custom("webmail.greenhost.nl (Radicaal)", email_logo)
email >> transip
email_intl >> transip_intl
email_kennis >> transip_kennis
email_pjo >> greenhost_pjo
# mailcow >> servercow
heroku_flyer = Custom("bij1-data-dashboard.herokuapp.com", heroku)
heroku_flyer_demo = Custom("bij1-flyer-app.herokuapp.com", heroku)
with Cluster("Web domains"):
bij1_org = Custom("bij1.org", www)
bij1_org >> transip
bij1_org >> email
bij1_net = Custom("bij1.net", www)
bij1_net >> greenhost
radicaal_org = Custom("radicaal.org", www)
radicaal_org >> greenhost_pjo
radicaal_org >> email_pjo
clemenciaredmond_org = Custom("clemenciaredmond.org", www)
clemenciaredmond_org >> transip_kennis
clemenciaredmond_org >> email_kennis
with Cluster("Code repositories"):
gitlab = Custom("gitlab.com/bij1", gitlab_logo)
github = Custom("github.com/bij1", github_logo)
github_data = Custom("github.com/bij1data", github_logo)
gitea = Custom("code.bij1.org", "./resources/gitea.svg")
woodpecker = Custom("build.bij1.org", "./resources/woodpecker.png")
github >> gitlab >> gitea
gitea >> woodpecker
with Cluster("Roadmap"):
trello_campaign = Custom("Trello Campagne Tweede Kamer verkiezingen", trello)
trello_it = Custom("Trello BIJ1 ICT", trello)
gitlab_issues = Custom("Gitlab issues", gitlab_logo)
github_projects = Custom("BIJ1 Data kanban", github_logo)
email >> trello_campaign
github_projects >> github_data
with Cluster("Aanmeldingen Kanban"):
trello_vrijwilligers = Custom("Trello board NieuweBIJ1ers", trello)
localize_trello = Python("localize-trello")
with Cluster("Lokale aanmeldingen"):
local_trello = Custom("trello by region", trello)
trello_vrijwilligers >> localize_trello >> local_trello
trello_campaign >> trello_vrijwilligers
with Cluster("Nieuwsbrieven"):
mailchimp_central = Custom("Landelijke MailChimp", mailchimp)
with Cluster("Lokale nieuwsbrieven"):
mailchimp_central = Custom("Lokale MailChimps", mailchimp)
# with Cluster("ELK"):
# logstash = Logstash("Logstash")
# beats = Beats("Beats")
# elasticsearch = Elasticsearch("Elasticsearch")
# kibana = Kibana("Kibana")
# logstash >> beats
# logstash >> elasticsearch
# logstash >> kibana
# greenhost >> logstash
# greenhost >> beats
# greenhost >> elasticsearch
# greenhost >> kibana
with Cluster("Meetings"):
zoom = Custom("Zoom", "./resources/zoom.svg")
jitsi = Custom("meet.bij1.org", "./resources/jitsi.svg")
bbb = Custom("bigbluebutton.bij1.org", "./resources/bigbluebutton.svg")
bbb >> hetzner
ingang = Rails("vergadering.bij1.org/ingang/")
flowmailer = Custom("FlowMailer", "./resources/flowmailer.svg")
helios = Custom("stemmen.bij1.org", "./resources/helios.png")
coturn = Custom("turn.bij1.org", "./resources/webrtc.png")
coturn >> bbb >> ingang >> helios
ingang >> flowmailer
jitsi >> greenhost
ingang >> greenhost
helios >> greenhost
coturn >> greenhost
with Cluster("Websites"):
proxy = Custom("proxy.bij1.net", nginx)
bij1_wp = Custom("bij1.org", wordpress)
staging_wp = Custom("staging-wp.bij1.net", wordpress)
doemee_wp = Custom("doemee.bij1.org", wordpress)
doemee_wp >> wpengine
doemee_wp >> trello_vrijwilligers
radicaal = Custom("radicaal.bij1.org", "./resources/squarespace.png")
shop = Custom("shop.bij1.org", "./resources/woocommerce.svg")
wings_bij1 = Custom("Wings", wings)
proxy >> bij1_wp
proxy >> greenhost
bij1_wp >> greenhost
staging_wp >> greenhost
shop >> bij1_wp
bij1_wp >> wings_bij1 # donations
with Cluster("Static"):
static = Custom("static.bij1.net", nginx)
links = Custom("links.bij1.org", www)
# actie = Custom("actie.bij1.org", www)
# iktelookmee = Custom("iktelookmee.bij1.org", www)
# wijzijn = Custom("wijzijn.bij1.org", www)
static >> links
# static >> actie
# static >> iktelookmee
# static >> wijzijn
static >> greenhost
with Cluster("Afdelingssites"):
wings_amsterdam = Custom("amsterdam.bij1.org", wings)
wings_rotterdam = Custom("rotterdam.bij1.org", wings)
wings_denhaag = Custom("denhaag.bij1.org", wings)
wings_utrecht = Custom("utrecht.bij1.org", wings)
wings_hilversum = Custom("hilversum.bij1.org", wings)
wp_almere = Custom("almerebij1.org", wordpress)
wp_amsterdam_staging = Custom("amsterdam.wp-staging.bij1.net", wordpress)
wp_amersfoort_staging = Custom("amersfoort.wp-staging.bij1.net", wordpress)
wp_almere_staging = Custom("almere.wp-staging.bij1.net", wordpress)
wp_rotterdam_staging = Custom("rotterdam.wp-staging.bij1.net", wordpress)
wp_hilversum_staging = Custom("hilversum.wp-staging.bij1.net", wordpress)
zapier = Custom("Zapier", "./resources/zapier.png")
doemee_wp >> zapier
airtable = Custom("Airtable", "./resources/airtable.png")
zapier >> airtable
with Cluster("Intranet"):
# kom = Custom("kom.bij1.org", www)
# kom >> transip
# keycloak = Custom("jij.bij1.org", "./resources/keycloak.svg")
cloud = Nextcloud("cloud.bij1.org")
cloud >> greenhost
# kom >> keycloak
# keycloak >> cloud
telegram_2fa = Custom("@bij1cloudbot", telegram_logo)
telegram_2fa >> cloud
clam_av = Custom("ClamAV", antivirus_logo)
clam_av >> cloud
# what shouldn't be our cloud but currently is 😩
gdrive = Custom("Google Drive", "./resources/google-drive.png")
mega = Custom("Mega", "./resources/mega.svg")
with Cluster("CRM"):
civi = Custom("CiviCRM", "./resources/civicrm.svg")
bij1algemeen = Php("bij1algemeen")
bij1rules = Php("bij1rules")
bij1migratie = Php("bij1migratie")
bij1_wp >> civi
airtable >> bij1migratie >> civi
with Cluster("chat"):
with Cluster("Discord"):
discord_bij1 = Discord("BIJ1 Discord (unofficial)")
discord_radicaal = Discord("Radicaal Discord")
with Cluster("Local Discords"):
discords_local = Discord("Local BIJ1 Discords")
fb_group = Facebook("Facebook groep actieve leden")
with Cluster("Signal"):
signal = Custom("signal groups (many)", "./resources/signal.png")
mollie = Custom("Mollie", "./resources/mollie.jpg")
export_mollie = Nodejs("export-mollie")
mollie >> export_mollie >> bij1migratie
terraform = Custom("Terraform", "./resources/terraform.png")
terraform_cloud = Custom("Terraform Cloud", "./resources/terraform-cloud.png")
terraform >> terraform_cloud
canva = Custom("Canva", "./resources/canva.png")
snelstart = Custom("snelstart", "./resources/snelstart.svg")
with Cluster("link collections"):
linktree = Custom("Linktree", "./resources/linktree.png")
linktree >> local_insta
linkbee = Custom("links.bij1.org", "./resources/link.png")
linkbee >> insta