!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/v2.0.1/C4_Context.puml ' uncomment the following line and comment the first to use locally ' !include C4_Context.puml ' Scope: A single software system. ' Primary elements: Containers within the software system in scope. ' Supporting elements: People and software systems directly connected to the containers. ' Intended audience: Technical people inside and outside of the software development team; including software architects, developers and operations/support staff. ' Colors ' ################################## !global $CONTAINER_BG_COLOR = "#438DD5" !global $CONTAINER_BORDER_COLOR = "#3C7FC0" !global $EXTERNAL_CONTAINER_BG_COLOR = "#B3B3B3" !global $EXTERNAL_CONTAINER_BORDER_COLOR = "#A6A6A6" ' Styling ' ################################## skinparam rectangle<> { StereotypeFontColor $ELEMENT_FONT_COLOR FontColor $ELEMENT_FONT_COLOR BackgroundColor $CONTAINER_BG_COLOR BorderColor $CONTAINER_BORDER_COLOR } skinparam database<> { StereotypeFontColor $ELEMENT_FONT_COLOR FontColor $ELEMENT_FONT_COLOR BackgroundColor $CONTAINER_BG_COLOR BorderColor $CONTAINER_BORDER_COLOR } skinparam queue<> { StereotypeFontColor $ELEMENT_FONT_COLOR FontColor $ELEMENT_FONT_COLOR BackgroundColor $CONTAINER_BG_COLOR BorderColor $CONTAINER_BORDER_COLOR } skinparam rectangle<> { StereotypeFontColor $ELEMENT_FONT_COLOR FontColor $ELEMENT_FONT_COLOR BackgroundColor $EXTERNAL_CONTAINER_BG_COLOR BorderColor $EXTERNAL_CONTAINER_BORDER_COLOR } skinparam database<> { StereotypeFontColor $ELEMENT_FONT_COLOR FontColor $ELEMENT_FONT_COLOR BackgroundColor $EXTERNAL_CONTAINER_BG_COLOR BorderColor $EXTERNAL_CONTAINER_BORDER_COLOR } skinparam queue<> { StereotypeFontColor $ELEMENT_FONT_COLOR FontColor $ELEMENT_FONT_COLOR BackgroundColor $EXTERNAL_CONTAINER_BG_COLOR BorderColor $EXTERNAL_CONTAINER_BORDER_COLOR } ' Layout ' ################################## !procedure LAYOUT_WITH_LEGEND() hide stereotype legend right |**Legend** | |<$PERSON_BG_COLOR> person | |<$SYSTEM_BG_COLOR> system | |<$CONTAINER_BG_COLOR> container | |<$EXTERNAL_PERSON_BG_COLOR> external person | |<$EXTERNAL_SYSTEM_BG_COLOR> external system | |<$EXTERNAL_CONTAINER_BG_COLOR> external container | endlegend !endprocedure ' Elements ' ################################## !function $getContainer($label, $techn, $descr, $sprite) !if ($descr == "") && ($sprite == "") !return '=='+$label+'\n//['+$techn+']//' !endif !if ($descr == "") && ($sprite != "") !return '<$'+$sprite+'>\n=='+$label+'\n//['+$techn+']//' !endif !if ($descr != "") && ($sprite == "") !return '=='+$label+'\n//['+$techn+']//\n\n '+$descr !endif !if ($descr != "") && ($sprite != "") !return '<$'+$sprite+'>\n=='+$label+'\n//['+$techn+']//\n\n '+$descr !endif !endfunction !unquoted procedure Container($alias, $label, $techn, $descr="", $sprite="") rectangle "$getContainer($label, $techn, $descr, $sprite)" <> as $alias !endprocedure !unquoted procedure ContainerDb($alias, $label, $techn, $descr="", $sprite="") database "$getContainer($label, $techn, $descr, $sprite)" <> as $alias !endprocedure !unquoted procedure ContainerQueue($alias, $label, $techn, $descr="", $sprite="") queue "$getContainer($label, $techn, $descr, $sprite)" <> as $alias !endprocedure !unquoted procedure Container_Ext($alias, $label, $techn, $descr="", $sprite="") rectangle "$getContainer($label, $techn, $descr, $sprite)" <> as $alias !endprocedure !unquoted procedure ContainerDb_Ext($alias, $label, $techn, $descr="", $sprite="") database "$getContainer($label, $techn, $descr, $sprite)" <> as $alias !endprocedure !unquoted procedure ContainerQueue_Ext($alias, $label, $techn, $descr="", $sprite="") queue "$getContainer($label, $techn, $descr, $sprite)" <> as $alias !endprocedure ' Boundaries ' ################################## !unquoted function Container_Boundary($alias, $label) !return Boundary($alias, $label, "Container") !endfunction