# Render with: `dot -T png -o zincati-actors.png zincati-actors.dot` digraph actors_messages { newrank = true; fontsize=11; node [shape=box, style="rounded", color=lightgrey; fontname="Arial"; fontsize=11;]; edge[arrowhead="vee"; fontcolor=darkgoldenrod; fontsize=8;]; subgraph cluster_metrics_service { label = "Async Actor:\nmetrics service"; style = dashed; color = deepskyblue; ConnectionStream [label=<Connection>>;]; # Invisble placeholders. InvisMetricsClient:s [style=invis]; InvisBottomMetrics [style=invis]; ConnectionStream:s -> InvisBottomMetrics:n [style=invis]; } subgraph cluster_dbus_server { label = "Sync Actor:\nD-Bus server"; style = dashed; color = deepskyblue; SyncLastRefersh [label="sync fn\nlast_refresh_time()"]; # Invisble placeholders. InvisBottomDbus [style=invis]; } subgraph cluster_update_agent { label = "Async Actor:\nupdate agent"; style = dashed; color = deepskyblue; AsyncLocalDeployments [label="async fn\nlocal_deployments()"]; AsyncAttemptDeploy [label="async fn\nattempt_deploy()"]; AsyncFinalizeDeployment [label="async fn\nfinalize_deployment()"]; RefreshTick [label=<RefreshTick>>]; LastRefresh [label=<LastRefresh>>] } subgraph cluster_rpm_ostree_client { label = "Sync Actor:\nrpm-ostree client"; style = dashed; color = deepskyblue; QueryLocalDeployments [label=<QueryLocalDeployments>>]; StageDeployment [label=<StageDeployment>>]; FinalizeDeployment [label=<FinalizeDeployment>>]; # Invisble placeholders. QueryLocalDeployments:s -> StageDeployment:n [style=invis]; StageDeployment:s -> FinalizeDeployment:n [style=invis]; } # Organize nodes in rows. { rank = same; InvisMetricsClient; SyncLastRefersh; LastRefresh; AsyncLocalDeployments; QueryLocalDeployments } { rank = same; ConnectionStream; RefreshTick; AsyncAttemptDeploy; StageDeployment } { rank = same; InvisBottomMetrics; InvisBottomDbus; AsyncFinalizeDeployment; FinalizeDeployment; } # Edges. InvisMetricsClient:s -> ConnectionStream:n [label="Metrics\nsocket\n connection"]; RefreshTick:ne -> RefreshTick:se; { rank = same; SyncLastRefersh:ne -> LastRefresh:nw; LastRefresh:sw -> SyncLastRefersh:se; } { rank = same; AsyncLocalDeployments:ne -> QueryLocalDeployments:nw; QueryLocalDeployments:sw -> AsyncLocalDeployments:se; } { rank = same; AsyncAttemptDeploy:ne -> StageDeployment:nw; StageDeployment:sw -> AsyncAttemptDeploy:se; } { rank = same; AsyncFinalizeDeployment:ne -> FinalizeDeployment:nw; FinalizeDeployment:sw -> AsyncFinalizeDeployment:se; } }