github.com/argoproj/argo-events@v1.9.1/hack/diagram/main.go (about) 1 package main 2 3 import ( 4 "github.com/blushft/go-diagrams/diagram" 5 "github.com/blushft/go-diagrams/nodes/apps" 6 "github.com/blushft/go-diagrams/nodes/k8s" 7 "github.com/blushft/go-diagrams/nodes/oci" 8 "github.com/blushft/go-diagrams/nodes/programming" 9 ) 10 11 func main() { 12 d, err := diagram.New(diagram.Filename("diagram"), diagram.Label("Argo Events"), diagram.Direction("LR")) 13 if err != nil { 14 panic(err) 15 } 16 17 kubeCluster := diagram.NewGroup("kubernetes-cluster").Label("Kubernetes Cluster") 18 19 k8sapi := k8s.Controlplane.Api(diagram.NodeLabel("Kubernetes API")) 20 21 kubeCluster.NewGroup("kube-system"). 22 Label("kube-system namespace"). 23 Add(k8sapi) 24 25 eventSourceController := k8s.Compute.Pod(diagram.NodeLabel("Event Source Controller")) 26 sensorController := k8s.Compute.Pod(diagram.NodeLabel("Sensor Controller")) 27 eventBusController := k8s.Compute.Pod(diagram.NodeLabel("Event Bus Controller")) 28 29 kubeCluster.NewGroup("argo-events"). 30 Label("argo system namespace"). 31 Add(sensorController, eventSourceController, eventBusController) 32 33 d.Connect(eventSourceController, k8sapi).Group(kubeCluster) 34 d.Connect(sensorController, k8sapi).Group(kubeCluster) 35 d.Connect(eventBusController, k8sapi).Group(kubeCluster) 36 37 eventSource := k8s.Compute.Pod(diagram.NodeLabel("Event Source")) 38 eventBus := k8s.Compute.Sts(diagram.NodeLabel("Event Bus")) 39 sensor := k8s.Compute.Pod(diagram.NodeLabel("Sensor")) 40 41 user := apps.Client.User(diagram.NodeLabel("User")) 42 kubectl := programming.Language.Bash(diagram.NodeLabel("Kubectl CLI")) 43 44 d.Connect(kubectl, k8sapi) 45 d.Connect(user, kubectl) 46 47 kubeCluster.NewGroup("user namespace"). 48 Label("user namespace "). 49 Add(eventSource, eventBus, sensor). 50 Connect(eventSource, eventBus). 51 Connect(eventBus, sensor) 52 53 for _, x := range []*diagram.Node{ 54 oci.Network.LoadBalancer(diagram.NodeLabel("Webhook / Stripe")), 55 oci.Monitoring.Alarm(diagram.NodeLabel("Cron Schedule")), 56 apps.Vcs.Git(diagram.NodeLabel("Github / Gitlab")), 57 oci.Storage.FileStorage(diagram.NodeLabel("File: e.g. HDFS, AWS S3")), 58 apps.Queue.Kafka(diagram.NodeLabel("Queue: e.g. Kafka, NATS, GCP PubSub")), 59 oci.Compute.Container(diagram.NodeLabel("Custom")), 60 } { 61 d.Connect(x, eventSource) 62 } 63 64 for _, x := range []*diagram.Node{ 65 oci.Compute.Functions(diagram.NodeLabel("Function: AWS Lambda / Apache OpenWhisk ")), 66 apps.Queue.Kafka(diagram.NodeLabel("Queue: Kafka / NATS")), 67 apps.Gitops.Argocd(diagram.NodeLabel("Argo Workflows")), 68 k8s.Others.Crd(diagram.NodeLabel("Kubernetes Resource")), 69 oci.Network.LoadBalancer(diagram.NodeLabel("HTTP Request")), 70 oci.Compute.Container(diagram.NodeLabel("Custom")), 71 } { 72 d.Connect(sensor, x) 73 } 74 75 if err := d.Render(); err != nil { 76 panic(err) 77 } 78 }