archsight 0.1.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +24 -0
- data/CODE_OF_CONDUCT.md +10 -0
- data/CONTRIBUTING.md +186 -0
- data/Dockerfile +39 -0
- data/LICENSE.txt +201 -0
- data/README.md +170 -0
- data/SECURITY.md +27 -0
- data/exe/archsight +9 -0
- data/lib/archsight/annotations/aggregators.rb +109 -0
- data/lib/archsight/annotations/annotation.rb +168 -0
- data/lib/archsight/annotations/architecture_annotations.rb +59 -0
- data/lib/archsight/annotations/backup_annotations.rb +21 -0
- data/lib/archsight/annotations/computed.rb +264 -0
- data/lib/archsight/annotations/email_recipient.rb +35 -0
- data/lib/archsight/annotations/generated_annotations.rb +17 -0
- data/lib/archsight/annotations/git_annotations.rb +21 -0
- data/lib/archsight/annotations/relation_resolver.rb +160 -0
- data/lib/archsight/cli.rb +120 -0
- data/lib/archsight/configuration.rb +36 -0
- data/lib/archsight/database.rb +183 -0
- data/lib/archsight/documentation.rb +171 -0
- data/lib/archsight/graph.rb +113 -0
- data/lib/archsight/helpers.rb +210 -0
- data/lib/archsight/linter.rb +77 -0
- data/lib/archsight/mcp/analyze_resource_tool.rb +222 -0
- data/lib/archsight/mcp/base.rb +48 -0
- data/lib/archsight/mcp/query_tool.rb +113 -0
- data/lib/archsight/mcp/resource_doc_tool.rb +87 -0
- data/lib/archsight/mcp.rb +6 -0
- data/lib/archsight/query/ast.rb +279 -0
- data/lib/archsight/query/errors.rb +39 -0
- data/lib/archsight/query/evaluator.rb +707 -0
- data/lib/archsight/query/lexer.rb +289 -0
- data/lib/archsight/query/parser.rb +506 -0
- data/lib/archsight/query.rb +68 -0
- data/lib/archsight/renderer.rb +134 -0
- data/lib/archsight/resources/application_component.rb +346 -0
- data/lib/archsight/resources/application_interface.rb +54 -0
- data/lib/archsight/resources/application_service.rb +222 -0
- data/lib/archsight/resources/base.rb +300 -0
- data/lib/archsight/resources/business_actor.rb +195 -0
- data/lib/archsight/resources/business_constraint.rb +32 -0
- data/lib/archsight/resources/business_process.rb +37 -0
- data/lib/archsight/resources/business_product.rb +206 -0
- data/lib/archsight/resources/business_requirement.rb +56 -0
- data/lib/archsight/resources/compliance_evidence.rb +42 -0
- data/lib/archsight/resources/data_object.rb +49 -0
- data/lib/archsight/resources/motivation_goal.rb +37 -0
- data/lib/archsight/resources/motivation_outcome.rb +33 -0
- data/lib/archsight/resources/motivation_stakeholder.rb +38 -0
- data/lib/archsight/resources/strategy_capability.rb +38 -0
- data/lib/archsight/resources/technology_artifact.rb +154 -0
- data/lib/archsight/resources/technology_interface.rb +34 -0
- data/lib/archsight/resources/technology_node.rb +42 -0
- data/lib/archsight/resources/technology_service.rb +35 -0
- data/lib/archsight/resources/technology_system_software.rb +37 -0
- data/lib/archsight/resources/view.rb +51 -0
- data/lib/archsight/resources.rb +49 -0
- data/lib/archsight/template.rb +49 -0
- data/lib/archsight/version.rb +5 -0
- data/lib/archsight/web/application.rb +290 -0
- data/lib/archsight/web/doc/archimate.md +215 -0
- data/lib/archsight/web/doc/computed_annotations.md +316 -0
- data/lib/archsight/web/doc/icons.md +303 -0
- data/lib/archsight/web/doc/index.md.erb +74 -0
- data/lib/archsight/web/doc/modeling.md +200 -0
- data/lib/archsight/web/doc/search.md +227 -0
- data/lib/archsight/web/doc/togaf.md +255 -0
- data/lib/archsight/web/doc/tool.md +90 -0
- data/lib/archsight/web/public/css/artifact.css +985 -0
- data/lib/archsight/web/public/css/base.css +201 -0
- data/lib/archsight/web/public/css/graph.css +106 -0
- data/lib/archsight/web/public/css/highlight.min.css +10 -0
- data/lib/archsight/web/public/css/iconoir.css +22 -0
- data/lib/archsight/web/public/css/instance.css +329 -0
- data/lib/archsight/web/public/css/layout.css +421 -0
- data/lib/archsight/web/public/css/mermaid-layers.css +188 -0
- data/lib/archsight/web/public/css/pico.min.css +4 -0
- data/lib/archsight/web/public/favicon.ico +0 -0
- data/lib/archsight/web/public/img/archimate.png +0 -0
- data/lib/archsight/web/public/img/togaf-high-level.png +0 -0
- data/lib/archsight/web/public/js/graph-zoom.js +18 -0
- data/lib/archsight/web/public/js/highlight.min.js +3899 -0
- data/lib/archsight/web/public/js/htmx.min.js +1 -0
- data/lib/archsight/web/public/js/mermaid-init.js +88 -0
- data/lib/archsight/web/public/js/mermaid.min.js +2811 -0
- data/lib/archsight/web/public/js/sparkline.js +42 -0
- data/lib/archsight/web/public/js/svg-pan-zoom.min.js +3 -0
- data/lib/archsight/web/public/js/svg-zoom-controls.js +93 -0
- data/lib/archsight/web/views/index.haml +12 -0
- data/lib/archsight/web/views/partials/artifact/_activity.haml +55 -0
- data/lib/archsight/web/views/partials/artifact/_agentic.haml +25 -0
- data/lib/archsight/web/views/partials/artifact/_deployment.haml +29 -0
- data/lib/archsight/web/views/partials/artifact/_git_info.haml +16 -0
- data/lib/archsight/web/views/partials/artifact/_language_stats.haml +53 -0
- data/lib/archsight/web/views/partials/artifact/_links.haml +24 -0
- data/lib/archsight/web/views/partials/artifact/_project_estimate.haml +26 -0
- data/lib/archsight/web/views/partials/artifact/_repositories.haml +55 -0
- data/lib/archsight/web/views/partials/artifact/_team.haml +83 -0
- data/lib/archsight/web/views/partials/artifact/_workflow.haml +69 -0
- data/lib/archsight/web/views/partials/components/_activity.haml +37 -0
- data/lib/archsight/web/views/partials/components/_git.haml +17 -0
- data/lib/archsight/web/views/partials/components/_jira.haml +18 -0
- data/lib/archsight/web/views/partials/components/_languages.haml +29 -0
- data/lib/archsight/web/views/partials/components/_owner.haml +15 -0
- data/lib/archsight/web/views/partials/components/_repositories.haml +37 -0
- data/lib/archsight/web/views/partials/components/_status.haml +23 -0
- data/lib/archsight/web/views/partials/instance/_detail.haml +99 -0
- data/lib/archsight/web/views/partials/instance/_graph.haml +6 -0
- data/lib/archsight/web/views/partials/instance/_list.haml +84 -0
- data/lib/archsight/web/views/partials/instance/_relations.haml +43 -0
- data/lib/archsight/web/views/partials/instance/_requirements.haml +41 -0
- data/lib/archsight/web/views/partials/instance/_view_detail.haml +57 -0
- data/lib/archsight/web/views/partials/layout/_content.haml +40 -0
- data/lib/archsight/web/views/partials/layout/_error.haml +22 -0
- data/lib/archsight/web/views/partials/layout/_head.haml +24 -0
- data/lib/archsight/web/views/partials/layout/_navigation.haml +20 -0
- data/lib/archsight/web/views/partials/layout/_sidebar.haml +27 -0
- data/lib/archsight/web/views/search.haml +53 -0
- data/lib/archsight.rb +17 -0
- metadata +311 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# BusinessProduct represents a product or service offered to customers
|
|
4
|
+
class Archsight::Resources::BusinessProduct < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents a coherent collection of services offered to customers.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Business
|
|
13
|
+
**Aspect:** Passive Structure
|
|
14
|
+
|
|
15
|
+
A product represents a coherent collection of services and/or passive structure elements,
|
|
16
|
+
accompanied by a contract/set of agreements, which is offered as a whole to customers.
|
|
17
|
+
Products are the marketable offerings that deliver value.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Use BusinessProduct to represent:
|
|
22
|
+
|
|
23
|
+
- Cloud services (Compute, Storage, Networking)
|
|
24
|
+
- Managed database offerings
|
|
25
|
+
- Kubernetes services
|
|
26
|
+
- Enterprise support packages
|
|
27
|
+
- API products
|
|
28
|
+
MD
|
|
29
|
+
|
|
30
|
+
icon "box-iso"
|
|
31
|
+
layer "business"
|
|
32
|
+
|
|
33
|
+
computed_annotation "repository/artifacts/total",
|
|
34
|
+
title: "Total Git Repositories",
|
|
35
|
+
description: "Number of related git repositories across all related application components",
|
|
36
|
+
type: Integer do
|
|
37
|
+
sum(outgoing_transitive(:ApplicationService), "repository/artifacts/total")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
computed_annotation "repository/artifacts/active",
|
|
41
|
+
title: "Active Git Repositories",
|
|
42
|
+
description: "Number of related git repositories across all related application components",
|
|
43
|
+
type: Integer do
|
|
44
|
+
sum(outgoing_transitive(:ApplicationService), "repository/artifacts/active")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
computed_annotation "repository/artifacts/abandoned",
|
|
48
|
+
title: "Abandoned Git Repositories",
|
|
49
|
+
description: "Number of related git repositories across all related application components",
|
|
50
|
+
type: Integer do
|
|
51
|
+
sum(outgoing_transitive(:ApplicationService), "repository/artifacts/abandoned")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
computed_annotation "repository/artifacts/highBusFactor",
|
|
55
|
+
title: "High Bus Factor Repositories",
|
|
56
|
+
description: "Number of active git repositories with high bus factor across all related application components",
|
|
57
|
+
type: Integer do
|
|
58
|
+
sum(outgoing_transitive(:ApplicationService), "repository/artifacts/highBusFactor")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
computed_annotation "repository/artifacts/archived",
|
|
62
|
+
title: "Archived Repositories",
|
|
63
|
+
description: "Number of archived git repositories across all related application services",
|
|
64
|
+
type: Integer do
|
|
65
|
+
sum(outgoing_transitive(:ApplicationService), "repository/artifacts/archived")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
%w[scc/estimatedCost scc/estimatedScheduleMonths scc/estimatedPeople].each do |anno_key|
|
|
69
|
+
computed_annotation anno_key,
|
|
70
|
+
title: "Total #{anno_key.split("/").last.split(/(?=[A-Z])/).map(&:capitalize).join(" ")}",
|
|
71
|
+
description: "Total estimated #{anno_key.split("/").last} from related artifacts across all related application components",
|
|
72
|
+
type: Integer do
|
|
73
|
+
sum(outgoing_transitive(:ApplicationService), anno_key)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
computed_annotation "activity/commits",
|
|
78
|
+
title: "Monthly Commits",
|
|
79
|
+
description: "Accumulated monthly commit counts across all related application services",
|
|
80
|
+
sidebar: false do
|
|
81
|
+
services = outgoing_transitive(:ApplicationService)
|
|
82
|
+
next nil if services.empty?
|
|
83
|
+
|
|
84
|
+
# Collect all commit arrays from services (they all end at the current month)
|
|
85
|
+
# Use get() to trigger computation of computed annotations on ApplicationServices
|
|
86
|
+
commit_arrays = services.map do |service|
|
|
87
|
+
commits_str = get(service, "activity/commits")
|
|
88
|
+
next nil if commits_str.nil? || commits_str.empty?
|
|
89
|
+
|
|
90
|
+
commits_str.split(",").map(&:to_i)
|
|
91
|
+
end.compact
|
|
92
|
+
|
|
93
|
+
next nil if commit_arrays.empty?
|
|
94
|
+
|
|
95
|
+
# Find the maximum length (oldest service determines the timeline)
|
|
96
|
+
max_length = commit_arrays.map(&:length).max
|
|
97
|
+
|
|
98
|
+
# Pad shorter arrays at the beginning with zeros and sum
|
|
99
|
+
result = Array.new(max_length, 0)
|
|
100
|
+
commit_arrays.each do |arr|
|
|
101
|
+
offset = max_length - arr.length
|
|
102
|
+
arr.each_with_index do |count, idx|
|
|
103
|
+
result[offset + idx] += count
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
result.join(",")
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
computed_annotation "activity/createdAt",
|
|
111
|
+
title: "Created",
|
|
112
|
+
description: "Earliest repository creation date across all related application services",
|
|
113
|
+
list: true,
|
|
114
|
+
type: Time do
|
|
115
|
+
services = outgoing_transitive(:ApplicationService)
|
|
116
|
+
next nil if services.empty?
|
|
117
|
+
|
|
118
|
+
# Use get() to trigger computation of computed annotations on ApplicationServices
|
|
119
|
+
dates = services.map do |service|
|
|
120
|
+
date_val = get(service, "activity/createdAt")
|
|
121
|
+
next nil if date_val.nil?
|
|
122
|
+
|
|
123
|
+
if date_val.is_a?(Time)
|
|
124
|
+
date_val
|
|
125
|
+
else
|
|
126
|
+
begin
|
|
127
|
+
Time.parse(date_val.to_s)
|
|
128
|
+
rescue StandardError
|
|
129
|
+
nil
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end.compact
|
|
133
|
+
|
|
134
|
+
dates.min
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
computed_annotation "activity/contributors",
|
|
138
|
+
title: "Monthly Contributors",
|
|
139
|
+
description: "Accumulated monthly unique contributor counts across all related application services",
|
|
140
|
+
sidebar: false do
|
|
141
|
+
services = outgoing_transitive(:ApplicationService)
|
|
142
|
+
next nil if services.empty?
|
|
143
|
+
|
|
144
|
+
# Collect all contributor arrays from services (they all end at the current month)
|
|
145
|
+
# Use get() to trigger computation of computed annotations on ApplicationServices
|
|
146
|
+
contrib_arrays = services.map do |service|
|
|
147
|
+
contrib_str = get(service, "activity/contributors")
|
|
148
|
+
next nil if contrib_str.nil? || contrib_str.empty?
|
|
149
|
+
|
|
150
|
+
contrib_str.split(",").map(&:to_i)
|
|
151
|
+
end.compact
|
|
152
|
+
|
|
153
|
+
next nil if contrib_arrays.empty?
|
|
154
|
+
|
|
155
|
+
# Find the maximum length (oldest service determines the timeline)
|
|
156
|
+
max_length = contrib_arrays.map(&:length).max
|
|
157
|
+
|
|
158
|
+
# Pad shorter arrays at the beginning with zeros and sum
|
|
159
|
+
result = Array.new(max_length, 0)
|
|
160
|
+
contrib_arrays.each do |arr|
|
|
161
|
+
offset = max_length - arr.length
|
|
162
|
+
arr.each_with_index do |count, idx|
|
|
163
|
+
result[offset + idx] += count
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
result.join(",")
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
computed_annotation "activity/contributors/6m",
|
|
171
|
+
title: "Contributors (6 months)",
|
|
172
|
+
description: "Sum of unique contributors in the last 6 months across related services",
|
|
173
|
+
list: true,
|
|
174
|
+
type: Integer do
|
|
175
|
+
services = outgoing_transitive(:ApplicationService)
|
|
176
|
+
next nil if services.empty?
|
|
177
|
+
|
|
178
|
+
# Sum unique contributor counts from related services
|
|
179
|
+
total = services.sum do |service|
|
|
180
|
+
get(service, "activity/contributors/6m").to_i
|
|
181
|
+
end
|
|
182
|
+
total.positive? ? total : nil
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
computed_annotation "activity/contributors/total",
|
|
186
|
+
title: "Contributors (total)",
|
|
187
|
+
description: "Sum of unique contributors across related services",
|
|
188
|
+
type: Integer do
|
|
189
|
+
services = outgoing_transitive(:ApplicationService)
|
|
190
|
+
next nil if services.empty?
|
|
191
|
+
|
|
192
|
+
# Sum unique contributor counts from related services
|
|
193
|
+
total = services.sum do |service|
|
|
194
|
+
get(service, "activity/contributors/total").to_i
|
|
195
|
+
end
|
|
196
|
+
total.positive? ? total : nil
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
relation :realizes, :strategyCapabilities, :StrategyCapability
|
|
200
|
+
relation :realizes, :businessConstraints, :BusinessConstraint
|
|
201
|
+
relation :realizes, :businessRequirements, :BusinessRequirement
|
|
202
|
+
relation :servedBy, :businessActors, :BusinessActor
|
|
203
|
+
relation :servedBy, :applicationServices, :ApplicationService
|
|
204
|
+
relation :exposes, :applicationInterfaces, :ApplicationInterface
|
|
205
|
+
relation :provides, :complianceEvidences, :ComplianceEvidence
|
|
206
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# BusinessRequirement represents functional or non-functional requirements
|
|
4
|
+
class Archsight::Resources::BusinessRequirement < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents a statement of need that must be realized by the architecture.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Motivation
|
|
13
|
+
**Aspect:** Passive Structure
|
|
14
|
+
|
|
15
|
+
A requirement represents a statement of need defining a property that applies to a
|
|
16
|
+
specific system. Requirements can be functional (what the system should do) or
|
|
17
|
+
non-functional (how the system should behave).
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Use BusinessRequirement to represent:
|
|
22
|
+
|
|
23
|
+
- Compliance requirements (C5, ISO 27001)
|
|
24
|
+
- Security requirements
|
|
25
|
+
- Performance requirements
|
|
26
|
+
- Functional specifications
|
|
27
|
+
- Legal obligations (GDPR, NIS2)
|
|
28
|
+
MD
|
|
29
|
+
|
|
30
|
+
icon "task-list"
|
|
31
|
+
layer "business"
|
|
32
|
+
|
|
33
|
+
annotation "requirement/type",
|
|
34
|
+
description: "Type of requirement (business or legal)",
|
|
35
|
+
enum: %w[business legal compliance functional non-functional]
|
|
36
|
+
|
|
37
|
+
annotation "requirement/reference",
|
|
38
|
+
description: "Regulatory or standard reference (comma-separated for multiple)",
|
|
39
|
+
filter: :list,
|
|
40
|
+
enum: %w[c5-2020 itgs-2023 gdpr-2018 nis1 nis2 iso27001 sox pci-dss hipaa eu-data-act-2025 ens
|
|
41
|
+
iso27001-2022],
|
|
42
|
+
list: true
|
|
43
|
+
|
|
44
|
+
annotation "requirement/priority",
|
|
45
|
+
description: "Implementation priority (must, should, may)",
|
|
46
|
+
filter: :word,
|
|
47
|
+
enum: %w[must should may],
|
|
48
|
+
list: true
|
|
49
|
+
|
|
50
|
+
annotation "requirement/story",
|
|
51
|
+
description: "One-line business value statement explaining what the requirement enables",
|
|
52
|
+
title: "Story",
|
|
53
|
+
format: :markdown
|
|
54
|
+
|
|
55
|
+
relation :realizes, :outcomes, :MotivationOutcome
|
|
56
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# ComplianceEvidence represents proof of compliance with requirements
|
|
4
|
+
class Archsight::Resources::ComplianceEvidence < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents documentation or artifacts that demonstrate compliance with requirements.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Implementation & Migration
|
|
13
|
+
**Aspect:** Passive Structure
|
|
14
|
+
|
|
15
|
+
Compliance evidence represents tangible proof that a system or process meets specific
|
|
16
|
+
requirements. It bridges the gap between stated requirements and their actual
|
|
17
|
+
implementation in the architecture.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Use ComplianceEvidence to represent:
|
|
22
|
+
|
|
23
|
+
- Audit reports
|
|
24
|
+
- Security certifications
|
|
25
|
+
- Test results and reports
|
|
26
|
+
- Configuration documentation
|
|
27
|
+
- Process documentation
|
|
28
|
+
MD
|
|
29
|
+
|
|
30
|
+
icon "shield-check"
|
|
31
|
+
layer "business"
|
|
32
|
+
|
|
33
|
+
annotation "evidence/type",
|
|
34
|
+
description: "Type of evidence",
|
|
35
|
+
enum: %w[documentation process configuration audit-log technical-control]
|
|
36
|
+
|
|
37
|
+
annotation "evidence/status",
|
|
38
|
+
description: "Current status of evidence",
|
|
39
|
+
enum: %w[implemented partial not-implemented]
|
|
40
|
+
|
|
41
|
+
relation :satisfies, :businessRequirements, :BusinessRequirement
|
|
42
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# DataObject represents data structured for automated processing (ArchiMate Application Layer)
|
|
4
|
+
class Archsight::Resources::DataObject < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :generated
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents data structured for automated processing by applications.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Application
|
|
13
|
+
**Aspect:** Passive Structure
|
|
14
|
+
|
|
15
|
+
A data object represents data structured for automated processing. Data objects are
|
|
16
|
+
typically accessed and manipulated by application services and components, representing
|
|
17
|
+
the information model of the system.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Use DataObject to represent:
|
|
22
|
+
|
|
23
|
+
- API request/response schemas
|
|
24
|
+
- Database entities
|
|
25
|
+
- Message payloads
|
|
26
|
+
- Configuration structures
|
|
27
|
+
- Domain models
|
|
28
|
+
MD
|
|
29
|
+
|
|
30
|
+
icon "database"
|
|
31
|
+
layer "application"
|
|
32
|
+
|
|
33
|
+
annotation "data/application",
|
|
34
|
+
description: "Source API/application name",
|
|
35
|
+
title: "Application",
|
|
36
|
+
filter: :word
|
|
37
|
+
|
|
38
|
+
annotation "data/visibility",
|
|
39
|
+
description: "API visibility level",
|
|
40
|
+
title: "Visibility",
|
|
41
|
+
enum: %w[public private]
|
|
42
|
+
|
|
43
|
+
annotation "generated/variants",
|
|
44
|
+
description: "OpenAPI schema variants compacted into this DataObject",
|
|
45
|
+
title: "Schema Variants",
|
|
46
|
+
sidebar: false
|
|
47
|
+
|
|
48
|
+
relation :realizes, :businessConstraints, :BusinessConstraint
|
|
49
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# MotivationGoal represents a high-level statement of intent, direction, or desired end state
|
|
4
|
+
# for an organization and its stakeholders (ArchiMate Motivation Layer)
|
|
5
|
+
class Archsight::Resources::MotivationGoal < Archsight::Resources::Base
|
|
6
|
+
include_annotations :git, :architecture
|
|
7
|
+
|
|
8
|
+
description <<~MD
|
|
9
|
+
Represents a high-level statement of intent or desired end state for the organization.
|
|
10
|
+
|
|
11
|
+
## ArchiMate Definition
|
|
12
|
+
|
|
13
|
+
**Layer:** Motivation
|
|
14
|
+
**Aspect:** Behavior
|
|
15
|
+
|
|
16
|
+
A goal represents a high-level statement of intent, direction, or desired end state for
|
|
17
|
+
an organization and its stakeholders. Goals are typically refined into more specific
|
|
18
|
+
requirements that can be implemented.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
Use MotivationGoal to represent:
|
|
23
|
+
|
|
24
|
+
- Strategic objectives
|
|
25
|
+
- Business targets
|
|
26
|
+
- Quality goals
|
|
27
|
+
- Compliance objectives
|
|
28
|
+
- Performance targets
|
|
29
|
+
MD
|
|
30
|
+
|
|
31
|
+
icon "archery"
|
|
32
|
+
layer "motivation"
|
|
33
|
+
|
|
34
|
+
relation :realizes, :outcomes, :MotivationOutcome
|
|
35
|
+
relation :refinedBy, :goals, :MotivationGoal
|
|
36
|
+
relation :realizes, :businessRequirements, :BusinessRequirement
|
|
37
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# MotivationOutcome represents an end result, effect, or consequence of a certain state of affairs
|
|
4
|
+
# (ArchiMate Motivation Layer)
|
|
5
|
+
class Archsight::Resources::MotivationOutcome < Archsight::Resources::Base
|
|
6
|
+
include_annotations :git, :architecture
|
|
7
|
+
|
|
8
|
+
description <<~MD
|
|
9
|
+
Represents an end result that has been achieved or is intended to be achieved.
|
|
10
|
+
|
|
11
|
+
## ArchiMate Definition
|
|
12
|
+
|
|
13
|
+
**Layer:** Motivation
|
|
14
|
+
**Aspect:** Passive Structure
|
|
15
|
+
|
|
16
|
+
An outcome represents an end result that has been achieved. Outcomes are measurable
|
|
17
|
+
results that indicate whether goals have been reached, providing concrete evidence
|
|
18
|
+
of progress or success.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
Use MotivationOutcome to represent:
|
|
23
|
+
|
|
24
|
+
- Achieved milestones
|
|
25
|
+
- Measurable results
|
|
26
|
+
- Key performance indicators (KPIs)
|
|
27
|
+
- Success criteria
|
|
28
|
+
- Deliverables
|
|
29
|
+
MD
|
|
30
|
+
|
|
31
|
+
icon "badge-check"
|
|
32
|
+
layer "motivation"
|
|
33
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# MotivationStakeholder represents the role of an individual, team, or organization
|
|
4
|
+
# that represents their interests in the effects of the architecture (ArchiMate Motivation Layer)
|
|
5
|
+
class Archsight::Resources::MotivationStakeholder < Archsight::Resources::Base
|
|
6
|
+
include_annotations :git, :architecture
|
|
7
|
+
|
|
8
|
+
description <<~MD
|
|
9
|
+
Represents the interest of an individual, team, or organization in the architecture.
|
|
10
|
+
|
|
11
|
+
## ArchiMate Definition
|
|
12
|
+
|
|
13
|
+
**Layer:** Motivation
|
|
14
|
+
**Aspect:** Active Structure
|
|
15
|
+
|
|
16
|
+
A stakeholder represents the role of an individual, team, or organization that
|
|
17
|
+
represents their interests in the effects of the architecture. Stakeholders have
|
|
18
|
+
concerns about capabilities, requirements, and constraints.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
Use MotivationStakeholder to represent:
|
|
23
|
+
|
|
24
|
+
- Product owners
|
|
25
|
+
- Executive sponsors
|
|
26
|
+
- Customer representatives
|
|
27
|
+
- Regulatory bodies
|
|
28
|
+
- Technical leadership
|
|
29
|
+
MD
|
|
30
|
+
|
|
31
|
+
icon "user-crown"
|
|
32
|
+
layer "motivation"
|
|
33
|
+
|
|
34
|
+
relation :hasConcern, :strategyCapabilities, :StrategyCapability
|
|
35
|
+
relation :hasConcern, :businessRequirements, :BusinessRequirement
|
|
36
|
+
relation :hasConcern, :businessConstraints, :BusinessConstraint
|
|
37
|
+
relation :hasConcern, :goals, :MotivationGoal
|
|
38
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# StrategyCapability represents a strategic ability or function (ArchiMate Strategy Layer)
|
|
4
|
+
class Archsight::Resources::StrategyCapability < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents an ability that an organization possesses to achieve specific outcomes.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Strategy
|
|
13
|
+
**Aspect:** Behavior
|
|
14
|
+
|
|
15
|
+
A capability represents an ability that an active structure element, such as an
|
|
16
|
+
organization, possesses. Capabilities are realized through a combination of people,
|
|
17
|
+
processes, and technology working together.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Use StrategyCapability to represent:
|
|
22
|
+
|
|
23
|
+
- Business capabilities (e.g., "Customer Provisioning")
|
|
24
|
+
- Technical capabilities (e.g., "Automated Deployment")
|
|
25
|
+
- Organizational abilities
|
|
26
|
+
- Core competencies
|
|
27
|
+
- Value-generating functions
|
|
28
|
+
MD
|
|
29
|
+
|
|
30
|
+
icon "strategy"
|
|
31
|
+
layer "strategy"
|
|
32
|
+
|
|
33
|
+
relation :realizes, :businessConstraints, :BusinessConstraint
|
|
34
|
+
relation :realizes, :businessRequirements, :BusinessRequirement
|
|
35
|
+
relation :servedBy, :businessActors, :BusinessActor
|
|
36
|
+
relation :servedBy, :applicationServices, :ApplicationService
|
|
37
|
+
relation :servedBy, :businessProcesses, :BusinessProcess
|
|
38
|
+
end
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "uri"
|
|
4
|
+
|
|
5
|
+
# TechnologyArtifact usually a source code repository or container
|
|
6
|
+
class Archsight::Resources::TechnologyArtifact < Archsight::Resources::Base
|
|
7
|
+
include_annotations :git, :architecture, :generated
|
|
8
|
+
|
|
9
|
+
description <<~MD
|
|
10
|
+
Represents a source code repository or container artifact.
|
|
11
|
+
|
|
12
|
+
## ArchiMate Definition
|
|
13
|
+
|
|
14
|
+
**Layer:** Technology
|
|
15
|
+
**Aspect:** Passive Structure
|
|
16
|
+
|
|
17
|
+
An artifact represents a piece of data that is used or produced in a software development
|
|
18
|
+
process, or by deployment and operation of an IT system. In this tool, artifacts primarily
|
|
19
|
+
represent source code repositories.
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
Use TechnologyArtifact to represent:
|
|
24
|
+
|
|
25
|
+
- Git repositories
|
|
26
|
+
- Container images
|
|
27
|
+
- Build artifacts
|
|
28
|
+
- Configuration packages
|
|
29
|
+
MD
|
|
30
|
+
|
|
31
|
+
icon "puzzle"
|
|
32
|
+
layer "technology"
|
|
33
|
+
|
|
34
|
+
# Artifact classification
|
|
35
|
+
annotation "artifact/type",
|
|
36
|
+
description: "Type of technology artifact",
|
|
37
|
+
title: "Artifact Type",
|
|
38
|
+
enum: %w[repo container chart deb rpm]
|
|
39
|
+
|
|
40
|
+
# Dynamic annotations (patterns with *)
|
|
41
|
+
annotation "link/*",
|
|
42
|
+
description: "Documentation and resource links",
|
|
43
|
+
sidebar: false
|
|
44
|
+
annotation "scc/language/*/loc",
|
|
45
|
+
description: "Lines of code per programming language",
|
|
46
|
+
sidebar: false
|
|
47
|
+
annotation "scc/languages",
|
|
48
|
+
description: "Comma-separated list of programming languages",
|
|
49
|
+
filter: :list,
|
|
50
|
+
title: "Languages",
|
|
51
|
+
sidebar: false
|
|
52
|
+
annotation "scc/estimatedCost",
|
|
53
|
+
description: "Estimated project cost",
|
|
54
|
+
title: "Estimated Cost",
|
|
55
|
+
type: Float
|
|
56
|
+
annotation "scc/estimatedScheduleMonths",
|
|
57
|
+
description: "Estimated schedule in months",
|
|
58
|
+
title: "Estimated Schedule",
|
|
59
|
+
type: Float
|
|
60
|
+
annotation "scc/estimatedPeople",
|
|
61
|
+
description: "Estimated number of people required",
|
|
62
|
+
title: "Estimated People",
|
|
63
|
+
type: Float
|
|
64
|
+
annotation "activity/commits",
|
|
65
|
+
description: "Monthly commit counts (comma-separated, oldest to newest)",
|
|
66
|
+
title: "Commits",
|
|
67
|
+
sidebar: false
|
|
68
|
+
annotation "activity/contributors",
|
|
69
|
+
description: "Monthly unique contributor counts (comma-separated, oldest to newest)",
|
|
70
|
+
title: "Contributors",
|
|
71
|
+
sidebar: false
|
|
72
|
+
annotation "activity/status",
|
|
73
|
+
description: "Repository activity status",
|
|
74
|
+
title: "Activity Status",
|
|
75
|
+
enum: %w[active abandoned bot-only archived],
|
|
76
|
+
list: true
|
|
77
|
+
annotation "activity/busFactor",
|
|
78
|
+
description: "Bus factor assessment",
|
|
79
|
+
title: "Bus Factor",
|
|
80
|
+
enum: %w[high medium low unknown],
|
|
81
|
+
list: true
|
|
82
|
+
annotation "activity/createdAt",
|
|
83
|
+
description: "Date of first commit (repository creation)",
|
|
84
|
+
title: "Created",
|
|
85
|
+
type: Time
|
|
86
|
+
annotation "agentic/tools",
|
|
87
|
+
description: "Agentic tools detected in repository",
|
|
88
|
+
title: "Agentic Tools",
|
|
89
|
+
filter: :list,
|
|
90
|
+
enum: %w[claude cursor aider github-copilot agents none]
|
|
91
|
+
annotation "workflow/platforms",
|
|
92
|
+
description: "CI/CD workflow platforms",
|
|
93
|
+
title: "Workflow Platforms",
|
|
94
|
+
filter: :list,
|
|
95
|
+
enum: %w[github-actions gitlab-ci makefile none]
|
|
96
|
+
annotation "workflow/types",
|
|
97
|
+
description: "CI/CD workflow types",
|
|
98
|
+
title: "Workflow Types",
|
|
99
|
+
filter: :list,
|
|
100
|
+
enum: %w[build test unit-test integration-test smoke-test deploy lint security-scan dependency-update
|
|
101
|
+
ticket-creation none]
|
|
102
|
+
|
|
103
|
+
# Urls for for git, chart repo, container repo
|
|
104
|
+
annotation "repository/artifacts",
|
|
105
|
+
description: "Types of artifacts produced by this repository",
|
|
106
|
+
title: "Artifacts",
|
|
107
|
+
filter: :list,
|
|
108
|
+
enum: %w[container chart debian rpm binary none]
|
|
109
|
+
annotation "repository/git",
|
|
110
|
+
description: "Git repository URL",
|
|
111
|
+
title: "Git Repository",
|
|
112
|
+
type: URI
|
|
113
|
+
annotation "repository/chart",
|
|
114
|
+
description: "Helm chart repository URL",
|
|
115
|
+
title: "Chart Repository",
|
|
116
|
+
type: URI
|
|
117
|
+
annotation "repository/container",
|
|
118
|
+
description: "Container registry URL",
|
|
119
|
+
title: "Container Repository",
|
|
120
|
+
type: URI
|
|
121
|
+
annotation "repository/visibility",
|
|
122
|
+
description: "Repository visibility classification",
|
|
123
|
+
title: "Visibility",
|
|
124
|
+
enum: %w[internal open-source public]
|
|
125
|
+
annotation "deployment/images",
|
|
126
|
+
description: "OCI container image names published by this repository",
|
|
127
|
+
title: "Container Images",
|
|
128
|
+
sidebar: false,
|
|
129
|
+
filter: :list
|
|
130
|
+
annotation "deployment/privileges/user",
|
|
131
|
+
description: "User privilege level for deployment",
|
|
132
|
+
title: "Deployment User Privileges",
|
|
133
|
+
enum: %w[as-root as-root-gvisor as-user-gvisor as-user-reduced-priviledges
|
|
134
|
+
as-user-reduced-priviledges-gvisor]
|
|
135
|
+
annotation "deployment/privileges/container",
|
|
136
|
+
description: "Container privilege level",
|
|
137
|
+
title: "Deployment Container Privileges",
|
|
138
|
+
enum: %w[unprivileged privileged]
|
|
139
|
+
|
|
140
|
+
# Contributor metrics (unique counts, stored during import)
|
|
141
|
+
annotation "activity/contributors/6m",
|
|
142
|
+
title: "Contributors (6 months)",
|
|
143
|
+
description: "Unique contributors in the last 6 months",
|
|
144
|
+
type: Integer
|
|
145
|
+
annotation "activity/contributors/total",
|
|
146
|
+
title: "Contributors (total)",
|
|
147
|
+
description: "Total unique contributors",
|
|
148
|
+
type: Integer
|
|
149
|
+
|
|
150
|
+
relation :servedBy, :technologyComponents, :TechnologyArtifact
|
|
151
|
+
relation :suppliedBy, :technologyComponents, :TechnologyService
|
|
152
|
+
relation :maintainedBy, :businessActors, :BusinessActor
|
|
153
|
+
relation :contributedBy, :businessActors, :BusinessActor
|
|
154
|
+
end
|