| 6dd74de | | | 1 | <!doctype html> |
| 6dd74de | | | 2 | <html lang="en"> |
| 6dd74de | | | 3 | <head> |
| 6dd74de | | | 4 | <meta charset="utf-8" /> |
| 6dd74de | | | 5 | <meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
| 6dd74de | | | 6 | <title>C4 Mermaid Quick Test Page</title> |
| 6dd74de | | | 7 | <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" /> |
| 6dd74de | | | 8 | <style> |
| 6dd74de | | | 9 | div.mermaid { |
| 6dd74de | | | 10 | /* font-family: 'trebuchet ms', verdana, arial; */ |
| 6dd74de | | | 11 | /*font-family: 'Courier New', Courier, monospace !important;*/ |
| 6dd74de | | | 12 | } |
| 6dd74de | | | 13 | </style> |
| 6dd74de | | | 14 | </head> |
| 6dd74de | | | 15 | |
| 6dd74de | | | 16 | <body> |
| 6dd74de | | | 17 | <h1>C4 context diagram demos</h1> |
| 6dd74de | | | 18 | <pre class="mermaid"> |
| 6dd74de | | | 19 | C4Context |
| 6dd74de | | | 20 | accTitle: C4 context demo |
| 6dd74de | | | 21 | accDescr: Many large C4 diagrams |
| 6dd74de | | | 22 | |
| 6dd74de | | | 23 | title System Context diagram for Internet Banking System |
| 6dd74de | | | 24 | |
| 6dd74de | | | 25 | Enterprise_Boundary(b0, "BankBoundary0") { |
| 6dd74de | | | 26 | Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") |
| 6dd74de | | | 27 | Person(customerB, "Banking Customer B") |
| 6dd74de | | | 28 | Person_Ext(customerC, "Banking Customer C", "desc") |
| 6dd74de | | | 29 | |
| 6dd74de | | | 30 | Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") |
| 6dd74de | | | 31 | |
| 6dd74de | | | 32 | System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") |
| 6dd74de | | | 33 | |
| 6dd74de | | | 34 | Enterprise_Boundary(b1, "BankBoundary") { |
| 6dd74de | | | 35 | |
| 6dd74de | | | 36 | SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") |
| 6dd74de | | | 37 | |
| 6dd74de | | | 38 | System_Boundary(b2, "BankBoundary2") { |
| 6dd74de | | | 39 | System(SystemA, "Banking System A") |
| 6dd74de | | | 40 | System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") |
| 6dd74de | | | 41 | } |
| 6dd74de | | | 42 | |
| 6dd74de | | | 43 | System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") |
| 6dd74de | | | 44 | SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") |
| 6dd74de | | | 45 | |
| 6dd74de | | | 46 | Boundary(b3, "BankBoundary3", "boundary") { |
| 6dd74de | | | 47 | SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") |
| 6dd74de | | | 48 | SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") |
| 6dd74de | | | 49 | } |
| 6dd74de | | | 50 | } |
| 6dd74de | | | 51 | } |
| 6dd74de | | | 52 | |
| 6dd74de | | | 53 | BiRel(customerA, SystemAA, "Uses") |
| 6dd74de | | | 54 | BiRel(SystemAA, SystemE, "Uses") |
| 6dd74de | | | 55 | Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") |
| 6dd74de | | | 56 | Rel(SystemC, customerA, "Sends e-mails to") |
| 6dd74de | | | 57 | |
| 6dd74de | | | 58 | UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") |
| 6dd74de | | | 59 | UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") |
| 6dd74de | | | 60 | UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") |
| 6dd74de | | | 61 | UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") |
| 6dd74de | | | 62 | UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") |
| 6dd74de | | | 63 | |
| 6dd74de | | | 64 | UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") |
| 6dd74de | | | 65 | </pre> |
| 6dd74de | | | 66 | <hr /> |
| 6dd74de | | | 67 | |
| 6dd74de | | | 68 | <pre class="mermaid"> |
| 6dd74de | | | 69 | C4Container |
| 6dd74de | | | 70 | title Container diagram for Internet Banking System |
| 6dd74de | | | 71 | |
| 6dd74de | | | 72 | System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0") |
| 6dd74de | | | 73 | Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") |
| 6dd74de | | | 74 | |
| 6dd74de | | | 75 | Container_Boundary(c1, "Internet Banking") { |
| 6dd74de | | | 76 | Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser") |
| 6dd74de | | | 77 | Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device") |
| 6dd74de | | | 78 | Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA") |
| 6dd74de | | | 79 | ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.") |
| 6dd74de | | | 80 | ContainerDb_Ext(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API") |
| 6dd74de | | | 81 | |
| 6dd74de | | | 82 | } |
| 6dd74de | | | 83 | |
| 6dd74de | | | 84 | System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") |
| 6dd74de | | | 85 | |
| 6dd74de | | | 86 | Rel(customer, web_app, "Uses", "HTTPS") |
| 6dd74de | | | 87 | UpdateRelStyle(customer, web_app, $offsetY="60", $offsetX="90") |
| 6dd74de | | | 88 | Rel(customer, spa, "Uses", "HTTPS") |
| 6dd74de | | | 89 | UpdateRelStyle(customer, spa, $offsetY="-40") |
| 6dd74de | | | 90 | Rel(customer, mobile_app, "Uses") |
| 6dd74de | | | 91 | UpdateRelStyle(customer, mobile_app, $offsetY="-30") |
| 6dd74de | | | 92 | |
| 6dd74de | | | 93 | Rel(web_app, spa, "Delivers") |
| 6dd74de | | | 94 | UpdateRelStyle(web_app, spa, $offsetX="130") |
| 6dd74de | | | 95 | Rel(spa, backend_api, "Uses", "async, JSON/HTTPS") |
| 6dd74de | | | 96 | Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS") |
| 6dd74de | | | 97 | Rel_Back(database, backend_api, "Reads from and writes to", "sync, JDBC") |
| 6dd74de | | | 98 | |
| 6dd74de | | | 99 | Rel(email_system, customer, "Sends e-mails to") |
| 6dd74de | | | 100 | UpdateRelStyle(email_system, customer, $offsetX="-45") |
| 6dd74de | | | 101 | Rel(backend_api, email_system, "Sends e-mails using", "sync, SMTP") |
| 6dd74de | | | 102 | UpdateRelStyle(backend_api, email_system, $offsetY="-60") |
| 6dd74de | | | 103 | Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS") |
| 6dd74de | | | 104 | UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140") |
| 6dd74de | | | 105 | </pre> |
| 6dd74de | | | 106 | <hr /> |
| 6dd74de | | | 107 | |
| 6dd74de | | | 108 | <pre class="mermaid"> |
| 6dd74de | | | 109 | C4Component |
| 6dd74de | | | 110 | title Component diagram for Internet Banking System - API Application |
| 6dd74de | | | 111 | |
| 6dd74de | | | 112 | Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.") |
| 6dd74de | | | 113 | Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile device.") |
| 6dd74de | | | 114 | ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") |
| 6dd74de | | | 115 | System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") |
| 6dd74de | | | 116 | |
| 6dd74de | | | 117 | Container_Boundary(api, "API Application") { |
| 6dd74de | | | 118 | Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system") |
| 6dd74de | | | 119 | Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts") |
| 6dd74de | | | 120 | Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.") |
| 6dd74de | | | 121 | Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.") |
| 6dd74de | | | 122 | |
| 6dd74de | | | 123 | Rel(sign, security, "Uses") |
| 6dd74de | | | 124 | Rel(accounts, mbsfacade, "Uses") |
| 6dd74de | | | 125 | Rel(security, db, "Read & write to", "JDBC") |
| 6dd74de | | | 126 | Rel(mbsfacade, mbs, "Uses", "XML/HTTPS") |
| 6dd74de | | | 127 | } |
| 6dd74de | | | 128 | |
| 6dd74de | | | 129 | Rel_Back(spa, sign, "Uses", "JSON/HTTPS") |
| 6dd74de | | | 130 | Rel(spa, accounts, "Uses", "JSON/HTTPS") |
| 6dd74de | | | 131 | |
| 6dd74de | | | 132 | Rel(ma, sign, "Uses", "JSON/HTTPS") |
| 6dd74de | | | 133 | Rel(ma, accounts, "Uses", "JSON/HTTPS") |
| 6dd74de | | | 134 | |
| 6dd74de | | | 135 | UpdateRelStyle(spa, sign, $offsetY="-40") |
| 6dd74de | | | 136 | UpdateRelStyle(spa, accounts, $offsetX="40", $offsetY="40") |
| 6dd74de | | | 137 | |
| 6dd74de | | | 138 | UpdateRelStyle(ma, sign, $offsetX="-90", $offsetY="40") |
| 6dd74de | | | 139 | UpdateRelStyle(ma, accounts, $offsetY="-40") |
| 6dd74de | | | 140 | |
| 6dd74de | | | 141 | UpdateRelStyle(sign, security, $offsetX="-160", $offsetY="10") |
| 6dd74de | | | 142 | UpdateRelStyle(accounts, mbsfacade, $offsetX="140", $offsetY="10") |
| 6dd74de | | | 143 | UpdateRelStyle(security, db, $offsetY="-40") |
| 6dd74de | | | 144 | UpdateRelStyle(mbsfacade, mbs, $offsetY="-40") |
| 6dd74de | | | 145 | </pre> |
| 6dd74de | | | 146 | <hr /> |
| 6dd74de | | | 147 | |
| 6dd74de | | | 148 | <pre class="mermaid"> |
| 6dd74de | | | 149 | C4Dynamic |
| 6dd74de | | | 150 | title Dynamic diagram for Internet Banking System - API Application |
| 6dd74de | | | 151 | |
| 6dd74de | | | 152 | ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") |
| 6dd74de | | | 153 | Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.") |
| 6dd74de | | | 154 | Container_Boundary(b, "API Application") { |
| 6dd74de | | | 155 | Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.") |
| 6dd74de | | | 156 | Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.") |
| 6dd74de | | | 157 | } |
| 6dd74de | | | 158 | Rel(c1, c2, "Submits credentials to", "JSON/HTTPS") |
| 6dd74de | | | 159 | Rel(c2, c3, "Calls isAuthenticated() on") |
| 6dd74de | | | 160 | Rel(c3, c4, "select * from users where username = ?", "JDBC") |
| 6dd74de | | | 161 | |
| 6dd74de | | | 162 | UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40") |
| 6dd74de | | | 163 | UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60") |
| 6dd74de | | | 164 | UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10") |
| 6dd74de | | | 165 | </pre> |
| 6dd74de | | | 166 | <hr /> |
| 6dd74de | | | 167 | |
| 6dd74de | | | 168 | <pre class="mermaid"> |
| 6dd74de | | | 169 | C4Deployment |
| 6dd74de | | | 170 | title Deployment Diagram for Internet Banking System - Live |
| 6dd74de | | | 171 | |
| 6dd74de | | | 172 | Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){ |
| 6dd74de | | | 173 | Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.") |
| 6dd74de | | | 174 | } |
| 6dd74de | | | 175 | |
| 6dd74de | | | 176 | Deployment_Node(comp, "Customer's computer", "Microsoft Windows or Apple macOS"){ |
| 6dd74de | | | 177 | Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,<br/> Apple Safari or Microsoft Edge"){ |
| 6dd74de | | | 178 | Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.") |
| 6dd74de | | | 179 | } |
| 6dd74de | | | 180 | } |
| 6dd74de | | | 181 | |
| 6dd74de | | | 182 | Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){ |
| 6dd74de | | | 183 | Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){ |
| 6dd74de | | | 184 | Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){ |
| 6dd74de | | | 185 | Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.") |
| 6dd74de | | | 186 | } |
| 6dd74de | | | 187 | } |
| 6dd74de | | | 188 | Deployment_Node(bb2, "bigbank-web*** x4", "Ubuntu 16.04 LTS"){ |
| 6dd74de | | | 189 | Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){ |
| 6dd74de | | | 190 | Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.") |
| 6dd74de | | | 191 | } |
| 6dd74de | | | 192 | } |
| 6dd74de | | | 193 | Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){ |
| 6dd74de | | | 194 | Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){ |
| 6dd74de | | | 195 | ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") |
| 6dd74de | | | 196 | } |
| 6dd74de | | | 197 | } |
| 6dd74de | | | 198 | Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS") { |
| 6dd74de | | | 199 | Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c") { |
| 6dd74de | | | 200 | ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") |
| 6dd74de | | | 201 | } |
| 6dd74de | | | 202 | } |
| 6dd74de | | | 203 | } |
| 6dd74de | | | 204 | |
| 6dd74de | | | 205 | Rel(mobile, api, "Makes API calls to", "json/HTTPS") |
| 6dd74de | | | 206 | Rel(spa, api, "Makes API calls to", "json/HTTPS") |
| 6dd74de | | | 207 | Rel_U(web, spa, "Delivers to the customer's web browser") |
| 6dd74de | | | 208 | Rel(api, db, "Reads from and writes to", "JDBC") |
| 6dd74de | | | 209 | Rel(api, db2, "Reads from and writes to", "JDBC") |
| 6dd74de | | | 210 | Rel_R(db, db2, "Replicates data to") |
| 6dd74de | | | 211 | |
| 6dd74de | | | 212 | UpdateRelStyle(spa, api, $offsetY="-40") |
| 6dd74de | | | 213 | UpdateRelStyle(web, spa, $offsetY="-40") |
| 6dd74de | | | 214 | UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5") |
| 6dd74de | | | 215 | UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20") |
| 6dd74de | | | 216 | UpdateRelStyle(db, db2, $offsetY="-10") |
| 6dd74de | | | 217 | </pre> |
| 6dd74de | | | 218 | <hr /> |
| 6dd74de | | | 219 | |
| 6dd74de | | | 220 | <script type="module"> |
| 6dd74de | | | 221 | import mermaid from './mermaid.esm.mjs'; |
| 6dd74de | | | 222 | const ALLOWED_TAGS = [ |
| 6dd74de | | | 223 | 'a', |
| 6dd74de | | | 224 | 'b', |
| 6dd74de | | | 225 | 'blockquote', |
| 6dd74de | | | 226 | 'br', |
| 6dd74de | | | 227 | 'dd', |
| 6dd74de | | | 228 | 'div', |
| 6dd74de | | | 229 | 'dl', |
| 6dd74de | | | 230 | 'dt', |
| 6dd74de | | | 231 | 'em', |
| 6dd74de | | | 232 | 'foreignObject', |
| 6dd74de | | | 233 | 'h1', |
| 6dd74de | | | 234 | 'h2', |
| 6dd74de | | | 235 | 'h3', |
| 6dd74de | | | 236 | 'h4', |
| 6dd74de | | | 237 | 'h5', |
| 6dd74de | | | 238 | 'h6', |
| 6dd74de | | | 239 | 'h7', |
| 6dd74de | | | 240 | 'h8', |
| 6dd74de | | | 241 | 'hr', |
| 6dd74de | | | 242 | 'i', |
| 6dd74de | | | 243 | 'li', |
| 6dd74de | | | 244 | 'ul', |
| 6dd74de | | | 245 | 'ol', |
| 6dd74de | | | 246 | 'p', |
| 6dd74de | | | 247 | 'pre', |
| 6dd74de | | | 248 | 'span', |
| 6dd74de | | | 249 | 'strike', |
| 6dd74de | | | 250 | 'strong', |
| 6dd74de | | | 251 | 'table', |
| 6dd74de | | | 252 | 'tbody', |
| 6dd74de | | | 253 | 'td', |
| 6dd74de | | | 254 | 'tfoot', |
| 6dd74de | | | 255 | 'th', |
| 6dd74de | | | 256 | 'thead', |
| 6dd74de | | | 257 | 'tr', |
| 6dd74de | | | 258 | ]; |
| 6dd74de | | | 259 | mermaid.initialize({ |
| 6dd74de | | | 260 | theme: 'forest', |
| 6dd74de | | | 261 | // themeCSS: '.node rect { fill: red; }', |
| 6dd74de | | | 262 | logLevel: 3, |
| 6dd74de | | | 263 | securityLevel: 'loose', |
| 6dd74de | | | 264 | flowchart: { curve: 'basis' }, |
| 6dd74de | | | 265 | gantt: { axisFormat: '%m/%d/%Y' }, |
| 6dd74de | | | 266 | sequence: { actorMargin: 50 }, |
| 6dd74de | | | 267 | dompurifyConfig: { |
| 6dd74de | | | 268 | USE_PROFILES: { |
| 6dd74de | | | 269 | svg: true, |
| 6dd74de | | | 270 | }, |
| 6dd74de | | | 271 | ADD_TAGS: ALLOWED_TAGS, |
| 6dd74de | | | 272 | ADD_ATTR: ['transform-origin'], |
| 6dd74de | | | 273 | }, |
| 6dd74de | | | 274 | // sequenceDiagram: { actorMargin: 300 } // deprecated |
| 6dd74de | | | 275 | }); |
| 6dd74de | | | 276 | |
| 6dd74de | | | 277 | function testClick(nodeId) { |
| 6dd74de | | | 278 | console.log('clicked', nodeId); |
| 6dd74de | | | 279 | let originalBgColor = document.querySelector('body').style.backgroundColor; |
| 6dd74de | | | 280 | document.querySelector('body').style.backgroundColor = 'yellow'; |
| 6dd74de | | | 281 | setTimeout(function () { |
| 6dd74de | | | 282 | document.querySelector('body').style.backgroundColor = originalBgColor; |
| 6dd74de | | | 283 | }, 100); |
| 6dd74de | | | 284 | } |
| 6dd74de | | | 285 | |
| 6dd74de | | | 286 | const testLineEndings = async (test, input) => { |
| 6dd74de | | | 287 | try { |
| 6dd74de | | | 288 | await mermaid.render(test, input); |
| 6dd74de | | | 289 | } catch (err) { |
| 6dd74de | | | 290 | console.error('Error in %s:\n\n%s', test, err); |
| 6dd74de | | | 291 | } |
| 6dd74de | | | 292 | }; |
| 6dd74de | | | 293 | |
| 6dd74de | | | 294 | await testLineEndings('CR', 'graph LR\rsubgraph CR\rA --> B\rend'); |
| 6dd74de | | | 295 | await testLineEndings('LF', 'graph LR\nsubgraph LF\nA --> B\nend'); |
| 6dd74de | | | 296 | await testLineEndings('CRLF', 'graph LR\r\nsubgraph CRLF\r\nA --> B\r\nend'); |
| 6dd74de | | | 297 | </script> |
| 6dd74de | | | 298 | </body> |
| 6dd74de | | | 299 | </html> |