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  }