Merge branch 'master' into intellij_live_template
commit
0b1211c5dc
@ -0,0 +1,18 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 60
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- not-stale
|
||||
- pinned
|
||||
- security
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: stale
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
activity in the past 60 days. It will be closed in seven days if no
|
||||
further activity occurs. Thank you for your contributions.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
||||
@ -0,0 +1,26 @@
|
||||
name: Percy Tests
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- '*.puml'
|
||||
- 'percy/**'
|
||||
- '.github/workflows/run-percy-tests.yml'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@master
|
||||
- name: Setup Graphviz
|
||||
uses: ts-graphviz/setup-graphviz@v1
|
||||
- name: Process diagrams
|
||||
uses: Timmy/plantuml-action@v1
|
||||
with:
|
||||
args: '-v percy -o _parsed -DRELATIVE_INCLUDE="."'
|
||||
- name: Upload
|
||||
run: npx percy upload percy/_parsed
|
||||
env:
|
||||
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
|
||||
@ -0,0 +1,178 @@
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include %get_variable_value("RELATIVE_INCLUDE")/C4_Container.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
|
||||
!endif
|
||||
|
||||
' Colors
|
||||
' ##################################
|
||||
|
||||
!global $NODE_FONT_COLOR = "#000000"
|
||||
!global $NODE_BG_COLOR = "#FFFFFF"
|
||||
!global $NODE_BORDER_COLOR = "#A2A2A2"
|
||||
|
||||
' Styling
|
||||
' ##################################
|
||||
|
||||
' orig was without background
|
||||
'UpdateSkinparamsAndLegendEntry("node", $fontColor=$NODE_FONT_COLOR, $borderColor=$NODE_BORDER_COLOR)
|
||||
UpdateSkinparamsAndLegendEntry("node", $bgColor=$NODE_BG_COLOR, $fontColor=$NODE_FONT_COLOR, $borderColor=$NODE_BORDER_COLOR)
|
||||
skinparam rectangle<<node>> {
|
||||
FontStyle normal
|
||||
}
|
||||
|
||||
' Layout
|
||||
' ##################################
|
||||
|
||||
' comment if node should not be added to legend. No dynamic legend extension required
|
||||
SetDefaultLegendEntries("person\nsystem\ncontainer\nexternal_person\nexternal_system\nexternal_container\nnode")
|
||||
|
||||
' Special
|
||||
' ##################################
|
||||
|
||||
' PlantUML supports no automatic line breaks of "PlantUML containers" (C4 Deployment_Node is a "PlantUML container")
|
||||
' therefore Deployment_Node() implements an automatic line break based on spaces (like in all other objects).
|
||||
' If a $type contains \n then the these are used (and no automatic space based line breaks are done)
|
||||
' $NODE_TYPE_MAX_CHAR_WIDTH defines the automatic line break position
|
||||
!global $NODE_TYPE_MAX_CHAR_WIDTH = 35
|
||||
!global $NODE_DESCR_MAX_CHAR_WIDTH=32
|
||||
|
||||
' Elements
|
||||
' ##################################
|
||||
|
||||
!unquoted function $breakType($type, $widthStr)
|
||||
!$width = %intval($widthStr)
|
||||
!$multiLine = ""
|
||||
!if (%strpos($type, "\n") >= 0)
|
||||
!while (%strpos($type, "\n") >= 0)
|
||||
!$brPos = %strpos($type, "\n")
|
||||
!$multiLine = $multiLine + %substr($type, 0, $brPos) + '</size>\n<size:'+$TECHN_FONT_SIZE+'>'
|
||||
!$type = %substr($type, $brPos+2)
|
||||
!endwhile
|
||||
!else
|
||||
!while (%strlen($type)>$width)
|
||||
!$brPos = $width
|
||||
!while ($brPos>0 && %substr($type, $brPos, 1)!= ' ')
|
||||
!$brPos = $brPos - 1
|
||||
!endwhile
|
||||
|
||||
!if ($brPos < 1)
|
||||
!$brPos = %strpos($type, " ")
|
||||
!else
|
||||
!endif
|
||||
|
||||
!if ($brPos > 0)
|
||||
!$multiLine = $multiLine + %substr($type, 0, $brPos) + '</size>\n<size:'+$TECHN_FONT_SIZE+'>'
|
||||
!$type = %substr($type, $brPos + 1)
|
||||
!else
|
||||
!$multiLine = $multiLine+ $type
|
||||
!$type = ""
|
||||
!endif
|
||||
!endwhile
|
||||
!endif
|
||||
!if (%strlen($type)>0)
|
||||
!$multiLine = $multiLine + $type
|
||||
!endif
|
||||
!return $multiLine
|
||||
!endfunction
|
||||
|
||||
!unquoted function $breakDescr($descr, $widthStr)
|
||||
!$width = %intval($widthStr)
|
||||
!$multiLine = ""
|
||||
!if (%strpos($descr, "\n") >= 0)
|
||||
!else
|
||||
!while (%strlen($descr)>$width)
|
||||
!$brPos = $width
|
||||
!while ($brPos>0 && %substr($descr, $brPos, 1)!= ' ')
|
||||
!$brPos = $brPos - 1
|
||||
!endwhile
|
||||
|
||||
!if ($brPos < 1)
|
||||
!$brPos = %strpos($descr, " ")
|
||||
!else
|
||||
!endif
|
||||
|
||||
!if ($brPos > 0)
|
||||
!$multiLine = $multiLine + %substr($descr, 0, $brPos) + "\n"
|
||||
!$descr = %substr($descr, $brPos + 1)
|
||||
!else
|
||||
!$multiLine = $multiLine+ $descr
|
||||
!$descr = ""
|
||||
!endif
|
||||
!endwhile
|
||||
!endif
|
||||
!if (%strlen($descr)>0)
|
||||
!$multiLine = $multiLine + $descr
|
||||
!endif
|
||||
!return $multiLine
|
||||
!endfunction
|
||||
|
||||
!function $getNode($label, $type, $descr, $sprite)
|
||||
!$nodeText = ""
|
||||
!if ($sprite != "")
|
||||
!$nodeText = $nodeText + '<$'+$sprite+'>\n'
|
||||
!endif
|
||||
!$nodeText = $nodeText + '==' + $label
|
||||
!if ($type != "")
|
||||
!$nodeText = $nodeText + '\n<size:' + $TECHN_FONT_SIZE + '>[' + $breakType($type, $NODE_TYPE_MAX_CHAR_WIDTH) + ']</size>'
|
||||
!endif
|
||||
!if ($descr != "")
|
||||
!$nodeText = $nodeText + '\n\n' + $breakDescr($descr, $NODE_DESCR_MAX_CHAR_WIDTH)
|
||||
!endif
|
||||
!return $nodeText
|
||||
!endfunction
|
||||
|
||||
!function $getNode_L($label, $type, $descr, $sprite)
|
||||
!$nodeText = ""
|
||||
!if ($sprite != "")
|
||||
!$nodeText = $nodeText + '<$'+$sprite+'>\l'
|
||||
!endif
|
||||
!$nodeText = $nodeText + '==' + $label
|
||||
!if ($type != "")
|
||||
!$nodeText = $nodeText + '\l<size:' + $TECHN_FONT_SIZE + '>[' + $breakType($type, $NODE_TYPE_MAX_CHAR_WIDTH) + ']</size>'
|
||||
!endif
|
||||
!if ($descr != "")
|
||||
!$nodeText = $nodeText + '\l\l' + $breakDescr($descr, $NODE_DESCR_MAX_CHAR_WIDTH)
|
||||
!endif
|
||||
!return $nodeText
|
||||
!endfunction
|
||||
|
||||
!function $getNode_R($label, $type, $descr, $sprite)
|
||||
!$nodeText = ""
|
||||
!if ($sprite != "")
|
||||
!$nodeText = $nodeText + '<$'+$sprite+'>\r'
|
||||
!endif
|
||||
!$nodeText = $nodeText + '==' + $label
|
||||
!if ($type != "")
|
||||
!$nodeText = $nodeText + '\r<size:' + $TECHN_FONT_SIZE + '>[' + $breakType($type, $NODE_TYPE_MAX_CHAR_WIDTH) + ']</size>'
|
||||
!endif
|
||||
!if ($descr != "")
|
||||
!$nodeText = $nodeText + '\r\r' + $breakDescr($descr, $NODE_DESCR_MAX_CHAR_WIDTH)
|
||||
!endif
|
||||
!return $nodeText
|
||||
!endfunction
|
||||
|
||||
!unquoted procedure Deployment_Node($alias, $label, $type="", $descr="", $sprite="", $tags="")
|
||||
rectangle "$getNode($label, $type, $descr, $sprite)$getProps()" $toStereos("node",$tags) as $alias
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Deployment_Node_L($alias, $label, $type="", $descr="", $sprite="", $tags="")
|
||||
rectangle "$getNode_L($label, $type, $descr, $sprite)$getProps_L()" $toStereos("node",$tags) as $alias
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Deployment_Node_R($alias, $label, $type="", $descr="", $sprite="", $tags="")
|
||||
rectangle "$getNode_R($label, $type, $descr, $sprite)$getProps_R()" $toStereos("node",$tags) as $alias
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Node($alias, $label, $type="", $descr="", $sprite="", $tags="")
|
||||
rectangle "$getNode($label, $type, $descr, $sprite)$getProps()" $toStereos("node",$tags) as $alias
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Node_L($alias, $label, $type="", $descr="", $sprite="", $tags="")
|
||||
rectangle "$getNode_L($label, $type, $descr, $sprite)$getProps_L()" $toStereos("node",$tags) as $alias
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Node_R($alias, $label, $type="", $descr="", $sprite="", $tags="")
|
||||
rectangle "$getNode_R($label, $type, $descr, $sprite)$getProps_R()" $toStereos("node",$tags) as $alias
|
||||
!endprocedure
|
||||
@ -0,0 +1,218 @@
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include %get_variable_value("RELATIVE_INCLUDE")/C4_Component.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
|
||||
!endif
|
||||
|
||||
' Scope: Interactions in an enterprise, software system or container.
|
||||
' Primary and supporting elements: Depends on the diagram scope -
|
||||
' enterprise - people and software systems Related to the enterprise in scope
|
||||
' software system - see system context or container diagrams,
|
||||
' container - see component diagram.
|
||||
' Intended audience: Technical and non-technical people, inside and outside of the software development team.
|
||||
|
||||
' Dynamic diagram introduces (automatically) numbered interactions:
|
||||
' (lowercase) increment($offset=1): increase current index (procedure which has no direct output)
|
||||
' (lowercase) setIndex($new_index): set the new index (procedure which has no direct output)
|
||||
'
|
||||
' (Uppercase) LastIndex(): return the last used index (function which can be used as argument)
|
||||
' (Uppercase) Index($offset=1): returns current index and calculates next index (function which can be used as argument)
|
||||
' (Uppercase) SetIndex($new_index): returns new set index and calculates next index (function which can be used as argument)
|
||||
|
||||
' Index
|
||||
' ##################################
|
||||
|
||||
!$lastIndex = 0
|
||||
!$index = 1
|
||||
|
||||
!procedure increment($offset=1)
|
||||
!$lastIndex = $index
|
||||
!$index = $index + $offset
|
||||
!endprocedure
|
||||
|
||||
!procedure setIndex($new_index)
|
||||
!$lastIndex = $index
|
||||
!$index= $new_index
|
||||
!endprocedure
|
||||
|
||||
!function Index($offset=1)
|
||||
!$lastIndex = $index
|
||||
!$index = $lastIndex + $offset
|
||||
!return $lastIndex
|
||||
!endfunction
|
||||
|
||||
!function LastIndex()
|
||||
!return $lastIndex
|
||||
!endfunction
|
||||
|
||||
!function SetIndex($new_index, $offset=1)
|
||||
!$lastIndex = $new_index
|
||||
!$index = $new_index + $offset
|
||||
!return $lastIndex
|
||||
!endfunction
|
||||
|
||||
' Relationship override
|
||||
' ##################################
|
||||
|
||||
' Relationship
|
||||
' ##################################
|
||||
|
||||
!unquoted procedure Rel_($e_index, $alias1, $alias2, $label, $direction="")
|
||||
$alias1 $direction $alias2 : **$e_index: $label**
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_($e_index, $alias1, $alias2, $label, $techn, $direction="")
|
||||
$alias1 $direction $alias2 : **$e_index: $label**\n//<size:$TECHN_FONT_SIZE>[$techn]</size>//
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex($e_index, $from, $to, $label, $tech)
|
||||
Rel_($e_index, $from, $to, $label, $tech, "-->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_Back($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "<<--")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Back($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "<<--")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Back($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "<<--")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Back($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "<<--")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_Neighbor($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Neighbor($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Neighbor($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Neighbor($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_Back_Neighbor($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "<<-")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Back_Neighbor($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "<<-")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Back_Neighbor($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "<<-")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Back_Neighbor($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "<<-")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_D($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_D($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Down($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Down($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_D($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_D($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Down($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Down($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-DOWN->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_U($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_U($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Up($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Up($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_U($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_U($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Up($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Up($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-UP->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_L($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_L($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Left($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Left($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_L($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_L($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Left($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Left($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-LEFT->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_R($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_R($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Right($from, $to, $label)
|
||||
Rel_(Index(), $from, $to, $label, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Right($from, $to, $label, $techn)
|
||||
Rel_(Index(), $from, $to, $label, $techn, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_R($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_R($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Right($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Right($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-RIGHT->>")
|
||||
!endprocedure
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 685 KiB After Width: | Height: | Size: 4.1 MiB |
@ -0,0 +1,35 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Component.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
|
||||
!endif
|
||||
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Component diagram for Internet Banking System - API Application
|
||||
|
||||
Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
|
||||
Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.")
|
||||
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
||||
|
||||
Container_Boundary(api, "API Application") {
|
||||
Component(sign, "Sign In Controller", "MVC Rest Controlle", "Allows users to sign in to the internet banking system")
|
||||
Component(accounts, "Accounts Summary Controller", "MVC Rest Controlle", "Provides customers with a summory of their bank accounts")
|
||||
Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.")
|
||||
Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.")
|
||||
|
||||
Rel(sign, security, "Uses")
|
||||
Rel(accounts, mbsfacade, "Uses")
|
||||
Rel(security, db, "Read & write to", "JDBC")
|
||||
Rel(mbsfacade, mbs, "Uses", "XML/HTTPS")
|
||||
}
|
||||
|
||||
Rel(spa, sign, "Uses", "JSON/HTTPS")
|
||||
Rel(spa, accounts, "Uses", "JSON/HTTPS")
|
||||
|
||||
Rel(ma, sign, "Uses", "JSON/HTTPS")
|
||||
Rel(ma, accounts, "Uses", "JSON/HTTPS")
|
||||
@enduml
|
||||
@ -0,0 +1,40 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Container.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
|
||||
!endif
|
||||
|
||||
LAYOUT_TOP_DOWN()
|
||||
'LAYOUT_AS_SKETCH()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Container diagram for Internet Banking System
|
||||
|
||||
Person(customer, Customer, "A customer of the bank, with personal bank accounts")
|
||||
|
||||
System_Boundary(c1, "Internet Banking") {
|
||||
Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA")
|
||||
Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser")
|
||||
Container(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device")
|
||||
ContainerDb(database, "Database", "SQL Database", "Stores user registraion information, hased auth credentials, access logs, etc.")
|
||||
Container(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API")
|
||||
}
|
||||
|
||||
System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system")
|
||||
System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
||||
|
||||
Rel(customer, web_app, "Uses", "HTTPS")
|
||||
Rel(customer, spa, "Uses", "HTTPS")
|
||||
Rel(customer, mobile_app, "Uses")
|
||||
|
||||
Rel_Neighbor(web_app, spa, "Delivers")
|
||||
Rel(spa, backend_api, "Uses", "async, JSON/HTTPS")
|
||||
Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS")
|
||||
Rel_Back_Neighbor(database, backend_api, "Reads from and writes to", "sync, JDBC")
|
||||
|
||||
Rel_Back(customer, email_system, "Sends e-mails to")
|
||||
Rel_Back(email_system, backend_api, "Sends e-mails using", "sync, SMTP")
|
||||
Rel_Neighbor(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS")
|
||||
@enduml
|
||||
@ -0,0 +1,53 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Container.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
|
||||
!endif
|
||||
|
||||
skinparam wrapWidth 200
|
||||
skinparam maxMessageSize 200
|
||||
|
||||
LAYOUT_TOP_DOWN()
|
||||
'LAYOUT_AS_SKETCH()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
Person(customer, Customer, "A customer")
|
||||
|
||||
System_Boundary(c1, "Customer Information") {
|
||||
|
||||
Container(app, "Customer Application", "Javascript, Angular", "Allows customers to manage their profile")
|
||||
|
||||
Container(customer_service, "Customer Service", "Java, Spring Boot", "The point of access for customer information")
|
||||
|
||||
Container(message_bus, "Message Bus", "RabbitMQ", "Transport for business events")
|
||||
|
||||
Container(reporting_service, "Reporting Service", "Ruby", "Creates normalised data for reporting purposes")
|
||||
|
||||
Container(audit_service, "Audit Service", "C#/.NET", "Provides organisation-wide auditing facilities")
|
||||
|
||||
ContainerDb(customer_db, "Customer Database", "Oracle 12c", "Stores customer information")
|
||||
|
||||
ContainerDb(reporting_db, "Reporting Database", "MySQL", "Stores a normalized version of all business data for ad hoc reporting purposes")
|
||||
|
||||
Container(audit_store, "Audit Store", "Event Store", "Stores information about events that have happened")
|
||||
}
|
||||
|
||||
Rel(customer, app, "Uses", "HTTPS")
|
||||
|
||||
Rel_R(app, customer_service, "Updates customer information using", "async, JSON/HTTPS")
|
||||
|
||||
Rel_L(customer_service, app, "Sends events to", "WebSocket")
|
||||
Rel_R(customer_service, message_bus, "Sends customer update events to")
|
||||
Rel(customer_service, customer_db, "Stores data in", "JDBC")
|
||||
|
||||
Rel(message_bus, reporting_service, "Sends customer update events to")
|
||||
Rel(message_bus, audit_service, "Sends customer update events to")
|
||||
|
||||
Rel(reporting_service, reporting_db, "Stores data in")
|
||||
Rel(audit_service, audit_store, "Stores events in")
|
||||
|
||||
Lay_R(reporting_service, audit_service)
|
||||
|
||||
@enduml
|
||||
@ -0,0 +1,53 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Container.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
|
||||
!endif
|
||||
|
||||
LAYOUT_TOP_DOWN()
|
||||
'LAYOUT_AS_SKETCH()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
Person_Ext(anonymous_user, "Anonymous User")
|
||||
Person(aggregated_user, "Aggregated User")
|
||||
Person(administration_user, "Administration User")
|
||||
|
||||
System_Boundary(c1, "techtribes.js"){
|
||||
|
||||
Container(web_app, "Web Application", "Java, Spring MVC, Tomcat 7.x", "Allows users to view people, tribes, content, events, jobs, etc. from the local tech, digital and IT sector")
|
||||
|
||||
ContainerDb(rel_db, "Relational Database", "MySQL 5.5.x", "Stores people, tribes, tribe membership, talks, events, jobs, badges, GitHub repos, etc.")
|
||||
|
||||
Container(filesystem, "File System", "FAT32", "Stores search indexes")
|
||||
|
||||
ContainerDb(nosql, "NoSQL Data Store", "MongoDB 2.2.x", "Stores from RSS/Atom feeds (blog posts) and tweets")
|
||||
|
||||
Container(updater, "Updater", "Java 7 Console App", "Updates profiles, tweets, GitHub repos and content on a scheduled basis")
|
||||
}
|
||||
|
||||
System_Ext(twitter, "Twitter")
|
||||
System_Ext(github, "GitHub")
|
||||
System_Ext(blogs, "Blogs")
|
||||
|
||||
|
||||
Rel(anonymous_user, web_app, "Uses", "HTTPS")
|
||||
Rel(aggregated_user, web_app, "Uses", "HTTPS")
|
||||
Rel(administration_user, web_app, "Uses", "HTTPS")
|
||||
|
||||
Rel(web_app, rel_db, "Reads from and writes to", "SQL/JDBC, post 3306")
|
||||
Rel(web_app, filesystem, "Reads from")
|
||||
Rel(web_app, nosql, "Reads from", "MongoDB wire protocol, port 27017")
|
||||
|
||||
Rel_U(updater, rel_db, "Reads from and writes data to", "SQL/JDBC, post 3306")
|
||||
Rel_U(updater, filesystem, "Writes to")
|
||||
Rel_U(updater, nosql, "Reads from and writes to", "MongoDB wire protocol, port 27017")
|
||||
|
||||
Rel(updater, twitter, "Gets profile information and tweets from", "HTTPS")
|
||||
Rel(updater, github, "Gets information about public code repositories from", "HTTPS")
|
||||
Rel(updater, blogs, "Gets content using RSS and Atom feeds from", "HTTP")
|
||||
|
||||
Lay_R(rel_db, filesystem)
|
||||
|
||||
@enduml
|
||||
@ -0,0 +1,45 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Context.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
|
||||
!endif
|
||||
|
||||
'LAYOUT_TOP_DOWN()
|
||||
'LAYOUT_AS_SKETCH()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
title System Landscape diagram for Big Bank plc
|
||||
|
||||
Person(customer, "Personal Banking Customer", "A customer of the bank, with personal bank accounts.")
|
||||
|
||||
Enterprise_Boundary(c0, "Big Bank plc") {
|
||||
System(banking_system, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
|
||||
|
||||
System_Ext(atm, "ATM", "Allows customers to withdraw cash.")
|
||||
System_Ext(mail_system, "E-mail system", "The internal Microsoft Exchange e-mail system.")
|
||||
|
||||
System_Ext(mainframe, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
||||
|
||||
Person_Ext(customer_service, "Customer Service Staff", "Customer service staff within the bank.")
|
||||
Person_Ext(back_office, "Back Office Staff", "Administration and support staff within the bank.")
|
||||
}
|
||||
|
||||
Rel_Neighbor(customer, banking_system, "Uses")
|
||||
Rel_R(customer, atm, "Withdraws cash using")
|
||||
Rel_Back(customer, mail_system, "Sends e-mails to")
|
||||
|
||||
Rel_R(customer, customer_service, "Asks questions to", "Telephone")
|
||||
|
||||
Rel_D(banking_system, mail_system, "Sends e-mail using")
|
||||
Rel_R(atm, mainframe, "Uses")
|
||||
Rel_R(banking_system, mainframe, "Uses")
|
||||
Rel_D(customer_service, mainframe, "Uses")
|
||||
Rel_U(back_office, mainframe, "Uses")
|
||||
|
||||
Lay_D(atm, banking_system)
|
||||
|
||||
Lay_D(atm, customer)
|
||||
Lay_U(mail_system, customer)
|
||||
@enduml
|
||||
@ -0,0 +1,23 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Context.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
|
||||
!endif
|
||||
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
title System Context diagram for Internet Banking System
|
||||
|
||||
Person(customer, "Personal Banking Customer", "A customer of the bank, with personal bank accounts.")
|
||||
System(banking_system, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
|
||||
|
||||
System_Ext(mail_system, "E-mail system", "The internal Microsoft Exchange e-mail system.")
|
||||
System_Ext(mainframe, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
||||
|
||||
Rel(customer, banking_system, "Uses")
|
||||
Rel_Back(customer, mail_system, "Sends e-mails to")
|
||||
Rel_Neighbor(banking_system, mail_system, "Sends e-mails", "SMTP")
|
||||
Rel(banking_system, mainframe, "Uses")
|
||||
@enduml
|
||||
@ -0,0 +1,45 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Context.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
|
||||
!endif
|
||||
|
||||
LAYOUT_TOP_DOWN()
|
||||
'LAYOUT_AS_SKETCH()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
Person(customer, "Customer", "A customer of Widgets Limited.")
|
||||
|
||||
Enterprise_Boundary(c0, "Widgets Limited") {
|
||||
Person(csa, "Customer Service Agent", "Deals with customer enquiries.")
|
||||
|
||||
System(ecommerce, "E-commerce System", "Allows customers to buy widgts online via the widgets.com website.")
|
||||
|
||||
System(fulfilment, "Fulfilment System", "Responsible for processing and shipping of customer orders.")
|
||||
}
|
||||
|
||||
System(taxamo, "Taxamo", "Calculates local tax (for EU B2B customers) and acts as a front-end for Braintree Payments.")
|
||||
|
||||
System(braintree, "Braintree Payments", "Processes credit card payments on behalf of Widgets Limited.")
|
||||
|
||||
System(post, "Jersey Post", "Calculates worldwide shipping costs for packages.")
|
||||
|
||||
Rel_R(customer, csa, "Asks questions to", "Telephone")
|
||||
|
||||
Rel_R(customer, ecommerce, "Places orders for widgets using")
|
||||
|
||||
Rel(csa, ecommerce, "Looks up order information using")
|
||||
|
||||
Rel_R(ecommerce, fulfilment, "Sends order information to")
|
||||
|
||||
Rel_D(fulfilment, post, "Gets shipping charges from")
|
||||
|
||||
Rel_D(ecommerce, taxamo, "Delegates credit card processing to")
|
||||
|
||||
Rel_L(taxamo, braintree, "Uses for credit card processing")
|
||||
|
||||
Lay_D(customer, braintree)
|
||||
|
||||
@enduml
|
||||
@ -0,0 +1,68 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Deployment.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
|
||||
!endif
|
||||
|
||||
AddTagSupport("fallback", $bgColor="#c0c0c0")
|
||||
WithoutPropertyHeader()
|
||||
|
||||
' dynamic legend is used (activated in last line)
|
||||
' LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Deployment Diagram for Internet Banking System - Live
|
||||
|
||||
Deployment_Node(plc, "Live", "Big Bank plc", "Big Bank plc data center"){
|
||||
AddProperty("Location", "London and Reading")
|
||||
Deployment_Node_L(dn, "bigbank-api***\tx8", "Ubuntu 16.04 LTS", "A web server residing in the web server farm, accessed via F5 BIG-IP LTMs."){
|
||||
AddProperty("Java Version", "8")
|
||||
AddProperty("Xmx", "512M")
|
||||
AddProperty("Xms", "1024M")
|
||||
Deployment_Node_L(apache, "Apache Tomcat", "Apache Tomcat 8.x", "An open source Java EE web server."){
|
||||
Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.")
|
||||
}
|
||||
}
|
||||
AddProperty("Location", "London")
|
||||
Deployment_Node_L(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS", "The primary database server."){
|
||||
Deployment_Node_L(oracle, "Oracle - Primary", "Oracle 12c", "The primary, live database server."){
|
||||
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
}
|
||||
}
|
||||
AddProperty("Location", "Reading")
|
||||
Deployment_Node_R(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS", "The secondary database server.", $tags="fallback") {
|
||||
Deployment_Node_R(oracle2, "Oracle - Secondary", "Oracle 12c", "A secondary, standby database server, used for failover purposes only.", $tags="fallback") {
|
||||
ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.", $tags="fallback")
|
||||
}
|
||||
}
|
||||
AddProperty("Location", "London and Reading")
|
||||
Deployment_Node_R(bb2, "bigbank-web***\tx4", "Ubuntu 16.04 LTS", "A web server residing in the web server farm, accessed via F5 BIG-IP LTMs."){
|
||||
AddProperty("Java Version", "8")
|
||||
AddProperty("Xmx", "512M")
|
||||
AddProperty("Xms", "1024M")
|
||||
Deployment_Node_R(apache2, "Apache Tomcat", "Apache Tomcat 8.x", "An open source Java EE web server."){
|
||||
Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
|
||||
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
|
||||
}
|
||||
|
||||
Deployment_Node(comp, "Customer's computer", "Mircosoft Windows of Apple macOS"){
|
||||
Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox, Apple Safari or Microsoft Edge"){
|
||||
Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
|
||||
}
|
||||
}
|
||||
|
||||
Rel(mobile, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel(spa, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel_U(web, spa, "Delivers to the customer's web browser")
|
||||
Rel(api, db, "Reads from and writes to", "JDBC")
|
||||
Rel(api, db2, "Reads from and writes to", "JDBC")
|
||||
Rel_R(db, db2, "Replicates data to")
|
||||
|
||||
SHOW_DYNAMIC_LEGEND()
|
||||
@enduml
|
||||
@ -0,0 +1,57 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Deployment.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
|
||||
!endif
|
||||
|
||||
AddTagSupport("fallback", $bgColor="#c0c0c0")
|
||||
|
||||
' dynamic legend is used (activated in last line)
|
||||
' LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Deployment Diagram for Internet Banking System - Live
|
||||
|
||||
Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){
|
||||
Deployment_Node(dn, "bigbank-api***\tx8", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){
|
||||
Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){
|
||||
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS", $tags="fallback") {
|
||||
Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c", $tags="fallback") {
|
||||
ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.", $tags="fallback")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bb2, "bigbank-web***\tx4", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){
|
||||
Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
|
||||
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
|
||||
}
|
||||
|
||||
Deployment_Node(comp, "Customer's computer", "Mircosoft Windows of Apple macOS"){
|
||||
Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox, Apple Safari or Microsoft Edge"){
|
||||
Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
|
||||
}
|
||||
}
|
||||
|
||||
Rel(mobile, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel(spa, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel_U(web, spa, "Delivers to the customer's web browser")
|
||||
Rel(api, db, "Reads from and writes to", "JDBC")
|
||||
Rel(api, db2, "Reads from and writes to", "JDBC")
|
||||
Rel_R(db, db2, "Replicates data to")
|
||||
|
||||
SHOW_DYNAMIC_LEGEND()
|
||||
@enduml
|
||||
@ -0,0 +1,20 @@
|
||||
@startuml
|
||||
' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally
|
||||
!if %variable_exists("RELATIVE_INCLUDE")
|
||||
!include ./../C4_Dynamic.puml
|
||||
!else
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml
|
||||
!endif
|
||||
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.")
|
||||
Container_Boundary(b, "API Application") {
|
||||
Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.")
|
||||
Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.")
|
||||
}
|
||||
Rel_R(c1, c2, "Submits credentials to", "JSON/HTTPS")
|
||||
Rel(c2, c3, "Calls isAuthenticated() on")
|
||||
Rel_R(c3, c4, "select * from users where username = ?", "JDBC")
|
||||
@enduml
|
||||
@ -0,0 +1,45 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
|
||||
!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons
|
||||
!define FONTAWESOME https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/font-awesome-5
|
||||
' uncomment the following line and comment the first to use locally
|
||||
' !include C4_Container.puml
|
||||
!include DEVICONS/angular.puml
|
||||
!include DEVICONS/dotnet.puml
|
||||
!include DEVICONS/java.puml
|
||||
!include DEVICONS/msql_server.puml
|
||||
!include FONTAWESOME/server.puml
|
||||
!include FONTAWESOME/envelope.puml
|
||||
|
||||
' LAYOUT_TOP_DOWN()
|
||||
' LAYOUT_AS_SKETCH()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Container diagram for Internet Banking System
|
||||
|
||||
Person(customer, Customer, "A customer of the bank, with personal bank accounts")
|
||||
|
||||
System_Boundary(c1, "Internet Banking") {
|
||||
Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA", "java")
|
||||
Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser", "angular")
|
||||
Container(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device", "dotnet")
|
||||
ContainerDb(database, "Database", "SQL Database", "Stores user registraion information, hased auth credentials, access logs, etc.", "msql_server")
|
||||
Container(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API", "server")
|
||||
}
|
||||
|
||||
System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", "envelope")
|
||||
System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
||||
|
||||
Rel(customer, web_app, "Uses", "HTTPS")
|
||||
Rel(customer, spa, "Uses", "HTTPS")
|
||||
Rel(customer, mobile_app, "Uses")
|
||||
|
||||
Rel_Neighbor(web_app, spa, "Delivers")
|
||||
Rel(spa, backend_api, "Uses", "async, JSON/HTTPS")
|
||||
Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS")
|
||||
Rel_Back_Neighbor(database, backend_api, "Reads from and writes to", "sync, JDBC")
|
||||
|
||||
Rel_Back(customer, email_system, "Sends e-mails to")
|
||||
Rel_Back(email_system, backend_api, "Sends e-mails using", "sync, SMTP")
|
||||
Rel_Neighbor(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS")
|
||||
@enduml
|
||||
@ -0,0 +1,65 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
|
||||
' uncomment the following line and comment the first to use locally
|
||||
' !include C4_Deployment.puml
|
||||
|
||||
AddTagSupport("fallback", $bgColor="#c0c0c0")
|
||||
WithoutPropertyHeader()
|
||||
|
||||
' dynamic legend is used (activated in last line)
|
||||
' LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Deployment Diagram for Internet Banking System - Live
|
||||
|
||||
Deployment_Node(plc, "Live", "Big Bank plc", "Big Bank plc data center"){
|
||||
AddProperty("Location", "London and Reading")
|
||||
Deployment_Node_L(dn, "bigbank-api***\tx8", "Ubuntu 16.04 LTS", "A web server residing in the web server farm, accessed via F5 BIG-IP LTMs."){
|
||||
AddProperty("Java Version", "8")
|
||||
AddProperty("Xmx", "512M")
|
||||
AddProperty("Xms", "1024M")
|
||||
Deployment_Node_L(apache, "Apache Tomcat", "Apache Tomcat 8.x", "An open source Java EE web server."){
|
||||
Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.")
|
||||
}
|
||||
}
|
||||
AddProperty("Location", "London")
|
||||
Deployment_Node_L(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS", "The primary database server."){
|
||||
Deployment_Node_L(oracle, "Oracle - Primary", "Oracle 12c", "The primary, live database server."){
|
||||
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
}
|
||||
}
|
||||
AddProperty("Location", "Reading")
|
||||
Deployment_Node_R(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS", "The secondary database server.", $tags="fallback") {
|
||||
Deployment_Node_R(oracle2, "Oracle - Secondary", "Oracle 12c", "A secondary, standby database server, used for failover purposes only.", $tags="fallback") {
|
||||
ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.", $tags="fallback")
|
||||
}
|
||||
}
|
||||
AddProperty("Location", "London and Reading")
|
||||
Deployment_Node_R(bb2, "bigbank-web***\tx4", "Ubuntu 16.04 LTS", "A web server residing in the web server farm, accessed via F5 BIG-IP LTMs."){
|
||||
AddProperty("Java Version", "8")
|
||||
AddProperty("Xmx", "512M")
|
||||
AddProperty("Xms", "1024M")
|
||||
Deployment_Node_R(apache2, "Apache Tomcat", "Apache Tomcat 8.x", "An open source Java EE web server."){
|
||||
Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
|
||||
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
|
||||
}
|
||||
|
||||
Deployment_Node(comp, "Customer's computer", "Mircosoft Windows of Apple macOS"){
|
||||
Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox, Apple Safari or Microsoft Edge"){
|
||||
Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
|
||||
}
|
||||
}
|
||||
|
||||
Rel(mobile, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel(spa, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel_U(web, spa, "Delivers to the customer's web browser")
|
||||
Rel(api, db, "Reads from and writes to", "JDBC")
|
||||
Rel(api, db2, "Reads from and writes to", "JDBC")
|
||||
Rel_R(db, db2, "Replicates data to")
|
||||
|
||||
SHOW_DYNAMIC_LEGEND()
|
||||
@enduml
|
||||
@ -0,0 +1,54 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
|
||||
' uncomment the following line and comment the first to use locally
|
||||
' !include C4_Deployment.puml
|
||||
|
||||
AddTagSupport("fallback", $bgColor="#c0c0c0")
|
||||
|
||||
' dynamic legend is used (activated in last line)
|
||||
' LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Deployment Diagram for Internet Banking System - Live
|
||||
|
||||
Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){
|
||||
Deployment_Node(dn, "bigbank-api***\tx8", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){
|
||||
Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){
|
||||
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS", $tags="fallback") {
|
||||
Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c", $tags="fallback") {
|
||||
ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.", $tags="fallback")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bb2, "bigbank-web***\tx4", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){
|
||||
Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
|
||||
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
|
||||
}
|
||||
|
||||
Deployment_Node(comp, "Customer's computer", "Mircosoft Windows of Apple macOS"){
|
||||
Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox, Apple Safari or Microsoft Edge"){
|
||||
Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
|
||||
}
|
||||
}
|
||||
|
||||
Rel(mobile, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel(spa, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel_U(web, spa, "Delivers to the customer's web browser")
|
||||
Rel(api, db, "Reads from and writes to", "JDBC")
|
||||
Rel(api, db2, "Reads from and writes to", "JDBC")
|
||||
Rel_R(db, db2, "Replicates data to")
|
||||
|
||||
SHOW_DYNAMIC_LEGEND()
|
||||
@enduml
|
||||
@ -0,0 +1,15 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml
|
||||
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.")
|
||||
Container_Boundary(b, "API Application") {
|
||||
Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.")
|
||||
Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.")
|
||||
}
|
||||
Rel_R(c1, c2, "Submits credentials to", "JSON/HTTPS")
|
||||
Rel(c2, c3, "Calls isAuthenticated() on")
|
||||
Rel_R(c3, c4, "select * from users where username = ?", "JDBC")
|
||||
@enduml
|
||||
@ -0,0 +1,35 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml
|
||||
|
||||
LAYOUT_TOP_DOWN()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
Person(customer, Customer, "A customer")
|
||||
System_Boundary(c1, "Customer Information") {
|
||||
Container(app, "Customer Application", "Javascript, Angular", "Allows customers to manage their profile")
|
||||
Container(customer_service, "Customer Service", "Java, Spring Boot", "The point of access for customer information")
|
||||
Container(message_bus, "Message Bus", "RabbitMQ", "Transport for business events")
|
||||
Container(reporting_service, "Reporting Service", "Ruby", "Creates normalised data for reporting purposes")
|
||||
Container(audit_service, "Audit Service", "C#/.NET", "Provides organisation-wide auditing facilities")
|
||||
ContainerDb(customer_db, "Customer Database", "Oracle 12c", "Stores customer information")
|
||||
ContainerDb(reporting_db, "Reporting Database", "MySQL", "Stores a normalized version of all business data for ad hoc reporting purposes")
|
||||
Container(audit_store, "Audit Store", "Event Store", "Stores information about events that have happened")
|
||||
}
|
||||
|
||||
Rel_D(customer, app, "Updates his profile using", "HTTPS")
|
||||
Rel(app, customer_service, "Updates customer information using", "JSON/HTTPS")
|
||||
Rel_R(customer_service, customer_db, "Stores data in", "JDBC")
|
||||
|
||||
RelIndex_D($index-1, customer_service, message_bus, "Sends customer update events to", "async")
|
||||
RelIndex_U($index-2, customer_service, app, "Confirm update to", "async")
|
||||
increment()
|
||||
|
||||
RelIndex_L($index-1, message_bus, reporting_service, "Sends customer update events to", "async")
|
||||
increment()
|
||||
RelIndex($index-1, reporting_service, reporting_db, "Stores data in")
|
||||
|
||||
setIndex(5)
|
||||
RelIndex_R($index-2, message_bus, audit_service, "Sends customer update events to", "async")
|
||||
increment()
|
||||
RelIndex($index-2, audit_service, audit_store, "Stores events in")
|
||||
@enduml
|
||||
@ -0,0 +1,31 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml
|
||||
|
||||
LAYOUT_TOP_DOWN()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
Person(customer, Customer, "A customer")
|
||||
System_Boundary(c1, "Customer Information") {
|
||||
Container(app, "Customer Application", "Javascript, Angular", "Allows customers to manage their profile")
|
||||
Container(customer_service, "Customer Service", "Java, Spring Boot", "The point of access for customer information")
|
||||
Container(message_bus, "Message Bus", "RabbitMQ", "Transport for business events")
|
||||
Container(reporting_service, "Reporting Service", "Ruby", "Creates normalised data for reporting purposes")
|
||||
Container(audit_service, "Audit Service", "C#/.NET", "Provides organisation-wide auditing facilities")
|
||||
ContainerDb(customer_db, "Customer Database", "Oracle 12c", "Stores customer information")
|
||||
ContainerDb(reporting_db, "Reporting Database", "MySQL", "Stores a normalized version of all business data for ad hoc reporting purposes")
|
||||
Container(audit_store, "Audit Store", "Event Store", "Stores information about events that have happened")
|
||||
}
|
||||
|
||||
Rel_D(customer, app, "Updates his profile using", "HTTPS")
|
||||
Rel(app, customer_service, "Updates customer information using", "JSON/HTTPS")
|
||||
Rel_R(customer_service, customer_db, "Stores data in", "JDBC")
|
||||
|
||||
RelIndex_D(Index()-1, customer_service, message_bus, "Sends customer update events to", "async")
|
||||
RelIndex_U(LastIndex()-2, customer_service, app, "Confirm update to", "async")
|
||||
|
||||
RelIndex_L(Index()-1, message_bus, reporting_service, "Sends customer update events to", "async")
|
||||
RelIndex(Index()-1, reporting_service, reporting_db, "Stores data in")
|
||||
|
||||
RelIndex_R(SetIndex(5)-2, message_bus, audit_service, "Sends customer update events to", "async")
|
||||
RelIndex(Index()-2, audit_service, audit_store, "Stores events in")
|
||||
@enduml
|
||||
Loading…
Reference in New Issue