mirror of
https://github.com/bitwarden/server.git
synced 2026-01-31 22:23:18 +08:00
Event Integrations Structurizr POC (#6141)
- Event Integrations Structurizr POC - Diagram updates with PR suggestions - Removed architecture documents and references to them - Added RabbitME detailed view - Added Events component view - Reworked the main server view into two filtered views: Cloud and Self-Hosted. - Added tags "Cloud-Only" and "Self-Hosted-Only" to remove models / relationships that don't apply - Refactored how we build the dynamic views to be more extensible * Re-home event integrations to Dirt; Address Claude feedback / typos * Update diagrams (models/views/relationships) to reflect current state of Event Integrations * Fixed typos and suggestions from Claude * Fixed a few more minor notes from Claude --------- Co-authored-by: Matt Gibson <mgibson@bitwarden.com> Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com> Co-authored-by: Matt Bishop <mbishop@bitwarden.com>
This commit is contained in:
@@ -15,6 +15,7 @@ workspace "Bitwarden Server System" {
|
||||
!include "admin_console/models.dsl"
|
||||
!include "auth/models.dsl"
|
||||
!include "billing/models.dsl"
|
||||
!include "dirt/models.dsl"
|
||||
!include "key_management/models.dsl"
|
||||
!include "platform/models.dsl"
|
||||
!include "tools/models.dsl"
|
||||
@@ -23,10 +24,10 @@ workspace "Bitwarden Server System" {
|
||||
# Include shared level relationships
|
||||
!include "shared.relationships.dsl"
|
||||
|
||||
|
||||
!include "admin_console/relationships.dsl"
|
||||
!include "auth/relationships.dsl"
|
||||
!include "billing/relationships.dsl"
|
||||
!include "dirt/relationships.dsl"
|
||||
!include "key_management/relationships.dsl"
|
||||
!include "platform/relationships.dsl"
|
||||
!include "tools/relationships.dsl"
|
||||
@@ -37,6 +38,7 @@ workspace "Bitwarden Server System" {
|
||||
!include "admin_console/views.dsl"
|
||||
!include "auth/views.dsl"
|
||||
!include "billing/views.dsl"
|
||||
!include "dirt/views.dsl"
|
||||
!include "key_management/views.dsl"
|
||||
!include "platform/views.dsl"
|
||||
!include "tools/views.dsl"
|
||||
@@ -50,6 +52,9 @@ workspace "Bitwarden Server System" {
|
||||
include *
|
||||
}
|
||||
|
||||
filtered Bitwarden_Server exclude "Self-Hosted-Only" "Cloud"
|
||||
filtered Bitwarden_Server exclude "Cloud-Only" "Self-Hosted"
|
||||
|
||||
// This is last to override team styles with common styles
|
||||
!include "shared.views.dsl"
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
294
docs/dirt/event_integrations/models.dsl
Normal file
294
docs/dirt/event_integrations/models.dsl
Normal file
@@ -0,0 +1,294 @@
|
||||
!element server {
|
||||
azure_service_bus = container "Azure Service Bus" {
|
||||
description "AMQP service used for pub/sub architecture for Events and Integrations"
|
||||
tags "Events", "Azure", "ASB", "Cloud-Only"
|
||||
|
||||
event_topic = component "Event Topic" {
|
||||
description "The main entry point for all events in the system. When an event occurs, it is published to this topic."
|
||||
tags "Events", "ASB", "Event Tier"
|
||||
}
|
||||
|
||||
integration_topic = component "Integration Topic" {
|
||||
description "Events that have integrations configured are processed and put on the integration topic with a routing key for their specific integration handler to process."
|
||||
tags "Events", "ASB", "Integrations", "Integration Tier"
|
||||
}
|
||||
|
||||
eventsWriteSub = component "events-write-subscription" {
|
||||
description "Subscription for EventRepositoryHandler to write all events into azure table storage."
|
||||
tags "ASB", "Subscription", "Event Tier"
|
||||
}
|
||||
|
||||
eventsSlackSub = component "events-slack-subscription" {
|
||||
description "Subscription for slack-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Slack integration configured."
|
||||
tags "ASB", "Subscription", "Event Tier", "Slack"
|
||||
}
|
||||
|
||||
eventsWebhookSub = component "events-webhook-subscription" {
|
||||
description "Subscription for webhook-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a webhook integration configured."
|
||||
tags "ASB", "Subscription", "Event Tier", "Webhook"
|
||||
}
|
||||
|
||||
eventsHecSub = component "events-hec-subscription" {
|
||||
description "Subscription for HEC-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a HEC integration configured."
|
||||
tags "ASB", "Subscription", "Event Tier", "HEC"
|
||||
}
|
||||
|
||||
eventsDatadogSub = component "events-datadog-subscription" {
|
||||
description "Subscription for Datadog-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Datadog integration configured."
|
||||
tags "ASB", "Subscription", "Event Tier", "Datadog"
|
||||
}
|
||||
|
||||
eventsTeamsSub = component "events-teams-subscription" {
|
||||
description "Subscription for Microsoft Teams-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Teams integration configured."
|
||||
tags "ASB", "Subscription", "Event Tier", "Teams"
|
||||
}
|
||||
|
||||
integrationSlackSub = component "integration-slack-subscription" {
|
||||
description "Integration-level subscription for Slack IntegrationMessages. Correlation filter: Label = 'slack'."
|
||||
tags "ASB", "Subscription", "Integration Tier", "Slack"
|
||||
}
|
||||
|
||||
integrationWebhookSub = component "integration-webhook-subscription" {
|
||||
description "Integration-level subscription for Webhook IntegrationMessages. Correlation filter: Label = 'webhook'."
|
||||
tags "ASB", "Subscription", "Integration Tier", "Webhook"
|
||||
}
|
||||
|
||||
integrationHecSub = component "integration-hec-subscription" {
|
||||
description "Integration-level subscription for HEC IntegrationMessages. Correlation filter: Label = 'hec'."
|
||||
tags "ASB", "Subscription", "Integration Tier", "HEC"
|
||||
}
|
||||
|
||||
integrationDatadogSub = component "integration-datadog-subscription" {
|
||||
description "Integration-level subscription for Datadog IntegrationMessages. Correlation filter: Label = 'datadog'."
|
||||
tags "ASB", "Subscription", "Integration Tier", "Datadog"
|
||||
}
|
||||
|
||||
integrationTeamsSub = component "integration-teams-subscription" {
|
||||
description "Integration-level subscription for Microsoft Teams IntegrationMessages. Correlation filter: Label = 'teams'."
|
||||
tags "ASB", "Subscription", "Integration Tier", "Teams"
|
||||
}
|
||||
}
|
||||
|
||||
rabbit_mq = container "RabbitMQ" {
|
||||
tags "Events"
|
||||
tags "RabbitMQ"
|
||||
tags "Self-Hosted-Only"
|
||||
|
||||
event_exchange = component "Event Exchange" {
|
||||
tags "Events", "Event Tier"
|
||||
}
|
||||
|
||||
integration_exchange = component "Integration Exchange" {
|
||||
tags "Events", "Integrations", "Integration Tier"
|
||||
}
|
||||
|
||||
eventsWriteQueue = component "events-write-queue" {
|
||||
description "Queue for EventRepositoryHandler to write all events into the database."
|
||||
tags "RabbitMQ", "Queue", "Event Tier"
|
||||
}
|
||||
|
||||
eventsSlackQueue = component "events-slack-queue" {
|
||||
description "Queue for slack-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Slack integration configured."
|
||||
tags "RabbitMQ", "Queue", "Event Tier", "Slack"
|
||||
}
|
||||
|
||||
eventsWebhookQueue = component "events-webhook-queue" {
|
||||
description "Queue for webhook-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a webhook integration configured."
|
||||
tags "RabbitMQ", "Queue", "Event Tier", "Webhook"
|
||||
}
|
||||
|
||||
eventsHecQueue = component "events-hec-queue" {
|
||||
description "Queue for HEC-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a HEC integration configured."
|
||||
tags "RabbitMQ", "Queue", "Event Tier", "HEC"
|
||||
}
|
||||
|
||||
eventsDatadogQueue = component "events-datadog-queue" {
|
||||
description "Queue for Datadog-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Datadog integration configured."
|
||||
tags "RabbitMQ", "Queue", "Event Tier", "Datadog"
|
||||
}
|
||||
|
||||
eventsTeamsQueue = component "events-teams-queue" {
|
||||
description "Queue for Microsoft Teams-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Teams integration configured."
|
||||
tags "RabbitMQ", "Queue", "Event Tier", "Teams"
|
||||
}
|
||||
|
||||
integrationSlackQueue = component "integration-slack-queue" {
|
||||
description "Integration-level queue for Slack IntegrationMessages. Routing key = 'slack'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "Slack"
|
||||
}
|
||||
|
||||
integrationWebhookQueue = component "integration-webhook-queue" {
|
||||
description "Integration-level queue for Webhook IntegrationMessages. Routing key = 'webhook'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "Webhook"
|
||||
}
|
||||
|
||||
integrationHecQueue = component "integration-hec-queue" {
|
||||
description "Integration-level queue for HEC IntegrationMessages. Routing key = 'hec'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "HEC"
|
||||
}
|
||||
|
||||
integrationDatadogQueue = component "integration-datadog-queue" {
|
||||
description "Integration-level queue for Datadog IntegrationMessages. Routing key = 'datadog'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "Datadog"
|
||||
}
|
||||
|
||||
integrationTeamsQueue = component "integration-teams-queue" {
|
||||
description "Integration-level queue for Teams IntegrationMessages. Routing key = 'teams'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "Teams"
|
||||
}
|
||||
|
||||
integrationSlackRetryQueue = component "integration-slack-retry-queue" {
|
||||
description "Integration-level retry queue for Slack IntegrationMessages. Routing key = 'slack-retry'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "Slack"
|
||||
}
|
||||
|
||||
integrationWebhookRetryQueue = component "integration-webhook-retry-queue" {
|
||||
description "Integration-level retry queue for Webhook IntegrationMessages. Routing key = 'webhook-retry'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "Webhook"
|
||||
}
|
||||
|
||||
integrationHecRetryQueue = component "integration-hec-retry-queue" {
|
||||
description "Integration-level retry queue for HEC IntegrationMessages. Routing key = 'hec-retry'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "HEC"
|
||||
}
|
||||
|
||||
integrationDatadogRetryQueue = component "integration-datadog-retry-queue" {
|
||||
description "Integration-level retry queue for Datadog IntegrationMessages. Routing key = 'datadog-retry'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "Datadog"
|
||||
}
|
||||
|
||||
integrationTeamsRetryQueue = component "integration-teams-retry-queue" {
|
||||
description "Integration-level retry queue for Teams IntegrationMessages. Routing key = 'teams-retry'."
|
||||
tags "RabbitMQ", "Queue", "Integration Tier", "Teams"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
!element server.events_processor {
|
||||
tags "Cloud-Only"
|
||||
|
||||
event_repository_handler = component "EventRepositoryHandler" {
|
||||
description "Handles all events, passing them off to the IEventWriteService with the `persistent` key for long term storage."
|
||||
}
|
||||
event_listener = component "AzureServiceBusEventListenerService" {
|
||||
description "Listens to a specific subscription and passes off to a handler to handle events"
|
||||
}
|
||||
integration_listener = component "AzureServiceBusIntegrationListenerService" {
|
||||
description "Listens to a specific subscription and passes off to a handler to handle IntegrationMessages"
|
||||
}
|
||||
event_integration_handler = component "EventIntegrationHandler" {
|
||||
description "Fetches the relevant configurations when an event comes in and hands the event to its paired integration handler for processing."
|
||||
}
|
||||
slack_integration_handler = component "SlackIntegrationHandler" {
|
||||
description "Processes Slack IntegrationMessages, posting them to the configured channels."
|
||||
}
|
||||
teams_integration_handler = component "TeamsIntegrationHandler" {
|
||||
description "Processes Teams IntegrationMessages, posting them to the configured channels."
|
||||
}
|
||||
datadog_integration_handler = component "DatadogIntegrationHandler" {
|
||||
description "Processes Datadog IntegrationMessages, posting them to the configured URI."
|
||||
}
|
||||
webhook_integration_handler = component "WebhookIntegrationHandler" {
|
||||
description "Processes Webhook and HEC IntegrationMessages, posting them to the configured URI."
|
||||
}
|
||||
event_integrations_extended_cache = component "EventIntegrationsExtendedCache" {
|
||||
description "Caches all configurations for integrations so that events can be handled without adding database load."
|
||||
}
|
||||
slack_service = component "SlackService" {
|
||||
description "Handles all API interaction with Slack."
|
||||
}
|
||||
teams_service = component "TeamsService" {
|
||||
description "Handles all API interaction with Teams."
|
||||
}
|
||||
http_client = component "HttpClient" {
|
||||
description "Performs any HTTP functions for Datadog / Webhooks / HEC."
|
||||
}
|
||||
integration_filter_service = component "IntegrationFilterService" {
|
||||
description "Processes filters from configurations to determine if an event should be processed out to the integration."
|
||||
}
|
||||
}
|
||||
|
||||
!element server.events {
|
||||
event_listener = component "RabbitMqEventListenerService" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Listens to a specific queue and passes off to a handler to handle events"
|
||||
}
|
||||
integration_listener = component "RabbitMqIntegrationListenerService" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Listens to a specific queue and passes off to a handler to handle IntegrationMessages"
|
||||
}
|
||||
event_repository_handler = component "EventRepositoryHandler" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Handles all events, passing them off to the IEventWriteService with the `persistent` key for long term storage."
|
||||
}
|
||||
event_integration_handler = component "EventIntegrationHandler" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Fetches the relevant configurations when an event comes in and hands the event to its paired integration handler for processing."
|
||||
}
|
||||
slack_integration_handler = component "SlackIntegrationHandler" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Processes Slack IntegrationMessages, posting them to the configured channels."
|
||||
}
|
||||
teams_integration_handler = component "TeamsIntegrationHandler" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Processes Teams IntegrationMessages, posting them to the configured channels."
|
||||
}
|
||||
datadog_integration_handler = component "DatadogIntegrationHandler" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Processes Datadog IntegrationMessages, posting them to the configured URI."
|
||||
}
|
||||
webhook_integration_handler = component "WebhookIntegrationHandler" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Processes Webhook and HEC IntegrationMessages, posting them to the configured URI."
|
||||
}
|
||||
event_integrations_extended_cache = component "EventIntegrationsExtendedCache" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Caches all configurations for integrations so that events can be handled without adding database load."
|
||||
}
|
||||
slack_service = component "SlackService" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Handles all API interaction with Slack."
|
||||
}
|
||||
teams_service = component "TeamsService" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Handles all API interaction with Teams."
|
||||
}
|
||||
http_client = component "HttpClient" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Performs any HTTP functions for Datadog / Webhooks / HEC."
|
||||
}
|
||||
integration_filter_service = component "IntegrationFilterService" {
|
||||
tags "Self-Hosted-Only"
|
||||
description "Processes filters from configurations to determine if an event should be processed out to the integration."
|
||||
}
|
||||
}
|
||||
|
||||
external_services = softwareSystem "External Services" {
|
||||
tags "External", "Events", "Integrations"
|
||||
description "External services (e.g. SIEM, Slack, et al) that consume events via integrations"
|
||||
|
||||
slack = container "Slack" {
|
||||
tags "External", "Events", "Integrations", "Slack"
|
||||
description "Slack messaging service. Receives messages via configured event integrations."
|
||||
}
|
||||
|
||||
teams = container "Teams" {
|
||||
tags "External", "Events", "Integrations", "Teams"
|
||||
description "Microsoft Teams messaging service. Receives messages via configured event integrations."
|
||||
}
|
||||
|
||||
splunk = container "Splunk" {
|
||||
tags "External", "Events", "Integrations", "Splunk"
|
||||
description "Splunk SIEM service. Receives events via configured event integrations."
|
||||
}
|
||||
|
||||
datadog = container "Datadog" {
|
||||
tags "External", "Events", "Integrations", "Datadog"
|
||||
description "Datadog SIEM service. Receives events via configured event integrations."
|
||||
}
|
||||
|
||||
crowdstrike = container "Crowdstrike Falcon" {
|
||||
tags "External", "Events", "Integrations", "CrowdStrike Falcon", "CrowdStrike"
|
||||
description "CrowdStrike Falcon SIEM service. Receives events via configured event integrations."
|
||||
}
|
||||
}
|
||||
115
docs/dirt/event_integrations/relationships.dsl
Normal file
115
docs/dirt/event_integrations/relationships.dsl
Normal file
@@ -0,0 +1,115 @@
|
||||
# Top Level event publishing
|
||||
server.api -> server.azure_service_bus.event_topic "Sends events to"
|
||||
server.events -> server.azure_service_bus.event_topic "Sends events to"
|
||||
server.identity -> server.azure_service_bus.event_topic "Sends events to"
|
||||
server.sso -> server.azure_service_bus.event_topic "Sends events to"
|
||||
server.scim -> server.azure_service_bus.event_topic "Sends events to"
|
||||
server.api -> server.rabbit_mq.event_exchange "Sends events to"
|
||||
server.events -> server.rabbit_mq.event_exchange "Sends events to"
|
||||
server.identity -> server.rabbit_mq.event_exchange "Sends events to"
|
||||
server.sso -> server.rabbit_mq.event_exchange "Sends events to"
|
||||
server.scim -> server.rabbit_mq.event_exchange "Sends events to"
|
||||
|
||||
# Azure Service Bus topics, subscriptions, and routing
|
||||
eventsWriteSub = server.azure_service_bus.event_topic -> server.azure_service_bus.eventsWriteSub "Subscribes via fan-out"
|
||||
eventsDatadogSub = server.azure_service_bus.event_topic -> server.azure_service_bus.eventsDatadogSub "Subscribes via fan-out"
|
||||
eventsHecSub = server.azure_service_bus.event_topic -> server.azure_service_bus.eventsHecSub "Subscribes via fan-out"
|
||||
eventsSlackSub = server.azure_service_bus.event_topic -> server.azure_service_bus.eventsSlackSub "Subscribes via fan-out"
|
||||
eventsTeamsSub = server.azure_service_bus.event_topic -> server.azure_service_bus.eventsTeamsSub "Subscribes via fan-out"
|
||||
eventsWebhookSub = server.azure_service_bus.event_topic -> server.azure_service_bus.eventsWebhookSub "Subscribes via fan-out"
|
||||
integrationDatadogSub = server.azure_service_bus.integration_topic -> server.azure_service_bus.integrationDatadogSub "Subscribes via filter on Datadog key"
|
||||
integrationHecSub = server.azure_service_bus.integration_topic -> server.azure_service_bus.integrationHecSub "Subscribes via filter on HEC key"
|
||||
integrationSlackSub = server.azure_service_bus.integration_topic -> server.azure_service_bus.integrationSlackSub "Subscribes via filter on Slack key"
|
||||
integrationTeamsSub = server.azure_service_bus.integration_topic -> server.azure_service_bus.integrationTeamsSub "Subscribes via filter on Teams key"
|
||||
integrationWebhookSub = server.azure_service_bus.integration_topic -> server.azure_service_bus.integrationWebhookSub "Subscribes via filter on Webhook key"
|
||||
|
||||
eventsWriteListener = server.events_processor.event_listener -> server.azure_service_bus.eventsWriteSub "Listens to"
|
||||
eventsWriteDelegate = server.events_processor.event_listener -> server.events_processor.event_repository_handler "Delegates to"
|
||||
eventsDatadogListener = server.events_processor.event_listener -> server.azure_service_bus.eventsDatadogSub "Listens to"
|
||||
eventsHecListener = server.events_processor.event_listener -> server.azure_service_bus.eventsHecSub "Listens to"
|
||||
eventsSlackListener = server.events_processor.event_listener -> server.azure_service_bus.eventsSlackSub "Listens to"
|
||||
eventsTeamsListener = server.events_processor.event_listener -> server.azure_service_bus.eventsTeamsSub "Listens to"
|
||||
eventsWebhookListener = server.events_processor.event_listener -> server.azure_service_bus.eventsWebhookSub "Listens to"
|
||||
eventsIntegrationHandlerDelegate = server.events_processor.event_listener -> server.events_processor.event_integration_handler "Delegates to"
|
||||
|
||||
eventIntegrationHandlerPublish = server.events_processor.event_integration_handler -> server.azure_service_bus.integration_topic "Publishes To"
|
||||
eventIntegrationHandlerCache = server.events_processor.event_integration_handler -> server.events_processor.event_integrations_extended_cache "Fetches configurations from"
|
||||
eventIntegrationHandlerDatabase = server.events_processor.event_integration_handler -> server.database "Fetches template details from"
|
||||
cacheDatabaseFetch = server.events_processor.event_integrations_extended_cache -> server.database "Fetches configurations from"
|
||||
eventIntegrationHandlerFilter = server.events_processor.event_integration_handler -> server.events_processor.integration_filter_service "Runs filters"
|
||||
eventRepositoryDatabase = server.events_processor.event_repository_handler -> server.database "Writes events to"
|
||||
|
||||
integrationSlackListener = server.events_processor.integration_listener -> server.azure_service_bus.integrationSlackSub "Listens to"
|
||||
integrationSlackDelegate = server.events_processor.integration_listener -> server.events_processor.slack_integration_handler "Delegates to"
|
||||
integrationWebhookListener = server.events_processor.integration_listener -> server.azure_service_bus.integrationWebhookSub "Listens to"
|
||||
integrationWebhookDelegate = server.events_processor.integration_listener -> server.events_processor.webhook_integration_handler "Delegates to"
|
||||
integrationHecListener = server.events_processor.integration_listener -> server.azure_service_bus.integrationHecSub "Listens to"
|
||||
integrationDatadogListener = server.events_processor.integration_listener -> server.azure_service_bus.integrationDatadogSub "Listens to"
|
||||
integrationDatadogDelegate = server.events_processor.integration_listener -> server.events_processor.datadog_integration_handler "Delegates to"
|
||||
integrationTeamsListener = server.events_processor.integration_listener -> server.azure_service_bus.integrationTeamsSub "Listens to"
|
||||
integrationTeamsDelegate = server.events_processor.integration_listener -> server.events_processor.teams_integration_handler "Delegates to"
|
||||
|
||||
# RabbitMQ exchanges, queues, and routing
|
||||
eventsWriteQueue = server.rabbit_mq.event_exchange -> server.rabbit_mq.eventsWriteQueue "Subscribes via fan-out"
|
||||
eventsDatadogQueue = server.rabbit_mq.event_exchange -> server.rabbit_mq.eventsDatadogQueue "Subscribes via fan-out"
|
||||
eventsHecQueue = server.rabbit_mq.event_exchange -> server.rabbit_mq.eventsHecQueue "Subscribes via fan-out"
|
||||
eventsSlackQueue = server.rabbit_mq.event_exchange -> server.rabbit_mq.eventsSlackQueue "Subscribes via fan-out"
|
||||
eventsTeamsQueue = server.rabbit_mq.event_exchange -> server.rabbit_mq.eventsTeamsQueue "Subscribes via fan-out"
|
||||
eventsWebhookQueue = server.rabbit_mq.event_exchange -> server.rabbit_mq.eventsWebhookQueue "Subscribes via fan-out"
|
||||
integrationDatadogQueue = server.rabbit_mq.integration_exchange -> server.rabbit_mq.integrationDatadogQueue "Subscribes via filter on Datadog key"
|
||||
integrationHecQueue = server.rabbit_mq.integration_exchange -> server.rabbit_mq.integrationHecQueue "Subscribes via filter on HEC key"
|
||||
integrationSlackQueue = server.rabbit_mq.integration_exchange -> server.rabbit_mq.integrationSlackQueue "Subscribes via filter on Slack key"
|
||||
integrationTeamsQueue = server.rabbit_mq.integration_exchange -> server.rabbit_mq.integrationTeamsQueue "Subscribes via filter on Teams key"
|
||||
integrationWebhookQueue = server.rabbit_mq.integration_exchange -> server.rabbit_mq.integrationWebhookQueue "Subscribes via filter on Webhook key"
|
||||
integrationDatadogRetryQueue = server.rabbit_mq.integrationDatadogRetryQueue -> server.rabbit_mq.integrationDatadogQueue "DLQ after configured retry timing"
|
||||
integrationHecRetryQueue = server.rabbit_mq.integrationHecRetryQueue -> server.rabbit_mq.integrationHecQueue "DLQ after configured retry timing"
|
||||
integrationSlackRetryQueue = server.rabbit_mq.integrationSlackRetryQueue -> server.rabbit_mq.integrationSlackQueue "DLQ after configured retry timing"
|
||||
integrationTeamsRetryQueue = server.rabbit_mq.integrationTeamsRetryQueue -> server.rabbit_mq.integrationTeamsQueue "DLQ after configured retry timing"
|
||||
integrationWebhookRetryQueue = server.rabbit_mq.integrationWebhookRetryQueue -> server.rabbit_mq.integrationWebhookQueue "DLQ after configured retry timing"
|
||||
|
||||
eventsWriteListener_events = server.events.event_listener -> server.rabbit_mq.eventsWriteQueue "Listens to"
|
||||
eventsDatadogListener_events = server.events.event_listener -> server.rabbit_mq.eventsDatadogQueue "Listens to"
|
||||
eventsHecListener_events = server.events.event_listener -> server.rabbit_mq.eventsHecQueue "Listens to"
|
||||
eventsSlackListener_events = server.events.event_listener -> server.rabbit_mq.eventsSlackQueue "Listens to"
|
||||
eventsTeamsListener_events = server.events.event_listener -> server.rabbit_mq.eventsTeamsQueue "Listens to"
|
||||
eventsWebhookListener_events = server.events.event_listener -> server.rabbit_mq.eventsWebhookQueue "Listens to"
|
||||
eventsWriteDelegate_events = server.events.event_listener -> server.events.event_repository_handler "Delegates to"
|
||||
|
||||
eventRepositoryDatabase_events = server.events.event_repository_handler -> server.database "Writes events to" tags "Self-Hosted-Only"
|
||||
eventsIntegrationHandlerDelegate_events = server.events.event_listener -> server.events.event_integration_handler "Delegates to"
|
||||
eventIntegrationHandlerDatabase_events = server.events.event_integration_handler -> server.database "Fetches template details from"
|
||||
cacheDatabaseFetch_events = server.events.event_integrations_extended_cache -> server.database "Fetches configurations from" tags "Self-Hosted-Only"
|
||||
eventIntegrationHandlerCache_events = server.events.event_integration_handler -> server.events.event_integrations_extended_cache "Fetches configurations from"
|
||||
eventIntegrationHandlerFilter_events = server.events.event_integration_handler -> server.events.integration_filter_service "Runs filters"
|
||||
eventIntegrationHandlerPublish_events = server.events.event_integration_handler -> server.rabbit_mq.integration_exchange "Publishes To"
|
||||
|
||||
integrationSlackListener_events = server.events.integration_listener -> server.rabbit_mq.integrationSlackQueue "Listens to"
|
||||
integrationWebhookListener_events = server.events.integration_listener -> server.rabbit_mq.integrationWebhookQueue "Listens to"
|
||||
integrationHecListener_events = server.events.integration_listener -> server.rabbit_mq.integrationHecQueue "Listens to"
|
||||
integrationDatadogListener_events = server.events.integration_listener -> server.rabbit_mq.integrationDatadogQueue "Listens to"
|
||||
integrationTeamsListener_events = server.events.integration_listener -> server.rabbit_mq.integrationTeamsQueue "Listens to"
|
||||
integrationSlackDelegate_events = server.events.integration_listener -> server.events.slack_integration_handler "Delegates to"
|
||||
integrationTeamsDelegate_events = server.events.integration_listener -> server.events.teams_integration_handler "Delegates to"
|
||||
integrationDatadogDelegate_events = server.events.integration_listener -> server.events.datadog_integration_handler "Delegates to"
|
||||
integrationWebhookDelegate_events = server.events.integration_listener -> server.events.webhook_integration_handler "Delegates to"
|
||||
|
||||
# External Services
|
||||
slackToSlackService = server.events_processor.slack_integration_handler -> server.events_processor.slack_service "Uses"
|
||||
slackServiceToSlack = server.events_processor.slack_service -> external_services.slack "Publishes configured events to"
|
||||
teamsToTeamsService = server.events_processor.teams_integration_handler -> server.events_processor.teams_service "Uses"
|
||||
teamsServiceToTeams = server.events_processor.teams_service -> external_services.teams "Publishes configured events to"
|
||||
webhookHandlerHttpClient = server.events_processor.webhook_integration_handler -> server.events_processor.http_client "Uses"
|
||||
datadogHandlerHttpClient = server.events_processor.datadog_integration_handler -> server.events_processor.http_client "Uses"
|
||||
httpToCrowdstrike = server.events_processor.http_client -> external_services.crowdstrike "Publishes configured events to"
|
||||
httpToDatadog = server.events_processor.http_client -> external_services.datadog "Publishes configured events to"
|
||||
httpToSplunk = server.events_processor.http_client -> external_services.splunk "Publishes configured events to"
|
||||
|
||||
slackToSlackService_events = server.events.slack_integration_handler -> server.events.slack_service "Uses" tags "Self-Hosted-Only"
|
||||
slackServiceToSlack_events = server.events.slack_service -> external_services.slack "Publishes configured events to" tags "Self-Hosted-Only"
|
||||
teamsToTeamsService_events = server.events.teams_integration_handler -> server.events.teams_service "Uses" tags "Self-Hosted-Only"
|
||||
teamsServiceToTeams_events = server.events.teams_service -> external_services.teams "Publishes configured events to" tags "Self-Hosted-Only"
|
||||
webhookHandlerHttpClient_events = server.events.webhook_integration_handler -> server.events.http_client "Uses" tags "Self-Hosted-Only"
|
||||
datadogHandlerHttpClient_events = server.events.datadog_integration_handler -> server.events.http_client "Uses" tags "Self-Hosted-Only"
|
||||
httpToCrowdstrike_events = server.events.http_client -> external_services.crowdstrike "Publishes configured events to" tags "Self-Hosted-Only"
|
||||
httpToDatadog_events = server.events.http_client -> external_services.datadog "Publishes configured events to" tags "Self-Hosted-Only"
|
||||
httpToSplunk_events = server.events.http_client -> external_services.splunk "Publishes configured events to" tags "Self-Hosted-Only"
|
||||
99
docs/dirt/event_integrations/views.dsl
Normal file
99
docs/dirt/event_integrations/views.dsl
Normal file
@@ -0,0 +1,99 @@
|
||||
component server.azure_service_bus "Azure_Service_Bus" {
|
||||
include *
|
||||
}
|
||||
|
||||
component server.rabbit_mq "RabbitMQ" {
|
||||
include *
|
||||
}
|
||||
|
||||
component server.events_processor "Events_Processor" {
|
||||
include *
|
||||
}
|
||||
|
||||
component server.events "Events" {
|
||||
include *
|
||||
}
|
||||
|
||||
dynamic server.events_processor "Events_Processor_Azure_Service_Bus" "Event Integrations / ASB Detail" {
|
||||
eventsWriteSub
|
||||
eventsHecSub
|
||||
eventsSlackSub
|
||||
eventsWebhookSub
|
||||
eventsWriteListener
|
||||
eventsHecListener
|
||||
eventsSlackListener
|
||||
eventsWebhookListener
|
||||
eventsWriteDelegate
|
||||
eventRepositoryDatabase
|
||||
eventsIntegrationHandlerDelegate
|
||||
eventIntegrationHandlerDatabase
|
||||
eventIntegrationHandlerCache
|
||||
cacheDatabaseFetch
|
||||
eventIntegrationHandlerFilter
|
||||
eventIntegrationHandlerPublish
|
||||
integrationSlackSub
|
||||
integrationTeamsSub
|
||||
integrationDatadogSub
|
||||
integrationWebhookSub
|
||||
integrationHecSub
|
||||
integrationSlackListener
|
||||
integrationTeamsListener
|
||||
integrationDatadogListener
|
||||
integrationWebhookListener
|
||||
integrationHecListener
|
||||
integrationSlackDelegate
|
||||
integrationTeamsDelegate
|
||||
integrationDatadogDelegate
|
||||
integrationWebhookDelegate
|
||||
slackToSlackService
|
||||
slackServiceToSlack
|
||||
teamsToTeamsService
|
||||
teamsServiceToTeams
|
||||
datadogHandlerHttpClient
|
||||
webhookHandlerHttpClient
|
||||
httpToDatadog
|
||||
httpToCrowdstrike
|
||||
httpToSplunk
|
||||
}
|
||||
|
||||
dynamic server.events "Events_RabbitMQ" "Event Integrations / RabbitMQ Detail" {
|
||||
eventsWriteQueue
|
||||
eventsHecQueue
|
||||
eventsSlackQueue
|
||||
eventsWebhookQueue
|
||||
eventsWriteListener_events
|
||||
eventsHecListener_events
|
||||
eventsSlackListener_events
|
||||
eventsWebhookListener_events
|
||||
eventsWriteDelegate_events
|
||||
eventRepositoryDatabase_events
|
||||
eventsIntegrationHandlerDelegate_events
|
||||
eventIntegrationHandlerDatabase_events
|
||||
eventIntegrationHandlerCache_events
|
||||
cacheDatabaseFetch_events
|
||||
eventIntegrationHandlerFilter_events
|
||||
eventIntegrationHandlerPublish_events
|
||||
integrationSlackQueue
|
||||
integrationWebhookQueue
|
||||
integrationHecQueue
|
||||
integrationTeamsQueue
|
||||
integrationDatadogQueue
|
||||
integrationSlackListener_events
|
||||
integrationTeamsListener_events
|
||||
integrationDatadogListener_events
|
||||
integrationWebhookListener_events
|
||||
integrationHecListener_events
|
||||
integrationSlackDelegate_events
|
||||
integrationTeamsDelegate_events
|
||||
integrationDatadogDelegate_events
|
||||
integrationWebhookDelegate_events
|
||||
slackToSlackService_events
|
||||
slackServiceToSlack_events
|
||||
teamsToTeamsService_events
|
||||
teamsServiceToTeams_events
|
||||
webhookHandlerHttpClient_events
|
||||
datadogHandlerHttpClient_events
|
||||
httpToDatadog_events
|
||||
httpToCrowdstrike_events
|
||||
httpToSplunk_events
|
||||
}
|
||||
1
docs/dirt/models.dsl
Normal file
1
docs/dirt/models.dsl
Normal file
@@ -0,0 +1 @@
|
||||
!include "event_integrations/models.dsl"
|
||||
1
docs/dirt/relationships.dsl
Normal file
1
docs/dirt/relationships.dsl
Normal file
@@ -0,0 +1 @@
|
||||
!include "event_integrations/relationships.dsl"
|
||||
1
docs/dirt/views.dsl
Normal file
1
docs/dirt/views.dsl
Normal file
@@ -0,0 +1 @@
|
||||
!include "event_integrations/views.dsl"
|
||||
@@ -10,7 +10,6 @@ bw_controlled = group "Bitwarden Controlled" {
|
||||
customer_success = person "Customer Success" "A customer success engineer. Inspects bitwarden state through the admin portal and internal tools" {
|
||||
tags "Bitwarden Employee"
|
||||
}
|
||||
|
||||
# Root systems
|
||||
server = softwareSystem "Bitwarden Server" {
|
||||
api = container "API" {
|
||||
@@ -28,16 +27,13 @@ bw_controlled = group "Bitwarden Controlled" {
|
||||
}
|
||||
events_processor = container "Events Processor" {
|
||||
tags "Events"
|
||||
tags "Cloud-Only"
|
||||
}
|
||||
|
||||
# Data stores
|
||||
database = container "Database" {
|
||||
tags "Database"
|
||||
}
|
||||
events_queue = container "Events Queue" {
|
||||
tags "Queue"
|
||||
tags "Azure"
|
||||
}
|
||||
mail_queue = container "Mail Queue" {
|
||||
tags "Queue"
|
||||
tags "Azure"
|
||||
@@ -72,7 +68,7 @@ bw_controlled = group "Bitwarden Controlled" {
|
||||
tags "LDAP"
|
||||
tags "Self-Hosted"
|
||||
}
|
||||
key_connector = softwareSystem "Key Connector"
|
||||
key_connector = softwareSystem "Key Connector"
|
||||
}
|
||||
|
||||
self_hosted_instances = softwareSystem "Self-Hosted Instances" {
|
||||
|
||||
@@ -35,12 +35,9 @@ server.api -> server.database "Queries"
|
||||
server.portal -> server.database "Queries"
|
||||
|
||||
# queue Relationships
|
||||
server.api -> server.events_queue "Sends events to"
|
||||
server.events -> server.events_queue "Sends events to"
|
||||
server.api -> server.mail_queue "Sends emails to"
|
||||
server.api -> server.notifications_queue "Sends notifications to"
|
||||
server.notifications -> server.notifications_queue "Sends notifications to"
|
||||
server.events_queue -> server.events_processor "Processes events from"
|
||||
server.mail_queue -> server.portal "Processes emails from"
|
||||
|
||||
# self host phone home
|
||||
|
||||
Reference in New Issue
Block a user