diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7edc3a5..32e588a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,5 +4,5 @@
-
+
\ No newline at end of file
diff --git a/clara-app/src/main/resources/config.yml b/clara-app/src/main/resources/config.yml
index c8dfac5..7cbb466 100644
--- a/clara-app/src/main/resources/config.yml
+++ b/clara-app/src/main/resources/config.yml
@@ -10,12 +10,12 @@ aggregation:
aggregators:
kube-api:
dns:
- logs-since-time: 2024-03-27T00:00:00Z
+ logs-since-time: 2024-12-14T00:00:00Z
use-logs-from-file: false
path-to-dns-logs: "/home/user/clara/dnslogs"
open-telemetry:
listen-port: 7878
- listen-duration: 10 seconds
+ listen-duration: 60 seconds
syft-sbom:
sbom-file-path: sbom/
use-stored-sbom-files: true
@@ -28,8 +28,6 @@ filter:
remove-component-versions: false
remove-component-endpoints: false
remove-components-by-names:
- - my-otel-demo-otelcol
- - my-otel-demo-jaeger-.*
- otel-collector-service
- .*in-addr.arpa
@@ -39,7 +37,7 @@ export:
output-type: SVG
output-file: generated/architecture.svg
gropius:
- project-id: 3a9b8ed9-19e4-4346-9cc9-ce5ea092cc66
+ project-id: ${CLARA_GROPIUS_PROJECT_ID}
graphql-backend-url: http://localhost:8080/graphql
graphql-backend-authentication:
authentication-url: http://localhost:3000/auth/oauth/token
diff --git a/docs/content/setup/index.md b/docs/content/setup/index.md
index 9f8d73d..3b8cafd 100644
--- a/docs/content/setup/index.md
+++ b/docs/content/setup/index.md
@@ -5,8 +5,8 @@ These instructions will walk you through the initial installation and setup of t
---
## 1. Prerequisites
-### 1.1. getting CLARA
-- clone the [CLARA repository](https://github.com/ccims/clara)
+### 1.1. Getting CLARA
+- Clone the [CLARA repository](https://github.com/ccims/clara).
```sh
git clone https://github.com/ccims/clara.git
@@ -49,22 +49,25 @@ CLARA utilizes the [opentelemetry auto-instrumentation](https://opentelemetry.io
```
- Install the OpenTelemetry collector into the target namespace:
```sh
- kubectl apply -f /deployment/open-telemetry-collector/configmap.yml
- kubectl apply -f /deployment/open-telemetry-collector/deployment.yml
+ kubectl -n apply -f /deployment/open-telemetry-collector/configmap.yml
+ kubectl -n apply -f /deployment/open-telemetry-collector/deployment.yml
```
- Add the instrumentation object into the target namespace:
```sh
- kubectl apply -f /deployment/open-telemetry-collector/autoinstrumentation.yml
+ kubectl -n apply -f /deployment/open-telemetry-collector/autoinstrumentation.yml
```
-- Instrument all existing deployments (that use below listed frameworks/technology) in the target namespace by configuring the `.yaml`:
+- In the target namespace, instrument all existing deployments with the respective technology/framework of the application by configuring each `deployment.yaml` individually:
```yml
- metadata:
- annotations:
- instrumentation.opentelemetry.io/inject-java: "true"
- instrumentation.opentelemetry.io/inject-dotnet: "true"
- instrumentation.opentelemetry.io/inject-go: "true"
- instrumentation.opentelemetry.io/inject-nodejs: "true"
- instrumentation.opentelemetry.io/inject-python: "true"
+ spec:
+ template:
+ metadata:
+ annotations:
+ # choose one or more of the following for each deployment
+ instrumentation.opentelemetry.io/inject-java: "true"
+ instrumentation.opentelemetry.io/inject-dotnet: "true"
+ instrumentation.opentelemetry.io/inject-go: "true"
+ instrumentation.opentelemetry.io/inject-nodejs: "true"
+ instrumentation.opentelemetry.io/inject-python: "true"
```
### 2.2. CoreDNS
@@ -80,7 +83,8 @@ Please consult the documentation of your respective provider.
```txt
[INFO] 10.244.0.19:35065 - 3179 "A IN kubernetes.default.svc.cluster.local.svc.cluster.local. udp 72 false 512" NXDOMAIN qr,aa,rd 165 0.0000838s
```
-- If you don't see such logs, configure your kube-dns accordingly, based on your service-provider.
+- If you don't see such logs, configure your kube-dns accordingly, based on your service-provider (you can check [this docs page](../aggregation/platforms/kubernetes/dns/index.md), too).
+- Note, that if there is zero traffic in the cluster probably no DNS resolution logs will be there.
### 2.3. Install anchore/syft
CLARA uses syft to generate SBOMs from container images.
@@ -108,14 +112,15 @@ macOS:
```
- If you want to use the Gropius exporter, set the Gropius environment variables:
```sh
- export CLARA_GROPIUS_GRAPHQL_CLIENT_ID=
- export CLARA_GROPIUS_GRAPHQL_CLIENT_SECRET=
+ export CLARA_GROPIUS_GRAPHQL_CLIENT_ID=
+ export CLARA_GROPIUS_GRAPHQL_CLIENT_SECRET=
+ export CLARA_GROPIUS_PROJECT_ID=
```
- Start CLARA by executing the application:
```sh
java -jar clara-app/build/libs/clara-app-*.jar
```
-- Run ktunnel:
+- Run ktunnel in parallel to ensure spans are forwarded to CLARA:
```sh
ktunnel inject deployment otel-collector-deployment 7878 -n
```
diff --git a/docs/content/validation/t2-reference-architecture/index.md b/docs/content/validation/t2-reference-architecture/index.md
index 8ad8089..504de5c 100644
--- a/docs/content/validation/t2-reference-architecture/index.md
+++ b/docs/content/validation/t2-reference-architecture/index.md
@@ -1,7 +1,149 @@
-# T2-Reference-Architecture
+# Evaluation against T2-Reference-Architecture
-CLARA will be evaluated against the [T2-Microservice-Reference-Architecture](https://t2-documentation.readthedocs.io/en/latest/index.html).
+CLARA has been evaluated against the [T2-Project Reference-Architecture (Microservices)](https://t2-documentation.readthedocs.io/en/latest/index.html).
-## Setup
+Follow this guideline step-by-step to recreate the evaluation of CLARA using the T2-Project, locally on a [minikube](https://minikube.sigs.k8s.io/docs/) cluster.
-Follow the [deployment instructions](https://t2-documentation.readthedocs.io/en/latest/microservices/deploy.html) from the documentation.
+
+## Step-By-Step Setup and Execution Instructions
+The setup consists of the Gropius setup, the minikube setup, the T2-Project setup, and the CLARA setup.
+
+## 1. Gropius Setup:
+### 1.1 Getting Gropius
+
+- Clone the [Gropius repository](https://github.com/ccims/gropius) recursive with all submodules.
+
+ ```sh
+ git clone --recurse-submodules https://github.com/ccims/gropius.git
+ ```
+ or
+ ```sh
+ git clone --recurse-submodules git@github.com:ccims/gropius.git
+ ```
+!!! warning "Docker Installation"
+Make sure you have a local container environment (e.g. Docker) installed and configured on your machine.
+
+- Locally deploy the Gropius testing environment using docker-compose:
+ ```sh
+ docker-compose -f docker-compose-testing.yaml up -d
+ ```
+- Check availability by visiting http://localhost:4200.
+
+### 1.2 Creating Gropius OAuth Client
+- To authenticate against Gropius you need an OAuth2 client. You can create one in the Gropius UI.
+- Open Gropius in your browser under http://localhost:4200 and log in as the default admin (admin/admin).
+- Click on the tab `Admin` in the top menu, then select `OAuth2` on the left menu.
+- On the right menu hit the `+` to create a new OAuth2 client.
+- In the opening dialog enter the following:
+ - Name: `CLARA`
+ - Redirect URLs: `http://localhost:7878`
+ - Client credential flow user: type 'admin' and select the `Admin` account.
+ - Check `requires secret`.
+ - Check `is valid`.
+ - Hit `Create auth client`.
+- Now, you should see an entry named `CLARA` in the list.
+ - On the right, click the `ID`-icon and copy the client-id and store it where you find it again.
+ - On the right, click the key-symbol and create a new secret access key. Copy it **immediately** as you won't see it again and store it next to the client-id.
+
+### 1.3 Create Gropius Project
+- Create a new Project in Gropius by again opening the Gropius UI under http://localhost:4200 and logging in as the default admin (admin/admin).
+- Click on the tab `Projects` in the top menu.
+- On the right menu hit the `+` to create a Project:
+ - Enter any name that suites you.
+ - Enter any description that suites you.
+ - For repository URL simply enter: `https://example.org`
+ - Hit `create project`.
+- Click on the newly created project in the list and copy the project's UUID from the URL and store it where you find it again.
+
+### 1.4 Import Gropius Default Templates
+- The Gropius metamodel is ontological and works with templates.
+- To install the templates necessary for CLARA, you need to import them into Gropius.
+- Clone the [template-importer](https://github.com/ccims/template-importer).
+ ```sh
+ git clone https://github.com/ccims/template-importer.git
+ ```
+ or
+ ```sh
+ git clone git@github.com:ccims/template-importer.git
+ ```
+- Make sure you have npm installed.
+- In the base directory of the template-importer run:
+ ```sh
+ npm i
+ npm run build
+ ```
+- Next, run the import script. Make sure you use your configured OAuth2 client-id and -secret:
+ ```sh
+ npm start /gropius_templates.json http://localhost:4200
+ ```
+
+## 2. Setup minikube and kubectl
+- Install **minikube** for your local environment as described in their [official docs](https://minikube.sigs.k8s.io/docs/start).
+- Ensure that [kubectl](https://kubernetes.io/docs/reference/kubectl/) is installed on your machine.
+- Start minikube with your preferred configuration. The default is:
+ ```sh
+ minikube start
+ ```
+- Verify minikube is the configured context:
+ ```sh
+ kubectl ctx
+ ```
+- Create a new namespace called `clara` in the minikube cluster:
+ ```sh
+ kubectl create ns clara
+ ```
+
+## 3. T2-Project Configuration
+- Clone the [T2-Project's devops subproject](https://github.com/t2-project/devops).
+ ```sh
+ git clone https://github.com/t2-project/devops.git
+ ```
+ or
+ ```sh
+ git clone git@github.com:t2-project/devops.git
+ ```
+- Navigate to the directory `devops/k8s/t2-microservices/base`, where you find the deployment manifests for the T2-Project microservices.
+- Insert the following into each of the `Deployment` part of the respective yaml file (except for the postgres services):
+ ```yaml
+ spec:
+ template:
+ metadata:
+ annotations:
+ instrumentation.opentelemetry.io/inject-java: "true"
+ ```
+- You will deploy the microservices below in [5. Deploy T2-Project](#5-deploy-t2-project) **after** the CLARA setup.
+## 4. CLARA Setup
+- Setup CLARA on your local machine as described in steps 1 and 2 on the [setup page](../../setup/index.md#1-prerequisites).
+ - Use `clara` as the target namespace.
+ - In step 2.1 you can skip the injection of the annotations into the deployments, as you have already done this.
+- **DO NOT RUN CLARA YET**, as the T2-Project is not yet deployed.
+
+## 5. Deploy T2-Project
+- In the T2-Project's `devops`-repository navigate back to `devops/k8s` and execute the following to install the T2-Project into the cluster:
+ ```sh
+ chmod +x ./start-microservices.sh
+ ./start-microservices.sh clara
+ ```
+- Describe the pods with `kubectl -n clara describe pod ` and ensure they have `OTLP` attributes inside the description-yaml.
+ - If not, check the OpenTelemetry auto-instrumentation [troubleshooting page](https://opentelemetry.io/docs/kubernetes/operator/troubleshooting/automatic/).
+- For further questions regarding the T2-Project, check the official [deployment instructions](https://t2-documentation.readthedocs.io/en/latest/microservices/deploy.html).
+
+
+## 6. Execution
+### 6.1 Create Traffic
+- Create traffic during the execution by manually clicking around the web shop.
+- To do that, create a port forward to the T2-Project UI from your shell:
+ ```sh
+ kubectl -n clara port-forward svc/ui 7000:80
+ ```
+- Open the shop under http://localhost:7000/ui/products and click around the shop and order some tea to create traffic.
+
+### 6.2 Execute CLARA
+- Execute CLARA as described in step 3 on the [setup page](../../setup/index.md#3-run-clara).
+- You can use the default config as provided. No need to change anything.
+- Check the CLARA logs during execution and ensure spans are coming in, when clicking around the web shop.
+
+### 6.3 Visit the results
+- CLARA should now execute without any issues.
+- If so, in the end open the Gropius UI under http://localhost:4200 and open your project.
+- You should see the recovered architecture of the T2-Project in the UI now.
\ No newline at end of file
diff --git a/gropius_templates.json b/gropius_templates.json
new file mode 100644
index 0000000..51685c2
--- /dev/null
+++ b/gropius_templates.json
@@ -0,0 +1,475 @@
+[
+ {
+ "type": "IssueTemplate",
+ "name": "IssueTemplate",
+ "description": "The default issue template",
+ "issueTypes": [
+ {
+ "name": "Bug",
+ "description": "A bug in the system",
+ "iconPath": "M 50 15.625 C 58.6294 15.625 65.625 22.6206 65.625 31.25 C 65.625 32.3199 65.5175 33.3648 65.3126 34.3742 C 65.7837 34.7252 66.2367 35.107 66.6666 35.513 L 77.6114 25.7893 L 81.7636 30.4607 L 70.2836 40.6668 C 71.1084 42.5697 71.5656 44.669 71.5656 46.875 C 71.5656 47.6383 71.5096 48.4002 71.3984 49.1547 L 84.934 51.6129 L 83.816 57.7621 L 70.191 55.2813 L 68.3254 64.6063 L 80.5257 79.2494 L 75.7243 83.2506 L 65.7441 71.2773 C 62.9055 75.4551 58.1234 78.125 52.8156 78.125 L 47.1844 78.125 C 41.8752 78.125 37.0921 75.4537 34.2537 71.2742 L 24.2757 83.2506 L 19.4743 79.2494 L 31.6722 64.6063 L 29.8066 55.2813 L 16.184 57.7621 L 15.066 51.6129 L 28.6015 49.1561 C 28.16 46.1813 28.594 43.2594 29.7194 40.6663 L 18.2364 30.4607 L 22.3886 25.7893 L 33.3272 35.5161 C 33.7582 35.1081 34.2134 34.7237 34.6913 34.3653 C 34.4821 33.3608 34.375 32.3179 34.375 31.25 C 34.375 22.6206 41.3706 15.625 50 15.625 Z M 64.5719 43.2094 L 64.3533 42.7331 C 64.3059 42.6369 64.2569 42.5417 64.2063 42.4474 L 64.3525 42.7314 C 64.273 42.5703 64.189 42.4119 64.1007 42.2562 L 64.2063 42.4474 C 64.1192 42.2852 64.0274 42.1258 63.9313 41.9695 L 64.1007 42.2562 C 64.0111 42.0981 63.9169 41.943 63.8185 41.7908 L 63.9313 41.9695 C 63.8472 41.8328 63.7597 41.6984 63.6689 41.5665 L 63.8185 41.7908 C 63.6999 41.6073 63.575 41.4282 63.4441 41.2538 L 63.6689 41.5665 C 63.5677 41.4195 63.4625 41.2756 63.3533 41.1348 L 63.4441 41.2538 C 63.3406 41.1159 63.2334 40.9809 63.1226 40.849 L 63.3533 41.1348 C 63.2472 40.9979 63.1373 40.8641 63.0239 40.7333 L 62.6891 40.3694 L 62.6891 40.3694 C 62.4039 40.0732 62.0993 39.7958 61.7775 39.5392 C 61.724 39.4957 61.6705 39.454 61.6166 39.4129 L 61.6167 39.4138 L 61.3041 39.1849 C 61.2357 39.1371 61.1667 39.0902 61.097 39.0442 L 60.7513 38.8268 C 60.6863 38.7878 60.6208 38.7497 60.5548 38.7123 L 60.7499 38.8263 C 60.5929 38.7322 60.4329 38.6426 60.2701 38.5577 L 60.5548 38.7123 C 60.3706 38.6079 60.1825 38.5096 59.9908 38.4176 L 60.2701 38.5577 C 60.0853 38.4612 59.8968 38.3708 59.705 38.2865 L 59.7036 38.2858 L 59.4443 38.1767 C 59.4277 38.17 59.4111 38.1633 59.3945 38.1568 L 59.1603 38.0675 L 59.1603 38.0675 L 58.8726 37.9676 C 58.8497 37.9601 58.8267 37.9526 58.8038 37.9453 C 58.6626 37.9001 58.522 37.8587 58.3802 37.8206 L 58.8038 37.9453 C 58.6003 37.8801 58.3939 37.8217 58.1847 37.7703 L 57.6142 37.649 C 57.5915 37.6449 57.5688 37.6409 57.5461 37.6369 L 57.6146 37.649 C 57.4203 37.614 57.2239 37.585 57.0256 37.5621 L 57.5461 37.6369 C 57.2006 37.5773 56.8487 37.5366 56.4914 37.5159 L 55.9406 37.5 L 44.0594 37.5 C 43.7266 37.5 43.3942 37.5177 43.0637 37.553 C 43.0644 37.5579 43.0653 37.5589 43.0662 37.5599 L 42.7041 37.5985 L 42.7041 37.5985 L 42.2208 37.6821 L 42.2208 37.6821 L 41.6173 37.8233 C 41.5677 37.8366 41.5184 37.8503 41.4692 37.8644 C 41.3176 37.9078 41.1667 37.9551 41.0177 38.006 L 41.4692 37.8644 C 41.0797 37.9759 40.7023 38.1111 40.3383 38.268 L 40.2982 38.2854 C 39.9383 38.4426 39.5917 38.6211 39.2595 38.819 C 39.2046 38.8517 39.1488 38.8857 39.0934 38.9203 L 39.2595 38.819 C 39.0964 38.9162 38.9367 39.0181 38.7807 39.1244 L 39.0934 38.9203 C 38.8677 39.0613 38.6489 39.2114 38.4374 39.37 L 38.4362 39.371 L 38.3298 39.452 C 38.2937 39.4799 38.2578 39.5081 38.2221 39.5365 L 38.0364 39.6884 L 38.0364 39.6884 L 37.8278 39.8689 C 37.7845 39.9075 37.7416 39.9464 37.6991 39.9857 L 37.6144 40.0651 L 37.6144 40.0651 L 37.4567 40.2181 C 37.4071 40.2674 37.358 40.3173 37.3095 40.3677 C 37.2567 40.4226 37.2048 40.4779 37.1536 40.5337 L 37.3095 40.3677 C 37.1804 40.5019 37.0553 40.6399 36.9345 40.7813 L 37.1536 40.5337 C 37.0168 40.6829 36.885 40.8364 36.7583 40.9938 L 36.9345 40.7813 C 36.8169 40.9189 36.7034 41.0599 36.5941 41.2039 L 36.7583 40.9938 C 36.4867 41.3313 36.2387 41.6872 36.0162 42.0586 C 35.9633 42.1468 35.9124 42.2349 35.863 42.3239 C 35.8119 42.4159 35.762 42.5092 35.7138 42.6033 L 35.863 42.3239 C 35.7853 42.4637 35.7111 42.6056 35.6405 42.7494 L 35.7138 42.6033 C 35.6292 42.7683 35.5494 42.9358 35.4746 43.1058 L 35.6405 42.7494 C 35.5502 42.9332 35.4659 43.1201 35.3877 43.3099 L 35.4746 43.1058 C 35.3924 43.2927 35.3161 43.4825 35.2461 43.6749 L 35.3877 43.3099 C 34.7718 44.8039 34.5355 46.4717 34.7741 48.1703 L 34.8665 48.7136 L 35.4472 51.6125 L 36.0597 54.6875 L 37.9915 64.3386 C 38.0442 64.6022 38.1077 64.8614 38.1814 65.1157 C 38.2209 65.252 38.2632 65.3863 38.3083 65.5191 L 38.1814 65.1157 C 38.2254 65.2674 38.273 65.4173 38.3241 65.5654 L 38.3083 65.5191 C 38.3642 65.6838 38.4244 65.8462 38.4889 66.0063 L 38.3241 65.5654 C 39.5533 69.1254 42.8239 71.6349 46.6292 71.8587 L 47.1844 71.875 L 52.8156 71.875 C 56.8837 71.875 60.4369 69.2611 61.7027 65.4866 C 61.7696 65.2871 61.8299 65.085 61.8837 64.8798 L 62.0085 64.3386 L 62.9993 59.375 L 63.0004 59.3719 L 65.1335 48.7136 C 65.2546 48.1082 65.3156 47.4924 65.3156 46.875 C 65.3156 45.7655 65.1228 44.701 64.769 43.7132 L 64.5719 43.2094 L 64.5719 43.2094 Z M 50 21.875 C 44.8223 21.875 40.625 26.0723 40.625 31.25 L 40.6377 31.6292 C 40.7562 31.6026 40.8754 31.5774 40.9951 31.5534 C 42.0041 31.3516 43.0305 31.25 44.0594 31.25 L 55.9406 31.25 C 57.1161 31.25 58.2613 31.3798 59.3626 31.6259 L 59.375 31.25 L 59.375 31.25 C 59.375 26.0723 55.1777 21.875 50 21.875 Z"
+ },
+ {
+ "name": "Feature",
+ "description": "A new feature",
+ "iconPath": "m 40.625 81.25 h 18.75 v 6.25 h -18.75 z m 0 -9.375 h 18.75 v 6.25 H 40.625 Z M 50 12.5 c -15.496 0 -28.125 12.629 -28.125 28.125 c 0 15.496 12.629 28.125 28.125 28.125 c 15.496 0 28.125 -12.629 28.125 -28.125 c 0 -15.496 -12.629 -28.125 -28.125 -28.125 z m 0 6.25 c 12.1182 0 21.875 9.7568 21.875 21.875 c 0 12.1182 -9.7568 21.875 -21.875 21.875 c -12.1182 0 -21.875 -9.7568 -21.875 -21.875 c 0 -12.1182 9.7568 -21.875 21.875 -21.875 z"
+ },
+ {
+ "name": "Task",
+ "description": "A task",
+ "iconPath": "m 46.875 62.5 h 6.25 v 6.25 h -6.25 z m 0 -31.25 h 6.25 v 25 H 46.875 Z M 50 15.625 C 31.0522 15.625 15.625 31.0522 15.625 50 C 15.625 68.9478 31.0522 84.375 50 84.375 C 68.9478 84.375 84.375 68.9478 84.375 50 C 84.375 31.0522 68.9478 15.625 50 15.625 Z m 0 6.25 c 15.57 0 28.125 12.555 28.125 28.125 c 0 15.57 -12.555 28.125 -28.125 28.125 c -15.57 0 -28.125 -12.555 -28.125 -28.125 c 0 -15.57 12.555 -28.125 28.125 -28.125 z"
+ },
+ {
+ "name": "Misc",
+ "description": "Miscellaneous",
+ "iconPath": "m 46.875 62.5 h 6.25 v 6.25 h -6.25 z m 0 -31.25 h 6.25 v 25 H 46.875 Z M 50 15.625 C 31.0522 15.625 15.625 31.0522 15.625 50 C 15.625 68.9478 31.0522 84.375 50 84.375 C 68.9478 84.375 84.375 68.9478 84.375 50 C 84.375 31.0522 68.9478 15.625 50 15.625 Z m 0 6.25 c 15.57 0 28.125 12.555 28.125 28.125 c 0 15.57 -12.555 28.125 -28.125 28.125 c -15.57 0 -28.125 -12.555 -28.125 -28.125 c 0 -15.57 12.555 -28.125 28.125 -28.125 z"
+ }
+ ],
+ "issueStates": [
+ {
+ "name": "Open",
+ "description": "The issue is open",
+ "isOpen": true
+ },
+ {
+ "name": "Completed",
+ "description": "The issue is completed",
+ "isOpen": false
+ },
+ {
+ "name": "Not planned",
+ "description": "The issue is not planned",
+ "isOpen": false
+ }
+ ],
+ "issuePriorities": [
+ {
+ "name": "High",
+ "description": "High priority",
+ "value": 3
+ },
+ {
+ "name": "Medium",
+ "description": "Medium priority",
+ "value": 2
+ },
+ {
+ "name": "Low",
+ "description": "Low priority",
+ "value": 1
+ }
+ ],
+ "assignmentTypes": [],
+ "relationTypes": [
+ {
+ "name": "Depends on",
+ "inverseName": "Depended on by",
+ "description": "Depends on another issue"
+ },
+ {
+ "name": "Duplicate",
+ "inverseName": "Duplicate",
+ "description": "Is a duplicate of another issue"
+ },
+ {
+ "name": "Part of",
+ "inverseName": "Has part",
+ "description": "Is part of another issue"
+ }
+ ],
+ "templatedFieldSpecifications": [
+ {
+ "name": "Estimated effort",
+ "value": {
+ "nullable": true,
+ "enum": [
+ "Low",
+ "Medium",
+ "High"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "baseComponentTemplate",
+ "name": "Base component template",
+ "description": "The base component template",
+ "stroke": {},
+ "componentVersionTemplate": {
+ "name": "Component version template",
+ "description": "The default component version template"
+ },
+ "abstract": true
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "hostableComponentTemplate",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "name": "Hostable component template",
+ "description": "The default hostable component template",
+ "extends": [
+ {
+ "ref": "baseComponentTemplate"
+ }
+ ],
+ "abstract": true
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "microserviceTemplate",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "name": "Microservice",
+ "description": "A microservice",
+ "shapeType": "HEXAGON",
+ "extends": [
+ {
+ "ref": "hostableComponentTemplate"
+ }
+ ]
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "infrastructureTemplate",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "name": "Infrastructure",
+ "description": "Infrastructure component",
+ "shapeType": "RECT",
+ "shapeRadius": 5,
+ "extends": [
+ {
+ "ref": "hostableComponentTemplate"
+ }
+ ]
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "databaseTemplate",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "name": "Database",
+ "description": "Database component",
+ "shapeType": "CIRCLE",
+ "extends": [
+ {
+ "ref": "hostableComponentTemplate"
+ }
+ ]
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "frontendTemplate",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "name": "Frontend",
+ "description": "Frontend component",
+ "shapeType": "RECT",
+ "extends": [
+ {
+ "ref": "hostableComponentTemplate"
+ }
+ ]
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "sidecarTemplate",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "name": "Sidecar",
+ "description": "Sidecar component",
+ "shapeType": "RHOMBUS",
+ "extends": [
+ {
+ "ref": "hostableComponentTemplate"
+ }
+ ]
+ },
+ {
+ "type": "ComponentTemplate",
+ "name": "Messaging",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "description": "Messaging component",
+ "shapeType": "RHOMBUS",
+ "shapeRadius": 5,
+ "extends": [
+ {
+ "ref": "hostableComponentTemplate"
+ }
+ ]
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "libraryTemplate",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "name": "Library",
+ "description": "Library component",
+ "shapeType": "ELLIPSE",
+ "extends": [
+ {
+ "ref": "baseComponentTemplate"
+ }
+ ]
+ },
+ {
+ "type": "ComponentTemplate",
+ "ref": "miscTemplate",
+ "default": {
+ "ref": "baseComponentTemplate"
+ },
+ "name": "Misc",
+ "description": "Miscellaneous component",
+ "shapeType": "RECT",
+ "extends": [
+ {
+ "ref": "hostableComponentTemplate"
+ }
+ ]
+ },
+ {
+ "type": "InterfaceSpecificationTemplate",
+ "ref": "baseInterfaceSpecificationTemplate",
+ "name": "Base interface specification template",
+ "description": "The base interface specification template",
+ "stroke": {},
+ "interfaceSpecificationVersionTemplate": {
+ "name": "Interface specification version template",
+ "description": "The default interface specification version template"
+ },
+ "interfacePartTemplate": {
+ "name": "Interface part template",
+ "description": "STOP"
+ },
+ "interfaceTemplate": {
+ "name": "Interface template",
+ "description": "The default interface template"
+ },
+ "interfaceDefinitionTemplate": {
+ "name": "Interface definition template",
+ "description": "The default interface definition template"
+ },
+ "abstract": true
+ },
+ {
+ "type": "InterfaceSpecificationTemplate",
+ "ref": "microserviceInterfaceSpecificationTemplate",
+ "default": {
+ "ref": "baseInterfaceSpecificationTemplate"
+ },
+ "name": "Microservice interface specification template",
+ "description": "The default microservice interface specification template",
+ "canBeVisibleOnComponents": [
+ {
+ "ref": "microserviceTemplate"
+ }
+ ],
+ "extends": [
+ {
+ "ref": "baseInterfaceSpecificationTemplate"
+ }
+ ],
+ "abstract": true
+ },
+ {
+ "type": "InterfaceSpecificationTemplate",
+ "default": {
+ "ref": "baseInterfaceSpecificationTemplate"
+ },
+ "name": "GraphQL",
+ "description": "A GraphQL interface",
+ "shapeType": "HEXAGON",
+ "extends": [
+ {
+ "ref": "microserviceInterfaceSpecificationTemplate"
+ }
+ ]
+ },
+ {
+ "type": "InterfaceSpecificationTemplate",
+ "default": {
+ "ref": "baseInterfaceSpecificationTemplate"
+ },
+ "name": "REST",
+ "description": "A REST interface",
+ "shapeType": "CIRCLE",
+ "extends": [
+ {
+ "ref": "microserviceInterfaceSpecificationTemplate"
+ }
+ ]
+ },
+ {
+ "type": "InterfaceSpecificationTemplate",
+ "default": {
+ "ref": "baseInterfaceSpecificationTemplate"
+ },
+ "name": "gRPC",
+ "description": "A gRPC interface",
+ "shapeType": "RHOMBUS",
+ "extends": [
+ {
+ "ref": "microserviceInterfaceSpecificationTemplate"
+ }
+ ]
+ },
+ {
+ "type": "InterfaceSpecificationTemplate",
+ "default": {
+ "ref": "baseInterfaceSpecificationTemplate"
+ },
+ "name": "Messaging consumer interface",
+ "description": "A messaging consumer interface",
+ "shapeType": "RHOMBUS",
+ "shapeRadius": 5,
+ "extends": [
+ {
+ "ref": "microserviceInterfaceSpecificationTemplate"
+ }
+ ]
+ },
+ {
+ "type": "RelationTemplate",
+ "name": "General relation",
+ "description": "A general relation",
+ "markerType": "ARROW",
+ "relationConditions": [
+ {
+ "from": [
+ {
+ "ref": "baseComponentTemplate"
+ },
+ {
+ "ref": "baseInterfaceSpecificationTemplate"
+ }
+ ],
+ "to": [
+ {
+ "ref": "baseComponentTemplate"
+ },
+ {
+ "ref": "baseInterfaceSpecificationTemplate"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "RelationTemplate",
+ "name": "Includes",
+ "description": "Includes another library",
+ "markerType": "FILLED_CIRCLE",
+ "relationConditions": [
+ {
+ "from": [
+ {
+ "ref": "baseComponentTemplate"
+ }
+ ],
+ "to": [
+ {
+ "ref": "libraryTemplate"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "RelationTemplate",
+ "name": "Calls",
+ "description": "Calls another component",
+ "markerType": "FILLED_TRIANGLE",
+ "relationConditions": [
+ {
+ "from": [
+ {
+ "ref": "baseComponentTemplate"
+ }
+ ],
+ "to": [
+ {
+ "ref": "microserviceInterfaceSpecificationTemplate"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "RelationTemplate",
+ "name": "Hosted on",
+ "description": "Hosted on another component",
+ "markerType": "TRIANGLE",
+ "relationConditions": [
+ {
+ "from": [
+ {
+ "ref": "hostableComponentTemplate"
+ }
+ ],
+ "to": [
+ {
+ "ref": "infrastructureTemplate"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "RelationTemplate",
+ "name": "Uses sidecar",
+ "description": "Uses a sidecar",
+ "markerType": "CIRCLE",
+ "relationConditions": [
+ {
+ "from": [
+ {
+ "ref": "microserviceTemplate"
+ },
+ {
+ "ref": "frontendTemplate"
+ }
+ ],
+ "to": [
+ {
+ "ref": "sidecarTemplate"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "RelationTemplate",
+ "name": "DB connection",
+ "description": "Uses a database connection",
+ "markerType": "DIAMOND",
+ "relationConditions": [
+ {
+ "from": [
+ {
+ "ref": "microserviceTemplate"
+ },
+ {
+ "ref": "miscTemplate"
+ }
+ ],
+ "to": [
+ {
+ "ref": "databaseTemplate"
+ }
+ ]
+ }
+ ]
+ }
+]
\ No newline at end of file