archsight 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -1
  3. data/docs/archimate.md +21 -1
  4. data/docs/configuration.md +1 -0
  5. data/docs/diagram.md +15 -3
  6. data/docs/docker.md +4 -1
  7. data/docs/icons.md +8 -2
  8. data/docs/import.md +178 -55
  9. data/docs/index.md.erb +24 -18
  10. data/docs/modeling.md +637 -34
  11. data/docs/pages.md +44 -13
  12. data/docs/search.md +21 -1
  13. data/docs/togaf.md +2 -1
  14. data/lib/archsight/analysis/result.rb +8 -2
  15. data/lib/archsight/analysis/sandbox.rb +8 -0
  16. data/lib/archsight/analysis/typst_renderer.rb +246 -0
  17. data/lib/archsight/analysis.rb +1 -0
  18. data/lib/archsight/annotations/annotation.rb +30 -3
  19. data/lib/archsight/annotations/architecture_annotations.rb +47 -0
  20. data/lib/archsight/annotations/link_annotations.rb +15 -0
  21. data/lib/archsight/annotations/resource_reference.rb +12 -0
  22. data/lib/archsight/cli.rb +124 -23
  23. data/lib/archsight/database.rb +40 -0
  24. data/lib/archsight/diagram/cli.rb +50 -2
  25. data/lib/archsight/diagram/formatter.rb +112 -0
  26. data/lib/archsight/diagram/routing/edge_router/orthogonal_path.rb +38 -10
  27. data/lib/archsight/diagram/routing/edge_router.rb +29 -4
  28. data/lib/archsight/diagram/routing/edge_routing.rb +61 -5
  29. data/lib/archsight/diagram/style/theme.rb +7 -2
  30. data/lib/archsight/documentation.rb +4 -4
  31. data/lib/archsight/editor/page_source.rb +13 -1
  32. data/lib/archsight/export/confluence/analysis_output.rb +101 -0
  33. data/lib/archsight/export/confluence/client.rb +13 -0
  34. data/lib/archsight/export/confluence/diagram_links.rb +1 -1
  35. data/lib/archsight/export/confluence/exporter.rb +40 -13
  36. data/lib/archsight/export/confluence/labels.rb +25 -0
  37. data/lib/archsight/export/confluence/page_properties.rb +4 -6
  38. data/lib/archsight/export/confluence/storage.rb +38 -2
  39. data/lib/archsight/helpers/embeds.rb +18 -7
  40. data/lib/archsight/helpers/resource_resolver.rb +25 -0
  41. data/lib/archsight/import/executor.rb +139 -16
  42. data/lib/archsight/import/handler.rb +55 -6
  43. data/lib/archsight/import/handler_loader.rb +64 -0
  44. data/lib/archsight/import/handlers/cache_pruner.rb +30 -7
  45. data/lib/archsight/import/handlers/command.rb +120 -0
  46. data/lib/archsight/import/handlers/github.rb +4 -1
  47. data/lib/archsight/import/handlers/gitlab.rb +4 -1
  48. data/lib/archsight/import/handlers/go_dep_resolver.rb +10 -2
  49. data/lib/archsight/import/handlers/go_grapher.rb +102 -5
  50. data/lib/archsight/import/handlers/go_module_parser.rb +88 -0
  51. data/lib/archsight/import/handlers/grapher.rb +40 -1
  52. data/lib/archsight/import/handlers/repository.rb +3 -0
  53. data/lib/archsight/import/handlers/rest_api_index.rb +3 -0
  54. data/lib/archsight/import/registry.rb +22 -1
  55. data/lib/archsight/import.rb +64 -1
  56. data/lib/archsight/linter/structure.rb +239 -0
  57. data/lib/archsight/linter.rb +121 -14
  58. data/lib/archsight/page_loader.rb +12 -1
  59. data/lib/archsight/query/evaluator.rb +13 -6
  60. data/lib/archsight/query/parser.rb +73 -6
  61. data/lib/archsight/query.rb +1 -1
  62. data/lib/archsight/references.rb +3 -3
  63. data/lib/archsight/renderer.rb +80 -23
  64. data/lib/archsight/resources/analysis.rb +3 -2
  65. data/lib/archsight/resources/application_component.rb +75 -7
  66. data/lib/archsight/resources/application_service.rb +12 -1
  67. data/lib/archsight/resources/base.rb +58 -5
  68. data/lib/archsight/resources/business_actor.rb +5 -0
  69. data/lib/archsight/resources/business_contract.rb +72 -0
  70. data/lib/archsight/resources/business_product.rb +12 -0
  71. data/lib/archsight/resources/business_role.rb +1 -0
  72. data/lib/archsight/resources/implementation_deliverable.rb +1 -0
  73. data/lib/archsight/resources/implementation_plateau.rb +8 -2
  74. data/lib/archsight/resources/implementation_work_package.rb +2 -1
  75. data/lib/archsight/resources/import.rb +37 -11
  76. data/lib/archsight/resources/location.rb +56 -0
  77. data/lib/archsight/resources/motivation_requirement.rb +6 -0
  78. data/lib/archsight/resources/motivation_stakeholder.rb +14 -0
  79. data/lib/archsight/resources/page.rb +4 -7
  80. data/lib/archsight/resources/strategy_capability.rb +9 -0
  81. data/lib/archsight/resources/technology_artifact.rb +11 -4
  82. data/lib/archsight/resources/technology_communication_network.rb +89 -0
  83. data/lib/archsight/resources/technology_device.rb +88 -0
  84. data/lib/archsight/resources/technology_equipment.rb +75 -0
  85. data/lib/archsight/resources/technology_facility.rb +70 -0
  86. data/lib/archsight/resources/technology_node.rb +50 -0
  87. data/lib/archsight/resources/technology_service.rb +33 -0
  88. data/lib/archsight/resources/technology_system_software.rb +28 -0
  89. data/lib/archsight/resources.rb +12 -0
  90. data/lib/archsight/version.rb +1 -1
  91. data/lib/archsight/web/api/analysis_helpers.rb +55 -0
  92. data/lib/archsight/web/api/json_helpers.rb +3 -37
  93. data/lib/archsight/web/api/openapi/spec.yaml +10 -8
  94. data/lib/archsight/web/api/page_helpers.rb +1 -8
  95. data/lib/archsight/web/api/routes.rb +7 -2
  96. data/lib/archsight/web/application.rb +38 -2
  97. data/lib/archsight/web/editor/routes.rb +2 -1
  98. data/lib/archsight/web/public/vue/ApiDocsPage-COp4onwn.js +1 -0
  99. data/lib/archsight/web/public/vue/DocPage-D52OwaKc.js +1 -0
  100. data/lib/archsight/web/public/vue/EditorPage-3aqL7yVf.js +35 -0
  101. data/lib/archsight/web/public/vue/ErrorPage--b9XeSYa.js +2 -0
  102. data/lib/archsight/web/public/vue/GraphView-qh_EtRrQ.js +1 -0
  103. data/lib/archsight/web/public/vue/HomePage-C2TNh2U-.js +2 -0
  104. data/lib/archsight/web/public/vue/InstanceRouter-ZaCcjlIX.css +1 -0
  105. data/lib/archsight/web/public/vue/InstanceRouter-uzb_OMG0.js +1 -0
  106. data/lib/archsight/web/public/vue/KindList-CyJuP_uq.js +1 -0
  107. data/lib/archsight/web/public/vue/KindList-yYcRT2BV.css +1 -0
  108. data/lib/archsight/web/public/vue/PageView-B93woeN3.css +1 -0
  109. data/lib/archsight/web/public/vue/PageView-FyygrS-b.js +1 -0
  110. data/lib/archsight/web/public/vue/QueryError-B4Ex_csZ.js +1 -0
  111. data/lib/archsight/web/public/vue/ResourceList-BY6Z1Kcb.js +2 -0
  112. data/lib/archsight/web/public/vue/ResourceList-D75O87zG.css +1 -0
  113. data/lib/archsight/web/public/vue/{SearchResults-BewvsfOc.css → SearchResults-BV6UHriJ.css} +1 -1
  114. data/lib/archsight/web/public/vue/SearchResults-CkFpHF8m.js +1 -0
  115. data/lib/archsight/web/public/vue/WikiPage-BoHNewCX.js +3 -0
  116. data/lib/archsight/web/public/vue/WikiPage-TpmM1VAF.css +1 -0
  117. data/lib/archsight/web/public/vue/architecture-7GRP2DOG-BvzKZE4e.js +1 -0
  118. data/lib/archsight/web/public/vue/cynefin-OW5HDTMX-D-xs_Hxh.js +1 -0
  119. data/lib/archsight/web/public/vue/eventmodeling-NTZA5JFV-nbjxG01S.js +1 -0
  120. data/lib/archsight/web/public/vue/gitGraph-4MIJSDKK-CW6mw2ab.js +1 -0
  121. data/lib/archsight/web/public/vue/index-BGlYCbi7.js +3 -0
  122. data/lib/archsight/web/public/vue/index-eUHmJ7K2.css +1 -0
  123. data/lib/archsight/web/public/vue/info-A6RAGUB7-C12sjlHe.js +1 -0
  124. data/lib/archsight/web/public/vue/{mermaid-BjEi5URd.js → mermaid-DjsXQ_XN.js} +35 -35
  125. data/lib/archsight/web/public/vue/packet-AYTQ26CC-wMwKwHmA.js +1 -0
  126. data/lib/archsight/web/public/vue/pie-WAS4IAKB-w1-sAU_K.js +1 -0
  127. data/lib/archsight/web/public/vue/radar-RG4KPBEZ-DpwqIFoy.js +1 -0
  128. data/lib/archsight/web/public/vue/railroad-74A4TZTK-Ce5XC24d.js +1 -0
  129. data/lib/archsight/web/public/vue/railroad-abnf-HS5TGJTU-BSQO2pds.js +1 -0
  130. data/lib/archsight/web/public/vue/railroad-ebnf-LZEXJU2U-Dq1c2YtD.js +1 -0
  131. data/lib/archsight/web/public/vue/railroad-peg-WCYAUIDC-DKj6dli0.js +1 -0
  132. data/lib/archsight/web/public/vue/rolldown-runtime-hePW80VL.js +1 -0
  133. data/lib/archsight/web/public/vue/treeView-Q6P3EWNA-BmHNTWxU.js +1 -0
  134. data/lib/archsight/web/public/vue/treemap-WGGIJYW6-DsEI7sSD.js +1 -0
  135. data/lib/archsight/web/public/vue/{useGraphviz-DlSnFeCL.js → useGraphviz-4evusK9i.js} +1 -1
  136. data/lib/archsight/web/public/vue/{useHighlight-D5Gf8DLl.js → useHighlight-DPguaxfm.js} +8 -8
  137. data/lib/archsight/web/public/vue/usePanZoom-seQE1TPk.js +12 -0
  138. data/lib/archsight/web/public/vue/wardley-WFR3VGLG-CSCW83-M.js +1 -0
  139. data/lib/archsight/web/public/vue.html +5 -5
  140. metadata +58 -38
  141. data/lib/archsight/web/public/vue/ApiDocsPage-BgqnQgwa.js +0 -1
  142. data/lib/archsight/web/public/vue/DocPage-CNO71nBH.js +0 -1
  143. data/lib/archsight/web/public/vue/EditorPage-DR0FCNTz.js +0 -35
  144. data/lib/archsight/web/public/vue/ErrorPage-BfYArv6s.js +0 -2
  145. data/lib/archsight/web/public/vue/GraphView-BVTW30Ak.js +0 -1
  146. data/lib/archsight/web/public/vue/HomePage-Wk9P4Pma.js +0 -2
  147. data/lib/archsight/web/public/vue/InstanceRouter-BV8ycydz.js +0 -1
  148. data/lib/archsight/web/public/vue/InstanceRouter-jeavM6PW.css +0 -1
  149. data/lib/archsight/web/public/vue/KindList-C8yMsN5J.js +0 -1
  150. data/lib/archsight/web/public/vue/PageView-BaN6TyJB.js +0 -1
  151. data/lib/archsight/web/public/vue/QueryError-D790wH-a.js +0 -1
  152. data/lib/archsight/web/public/vue/ResourceList-B0FLaFR3.css +0 -1
  153. data/lib/archsight/web/public/vue/ResourceList-D-66nas2.js +0 -2
  154. data/lib/archsight/web/public/vue/SearchResults-CHyqIerQ.js +0 -1
  155. data/lib/archsight/web/public/vue/WikiPage-D2svpk6B.js +0 -13
  156. data/lib/archsight/web/public/vue/WikiPage-DoFJ0dbW.css +0 -1
  157. data/lib/archsight/web/public/vue/architecture-7GRP2DOG-BfA1TPxQ.js +0 -1
  158. data/lib/archsight/web/public/vue/cynefin-OW5HDTMX-BmgdUKVD.js +0 -1
  159. data/lib/archsight/web/public/vue/eventmodeling-NTZA5JFV-DbXDvAWF.js +0 -1
  160. data/lib/archsight/web/public/vue/gitGraph-4MIJSDKK-BkVhrKS1.js +0 -1
  161. data/lib/archsight/web/public/vue/index-BXXkUK1V.js +0 -3
  162. data/lib/archsight/web/public/vue/index-Cov1SnzY.css +0 -1
  163. data/lib/archsight/web/public/vue/info-A6RAGUB7-BIlCVuUY.js +0 -1
  164. data/lib/archsight/web/public/vue/packet-AYTQ26CC-eoQTjY3j.js +0 -1
  165. data/lib/archsight/web/public/vue/pie-WAS4IAKB-DEOotGhh.js +0 -1
  166. data/lib/archsight/web/public/vue/radar-RG4KPBEZ-C2yucuUN.js +0 -1
  167. data/lib/archsight/web/public/vue/railroad-74A4TZTK-CzONK5VY.js +0 -1
  168. data/lib/archsight/web/public/vue/railroad-abnf-HS5TGJTU-9zRPsDsx.js +0 -1
  169. data/lib/archsight/web/public/vue/railroad-ebnf-LZEXJU2U-BJ4dkz9l.js +0 -1
  170. data/lib/archsight/web/public/vue/railroad-peg-WCYAUIDC-DFy_rqAj.js +0 -1
  171. data/lib/archsight/web/public/vue/treeView-Q6P3EWNA-2cq5CyD2.js +0 -1
  172. data/lib/archsight/web/public/vue/treemap-WGGIJYW6-DK-e9Ez4.js +0 -1
  173. data/lib/archsight/web/public/vue/wardley-WFR3VGLG-BQwqUqfB.js +0 -1
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Location represents a geographic or conceptual place
4
+ class Archsight::Resources::Location < Archsight::Resources::Base
5
+ include_annotations :git, :architecture
6
+
7
+ description <<~MD
8
+ Represents a place: a country, a metro area, a region or any other geographic or conceptual position.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Other (ArchiMate: composite element)
13
+ **Aspect:** Composite
14
+
15
+ A location is a conceptual or physical place or position where concepts are located (structure elements)
16
+ or performed (behavior elements). In archsight it is the coarse place that facilities sit in.
17
+
18
+ ## Usage
19
+
20
+ Use Location to represent:
21
+
22
+ - Countries and regions (Germany, EU)
23
+ - Metro areas and cities (Frankfurt)
24
+ - Conceptual places (a cloud region, a jurisdiction)
25
+
26
+ ## Not this kind
27
+
28
+ - A building, campus or hall is a `TechnologyFacility` that is `locatedAt` the location
29
+ - A cloud region that is really a set of data centers: a location, with the data centers as facilities in it
30
+
31
+ Which kind to pick: "Choosing the Kind: Infrastructure" in the modeling guide.
32
+
33
+ ## How it connects
34
+
35
+ - A `TechnologyFacility` is `locatedAt` a location (many facilities, one location)
36
+ - Everything located at a facility of the location is found through the facility; the location page lists the
37
+ facilities that are located there, grouped by kind
38
+
39
+ Model the sites themselves as `TechnologyFacility`, not as locations: a data center is a physical structure.
40
+ MD
41
+
42
+ icon "map-pin"
43
+ layer "other"
44
+
45
+ annotation "location/country",
46
+ description: "Country of the location (name or ISO 3166 code)",
47
+ title: "Country",
48
+ filter: :word,
49
+ summary: true
50
+
51
+ annotation "location/city",
52
+ description: "City or metro area of the location",
53
+ title: "City",
54
+ filter: :word,
55
+ summary: true
56
+ end
@@ -36,6 +36,12 @@ class Archsight::Resources::MotivationRequirement < Archsight::Resources::Base
36
36
 
37
37
  Both show as incoming relations on the requirement's page.
38
38
 
39
+ ## Where it comes from
40
+
41
+ The source of a requirement is the `MotivationStakeholder` that `hasConcern` for it, directly or through the goal
42
+ the requirement answers. The stakeholder is `representedBy` the actor or role behind it, so the chain reaches the
43
+ actual organisation that asked for the requirement.
44
+
39
45
  ## Security and risk modelling
40
46
 
41
47
  - **Control measure:** `requirement/type` `control-measure` is a measure that a control objective
@@ -27,6 +27,18 @@ class Archsight::Resources::MotivationStakeholder < Archsight::Resources::Base
27
27
  - Regulatory bodies
28
28
  - Technical leadership
29
29
 
30
+ ## How it connects
31
+
32
+ - It `hasConcern` for the capabilities, goals, drivers, assessments, constraints and requirements it cares about.
33
+ That makes it the **source** of those requirements: the requirement's page shows the stakeholder as incoming.
34
+ - It is `representedBy` the `BusinessActor` (the actual organisation or person, e.g. the customer organisation,
35
+ not "customer") or `BusinessRole` that holds this interest. A stakeholder is a role; the actor is the party
36
+ behind it.
37
+
38
+ In ArchiMate a stakeholder is associated with the business actor or role that plays it; in TOGAF the stakeholder
39
+ map of Phase A links stakeholders and their concerns to organisation units and actors, and the requirements
40
+ repository records each requirement's source.
41
+
30
42
  ## Security and risk modelling
31
43
 
32
44
  A stakeholder (CISO, risk committee, data protection officer) can `hasConcern` for threats
@@ -42,4 +54,6 @@ class Archsight::Resources::MotivationStakeholder < Archsight::Resources::Base
42
54
  relation :hasConcern, :goals, :MotivationGoal
43
55
  relation :hasConcern, :motivationDrivers, :MotivationDriver
44
56
  relation :hasConcern, :motivationAssessments, :MotivationAssessment
57
+ relation :representedBy, :businessActors, :BusinessActor
58
+ relation :representedBy, :businessRoles, :BusinessRole
45
59
  end
@@ -6,6 +6,8 @@ require "time"
6
6
  # Page is a wiki page authored as a markdown file with YAML frontmatter.
7
7
  # It is sourced by Archsight::PageLoader and arranged in a tree by PageMenu.
8
8
  class Archsight::Resources::Page < Archsight::Resources::Base
9
+ include_annotations :links
10
+
9
11
  description <<~MD
10
12
  Represents a wiki page authored as a markdown file with YAML frontmatter.
11
13
 
@@ -18,8 +20,8 @@ class Archsight::Resources::Page < Archsight::Resources::Base
18
20
 
19
21
  ## Frontmatter
20
22
 
21
- `title`, `author`, `owner`, `status`, `tags` (comma-separated), `toc` (yes/no), `confluence`
22
- (URL of the linked Confluence page) and an optional `name` (defaults to the file path).
23
+ `title`, `author`, `owner`, `status`, `tags` (comma-separated), `toc` (yes/no), `links` (a mapping of
24
+ names to URLs, e.g. `confluence`, `jira`) and an optional `name` (defaults to the file path).
23
25
 
24
26
  ## Security and risk modelling
25
27
 
@@ -59,11 +61,6 @@ class Archsight::Resources::Page < Archsight::Resources::Base
59
61
  title: "Table of Contents",
60
62
  enum: %w[yes no],
61
63
  sidebar: false
62
- annotation "page/confluence",
63
- description: "URL of the corresponding Confluence page (used for a later export)",
64
- title: "Confluence",
65
- type: URI,
66
- sidebar: false
67
64
  annotation "page/created",
68
65
  description: "When the page was created (ISO 8601 date or time)",
69
66
  title: "Created",
@@ -25,6 +25,15 @@ class Archsight::Resources::StrategyCapability < Archsight::Resources::Base
25
25
  - Organizational abilities
26
26
  - Core competencies
27
27
  - Value-generating functions
28
+
29
+ ## Choosing this kind
30
+
31
+ **Question:** What must the organization be *able* to do?
32
+ **Test:** It survives swapping product, team and technology. It is not a certificate or a quality.
33
+ **Name:** An ability noun phrase ("Payment Processing"), never a product, team or technology.
34
+
35
+ A product `realizes` the capability. Only internal capabilities that no product carries are `servedBy` a service.
36
+ See the modeling guide, "Choosing the Kind".
28
37
  MD
29
38
 
30
39
  icon "strategy"
@@ -27,6 +27,15 @@ class Archsight::Resources::TechnologyArtifact < Archsight::Resources::Base
27
27
  - Container images
28
28
  - Build artifacts
29
29
  - Configuration packages
30
+ - Images (OS, VM template, disk or boot image, `artifact/type: image`)
31
+
32
+ ## Contents and deployment
33
+
34
+ An artifact that contains other artifacts `aggregates` them (ArchiMate aggregation): an image contains packages,
35
+ a chart references container images. A node or system software that runs an artifact `assignedTo` it (ArchiMate
36
+ assignment, written on the node). The artifact's page shows both as incoming relations ("contained in" and
37
+ "deployed on"). `ApplicationComponent realizedThrough TechnologyArtifact` says what a component is built from,
38
+ not where the artifact runs.
30
39
  MD
31
40
 
32
41
  icon "puzzle"
@@ -36,12 +45,9 @@ class Archsight::Resources::TechnologyArtifact < Archsight::Resources::Base
36
45
  annotation "artifact/type",
37
46
  description: "Type of technology artifact",
38
47
  title: "Artifact Type",
39
- enum: %w[repo container chart deb rpm]
48
+ enum: %w[repo container chart deb rpm image binary archive]
40
49
 
41
50
  # Dynamic annotations (patterns with *)
42
- annotation "link/*",
43
- description: "Documentation and resource links",
44
- sidebar: false
45
51
  annotation "scc/language/*/loc",
46
52
  description: "Lines of code per programming language",
47
53
  sidebar: false
@@ -240,6 +246,7 @@ class Archsight::Resources::TechnologyArtifact < Archsight::Resources::Base
240
246
  end
241
247
 
242
248
  relation :servedBy, :technologyComponents, :TechnologyArtifact
249
+ relation :aggregates, :technologyArtifacts, :TechnologyArtifact
243
250
  relation :suppliedBy, :technologyComponents, :TechnologyService
244
251
  relation :maintainedBy, :businessActors, :BusinessActor
245
252
  relation :contributedBy, :businessActors, :BusinessActor
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ # TechnologyCommunicationNetwork represents a logical network that connects nodes and system software
4
+ class Archsight::Resources::TechnologyCommunicationNetwork < Archsight::Resources::Base
5
+ include_annotations :git, :architecture
6
+
7
+ description <<~MD
8
+ Represents a logical network: a management network, the public network, an overlay such as BGP-EVPN, a VPN or a
9
+ network that supports a metro region.
10
+
11
+ ## ArchiMate Definition
12
+
13
+ **Layer:** Technology
14
+ **Aspect:** Active Structure
15
+
16
+ A communication network is a set of structures and behaviors that connects devices or system software for
17
+ transmission, routing and reception of data.
18
+
19
+ ## Usage
20
+
21
+ Use TechnologyCommunicationNetwork to represent:
22
+
23
+ - Underlay networks (the routed fabric) and overlay networks that run on them (BGP-EVPN, VXLAN)
24
+ - Management, storage and public networks
25
+ - VPNs and mesh networks (one network with `network/topology: mesh`, not one element per pair of sites)
26
+ - Networks that support a metro region, made of the networks of its sites
27
+
28
+ Do not model a network per customer or tenant: the overlay is one network, its tenants are instances of it.
29
+ Physical links and fabrics are `TechnologyEquipment`.
30
+
31
+ ## Not this kind
32
+
33
+ - Cables, fibre routes and switch fabrics are `TechnologyEquipment`; the network is `realizedBy` them
34
+ - The routing or VPN software is `TechnologySystemSoftware` that realizes the network
35
+ - A network offered as a product to consumers can additionally be a `TechnologyService` realized by it
36
+ - No network per tenant, no element per pair of sites in a mesh
37
+
38
+ Which kind to pick: "Choosing the Kind: Infrastructure" in the modeling guide.
39
+
40
+ ## How it connects
41
+
42
+ - A network is `composedOf` other networks (a metro network of its site networks); the target must be a network
43
+ and the chain must not form a cycle
44
+ - A network `specializes` a more general network (the concept "management network" and its implementations)
45
+ - A network is `servedBy` the network it runs over: the underlay serves the overlay, a VPN is served by the
46
+ network it tunnels through
47
+ - A network is `locatedAt` the facilities and locations it spans, many of them for one network
48
+ - A network is `realizedBy` the `TechnologyEquipment` it runs over and the `TechnologySystemSoftware` that implements it
49
+ (the routing stack, the VPN software)
50
+ - An overlay that software builds is `realizedBy` that `ApplicationComponent` or `ApplicationService` (an SDN agent,
51
+ a network operator, a load-balancer controller), also when the software runs on the nodes the network serves
52
+ - A `TechnologyNode` is `servedBy` the networks it is attached to; the network page lists them
53
+ - A network is `realizedBy` the `TechnologyDevice`s that build it (its switches and routers) and `connects` the
54
+ devices attached to it (servers, firewalls, appliances). Both are written on the network, so a switch that is
55
+ also attached to the network it builds closes no cycle
56
+ - A network is `ownedBy` the team (`BusinessActor`) or `BusinessRole` that operates it
57
+ MD
58
+
59
+ icon "network"
60
+ layer "technology"
61
+
62
+ annotation "network/type",
63
+ description: "Role of the network",
64
+ title: "Network Type",
65
+ enum: %w[underlay overlay management public vpn other],
66
+ filter: :word,
67
+ summary: true
68
+
69
+ annotation "network/topology",
70
+ description: "Shape of the network",
71
+ title: "Topology",
72
+ enum: %w[mesh hub-and-spoke point-to-point ring other],
73
+ filter: :word,
74
+ summary: true
75
+
76
+ relation :composedOf, :technologyCommunicationNetworks, :TechnologyCommunicationNetwork
77
+ relation :specializes, :technologyCommunicationNetworks, :TechnologyCommunicationNetwork
78
+ relation :servedBy, :technologyCommunicationNetworks, :TechnologyCommunicationNetwork
79
+ relation :locatedAt, :technologyFacilities, :TechnologyFacility
80
+ relation :locatedAt, :locations, :Location
81
+ relation :realizedBy, :technologyEquipment, :TechnologyEquipment
82
+ relation :realizedBy, :technologyDevices, :TechnologyDevice
83
+ relation :connects, :technologyDevices, :TechnologyDevice
84
+ relation :realizedBy, :technologySystemSoftware, :TechnologySystemSoftware
85
+ relation :realizedBy, :applicationComponents, :ApplicationComponent
86
+ relation :realizedBy, :applicationServices, :ApplicationService
87
+ relation :ownedBy, :businessActors, :BusinessActor
88
+ relation :ownedBy, :businessRoles, :BusinessRole
89
+ end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ # TechnologyDevice represents one physical machine: a server, switch, router, firewall or appliance
4
+ class Archsight::Resources::TechnologyDevice < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :asset, :risk
6
+
7
+ description <<~MD
8
+ Represents one physical machine: a server, a switch, a router, a firewall, a terminal server or an appliance.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Technology
13
+ **Aspect:** Active Structure
14
+
15
+ A device is a physical IT resource upon which system software and artifacts may be stored or deployed for
16
+ execution. It is a specialization of a node.
17
+
18
+ ## Usage
19
+
20
+ Use TechnologyDevice when the individual machine matters: which room it stands in, which switch it is cabled to,
21
+ which machines a failure domain loses.
22
+
23
+ - One element per physical machine (name it after the host: "Device:Frankfurt:Server01")
24
+ - A group of machines with one role ("the hypervisors of the platform") stays a logical `TechnologyNode` that is
25
+ `realizedBy` its devices
26
+ - A virtual chassis, a stack or a cluster pair is a device `composedOf` its member devices
27
+
28
+ ## Not this kind
29
+
30
+ - A VM, a Kubernetes node or a host role is a `TechnologyNode`
31
+ - A rack, a fabric or a link between sites is `TechnologyEquipment` (a rack is `composedOf` its devices)
32
+ - The network a switch builds is a `TechnologyCommunicationNetwork` `realizedBy` the switch
33
+
34
+ Which kind to pick: "Choosing the Kind: Infrastructure" in the modeling guide.
35
+
36
+ ## How it connects
37
+
38
+ - A device is `locatedAt` the `TechnologyFacility` it stands in, usually a room (`facility/type: room`)
39
+ - A device is `connectedTo` the devices it is cabled to (ArchiMate association). The cable is declared once, on
40
+ one of the two devices; the other shows it as incoming. Cabling is cyclic by nature and stays out of the
41
+ cycle check
42
+ - A device is `composedOf` its members (virtual chassis, stack)
43
+ - A `TechnologyNode` is `realizedBy` the devices it consists of
44
+ - A `TechnologyCommunicationNetwork` is `realizedBy` its switches and routers and `connects` the devices attached
45
+ to it
46
+ - `TechnologyEquipment` (a rack, a delivered hardware block) is `composedOf` its devices
47
+ - A device is `ownedBy` the team (`BusinessActor`) or `BusinessRole` responsible for operating it and `servedBy`
48
+ the team it is dedicated to (ArchiMate serving: a test server held by one team); `device/purpose` says what for
49
+
50
+ A device points to nothing above it: nodes, networks and equipment point down to the device, and the teams it
51
+ points to point to nothing further, so the relations stay free of cycles.
52
+ MD
53
+
54
+ icon "server"
55
+ layer "technology"
56
+
57
+ annotation "device/type",
58
+ description: "Kind of device",
59
+ title: "Device Type",
60
+ enum: %w[server switch router firewall terminal-server appliance other],
61
+ filter: :word,
62
+ summary: true
63
+ annotation "device/role",
64
+ description: "What the device does, e.g. hypervisor, storage, leaf, spine, core, management",
65
+ title: "Role",
66
+ filter: :word,
67
+ summary: true
68
+ annotation "device/model",
69
+ description: "Vendor and model",
70
+ title: "Model"
71
+ annotation "device/serial",
72
+ description: "Serial number",
73
+ title: "Serial"
74
+ annotation "device/rack",
75
+ description: "Rack and height units, e.g. B12 U20-21",
76
+ title: "Rack"
77
+ annotation "device/purpose",
78
+ description: "What the device is dedicated to, e.g. kernel regression tests",
79
+ title: "Purpose",
80
+ filter: :word
81
+
82
+ relation :locatedAt, :technologyFacilities, :TechnologyFacility
83
+ relation :connectedTo, :technologyDevices, :TechnologyDevice
84
+ relation :composedOf, :technologyDevices, :TechnologyDevice
85
+ relation :ownedBy, :businessActors, :BusinessActor
86
+ relation :ownedBy, :businessRoles, :BusinessRole
87
+ relation :servedBy, :businessActors, :BusinessActor
88
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ # TechnologyEquipment represents racks, fabrics and physical clusters inside a facility
4
+ class Archsight::Resources::TechnologyEquipment < Archsight::Resources::Base
5
+ include_annotations :git, :architecture
6
+
7
+ description <<~MD
8
+ Represents physical equipment inside a facility: racks, network fabrics, physical clusters.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Technology (physical element)
13
+ **Aspect:** Active Structure
14
+
15
+ TechnologyEquipment is one or more physical machines, tools or instruments that can create, use, store, move or transform
16
+ materials.
17
+
18
+ ## Usage
19
+
20
+ Use TechnologyEquipment to represent:
21
+
22
+ - Racks and rack rows
23
+ - Network fabrics and switch stacks
24
+ - Physical clusters (storage arrays, hardware pools) that technology nodes run on
25
+ - Links between facilities (fibre routes, carrier circuits, `equipment/type: link`) and backbones made of them
26
+
27
+ Model individual physical machines as `TechnologyDevice` and VMs as `TechnologyNode`; use TechnologyEquipment only
28
+ when the physical grouping matters.
29
+
30
+ ## Not this kind
31
+
32
+ - A single physical machine (server, switch, router, appliance) is a `TechnologyDevice`; a VM or host role is a
33
+ `TechnologyNode`
34
+ - The network that runs over the links is a `TechnologyCommunicationNetwork` `realizedBy` the equipment
35
+ - A link is one element `locatedAt` its two facilities, not a `TechnologyService`
36
+
37
+ Which kind to pick: "Choosing the Kind: Infrastructure" in the modeling guide.
38
+
39
+ ## How it connects
40
+
41
+ - TechnologyEquipment is `locatedAt` the facilities it stands in. A link between facilities is one TechnologyEquipment that is
42
+ `locatedAt` both end facilities
43
+ - TechnologyEquipment is `composedOf` other TechnologyEquipment (a backbone of its links; the chain must not form a
44
+ cycle) and of the `TechnologyDevice`s it holds (a rack, a delivered hardware block)
45
+ - A technology service or node is `realizedBy` the TechnologyEquipment it runs on or over (a network service by the link)
46
+ - TechnologyEquipment is optional: nodes and services can be `locatedAt` a facility directly
47
+ - TechnologyEquipment is `ownedBy` the team (`BusinessActor`) or `BusinessRole` responsible for operating it and
48
+ `servedBy` the team it is dedicated to (a partition of a shared test cluster); `equipment/purpose` says what for.
49
+ The devices of a partition are normally served by the same team; `archsight lint` warns when one is not
50
+ - A `BusinessContract` `covers` the equipment it obliges the provider to deliver, and the `ImplementationWorkPackage` that
51
+ installs or changes it `affects` it
52
+ MD
53
+
54
+ icon "cpu"
55
+ layer "technology"
56
+
57
+ annotation "equipment/type",
58
+ description: "Kind of equipment",
59
+ title: "TechnologyEquipment Type",
60
+ enum: %w[rack network-fabric link cluster storage power cooling other],
61
+ filter: :word,
62
+ summary: true
63
+
64
+ annotation "equipment/purpose",
65
+ description: "What the equipment is dedicated to, e.g. hypervisor regression tests",
66
+ title: "Purpose",
67
+ filter: :word
68
+
69
+ relation :locatedAt, :technologyFacilities, :TechnologyFacility
70
+ relation :composedOf, :technologyEquipment, :TechnologyEquipment
71
+ relation :composedOf, :technologyDevices, :TechnologyDevice
72
+ relation :ownedBy, :businessActors, :BusinessActor
73
+ relation :ownedBy, :businessRoles, :BusinessRole
74
+ relation :servedBy, :businessActors, :BusinessActor
75
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ # TechnologyFacility represents a building, data center or site
4
+ class Archsight::Resources::TechnologyFacility < Archsight::Resources::Base
5
+ include_annotations :git, :architecture
6
+
7
+ description <<~MD
8
+ Represents a physical structure where technology runs: a building, data center or other site.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Technology (physical element)
13
+ **Aspect:** Active Structure
14
+
15
+ A facility is a physical structure or environment. Technology nodes, services and system software are located
16
+ at facilities, and facilities themselves are located at a place.
17
+
18
+ ## Usage
19
+
20
+ Use TechnologyFacility to represent:
21
+
22
+ - Data centers and colocation sites
23
+ - Offices
24
+ - Edge sites
25
+ - Parts of a site (campus, building, hall), nested with `composedOf`
26
+ - Rooms: a server room or fire compartment (`facility/type: room`) the data center is `composedOf`; devices stand
27
+ in it, which makes it a failure domain
28
+
29
+ ## Not this kind
30
+
31
+ - A country, metro or region is a `Location`
32
+ - A rack, cage or fabric inside the site is `TechnologyEquipment`; a server is a `TechnologyDevice` (or a logical
33
+ `TechnologyNode`) `locatedAt` the facility
34
+ - A data center is never a `TechnologyNode` and never an annotation on other elements
35
+
36
+ Which kind to pick: "Choosing the Kind: Infrastructure" in the modeling guide.
37
+
38
+ ## How it connects
39
+
40
+ - Things that run at a facility point to it with `locatedAt`: `TechnologyNode`, `TechnologyService`,
41
+ `TechnologySystemSoftware`, `TechnologyEquipment` and `TechnologyDevice`. One element can be located at many
42
+ facilities (one cluster that runs in three data centers is one element with three relations, not three copies)
43
+ - A facility is `locatedAt` a `Location` and `composedOf` other facilities (campus, hall, room)
44
+ - A facility is `servedBy` the `BusinessActor` that operates it
45
+ - The facility page lists what is located there (incoming `locatedAt`), grouped by kind
46
+
47
+ A service that runs on different platforms in different facilities is not given a qualifier: the nodes of the
48
+ platform are `locatedAt` the same facilities, so the pair is derivable.
49
+ MD
50
+
51
+ icon "building"
52
+ layer "technology"
53
+
54
+ annotation "facility/type",
55
+ description: "Kind of site",
56
+ title: "TechnologyFacility Type",
57
+ enum: %w[data-center colocation office edge room],
58
+ filter: :word,
59
+ summary: true
60
+
61
+ annotation "facility/stage",
62
+ description: "Free text stage of the facility (planned, in build, productive, phase-out, ...)",
63
+ title: "Stage",
64
+ filter: :word,
65
+ summary: true
66
+
67
+ relation :locatedAt, :locations, :Location
68
+ relation :composedOf, :technologyFacilities, :TechnologyFacility
69
+ relation :servedBy, :businessActors, :BusinessActor
70
+ end
@@ -26,6 +26,47 @@ class Archsight::Resources::TechnologyNode < Archsight::Resources::Base
26
26
  - Network appliances
27
27
  - Storage arrays
28
28
 
29
+ ## Not this kind
30
+
31
+ - A building or data center is a `TechnologyFacility`; a rack or fabric is `TechnologyEquipment`
32
+ - Software running on the node (database, routing stack) is `TechnologySystemSoftware`
33
+ - One node per host role is often enough; many identical hosts are one node `locatedAt` several facilities
34
+ - A single physical machine whose room or cabling matters is a `TechnologyDevice`; the node is `realizedBy` it
35
+
36
+ Which kind to pick: "Choosing the Kind: Infrastructure" in the modeling guide.
37
+
38
+ ## Location
39
+
40
+ A node is `locatedAt` the `TechnologyFacility` (or facilities) it stands in; see `TechnologyFacility`.
41
+
42
+ ## Networks
43
+
44
+ A node is `servedBy` the `TechnologyCommunicationNetwork`s it is attached to (management, public, an overlay).
45
+
46
+ ## Teams
47
+
48
+ A node is `ownedBy` the team (`BusinessActor`) or `BusinessRole` that operates it and `servedBy` the team it is
49
+ dedicated to (a test cluster held by one team).
50
+
51
+ ## Physical realization
52
+
53
+ A node is `realizedBy` the `TechnologyEquipment` it consists of or stands on (a router on its rack); see `TechnologyEquipment`.
54
+ A logical node (a host role, "the hypervisors of the platform") is `realizedBy` the `TechnologyDevice`s, the
55
+ physical machines, that make it up.
56
+
57
+ ## Concept and implementation
58
+
59
+ A node can `specialize` another node (ArchiMate specialization): the general node is the concept (a regional
60
+ cluster), the specific nodes are its implementations. The concept's page lists them as incoming "specializes".
61
+ A node made of other nodes (a cluster of hosts) is `composedOf` them (ArchiMate composition). Both only point at
62
+ nodes, and neither may form a cycle.
63
+
64
+ ## Deployment
65
+
66
+ A node `assignedTo` the artifacts that are deployed on it (ArchiMate assignment): the image it boots, the
67
+ packages installed on it. The relation is written on the node, which owns the deployment; the artifact's page
68
+ shows the nodes as incoming "deployed on".
69
+
29
70
  ## Security and risk modelling
30
71
 
31
72
  A node is the typical asset of a vulnerability assessment: a scan result is a `MotivationAssessment` of type
@@ -44,5 +85,14 @@ class Archsight::Resources::TechnologyNode < Archsight::Resources::Base
44
85
 
45
86
  relation :realizes, :motivationConstraints, :MotivationConstraint
46
87
  relation :servedBy, :technologyServices, :TechnologyService
88
+ relation :servedBy, :technologyCommunicationNetworks, :TechnologyCommunicationNetwork
47
89
  relation :servedBy, :businessActors, :BusinessActor
90
+ relation :ownedBy, :businessActors, :BusinessActor
91
+ relation :ownedBy, :businessRoles, :BusinessRole
92
+ relation :locatedAt, :technologyFacilities, :TechnologyFacility
93
+ relation :realizedBy, :technologyEquipment, :TechnologyEquipment
94
+ relation :realizedBy, :technologyDevices, :TechnologyDevice
95
+ relation :specializes, :technologyNodes, :TechnologyNode
96
+ relation :composedOf, :technologyNodes, :TechnologyNode
97
+ relation :assignedTo, :technologyArtifacts, :TechnologyArtifact
48
98
  end
@@ -25,6 +25,36 @@ class Archsight::Resources::TechnologyService < Archsight::Resources::Base
25
25
  - Managed database services
26
26
  - CI/CD pipeline services
27
27
  - Monitoring and logging platforms
28
+
29
+ ## Not this kind
30
+
31
+ - The software that provides it is `TechnologySystemSoftware`, the machines are `TechnologyNode`s
32
+ - A network is a `TechnologyCommunicationNetwork`; a physical link is `TechnologyEquipment`
33
+ - One service for all sites, `locatedAt` each `TechnologyFacility`, not a copy per site
34
+
35
+ Which kind to pick: "Choosing the Kind: Infrastructure" in the modeling guide.
36
+
37
+ ## Location
38
+
39
+ A service that runs in several data centers is one service that is `locatedAt` each `TechnologyFacility`, not one service
40
+ per site.
41
+
42
+ ## Physical realization
43
+
44
+ A service is `realizedBy` the `TechnologyEquipment` it runs over: a backbone network service is realized by the links
45
+ between the facilities (`equipment/type: link`).
46
+
47
+ ## Deployed components
48
+
49
+ Application components deployed on the service point to it with `servedBy`; they are listed as incoming
50
+ "servedBy" from ApplicationComponent on its page. An ApplicationService that is `servedBy` the service uses it as a
51
+ whole; list a cluster there only when the service's own components run in it.
52
+
53
+ ## Concept and implementation
54
+
55
+ A service can `specialize` another service (ArchiMate specialization): the general service is the concept, the
56
+ specific ones are its implementations, listed as incoming "specializes" on the concept's page. The target must be
57
+ a TechnologyService and the chain must not form a cycle.
28
58
  MD
29
59
 
30
60
  icon "cloud"
@@ -36,7 +66,10 @@ class Archsight::Resources::TechnologyService < Archsight::Resources::Base
36
66
  format: :markdown
37
67
 
38
68
  relation :suppliedBy, :technologyComponents, :TechnologySystemSoftware
69
+ relation :specializes, :technologyServices, :TechnologyService
39
70
  relation :servedBy, :businessActors, :BusinessActor
71
+ relation :locatedAt, :technologyFacilities, :TechnologyFacility
72
+ relation :realizedBy, :technologyEquipment, :TechnologyEquipment
40
73
  relation :realizes, :motivationRequirements, :MotivationRequirement
41
74
  relation :partiallyRealizes, :motivationRequirements, :MotivationRequirement
42
75
  relation :plans, :motivationRequirements, :MotivationRequirement
@@ -25,12 +25,39 @@ class Archsight::Resources::TechnologySystemSoftware < Archsight::Resources::Bas
25
25
  - Cache clusters
26
26
  - Load balancers
27
27
  - Service meshes
28
+
29
+ ## Not this kind
30
+
31
+ - The machine it runs on is a `TechnologyNode`
32
+ - What consumers use from it is a `TechnologyService`
33
+ - A routing stack that implements a network realizes a `TechnologyCommunicationNetwork`
34
+
35
+ Which kind to pick: "Choosing the Kind: Infrastructure" in the modeling guide.
36
+
37
+ ## Location
38
+
39
+ System software is `locatedAt` the `TechnologyFacility` (or facilities) it runs in.
40
+
41
+ ## Deployment
42
+
43
+ System software `assignedTo` the artifacts it executes (ArchiMate assignment), written on the system software.
44
+ The artifact's page shows it as incoming "deployed on".
45
+
46
+ ## Concept and implementation
47
+
48
+ System software can `specialize` other system software (ArchiMate specialization): the general one is the
49
+ concept, the specific ones are its implementations, listed as incoming "specializes" on the concept's page.
50
+ A platform that bundles components is `composedOf` them (ArchiMate composition). Both only point at system
51
+ software, and neither may form a cycle.
28
52
  MD
29
53
 
30
54
  icon "terminal-tag"
31
55
  layer "technology"
32
56
 
33
57
  relation :realizedBy, :technologyComponents, :TechnologyNode
58
+ relation :specializes, :technologySystemSoftware, :TechnologySystemSoftware
59
+ relation :composedOf, :technologySystemSoftware, :TechnologySystemSoftware
60
+ relation :assignedTo, :technologyArtifacts, :TechnologyArtifact
34
61
  relation :realizedThrough, :technologyArtifacts, :TechnologyArtifact
35
62
  relation :exposes, :applicationInterfaces, :ApplicationInterface
36
63
  relation :dependsOn, :applicationInterfaces, :ApplicationInterface
@@ -38,4 +65,5 @@ class Archsight::Resources::TechnologySystemSoftware < Archsight::Resources::Bas
38
65
  relation :partiallyRealizes, :motivationRequirements, :MotivationRequirement
39
66
  relation :plans, :motivationRequirements, :MotivationRequirement
40
67
  relation :evidencedBy, :complianceEvidences, :ComplianceEvidence
68
+ relation :locatedAt, :technologyFacilities, :TechnologyFacility
41
69
  end