From c046b8a73b86c09d72b3f43ac325f75f356b7f85 Mon Sep 17 00:00:00 2001 From: Fellipe Wurthmann <47893600+fellipewurthmann@users.noreply.github.com> Date: Sun, 17 May 2020 07:31:02 -0300 Subject: [PATCH] generate tableau and metabase nodes (#142) Co-authored-by: Fellipe --- diagrams/onprem/analytics.py | 8 + docs/nodes/aws.md | 312 ++++++++++++------------ docs/nodes/onprem.md | 137 +++++------ resources/onprem/analytics/metabase.png | Bin 0 -> 21325 bytes resources/onprem/analytics/tableau.png | Bin 0 -> 3138 bytes 5 files changed, 233 insertions(+), 224 deletions(-) create mode 100644 resources/onprem/analytics/metabase.png create mode 100644 resources/onprem/analytics/tableau.png diff --git a/diagrams/onprem/analytics.py b/diagrams/onprem/analytics.py index 7a9554eb..ff553089 100644 --- a/diagrams/onprem/analytics.py +++ b/diagrams/onprem/analytics.py @@ -24,6 +24,10 @@ class Hive(_Analytics): _icon = "hive.png" +class Metabase(_Analytics): + _icon = "metabase.png" + + class Norikra(_Analytics): _icon = "norikra.png" @@ -36,4 +40,8 @@ class Storm(_Analytics): _icon = "storm.png" +class Tableau(_Analytics): + _icon = "tableau.png" + + # Aliases diff --git a/docs/nodes/aws.md b/docs/nodes/aws.md index 7a20e6a4..505c4809 100644 --- a/docs/nodes/aws.md +++ b/docs/nodes/aws.md @@ -5,56 +5,6 @@ title: AWS Node classes list of aws provider. -## aws.analytics - -- **diagrams.aws.analytics.Analytics** -- **diagrams.aws.analytics.Athena** -- **diagrams.aws.analytics.CloudsearchSearchDocuments** -- **diagrams.aws.analytics.Cloudsearch** -- **diagrams.aws.analytics.DataPipeline** -- **diagrams.aws.analytics.ElasticsearchService**, **ES** (alias) -- **diagrams.aws.analytics.EMRCluster** -- **diagrams.aws.analytics.EMRHdfsCluster** -- **diagrams.aws.analytics.EMR** -- **diagrams.aws.analytics.GlueCrawlers** -- **diagrams.aws.analytics.GlueDataCatalog** -- **diagrams.aws.analytics.Glue** -- **diagrams.aws.analytics.KinesisDataAnalytics** -- **diagrams.aws.analytics.KinesisDataFirehose** -- **diagrams.aws.analytics.KinesisDataStreams** -- **diagrams.aws.analytics.KinesisVideoStreams** -- **diagrams.aws.analytics.Kinesis** -- **diagrams.aws.analytics.LakeFormation** -- **diagrams.aws.analytics.ManagedStreamingForKafka** -- **diagrams.aws.analytics.Quicksight** -- **diagrams.aws.analytics.RedshiftDenseComputeNode** -- **diagrams.aws.analytics.RedshiftDenseStorageNode** -- **diagrams.aws.analytics.Redshift** - -## aws.compute - -- **diagrams.aws.compute.ApplicationAutoScaling**, **AutoScaling** (alias) -- **diagrams.aws.compute.Batch** -- **diagrams.aws.compute.Compute** -- **diagrams.aws.compute.EC2ContainerRegistry**, **ECR** (alias) -- **diagrams.aws.compute.EC2** -- **diagrams.aws.compute.ElasticBeanstalk**, **EB** (alias) -- **diagrams.aws.compute.ElasticContainerService**, **ECS** (alias) -- **diagrams.aws.compute.ElasticKubernetesService**, **EKS** (alias) -- **diagrams.aws.compute.Fargate** -- **diagrams.aws.compute.Lambda** -- **diagrams.aws.compute.Lightsail** -- **diagrams.aws.compute.Outposts** -- **diagrams.aws.compute.ServerlessApplicationRepository**, **SAR** (alias) -- **diagrams.aws.compute.ThinkboxDeadline** -- **diagrams.aws.compute.ThinkboxDraft** -- **diagrams.aws.compute.ThinkboxFrost** -- **diagrams.aws.compute.ThinkboxKrakatoa** -- **diagrams.aws.compute.ThinkboxSequoia** -- **diagrams.aws.compute.ThinkboxStoke** -- **diagrams.aws.compute.ThinkboxXmesh** -- **diagrams.aws.compute.VmwareCloudOnAWS** - ## aws.database - **diagrams.aws.database.Aurora** @@ -70,25 +20,27 @@ Node classes list of aws provider. - **diagrams.aws.database.Redshift** - **diagrams.aws.database.Timestream** -## aws.devtools - -- **diagrams.aws.devtools.CloudDevelopmentKit** -- **diagrams.aws.devtools.Cloud9** -- **diagrams.aws.devtools.Codebuild** -- **diagrams.aws.devtools.Codecommit** -- **diagrams.aws.devtools.Codedeploy** -- **diagrams.aws.devtools.Codepipeline** -- **diagrams.aws.devtools.Codestar** -- **diagrams.aws.devtools.CommandLineInterface**, **CLI** (alias) -- **diagrams.aws.devtools.DeveloperTools**, **DevTools** (alias) -- **diagrams.aws.devtools.ToolsAndSdks** -- **diagrams.aws.devtools.XRay** - -## aws.engagement +## aws.security -- **diagrams.aws.engagement.Connect** -- **diagrams.aws.engagement.Pinpoint** -- **diagrams.aws.engagement.SimpleEmailServiceSes**, **SES** (alias) +- **diagrams.aws.security.Artifact** +- **diagrams.aws.security.CertificateManager**, **ACM** (alias) +- **diagrams.aws.security.CloudDirectory** +- **diagrams.aws.security.Cloudhsm**, **CloudHSM** (alias) +- **diagrams.aws.security.Cognito** +- **diagrams.aws.security.DirectoryService**, **DS** (alias) +- **diagrams.aws.security.FirewallManager**, **FMS** (alias) +- **diagrams.aws.security.Guardduty** +- **diagrams.aws.security.IdentityAndAccessManagementIam**, **IAM** (alias) +- **diagrams.aws.security.Inspector** +- **diagrams.aws.security.KeyManagementService**, **KMS** (alias) +- **diagrams.aws.security.Macie** +- **diagrams.aws.security.ResourceAccessManager**, **RAM** (alias) +- **diagrams.aws.security.SecretsManager** +- **diagrams.aws.security.SecurityHub** +- **diagrams.aws.security.SecurityIdentityAndCompliance** +- **diagrams.aws.security.Shield** +- **diagrams.aws.security.SingleSignOn** +- **diagrams.aws.security.WAF** ## aws.integration @@ -101,20 +53,31 @@ Node classes list of aws provider. - **diagrams.aws.integration.SimpleQueueServiceSqs**, **SQS** (alias) - **diagrams.aws.integration.StepFunctions**, **SF** (alias) -## aws.iot +## aws.network -- **diagrams.aws.iot.Freertos**, **FreeRTOS** (alias) -- **diagrams.aws.iot.InternetOfThings** -- **diagrams.aws.iot.Iot1Click** -- **diagrams.aws.iot.IotAnalytics** -- **diagrams.aws.iot.IotButton** -- **diagrams.aws.iot.IotCore** -- **diagrams.aws.iot.IotDeviceDefender** -- **diagrams.aws.iot.IotDeviceManagement** -- **diagrams.aws.iot.IotEvents** -- **diagrams.aws.iot.IotGreengrass** -- **diagrams.aws.iot.IotSitewise** -- **diagrams.aws.iot.IotThingsGraph** +- **diagrams.aws.network.APIGateway** +- **diagrams.aws.network.AppMesh** +- **diagrams.aws.network.ClientVpn** +- **diagrams.aws.network.CloudMap** +- **diagrams.aws.network.CloudFront**, **CF** (alias) +- **diagrams.aws.network.DirectConnect** +- **diagrams.aws.network.ElasticLoadBalancing**, **ELB** (alias) +- **diagrams.aws.network.Endpoint** +- **diagrams.aws.network.GlobalAccelerator**, **GAX** (alias) +- **diagrams.aws.network.InternetGateway** +- **diagrams.aws.network.Nacl** +- **diagrams.aws.network.NATGateway** +- **diagrams.aws.network.NetworkingAndContentDelivery** +- **diagrams.aws.network.PrivateSubnet** +- **diagrams.aws.network.Privatelink** +- **diagrams.aws.network.PublicSubnet** +- **diagrams.aws.network.Route53** +- **diagrams.aws.network.RouteTable** +- **diagrams.aws.network.SiteToSiteVpn** +- **diagrams.aws.network.TransitGateway** +- **diagrams.aws.network.VPCPeering** +- **diagrams.aws.network.VPCRouter** +- **diagrams.aws.network.VPC** ## aws.management @@ -137,19 +100,83 @@ Node classes list of aws provider. - **diagrams.aws.management.TrustedAdvisor** - **diagrams.aws.management.WellArchitectedTool** -## aws.migration +## aws.storage -- **diagrams.aws.migration.ApplicationDiscoveryService**, **ADS** (alias) -- **diagrams.aws.migration.CloudendureMigration**, **CEM** (alias) -- **diagrams.aws.migration.DatabaseMigrationService**, **DMS** (alias) -- **diagrams.aws.migration.Datasync** -- **diagrams.aws.migration.MigrationAndTransfer**, **MAT** (alias) -- **diagrams.aws.migration.MigrationHub** -- **diagrams.aws.migration.ServerMigrationService**, **SMS** (alias) -- **diagrams.aws.migration.SnowballEdge** -- **diagrams.aws.migration.Snowball** -- **diagrams.aws.migration.Snowmobile** -- **diagrams.aws.migration.TransferForSftp** +- **diagrams.aws.storage.Backup** +- **diagrams.aws.storage.CloudendureDisasterRecovery**, **CDR** (alias) +- **diagrams.aws.storage.EFSInfrequentaccessPrimaryBg** +- **diagrams.aws.storage.EFSStandardPrimaryBg** +- **diagrams.aws.storage.ElasticBlockStoreEBS**, **EBS** (alias) +- **diagrams.aws.storage.ElasticFileSystemEFS**, **EFS** (alias) +- **diagrams.aws.storage.FsxForLustre** +- **diagrams.aws.storage.FsxForWindowsFileServer** +- **diagrams.aws.storage.Fsx**, **FSx** (alias) +- **diagrams.aws.storage.S3Glacier** +- **diagrams.aws.storage.SimpleStorageServiceS3**, **S3** (alias) +- **diagrams.aws.storage.SnowballEdge** +- **diagrams.aws.storage.Snowball** +- **diagrams.aws.storage.Snowmobile** +- **diagrams.aws.storage.StorageGateway** +- **diagrams.aws.storage.Storage** + +## aws.iot + +- **diagrams.aws.iot.Freertos**, **FreeRTOS** (alias) +- **diagrams.aws.iot.InternetOfThings** +- **diagrams.aws.iot.Iot1Click** +- **diagrams.aws.iot.IotAnalytics** +- **diagrams.aws.iot.IotButton** +- **diagrams.aws.iot.IotCore** +- **diagrams.aws.iot.IotDeviceDefender** +- **diagrams.aws.iot.IotDeviceManagement** +- **diagrams.aws.iot.IotEvents** +- **diagrams.aws.iot.IotGreengrass** +- **diagrams.aws.iot.IotSitewise** +- **diagrams.aws.iot.IotThingsGraph** + +## aws.engagement + +- **diagrams.aws.engagement.Connect** +- **diagrams.aws.engagement.Pinpoint** +- **diagrams.aws.engagement.SimpleEmailServiceSes**, **SES** (alias) + +## aws.compute + +- **diagrams.aws.compute.ApplicationAutoScaling**, **AutoScaling** (alias) +- **diagrams.aws.compute.Batch** +- **diagrams.aws.compute.Compute** +- **diagrams.aws.compute.EC2ContainerRegistry**, **ECR** (alias) +- **diagrams.aws.compute.EC2** +- **diagrams.aws.compute.ElasticBeanstalk**, **EB** (alias) +- **diagrams.aws.compute.ElasticContainerService**, **ECS** (alias) +- **diagrams.aws.compute.ElasticKubernetesService**, **EKS** (alias) +- **diagrams.aws.compute.Fargate** +- **diagrams.aws.compute.Lambda** +- **diagrams.aws.compute.Lightsail** +- **diagrams.aws.compute.Outposts** +- **diagrams.aws.compute.ServerlessApplicationRepository**, **SAR** (alias) +- **diagrams.aws.compute.ThinkboxDeadline** +- **diagrams.aws.compute.ThinkboxDraft** +- **diagrams.aws.compute.ThinkboxFrost** +- **diagrams.aws.compute.ThinkboxKrakatoa** +- **diagrams.aws.compute.ThinkboxSequoia** +- **diagrams.aws.compute.ThinkboxStoke** +- **diagrams.aws.compute.ThinkboxXmesh** +- **diagrams.aws.compute.VmwareCloudOnAWS** + +## aws.devtools + +- **diagrams.aws.devtools.CloudDevelopmentKit** +- **diagrams.aws.devtools.Cloud9** +- **diagrams.aws.devtools.Codebuild** +- **diagrams.aws.devtools.Codecommit** +- **diagrams.aws.devtools.Codedeploy** +- **diagrams.aws.devtools.Codepipeline** +- **diagrams.aws.devtools.Codestar** +- **diagrams.aws.devtools.CommandLineInterface**, **CLI** (alias) +- **diagrams.aws.devtools.DeveloperTools**, **DevTools** (alias) +- **diagrams.aws.devtools.ToolsAndSdks** +- **diagrams.aws.devtools.XRay** ## aws.ml @@ -173,69 +200,42 @@ Node classes list of aws provider. - **diagrams.aws.ml.Transcribe** - **diagrams.aws.ml.Translate** -## aws.network - -- **diagrams.aws.network.APIGateway** -- **diagrams.aws.network.AppMesh** -- **diagrams.aws.network.ClientVpn** -- **diagrams.aws.network.CloudMap** -- **diagrams.aws.network.CloudFront**, **CF** (alias) -- **diagrams.aws.network.DirectConnect** -- **diagrams.aws.network.ElasticLoadBalancing**, **ELB** (alias) -- **diagrams.aws.network.Endpoint** -- **diagrams.aws.network.GlobalAccelerator**, **GAX** (alias) -- **diagrams.aws.network.InternetGateway** -- **diagrams.aws.network.Nacl** -- **diagrams.aws.network.NATGateway** -- **diagrams.aws.network.NetworkingAndContentDelivery** -- **diagrams.aws.network.PrivateSubnet** -- **diagrams.aws.network.Privatelink** -- **diagrams.aws.network.PublicSubnet** -- **diagrams.aws.network.Route53** -- **diagrams.aws.network.RouteTable** -- **diagrams.aws.network.SiteToSiteVpn** -- **diagrams.aws.network.TransitGateway** -- **diagrams.aws.network.VPCPeering** -- **diagrams.aws.network.VPCRouter** -- **diagrams.aws.network.VPC** - -## aws.security +## aws.migration -- **diagrams.aws.security.Artifact** -- **diagrams.aws.security.CertificateManager**, **ACM** (alias) -- **diagrams.aws.security.CloudDirectory** -- **diagrams.aws.security.Cloudhsm**, **CloudHSM** (alias) -- **diagrams.aws.security.Cognito** -- **diagrams.aws.security.DirectoryService**, **DS** (alias) -- **diagrams.aws.security.FirewallManager**, **FMS** (alias) -- **diagrams.aws.security.Guardduty** -- **diagrams.aws.security.IdentityAndAccessManagementIam**, **IAM** (alias) -- **diagrams.aws.security.Inspector** -- **diagrams.aws.security.KeyManagementService**, **KMS** (alias) -- **diagrams.aws.security.Macie** -- **diagrams.aws.security.ResourceAccessManager**, **RAM** (alias) -- **diagrams.aws.security.SecretsManager** -- **diagrams.aws.security.SecurityHub** -- **diagrams.aws.security.SecurityIdentityAndCompliance** -- **diagrams.aws.security.Shield** -- **diagrams.aws.security.SingleSignOn** -- **diagrams.aws.security.WAF** +- **diagrams.aws.migration.ApplicationDiscoveryService**, **ADS** (alias) +- **diagrams.aws.migration.CloudendureMigration**, **CEM** (alias) +- **diagrams.aws.migration.DatabaseMigrationService**, **DMS** (alias) +- **diagrams.aws.migration.Datasync** +- **diagrams.aws.migration.MigrationAndTransfer**, **MAT** (alias) +- **diagrams.aws.migration.MigrationHub** +- **diagrams.aws.migration.ServerMigrationService**, **SMS** (alias) +- **diagrams.aws.migration.SnowballEdge** +- **diagrams.aws.migration.Snowball** +- **diagrams.aws.migration.Snowmobile** +- **diagrams.aws.migration.TransferForSftp** -## aws.storage +## aws.analytics -- **diagrams.aws.storage.Backup** -- **diagrams.aws.storage.CloudendureDisasterRecovery**, **CDR** (alias) -- **diagrams.aws.storage.EFSInfrequentaccessPrimaryBg** -- **diagrams.aws.storage.EFSStandardPrimaryBg** -- **diagrams.aws.storage.ElasticBlockStoreEBS**, **EBS** (alias) -- **diagrams.aws.storage.ElasticFileSystemEFS**, **EFS** (alias) -- **diagrams.aws.storage.FsxForLustre** -- **diagrams.aws.storage.FsxForWindowsFileServer** -- **diagrams.aws.storage.Fsx**, **FSx** (alias) -- **diagrams.aws.storage.S3Glacier** -- **diagrams.aws.storage.SimpleStorageServiceS3**, **S3** (alias) -- **diagrams.aws.storage.SnowballEdge** -- **diagrams.aws.storage.Snowball** -- **diagrams.aws.storage.Snowmobile** -- **diagrams.aws.storage.StorageGateway** -- **diagrams.aws.storage.Storage** +- **diagrams.aws.analytics.Analytics** +- **diagrams.aws.analytics.Athena** +- **diagrams.aws.analytics.CloudsearchSearchDocuments** +- **diagrams.aws.analytics.Cloudsearch** +- **diagrams.aws.analytics.DataPipeline** +- **diagrams.aws.analytics.ElasticsearchService**, **ES** (alias) +- **diagrams.aws.analytics.EMRCluster** +- **diagrams.aws.analytics.EMRHdfsCluster** +- **diagrams.aws.analytics.EMR** +- **diagrams.aws.analytics.GlueCrawlers** +- **diagrams.aws.analytics.GlueDataCatalog** +- **diagrams.aws.analytics.Glue** +- **diagrams.aws.analytics.KinesisDataAnalytics** +- **diagrams.aws.analytics.KinesisDataFirehose** +- **diagrams.aws.analytics.KinesisDataStreams** +- **diagrams.aws.analytics.KinesisVideoStreams** +- **diagrams.aws.analytics.Kinesis** +- **diagrams.aws.analytics.LakeFormation** +- **diagrams.aws.analytics.ManagedStreamingForKafka** +- **diagrams.aws.analytics.Quicksight** +- **diagrams.aws.analytics.RedshiftDenseComputeNode** +- **diagrams.aws.analytics.RedshiftDenseStorageNode** +- **diagrams.aws.analytics.Redshift** diff --git a/docs/nodes/onprem.md b/docs/nodes/onprem.md index 829bd32e..d49f1557 100644 --- a/docs/nodes/onprem.md +++ b/docs/nodes/onprem.md @@ -5,6 +5,25 @@ title: OnPrem Node classes list of onprem provider. +## onprem.database + +- **diagrams.onprem.database.Cassandra** +- **diagrams.onprem.database.Clickhouse**, **ClickHouse** (alias) +- **diagrams.onprem.database.Cockroachdb**, **CockroachDB** (alias) +- **diagrams.onprem.database.Couchdb**, **CouchDB** (alias) +- **diagrams.onprem.database.Dgraph** +- **diagrams.onprem.database.Hbase**, **HBase** (alias) +- **diagrams.onprem.database.Influxdb**, **InfluxDB** (alias) +- **diagrams.onprem.database.Janusgraph**, **JanusGraph** (alias) +- **diagrams.onprem.database.Mariadb**, **MariaDB** (alias) +- **diagrams.onprem.database.Mongodb**, **MongoDB** (alias) +- **diagrams.onprem.database.Mssql**, **MSSQL** (alias) +- **diagrams.onprem.database.Mysql**, **MySQL** (alias) +- **diagrams.onprem.database.Neo4J** +- **diagrams.onprem.database.Oracle** +- **diagrams.onprem.database.Postgresql**, **PostgreSQL** (alias) +- **diagrams.onprem.database.Scylla** + ## onprem.security - **diagrams.onprem.security.Trivy** @@ -17,28 +36,13 @@ Node classes list of onprem provider. - **diagrams.onprem.ci.Teamcity**, **TC** (alias) - **diagrams.onprem.ci.Travisci**, **TravisCI** (alias) -## onprem.cd - -- **diagrams.onprem.cd.Spinnaker** - -## onprem.mlops - -- **diagrams.onprem.mlops.Polyaxon** - -## onprem.container - -- **diagrams.onprem.container.Docker** -- **diagrams.onprem.container.Rkt**, **RKT** (alias) - ## onprem.etl - **diagrams.onprem.etl.Embulk** -## onprem.vcs +## onprem.mlops -- **diagrams.onprem.vcs.Git** -- **diagrams.onprem.vcs.Github** -- **diagrams.onprem.vcs.Gitlab** +- **diagrams.onprem.mlops.Polyaxon** ## onprem.network @@ -60,62 +64,39 @@ Node classes list of onprem provider. - **diagrams.onprem.network.Vyos**, **VyOS** (alias) - **diagrams.onprem.network.Zookeeper** -## onprem.iac - -- **diagrams.onprem.iac.Ansible** -- **diagrams.onprem.iac.Awx** -- **diagrams.onprem.iac.Terraform** - -## onprem.logging +## onprem.inmemory -- **diagrams.onprem.logging.Fluentd** -- **diagrams.onprem.logging.Logstash**, **LogStash** (alias) -- **diagrams.onprem.logging.Loki** +- **diagrams.onprem.inmemory.Aerospike** +- **diagrams.onprem.inmemory.Hazelcast** +- **diagrams.onprem.inmemory.Memcached** +- **diagrams.onprem.inmemory.Redis** -## onprem.analytics +## onprem.search -- **diagrams.onprem.analytics.Beam** -- **diagrams.onprem.analytics.Flink** -- **diagrams.onprem.analytics.Hadoop** -- **diagrams.onprem.analytics.Hive** -- **diagrams.onprem.analytics.Norikra** -- **diagrams.onprem.analytics.Spark** -- **diagrams.onprem.analytics.Storm** +- **diagrams.onprem.search.Elasticsearch** +- **diagrams.onprem.search.Solr** -## onprem.database +## onprem.container -- **diagrams.onprem.database.Cassandra** -- **diagrams.onprem.database.Clickhouse**, **ClickHouse** (alias) -- **diagrams.onprem.database.Cockroachdb**, **CockroachDB** (alias) -- **diagrams.onprem.database.Couchdb**, **CouchDB** (alias) -- **diagrams.onprem.database.Dgraph** -- **diagrams.onprem.database.Hbase**, **HBase** (alias) -- **diagrams.onprem.database.Influxdb**, **InfluxDB** (alias) -- **diagrams.onprem.database.Janusgraph**, **JanusGraph** (alias) -- **diagrams.onprem.database.Mariadb**, **MariaDB** (alias) -- **diagrams.onprem.database.Mongodb**, **MongoDB** (alias) -- **diagrams.onprem.database.Mssql**, **MSSQL** (alias) -- **diagrams.onprem.database.Mysql**, **MySQL** (alias) -- **diagrams.onprem.database.Neo4J** -- **diagrams.onprem.database.Oracle** -- **diagrams.onprem.database.Postgresql**, **PostgreSQL** (alias) -- **diagrams.onprem.database.Scylla** +- **diagrams.onprem.container.Docker** +- **diagrams.onprem.container.Rkt**, **RKT** (alias) -## onprem.client +## onprem.iac -- **diagrams.onprem.client.Client** -- **diagrams.onprem.client.User** -- **diagrams.onprem.client.Users** +- **diagrams.onprem.iac.Ansible** +- **diagrams.onprem.iac.Awx** +- **diagrams.onprem.iac.Terraform** ## onprem.compute - **diagrams.onprem.compute.Nomad** - **diagrams.onprem.compute.Server** -## onprem.search +## onprem.vcs -- **diagrams.onprem.search.Elasticsearch** -- **diagrams.onprem.search.Solr** +- **diagrams.onprem.vcs.Git** +- **diagrams.onprem.vcs.Github** +- **diagrams.onprem.vcs.Gitlab** ## onprem.workflow @@ -124,10 +105,6 @@ Node classes list of onprem provider. - **diagrams.onprem.workflow.Kubeflow**, **KubeFlow** (alias) - **diagrams.onprem.workflow.Nifi**, **NiFi** (alias) -## onprem.gitops - -- **diagrams.onprem.gitops.Argocd**, **ArgoCD** (alias) - ## onprem.queue - **diagrams.onprem.queue.Activemq**, **ActiveMQ** (alias) @@ -136,12 +113,13 @@ Node classes list of onprem provider. - **diagrams.onprem.queue.Rabbitmq**, **RabbitMQ** (alias) - **diagrams.onprem.queue.Zeromq**, **ZeroMQ** (alias) -## onprem.inmemory +## onprem.cd -- **diagrams.onprem.inmemory.Aerospike** -- **diagrams.onprem.inmemory.Hazelcast** -- **diagrams.onprem.inmemory.Memcached** -- **diagrams.onprem.inmemory.Redis** +- **diagrams.onprem.cd.Spinnaker** + +## onprem.gitops + +- **diagrams.onprem.gitops.Argocd**, **ArgoCD** (alias) ## onprem.monitoring @@ -151,3 +129,26 @@ Node classes list of onprem provider. - **diagrams.onprem.monitoring.Prometheus** - **diagrams.onprem.monitoring.Splunk** - **diagrams.onprem.monitoring.Thanos** + +## onprem.client + +- **diagrams.onprem.client.Client** +- **diagrams.onprem.client.User** +- **diagrams.onprem.client.Users** + +## onprem.logging + +- **diagrams.onprem.logging.Fluentd** +- **diagrams.onprem.logging.Logstash**, **LogStash** (alias) + +## onprem.analytics + +- **diagrams.onprem.analytics.Beam** +- **diagrams.onprem.analytics.Flink** +- **diagrams.onprem.analytics.Hadoop** +- **diagrams.onprem.analytics.Hive** +- **diagrams.onprem.analytics.Metabase** +- **diagrams.onprem.analytics.Norikra** +- **diagrams.onprem.analytics.Spark** +- **diagrams.onprem.analytics.Storm** +- **diagrams.onprem.analytics.Tableau** diff --git a/resources/onprem/analytics/metabase.png b/resources/onprem/analytics/metabase.png new file mode 100644 index 0000000000000000000000000000000000000000..37ee8cf8cb8499def246d21a2ae46fe28c3968a4 GIT binary patch literal 21325 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 W`bLL5C;i>n0~-qm^GY-Cq<;en8Islj literal 0 HcmV?d00001