diff --git a/.github/workflows/data.yml b/.github/workflows/data.yml new file mode 100644 index 000000000..cdf3568a9 --- /dev/null +++ b/.github/workflows/data.yml @@ -0,0 +1,51 @@ +name: data CD + +on: + push: + workflow_dispatch: + +jobs: + # JOB to run change detection + changes: + runs-on: ubuntu-latest + # Set job outputs to values from filter step + outputs: + data: ${{ steps.filter.outputs.data }} + steps: + - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v2 + id: filter + with: + # the server is required in data, since apparently it is impossibly to schedule a job after another in GitHub + filters: | + data: + - '.github/**' + - 'data/**' + data-build: + needs: + - changes + if: ${{ needs.changes.outputs.data == 'true' }} + uses: ./.github/workflows/docker-build.yml + with: + image_suffix: data + context: ./data + dockerfile: Dockerfile + permissions: + contents: read + packages: write + data-deployment: + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + needs: + - data-build + steps: + - run: curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 && chmod +x /usr/local/bin/argocd + - run: argocd app actions run navigatum-prod restart --kind Deployment --resource-name data --auth-token ${{ secrets.ARGOCD_TOKEN }} --server ${{ secrets.ARGOCD_SERVER }} + data-staging-deployment: + if: github.ref != 'refs/heads/main' + runs-on: ubuntu-latest + needs: + - data-build + steps: + - run: curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 && chmod +x /usr/local/bin/argocd + - run: argocd app actions run pr-${{github.event.number}} restart --kind Deployment --resource-name data --auth-token ${{ secrets.ARGOCD_TOKEN }} --server ${{ secrets.ARGOCD_SERVER }} \ No newline at end of file diff --git a/.github/workflows/server.yml b/.github/workflows/server.yml index ac12b5a32..6298ac9db 100644 --- a/.github/workflows/server.yml +++ b/.github/workflows/server.yml @@ -10,7 +10,6 @@ jobs: runs-on: ubuntu-latest # Set job outputs to values from filter step outputs: - data: ${{ steps.filter.outputs.data_server }} server: ${{ steps.filter.outputs.data_server }} steps: - uses: actions/checkout@v3 @@ -23,46 +22,27 @@ jobs: - '.github/**' - 'data/**' - 'server/**' - data-build: + server-build: + uses: ./.github/workflows/docker-build.yml needs: - changes - if: ${{ needs.changes.outputs.data == 'true' }} - uses: ./.github/workflows/docker-build.yml + if: ${{ needs.changes.outputs.server == 'true' }} with: - image_suffix: data - context: ./data - dockerfile: Dockerfile + image_suffix: server + context: ./server + dockerfile: Dockerfile.server permissions: contents: read packages: write - data-deployment: - if: github.ref == 'refs/heads/main' - runs-on: ubuntu-latest - needs: - - data-build - steps: - - run: curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 && chmod +x /usr/local/bin/argocd - - run: argocd app actions run navigatum-prod restart --kind Deployment --resource-name data --auth-token ${{ secrets.ARGOCD_TOKEN }} --server ${{ secrets.ARGOCD_SERVER }} - - run: sleep 5 - data-staging-deployment: - if: github.ref != 'refs/heads/main' - runs-on: ubuntu-latest - needs: - - data-build - steps: - - run: curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 && chmod +x /usr/local/bin/argocd - - run: argocd app actions run pr-${{github.event.number}} restart --kind Deployment --resource-name data --auth-token ${{ secrets.ARGOCD_TOKEN }} --server ${{ secrets.ARGOCD_SERVER }} - - run: sleep 5 - server-build: + server-init-build: uses: ./.github/workflows/docker-build.yml needs: - - data-deployment - changes if: ${{ needs.changes.outputs.server == 'true' }} with: - image_suffix: server + image_suffix: server-init context: ./server - dockerfile: Dockerfile.server + dockerfile: Dockerfile.dbinit permissions: contents: read packages: write @@ -111,6 +91,7 @@ jobs: runs-on: ubuntu-latest needs: - server-build + - server-init-build - mieli-search-build steps: - run: curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 && chmod +x /usr/local/bin/argocd @@ -120,6 +101,7 @@ jobs: runs-on: ubuntu-latest needs: - server-build + - server-init-build - mieli-search-build steps: - run: curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 && chmod +x /usr/local/bin/argocd diff --git a/deployment/README.md b/deployment/README.md index 8785384e4..aeddc86e3 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -13,10 +13,10 @@ The documentation for the specific sub-services can be found in the respective d ## General description The general request-Flowchart is the following: -![Flowchart, on how the requests are routed](../resources/deployment/Flowchart.svg) +![Flowchart, on how the requests are routed](../resources/deployment/Flowchart.png) The project is layed out in this sense: -![deployment diagram, of how the different components interact](../resources/deployment/Deployment_Overview.svg) +![deployment diagram, of how the different components interact](../resources/deployment/Deployment_Overview.png) Genreral information: diff --git a/deployment/k3s/templates/deployments/server-deployment.yaml b/deployment/k3s/templates/deployments/server-deployment.yaml index b826a785b..198788264 100644 --- a/deployment/k3s/templates/deployments/server-deployment.yaml +++ b/deployment/k3s/templates/deployments/server-deployment.yaml @@ -27,6 +27,9 @@ spec: volumes: - name: tmp-server emptyDir: {} + initContainers: + - name: server-init-db + image: "ghcr.io/tum-dev/navigatum-server-init:{{ .Values.branch }}" containers: - name: server image: "ghcr.io/tum-dev/navigatum-server:{{ .Values.branch }}" @@ -36,6 +39,9 @@ spec: - secretRef: name: server-api-keys # MEILI_MASTER_KEY {{ end }} + env: + - name: DB_LOCATION + value: /tmp/server.db ports: - containerPort: 8080 name: api diff --git a/resources/deployment/Deployment_Overview.json b/resources/deployment/Deployment_Overview.json index 9606e2f19..7cf195bf9 100644 --- a/resources/deployment/Deployment_Overview.json +++ b/resources/deployment/Deployment_Overview.json @@ -1,112 +1,311 @@ { - "id": "85c9fbb3-07c0-4de1-aa00-a63f1a00add9", + "id": "fff57ff4-0cb4-4a36-8e81-bea4abd15f97", "title": "Deployment Overview", + "lastUpdate": "2022-01-25T20:57:46.530Z", + "diagramType": "DeploymentDiagram", "model": { "version": "2.0.0", "type": "DeploymentDiagram", - "size": { "width": 1920, "height": 900 }, - "interactive": { "elements": [], "relationships": [] }, + "size": { + "width": 1960, + "height": 1080 + }, + "interactive": { + "elements": [], + "relationships": [] + }, "elements": [ { "id": "c0793074-7fc3-43b1-9516-40491662a611", "name": "NavigaTUM", "type": "DeploymentNode", "owner": null, - "bounds": { "x": 520, "y": 30, "width": 730, "height": 600 }, + "bounds": { + "x": 540, + "y": 0, + "width": 860, + "height": 770 + }, "stereotype": "server" }, { "id": "df334929-e6b4-4769-88bc-19700962febd", - "name": "navigatum-data", + "name": "data", "type": "DeploymentComponent", "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 1000, "y": 310, "width": 210, "height": 100 } + "bounds": { + "x": 550, + "y": 470, + "width": 750, + "height": 160 + }, + "fillColor": "#d1d8e0" }, { - "id": "add565fd-86c3-4235-8693-db83cecf9f52", - "name": "Manual Fixes", - "type": "DeploymentArtifact", + "id": "aa8d7a5f-ade7-4edc-a512-ed985720699d", + "name": "compilation", + "type": "DeploymentComponent", "owner": "df334929-e6b4-4769-88bc-19700962febd", - "bounds": { "x": 1020, "y": 360, "width": 160, "height": 40 } + "bounds": { + "x": 760, + "y": 500, + "width": 170, + "height": 40 + } }, { - "id": "edb2bab5-7951-4f24-a627-bd29fe163468", - "name": "navigatum-webclient", + "id": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35", + "name": "scraping", "type": "DeploymentComponent", - "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 560, "y": 560, "width": 240, "height": 40 } + "owner": "df334929-e6b4-4769-88bc-19700962febd", + "bounds": { + "x": 1110, + "y": 580, + "width": 170, + "height": 40 + } }, { - "id": "6ceb0838-3430-4101-bb9f-aa9b17db8586", - "name": "search_data.json", - "type": "DeploymentInterface", - "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 890, "y": 160, "width": 20, "height": 20 } + "id": "2e00ad7d-bec9-49d1-a6b7-c2f3a3de8d21", + "name": "scraped data", + "type": "DeploymentArtifact", + "owner": "df334929-e6b4-4769-88bc-19700962febd", + "bounds": { + "x": 900, + "y": 580, + "width": 170, + "height": 40 + } }, { - "id": "9339d43b-3f54-4968-8c73-67570bdcc9ca", - "name": "server", - "type": "DeploymentComponent", - "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 560, "y": 250, "width": 240, "height": 40 } + "id": "31c465a1-97c5-4362-9327-234a6622b854", + "name": "manual data patches", + "type": "DeploymentArtifact", + "owner": "df334929-e6b4-4769-88bc-19700962febd", + "bounds": { + "x": 570, + "y": 580, + "width": 220, + "height": 40 + } }, { - "id": "8d265620-1519-419d-99ac-0dcbd1c4cca3", - "name": "MeiliSearch Instance", - "type": "DeploymentComponent", + "id": "6ceb0838-3430-4101-bb9f-aa9b17db8586", + "name": "search_data.json", + "type": "DeploymentInterface", "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 560, "y": 150, "width": 240, "height": 40 } + "bounds": { + "x": 1140, + "y": 140, + "width": 20, + "height": 20 + } }, { "id": "b622e87e-fa8f-42c5-b86a-5eb5a7a012f9", "name": "api_data.json", "type": "DeploymentInterface", "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 890, "y": 260, "width": 20, "height": 20 } - }, - { - "id": "580f24f1-068c-43f0-9c0e-2bf5b48b07ee", - "name": "rendertron", - "type": "DeploymentComponent", - "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 970, "y": 550, "width": 170, "height": 60 } + "bounds": { + "x": 1140, + "y": 240, + "width": 20, + "height": 20 + } }, { "id": "cbb4c7ec-e3f6-4e33-aa77-e3a369555c85", "name": "search_synonyms.json", "type": "DeploymentInterface", "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 890, "y": 190, "width": 20, "height": 20 } + "bounds": { + "x": 1140, + "y": 180, + "width": 20, + "height": 20 + } }, { "id": "9803c740-2a29-480a-b782-26b084e880e7", - "name": "Static Maps", + "name": "maps", "type": "DeploymentComponent", "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 560, "y": 450, "width": 240, "height": 40 }, + "bounds": { + "x": 550, + "y": 310, + "width": 540, + "height": 150 + }, + "fillColor": "#d1d8e0", "strokeColor": "black", "textColor": "black" }, { - "id": "b75b552e-dd63-4453-a22f-79294fc74773", - "name": "Sitemaps", - "type": "DeploymentInterface", - "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 890, "y": 500, "width": 20, "height": 20 } + "id": "729b6691-e7c2-43dd-8a58-c4cd2d6b38f0", + "name": "tileserver", + "type": "DeploymentComponent", + "owner": "9803c740-2a29-480a-b782-26b084e880e7", + "bounds": { + "x": 570, + "y": 350, + "width": 240, + "height": 40 + } + }, + { + "id": "76fda618-a6dc-4f12-8b31-440df3ceea55", + "name": "tile-refresher", + "type": "DeploymentComponent", + "owner": "9803c740-2a29-480a-b782-26b084e880e7", + "bounds": { + "x": 840, + "y": 350, + "width": 210, + "height": 40 + }, + "strokeColor": "#fd9644", + "textColor": "#fd9644" + }, + { + "id": "6b6c386c-ab97-4c91-a6ab-ec53ac9a1d37", + "name": "indoor-maps", + "type": "DeploymentComponent", + "owner": "9803c740-2a29-480a-b782-26b084e880e7", + "bounds": { + "x": 840, + "y": 410, + "width": 210, + "height": 40 + }, + "strokeColor": "#fd9644", + "textColor": "#fd9644" + }, + { + "id": "2c04ee1a-bf0f-480f-b2d6-da8d3a5d54d5", + "name": "indoor-navigation", + "type": "DeploymentComponent", + "owner": "9803c740-2a29-480a-b782-26b084e880e7", + "bounds": { + "x": 570, + "y": 410, + "width": 240, + "height": 40 + }, + "strokeColor": "#fd9644", + "textColor": "#fd9644" }, { "id": "6ea7a59a-7b26-428a-a82c-2dee126fe09c", "name": "feedback", "type": "DeploymentComponent", "owner": "c0793074-7fc3-43b1-9516-40491662a611", - "bounds": { "x": 560, "y": 90, "width": 240, "height": 40 } + "bounds": { + "x": 550, + "y": 60, + "width": 540, + "height": 40 + }, + "fillColor": "#d1d8e0" + }, + { + "id": "3add4e36-f570-4ba6-a4f4-c426e2f24893", + "name": "server", + "type": "DeploymentComponent", + "owner": "c0793074-7fc3-43b1-9516-40491662a611", + "bounds": { + "x": 550, + "y": 110, + "width": 540, + "height": 190 + }, + "fillColor": "#d1d8e0" + }, + { + "id": "9339d43b-3f54-4968-8c73-67570bdcc9ca", + "name": "core-api", + "type": "DeploymentComponent", + "owner": "3add4e36-f570-4ba6-a4f4-c426e2f24893", + "bounds": { + "x": 570, + "y": 230, + "width": 240, + "height": 40 + } + }, + { + "id": "8d265620-1519-419d-99ac-0dcbd1c4cca3", + "name": "MeiliSearch Instance", + "type": "DeploymentComponent", + "owner": "3add4e36-f570-4ba6-a4f4-c426e2f24893", + "bounds": { + "x": 570, + "y": 150, + "width": 240, + "height": 40 + } + }, + { + "id": "03ef4999-2155-4ce6-b4e5-a71016fdf7b4", + "name": "db-init-container", + "type": "DeploymentComponent", + "owner": "3add4e36-f570-4ba6-a4f4-c426e2f24893", + "bounds": { + "x": 840, + "y": 230, + "width": 210, + "height": 40 + }, + "strokeColor": "black", + "textColor": "black" + }, + { + "id": "1c99f364-5777-4414-bc28-13eec43236a0", + "name": "webclient", + "type": "DeploymentComponent", + "owner": "c0793074-7fc3-43b1-9516-40491662a611", + "bounds": { + "x": 550, + "y": 640, + "width": 540, + "height": 120 + }, + "fillColor": "#d1d8e0" + }, + { + "id": "edb2bab5-7951-4f24-a627-bd29fe163468", + "name": "webclient", + "type": "DeploymentComponent", + "owner": "1c99f364-5777-4414-bc28-13eec43236a0", + "bounds": { + "x": 570, + "y": 690, + "width": 240, + "height": 40 + } + }, + { + "id": "4f2725bb-a5e9-42fa-8de6-2d88bb9f01a1", + "name": "rendertron", + "type": "DeploymentComponent", + "owner": "1c99f364-5777-4414-bc28-13eec43236a0", + "bounds": { + "x": 850, + "y": 690, + "width": 200, + "height": 40 + } }, { "id": "a9507920-1216-49a3-91b2-1bb878ef345b", "name": "mytum/\"Rakete\" Roomfinder", "type": "DeploymentNode", "owner": null, - "bounds": { "x": 1600, "y": 100, "width": 260, "height": 80 }, + "bounds": { + "x": 1620, + "y": 150, + "width": 260, + "height": 80 + }, "stereotype": "public API" }, { @@ -114,7 +313,12 @@ "name": "TUMonline", "type": "DeploymentNode", "owner": null, - "bounds": { "x": 1640, "y": 260, "width": 200, "height": 100 }, + "bounds": { + "x": 1660, + "y": 310, + "width": 200, + "height": 100 + }, "stereotype": "public Website" }, { @@ -122,58 +326,98 @@ "name": "existing Rooms", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 130, "width": 20, "height": 20 } + "bounds": { + "x": 1440, + "y": 180, + "width": 20, + "height": 20 + } }, { "id": "07009480-5dd5-491b-b2a3-fee484254ac4", "name": "Room-Details Website", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 300, "width": 20, "height": 20 } + "bounds": { + "x": 1440, + "y": 350, + "width": 20, + "height": 20 + } }, { "id": "59046dc5-7ebf-457b-a097-70746672e21c", "name": "Building-maps", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 50, "width": 20, "height": 20 } + "bounds": { + "x": 1440, + "y": 100, + "width": 20, + "height": 20 + } }, { "id": "bbc2357f-4bc9-404e-85c3-a2c87614417f", "name": "existing Buildings", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 210, "width": 20, "height": 20 } + "bounds": { + "x": 1440, + "y": 260, + "width": 20, + "height": 20 + } }, { "id": "1a5e8e49-99ef-4237-8112-2ef408f8e9ea", "name": "API (/api/)", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 280, "y": 260, "width": 20, "height": 20 } + "bounds": { + "x": 230, + "y": 240, + "width": 20, + "height": 20 + } }, { "id": "5f17a5f8-8391-4015-b349-ca9b9879a334", "name": "Maps/Images/Data (/cdn/)", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 300, "y": 350, "width": 20, "height": 20 } + "bounds": { + "x": 250, + "y": 460, + "width": 20, + "height": 20 + } }, { "id": "6bcd0da5-0a0e-42f5-9a0c-46391e4e4477", "name": "Website (/)", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 280, "y": 640, "width": 20, "height": 20 } + "bounds": { + "x": 310, + "y": 800, + "width": 20, + "height": 20 + } }, { "id": "ee546041-0181-45cc-844b-1f9c6e961fdb", "name": "Physics Department Roomfinder", "type": "DeploymentNode", "owner": null, - "bounds": { "x": 1610, "y": 440, "width": 270, "height": 100 }, - "strokeColor": "#fd9644", - "textColor": "#fd9644", + "bounds": { + "x": 1630, + "y": 490, + "width": 270, + "height": 100 + }, + "strokeColor": "black", + "textColor": "black", "stereotype": "public API" }, { @@ -181,34 +425,54 @@ "name": "extra Rooms", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 390, "width": 20, "height": 20 }, - "strokeColor": "#fd9644", - "textColor": "#fd9644" + "bounds": { + "x": 1440, + "y": 440, + "width": 20, + "height": 20 + }, + "strokeColor": "black", + "textColor": "black" }, { "id": "132614f0-c316-4d1c-9f34-f916fd8e8046", "name": "extra Buildings", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 480, "width": 20, "height": 20 }, - "strokeColor": "#fd9644", - "textColor": "#fd9644" + "bounds": { + "x": 1440, + "y": 530, + "width": 20, + "height": 20 + }, + "strokeColor": "black", + "textColor": "black" }, { "id": "53f6547e-394c-41a2-8675-fdeb7875459c", "name": "extra Information", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 570, "width": 20, "height": 20 }, - "strokeColor": "#fd9644", - "textColor": "#fd9644" + "bounds": { + "x": 1440, + "y": 620, + "width": 20, + "height": 20 + }, + "strokeColor": "black", + "textColor": "black" }, { "id": "50571be1-6b8d-4ccc-b443-ffab9c871245", "name": "CampusApps", "type": "DeploymentNode", "owner": null, - "bounds": { "x": 0, "y": 370, "width": 200, "height": 100 }, + "bounds": { + "x": 0, + "y": 420, + "width": 200, + "height": 100 + }, "strokeColor": "#26de81", "stereotype": "clients" }, @@ -217,7 +481,12 @@ "name": "Users", "type": "DeploymentNode", "owner": null, - "bounds": { "x": 0, "y": 600, "width": 200, "height": 100 }, + "bounds": { + "x": 0, + "y": 760, + "width": 200, + "height": 100 + }, "strokeColor": "#26de81", "stereotype": "humans" }, @@ -226,14 +495,24 @@ "name": "JS Execution engine (/rendertron/)", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 280, "y": 760, "width": 20, "height": 20 } + "bounds": { + "x": 300, + "y": 920, + "width": 20, + "height": 20 + } }, { "id": "98998381-e751-4cd8-9385-613f7cb15fdb", "name": "Twitterbot, ...", "type": "DeploymentNode", "owner": null, - "bounds": { "x": 0, "y": 720, "width": 200, "height": 100 }, + "bounds": { + "x": 0, + "y": 880, + "width": 200, + "height": 100 + }, "strokeColor": "#26de81", "stereotype": "bots" }, @@ -242,7 +521,12 @@ "name": "LMU Roomfinder", "type": "DeploymentNode", "owner": null, - "bounds": { "x": 1610, "y": 690, "width": 270, "height": 100 }, + "bounds": { + "x": 1630, + "y": 740, + "width": 270, + "height": 100 + }, "strokeColor": "#fd9644", "textColor": "#fd9644", "stereotype": "public Data" @@ -252,7 +536,12 @@ "name": "extra Rooms", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 640, "width": 20, "height": 20 }, + "bounds": { + "x": 1440, + "y": 690, + "width": 20, + "height": 20 + }, "strokeColor": "#fd9644", "textColor": "#fd9644" }, @@ -261,7 +550,12 @@ "name": "extra Buildings", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 1420, "y": 730, "width": 20, "height": 20 }, + "bounds": { + "x": 1440, + "y": 780, + "width": 20, + "height": 20 + }, "strokeColor": "#fd9644", "textColor": "#fd9644" }, @@ -270,7 +564,12 @@ "name": "External", "type": "ColorLegend", "owner": null, - "bounds": { "x": 20, "y": 0, "width": 200, "height": 50 }, + "bounds": { + "x": 40, + "y": 10, + "width": 200, + "height": 50 + }, "fillColor": "#26de81", "strokeColor": "black" }, @@ -279,7 +578,12 @@ "name": "Planned", "type": "ColorLegend", "owner": null, - "bounds": { "x": 240, "y": 0, "width": 200, "height": 50 }, + "bounds": { + "x": 260, + "y": 10, + "width": 200, + "height": 50 + }, "fillColor": "#fd9644", "strokeColor": "black" }, @@ -288,7 +592,12 @@ "name": "Static maps (/maps/)", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 320, "y": 460, "width": 20, "height": 20 }, + "bounds": { + "x": 250, + "y": 360, + "width": 20, + "height": 20 + }, "strokeColor": "black", "textColor": "black" }, @@ -297,29 +606,76 @@ "name": "feedback-API (/api/feedback)", "type": "DeploymentInterface", "owner": null, - "bounds": { "x": 260, "y": 100, "width": 20, "height": 20 } + "bounds": { + "x": 210, + "y": 150, + "width": 20, + "height": 20 + } + }, + { + "id": "241881e7-07d6-4343-b980-25dc9aaa9fe8", + "name": "Sitemaps", + "type": "DeploymentInterface", + "owner": null, + "bounds": { + "x": 270, + "y": 590, + "width": 20, + "height": 20 + } + }, + { + "id": "7fa69eff-6a36-4339-86db-d518d8dd6257", + "name": "module", + "type": "ColorLegend", + "owner": null, + "bounds": { + "x": 260, + "y": 70, + "width": 200, + "height": 50 + }, + "fillColor": "#d1d8e0" } ], "relationships": [ { "id": "a7e2eae3-9e8a-4295-b84b-3a276af5854f", "name": "", - "type": "DeploymentInterfaceProvided", + "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 1210, "y": 60, "width": 210, "height": 300 }, + "bounds": { + "x": 1280, + "y": 97, + "width": 174, + "height": 503 + }, "path": [ - { "x": 210, "y": 0 }, - { "x": 105, "y": 0 }, - { "x": 105, "y": 300 }, - { "x": 0, "y": 300 } + { + "x": 0, + "y": 503 + }, + { + "x": 80, + "y": 503 + }, + { + "x": 80, + "y": 13 + }, + { + "x": 160, + "y": 13 + } ], "source": { - "direction": "Left", - "element": "59046dc5-7ebf-457b-a097-70746672e21c" + "direction": "Right", + "element": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35" }, "target": { - "direction": "Right", - "element": "df334929-e6b4-4769-88bc-19700962febd" + "direction": "Left", + "element": "59046dc5-7ebf-457b-a097-70746672e21c" }, "isManuallyLayouted": false }, @@ -328,11 +684,25 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 60, "width": 290, "height": 40 }, + "bounds": { + "x": 1460, + "y": 110, + "width": 290, + "height": 40 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 290, "y": 0 }, - { "x": 290, "y": 40 } + { + "x": 0, + "y": 0 + }, + { + "x": 290, + "y": 0 + }, + { + "x": 290, + "y": 40 + } ], "source": { "direction": "Right", @@ -344,37 +714,26 @@ }, "isManuallyLayouted": false }, - { - "id": "7b324ece-f74c-476b-a666-8fb260463507", - "name": "", - "type": "DeploymentInterfaceProvided", - "owner": null, - "bounds": { "x": 1210, "y": 140, "width": 210, "height": 220 }, - "path": [ - { "x": 210, "y": 0 }, - { "x": 105, "y": 0 }, - { "x": 105, "y": 220 }, - { "x": 0, "y": 220 } - ], - "source": { - "direction": "Left", - "element": "d5d8690f-364e-48fa-b9cb-685fa4b1d399" - }, - "target": { - "direction": "Right", - "element": "df334929-e6b4-4769-88bc-19700962febd" - }, - "isManuallyLayouted": false - }, { "id": "0071f1ce-9d24-45ee-8135-e82aa975b3b4", "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 140, "width": 160, "height": 1 }, + "bounds": { + "x": 1460, + "y": 190, + "width": 160, + "height": 1 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 160, "y": 0 } + { + "x": 0, + "y": 0 + }, + { + "x": 160, + "y": 0 + } ], "source": { "direction": "Right", @@ -386,37 +745,26 @@ }, "isManuallyLayouted": false }, - { - "id": "08df7f5a-4d01-4014-8ed2-e93274910e4b", - "name": "", - "type": "DeploymentInterfaceProvided", - "owner": null, - "bounds": { "x": 1210, "y": 310, "width": 210, "height": 50 }, - "path": [ - { "x": 210, "y": 0 }, - { "x": 105, "y": 0 }, - { "x": 105, "y": 50 }, - { "x": 0, "y": 50 } - ], - "source": { - "direction": "Left", - "element": "07009480-5dd5-491b-b2a3-fee484254ac4" - }, - "target": { - "direction": "Right", - "element": "df334929-e6b4-4769-88bc-19700962febd" - }, - "isManuallyLayouted": false - }, { "id": "7691ef22-8478-499e-99ab-5f21ad3e6630", "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 310, "width": 200, "height": 1 }, + "bounds": { + "x": 1460, + "y": 360, + "width": 200, + "height": 1 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 200, "y": 0 } + { + "x": 0, + "y": 0 + }, + { + "x": 200, + "y": 0 + } ], "source": { "direction": "Right", @@ -428,38 +776,30 @@ }, "isManuallyLayouted": false }, - { - "id": "0bb6f074-d549-4252-9e2c-32219259d73a", - "name": "", - "type": "DeploymentAssociation", - "owner": null, - "bounds": { "x": 1210, "y": 220, "width": 210, "height": 140 }, - "path": [ - { "x": 210, "y": 0 }, - { "x": 105, "y": 0 }, - { "x": 105, "y": 140 }, - { "x": 0, "y": 140 } - ], - "source": { - "direction": "Left", - "element": "bbc2357f-4bc9-404e-85c3-a2c87614417f" - }, - "target": { - "direction": "Right", - "element": "df334929-e6b4-4769-88bc-19700962febd" - }, - "isManuallyLayouted": false - }, { "id": "4d892206-4ab9-4ca9-b02f-6e7e63583a60", "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 180, "width": 290, "height": 40 }, + "bounds": { + "x": 1460, + "y": 230, + "width": 290, + "height": 40 + }, "path": [ - { "x": 0, "y": 40 }, - { "x": 290, "y": 40 }, - { "x": 290, "y": 0 } + { + "x": 0, + "y": 40 + }, + { + "x": 290, + "y": 40 + }, + { + "x": 290, + "y": 0 + } ], "source": { "direction": "Right", @@ -476,15 +816,33 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 910, "y": 170, "width": 195, "height": 140 }, + "bounds": { + "x": 930, + "y": 150, + "width": 270, + "height": 370 + }, "path": [ - { "x": 195, "y": 140 }, - { "x": 195, "y": 0 }, - { "x": 0, "y": 0 } + { + "x": 0, + "y": 370 + }, + { + "x": 270, + "y": 370 + }, + { + "x": 270, + "y": 0 + }, + { + "x": 230, + "y": 0 + } ], "source": { - "direction": "Up", - "element": "df334929-e6b4-4769-88bc-19700962febd" + "direction": "Right", + "element": "aa8d7a5f-ade7-4edc-a512-ed985720699d" }, "target": { "direction": "Right", @@ -497,10 +855,29 @@ "name": "", "type": "DeploymentDependency", "owner": null, - "bounds": { "x": 800, "y": 170, "width": 90, "height": 1 }, + "bounds": { + "x": 810, + "y": 150, + "width": 330, + "height": 20 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 90, "y": 0 } + { + "x": 0, + "y": 20 + }, + { + "x": 165, + "y": 20 + }, + { + "x": 165, + "y": 0 + }, + { + "x": 330, + "y": 0 + } ], "source": { "direction": "Right", @@ -517,14 +894,25 @@ "name": "", "type": "DeploymentDependency", "owner": null, - "bounds": { "x": 800, "y": 270, "width": 90, "height": 1 }, + "bounds": { + "x": 1050, + "y": 250, + "width": 90, + "height": 1 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 90, "y": 0 } + { + "x": 0, + "y": 0 + }, + { + "x": 90, + "y": 0 + } ], "source": { "direction": "Right", - "element": "9339d43b-3f54-4968-8c73-67570bdcc9ca" + "element": "03ef4999-2155-4ce6-b4e5-a71016fdf7b4" }, "target": { "direction": "Left", @@ -532,37 +920,26 @@ }, "isManuallyLayouted": false }, - { - "id": "2bd21e8b-56d8-49be-bb13-b1e4dd63a01b", - "name": "", - "type": "DeploymentInterfaceRequired", - "owner": null, - "bounds": { "x": 297, "y": 357, "width": 263, "height": 223 }, - "strokeColor": "black", - "path": [ - { "x": 263, "y": 223 }, - { "x": 13, "y": 223 }, - { "x": 13, "y": 13 } - ], - "source": { - "direction": "Left", - "element": "edb2bab5-7951-4f24-a627-bd29fe163468" - }, - "target": { - "direction": "Down", - "element": "5f17a5f8-8391-4015-b349-ca9b9879a334" - }, - "isManuallyLayouted": false - }, { "id": "e47f3677-feb3-48d5-b92c-9ef5fef9302b", "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 300, "y": 270, "width": 260, "height": 1 }, + "bounds": { + "x": 250, + "y": 250, + "width": 320, + "height": 1 + }, "path": [ - { "x": 260, "y": 0 }, - { "x": 0, "y": 0 } + { + "x": 320, + "y": 0 + }, + { + "x": 0, + "y": 0 + } ], "source": { "direction": "Left", @@ -579,19 +956,37 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 910, "y": 270, "width": 195, "height": 40 }, + "bounds": { + "x": 930, + "y": 250, + "width": 270, + "height": 270 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 195, "y": 0 }, - { "x": 195, "y": 40 } + { + "x": 230, + "y": 0 + }, + { + "x": 270, + "y": 0 + }, + { + "x": 270, + "y": 270 + }, + { + "x": 0, + "y": 270 + } ], "source": { "direction": "Right", "element": "b622e87e-fa8f-42c5-b86a-5eb5a7a012f9" }, "target": { - "direction": "Up", - "element": "df334929-e6b4-4769-88bc-19700962febd" + "direction": "Right", + "element": "aa8d7a5f-ade7-4edc-a512-ed985720699d" }, "isManuallyLayouted": false }, @@ -600,12 +995,26 @@ "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 277, "y": 267, "width": 283, "height": 313 }, + "bounds": { + "x": 227, + "y": 247, + "width": 343, + "height": 463 + }, "strokeColor": "black", "path": [ - { "x": 283, "y": 313 }, - { "x": 13, "y": 313 }, - { "x": 13, "y": 13 } + { + "x": 343, + "y": 463 + }, + { + "x": 13, + "y": 463 + }, + { + "x": 13, + "y": 13 + } ], "source": { "direction": "Left", @@ -622,10 +1031,29 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 320, "y": 360, "width": 680, "height": 1 }, + "bounds": { + "x": 270, + "y": 470, + "width": 490, + "height": 50 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 680, "y": 0 } + { + "x": 0, + "y": 0 + }, + { + "x": 245, + "y": 0 + }, + { + "x": 245, + "y": 50 + }, + { + "x": 490, + "y": 50 + } ], "source": { "direction": "Right", @@ -633,7 +1061,7 @@ }, "target": { "direction": "Left", - "element": "df334929-e6b4-4769-88bc-19700962febd" + "element": "aa8d7a5f-ade7-4edc-a512-ed985720699d" }, "isManuallyLayouted": false }, @@ -642,11 +1070,25 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 300, "y": 600, "width": 380, "height": 50 }, + "bounds": { + "x": 330, + "y": 730, + "width": 360, + "height": 80 + }, "path": [ - { "x": 0, "y": 50 }, - { "x": 380, "y": 50 }, - { "x": 380, "y": 0 } + { + "x": 0, + "y": 80 + }, + { + "x": 360, + "y": 80 + }, + { + "x": 360, + "y": 0 + } ], "source": { "direction": "Right", @@ -663,12 +1105,26 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 400, "width": 305, "height": 40 }, - "strokeColor": "#fd9644", + "bounds": { + "x": 1460, + "y": 450, + "width": 305, + "height": 40 + }, + "strokeColor": "black", "path": [ - { "x": 305, "y": 40 }, - { "x": 305, "y": 0 }, - { "x": 0, "y": 0 } + { + "x": 305, + "y": 40 + }, + { + "x": 305, + "y": 0 + }, + { + "x": 0, + "y": 0 + } ], "source": { "direction": "Up", @@ -685,11 +1141,22 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 490, "width": 170, "height": 1 }, - "strokeColor": "#fd9644", + "bounds": { + "x": 1460, + "y": 540, + "width": 170, + "height": 1 + }, + "strokeColor": "black", "path": [ - { "x": 170, "y": 0 }, - { "x": 0, "y": 0 } + { + "x": 170, + "y": 0 + }, + { + "x": 0, + "y": 0 + } ], "source": { "direction": "Left", @@ -706,12 +1173,26 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 540, "width": 305, "height": 40 }, - "strokeColor": "#fd9644", + "bounds": { + "x": 1460, + "y": 590, + "width": 305, + "height": 40 + }, + "strokeColor": "black", "path": [ - { "x": 305, "y": 0 }, - { "x": 305, "y": 40 }, - { "x": 0, "y": 40 } + { + "x": 305, + "y": 0 + }, + { + "x": 305, + "y": 40 + }, + { + "x": 0, + "y": 40 + } ], "source": { "direction": "Down", @@ -728,20 +1209,33 @@ "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 100, "y": 220, "width": 204, "height": 150 }, + "bounds": { + "x": 100, + "y": 237, + "width": 144, + "height": 183 + }, "strokeColor": "#26de81", "path": [ - { "x": 0, "y": 150 }, - { "x": 0, "y": 0 }, - { "x": 190, "y": 0 }, - { "x": 190, "y": 40 } + { + "x": 0, + "y": 183 + }, + { + "x": 0, + "y": 13 + }, + { + "x": 130, + "y": 13 + } ], "source": { "direction": "Up", "element": "50571be1-6b8d-4ccc-b443-ffab9c871245" }, "target": { - "direction": "Up", + "direction": "Left", "element": "1a5e8e49-99ef-4237-8112-2ef408f8e9ea" }, "isManuallyLayouted": false @@ -751,20 +1245,37 @@ "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 100, "y": 310, "width": 224, "height": 60 }, + "bounds": { + "x": 200, + "y": 457, + "width": 64, + "height": 27 + }, "strokeColor": "#26de81", "path": [ - { "x": 0, "y": 60 }, - { "x": 0, "y": 0 }, - { "x": 210, "y": 0 }, - { "x": 210, "y": 40 } + { + "x": 0, + "y": 13 + }, + { + "x": 40, + "y": 13 + }, + { + "x": 10, + "y": 13 + }, + { + "x": 50, + "y": 13 + } ], "source": { - "direction": "Up", + "direction": "Right", "element": "50571be1-6b8d-4ccc-b443-ffab9c871245" }, "target": { - "direction": "Up", + "direction": "Left", "element": "5f17a5f8-8391-4015-b349-ca9b9879a334" }, "isManuallyLayouted": false @@ -774,11 +1285,22 @@ "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 200, "y": 637, "width": 94, "height": 27 }, + "bounds": { + "x": 200, + "y": 797, + "width": 124, + "height": 27 + }, "strokeColor": "#26de81", "path": [ - { "x": 0, "y": 13 }, - { "x": 80, "y": 13 } + { + "x": 0, + "y": 13 + }, + { + "x": 110, + "y": 13 + } ], "source": { "direction": "Right", @@ -790,37 +1312,27 @@ }, "isManuallyLayouted": false }, - { - "id": "bb3937a9-2a0f-4044-a5b0-3d2c20b6cd9c", - "name": "", - "type": "DeploymentInterfaceProvided", - "owner": null, - "bounds": { "x": 300, "y": 610, "width": 755, "height": 160 }, - "path": [ - { "x": 755, "y": 0 }, - { "x": 755, "y": 160 }, - { "x": 0, "y": 160 } - ], - "source": { - "direction": "Down", - "element": "580f24f1-068c-43f0-9c0e-2bf5b48b07ee" - }, - "target": { - "direction": "Right", - "element": "58be4097-4f30-400d-9aa1-131df8c563c9" - }, - "isManuallyLayouted": false - }, { "id": "9f69d649-e1d5-4a58-9aef-e99073deb7aa", "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 200, "y": 757, "width": 94, "height": 27 }, + "bounds": { + "x": 200, + "y": 917, + "width": 114, + "height": 27 + }, "strokeColor": "#26de81", "path": [ - { "x": 0, "y": 13 }, - { "x": 80, "y": 13 } + { + "x": 0, + "y": 13 + }, + { + "x": 100, + "y": 13 + } ], "source": { "direction": "Right", @@ -837,19 +1349,37 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 910, "y": 200, "width": 195, "height": 110 }, + "bounds": { + "x": 930, + "y": 190, + "width": 270, + "height": 330 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 195, "y": 0 }, - { "x": 195, "y": 110 } + { + "x": 230, + "y": 0 + }, + { + "x": 270, + "y": 0 + }, + { + "x": 270, + "y": 330 + }, + { + "x": 0, + "y": 330 + } ], "source": { "direction": "Right", "element": "cbb4c7ec-e3f6-4e33-aa77-e3a369555c85" }, "target": { - "direction": "Up", - "element": "df334929-e6b4-4769-88bc-19700962febd" + "direction": "Right", + "element": "aa8d7a5f-ade7-4edc-a512-ed985720699d" }, "isManuallyLayouted": false }, @@ -858,12 +1388,29 @@ "name": "", "type": "DeploymentDependency", "owner": null, - "bounds": { "x": 800, "y": 170, "width": 90, "height": 30 }, + "bounds": { + "x": 810, + "y": 170, + "width": 330, + "height": 20 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 45, "y": 0 }, - { "x": 45, "y": 30 }, - { "x": 90, "y": 30 } + { + "x": 0, + "y": 0 + }, + { + "x": 165, + "y": 0 + }, + { + "x": 165, + "y": 20 + }, + { + "x": 330, + "y": 20 + } ], "source": { "direction": "Right", @@ -880,11 +1427,22 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 740, "width": 170, "height": 1 }, + "bounds": { + "x": 1460, + "y": 790, + "width": 170, + "height": 1 + }, "strokeColor": "#fd9644", "path": [ - { "x": 0, "y": 0 }, - { "x": 170, "y": 0 } + { + "x": 0, + "y": 0 + }, + { + "x": 170, + "y": 0 + } ], "source": { "direction": "Right", @@ -901,12 +1459,26 @@ "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 1440, "y": 650, "width": 305, "height": 40 }, + "bounds": { + "x": 1460, + "y": 700, + "width": 305, + "height": 40 + }, "strokeColor": "#fd9644", "path": [ - { "x": 0, "y": 0 }, - { "x": 305, "y": 0 }, - { "x": 305, "y": 40 } + { + "x": 0, + "y": 0 + }, + { + "x": 305, + "y": 0 + }, + { + "x": 305, + "y": 40 + } ], "source": { "direction": "Right", @@ -919,57 +1491,128 @@ "isManuallyLayouted": false }, { - "id": "7ea4aaee-348e-4acd-a4fa-94fcf17c7fe1", + "id": "07384d54-6669-4a87-8965-035d6109e834", "name": "", - "type": "DeploymentDependency", + "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 800, "y": 580, "width": 170, "height": 1 }, + "bounds": { + "x": 270, + "y": 370, + "width": 300, + "height": 1 + }, + "strokeColor": "black", "path": [ - { "x": 170, "y": 0 }, - { "x": 0, "y": 0 } + { + "x": 0, + "y": 0 + }, + { + "x": 300, + "y": 0 + } ], "source": { - "direction": "Left", - "element": "580f24f1-068c-43f0-9c0e-2bf5b48b07ee" + "direction": "Right", + "element": "aecaa77c-a2b6-48d7-9918-cdd6c021e5e3" }, "target": { - "direction": "Right", - "element": "edb2bab5-7951-4f24-a627-bd29fe163468" + "direction": "Left", + "element": "729b6691-e7c2-43dd-8a58-c4cd2d6b38f0" }, "isManuallyLayouted": false }, { - "id": "07384d54-6669-4a87-8965-035d6109e834", + "id": "cae9c682-a124-4a62-8522-b19c3634cf5a", "name": "", - "type": "DeploymentInterfaceProvided", + "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 340, "y": 470, "width": 220, "height": 1 }, - "strokeColor": "black", + "bounds": { + "x": 100, + "y": 357, + "width": 164, + "height": 63 + }, + "strokeColor": "#26de81", "path": [ - { "x": 0, "y": 0 }, - { "x": 220, "y": 0 } + { + "x": 0, + "y": 63 + }, + { + "x": 0, + "y": 13 + }, + { + "x": 150, + "y": 13 + } ], "source": { - "direction": "Right", - "element": "aecaa77c-a2b6-48d7-9918-cdd6c021e5e3" + "direction": "Up", + "element": "50571be1-6b8d-4ccc-b443-ffab9c871245" }, "target": { "direction": "Left", - "element": "9803c740-2a29-480a-b782-26b084e880e7" + "element": "aecaa77c-a2b6-48d7-9918-cdd6c021e5e3" }, "isManuallyLayouted": false }, { - "id": "fd941e0d-2c02-4fc2-94f8-599b0af36a37", + "id": "872cfc99-8c9b-4b1d-861b-cbf4b47eb4bb", + "name": "", + "type": "DeploymentDependency", + "owner": null, + "bounds": { + "x": 690, + "y": 190, + "width": 1, + "height": 40 + }, + "path": [ + { + "x": 0, + "y": 40 + }, + { + "x": 0, + "y": 0 + } + ], + "source": { + "direction": "Up", + "element": "9339d43b-3f54-4968-8c73-67570bdcc9ca" + }, + "target": { + "direction": "Down", + "element": "8d265620-1519-419d-99ac-0dcbd1c4cca3" + }, + "isManuallyLayouted": false + }, + { + "id": "c419e4e4-154c-4b1c-bc8a-4464501e0d8f", "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 317, "y": 467, "width": 243, "height": 113 }, - "strokeColor": "#fd9644", + "bounds": { + "x": 207, + "y": 157, + "width": 363, + "height": 553 + }, "path": [ - { "x": 243, "y": 113 }, - { "x": 13, "y": 113 }, - { "x": 13, "y": 13 } + { + "x": 363, + "y": 553 + }, + { + "x": 13, + "y": 553 + }, + { + "x": 13, + "y": 13 + } ], "source": { "direction": "Left", @@ -977,184 +1620,729 @@ }, "target": { "direction": "Down", - "element": "aecaa77c-a2b6-48d7-9918-cdd6c021e5e3" + "element": "7f38a685-f44a-441f-b457-3742447c525d" }, "isManuallyLayouted": false }, { - "id": "cae9c682-a124-4a62-8522-b19c3634cf5a", + "id": "501bdd20-071c-4540-9774-ee9cbe04ca02", "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 200, "y": 420, "width": 134, "height": 64 }, + "bounds": { + "x": 100, + "y": 147, + "width": 124, + "height": 273 + }, "strokeColor": "#26de81", "path": [ - { "x": 0, "y": 0 }, - { "x": 60, "y": 0 }, - { "x": 60, "y": 50 }, - { "x": 120, "y": 50 } + { + "x": 0, + "y": 273 + }, + { + "x": 0, + "y": 13 + }, + { + "x": 110, + "y": 13 + } ], "source": { - "direction": "Right", + "direction": "Up", "element": "50571be1-6b8d-4ccc-b443-ffab9c871245" }, "target": { "direction": "Left", + "element": "7f38a685-f44a-441f-b457-3742447c525d" + }, + "isManuallyLayouted": false + }, + { + "id": "9d92347c-0f95-4792-9dd0-6bb93c21c676", + "name": "", + "type": "DeploymentInterfaceProvided", + "owner": null, + "bounds": { + "x": 230, + "y": 80, + "width": 320, + "height": 80 + }, + "path": [ + { + "x": 0, + "y": 80 + }, + { + "x": 265.5555419921875, + "y": 80 + }, + { + "x": 265.5555419921875, + "y": 0 + }, + { + "x": 320, + "y": 0 + } + ], + "source": { + "direction": "Right", + "element": "7f38a685-f44a-441f-b457-3742447c525d" + }, + "target": { + "direction": "Left", + "element": "6ea7a59a-7b26-428a-a82c-2dee126fe09c" + }, + "isManuallyLayouted": true + }, + { + "id": "6c3d840d-66e9-4e5c-8c36-da9ad19c9218", + "name": "", + "type": "DeploymentInterfaceRequired", + "owner": null, + "bounds": { + "x": 247, + "y": 270, + "width": 460, + "height": 100 + }, + "path": [ + { + "x": 443, + "y": 0 + }, + { + "x": 443, + "y": 18.33331298828125 + }, + { + "x": 13, + "y": 18.33331298828125 + }, + { + "x": 13, + "y": 90 + } + ], + "source": { + "direction": "Down", + "element": "9339d43b-3f54-4968-8c73-67570bdcc9ca" + }, + "target": { + "direction": "Up", "element": "aecaa77c-a2b6-48d7-9918-cdd6c021e5e3" }, + "isManuallyLayouted": true + }, + { + "id": "c458a207-1c8d-4cd4-bee3-2f80706e17b4", + "name": "", + "type": "DeploymentDependency", + "owner": null, + "bounds": { + "x": 810, + "y": 250, + "width": 30, + "height": 1 + }, + "path": [ + { + "x": 0, + "y": 0 + }, + { + "x": 30, + "y": 0 + } + ], + "source": { + "direction": "Right", + "element": "9339d43b-3f54-4968-8c73-67570bdcc9ca" + }, + "target": { + "direction": "Left", + "element": "03ef4999-2155-4ce6-b4e5-a71016fdf7b4" + }, "isManuallyLayouted": false }, { - "id": "cb65fde3-e2a4-41f4-baa6-c2ac538ca0a4", + "id": "e129ef84-0bb8-4ac0-bab9-e65a6f5928c0", + "name": "", + "type": "DeploymentDependency", + "owner": null, + "bounds": { + "x": 810, + "y": 710, + "width": 40, + "height": 1 + }, + "path": [ + { + "x": 40, + "y": 0 + }, + { + "x": 0, + "y": 0 + } + ], + "source": { + "direction": "Left", + "element": "4f2725bb-a5e9-42fa-8de6-2d88bb9f01a1" + }, + "target": { + "direction": "Right", + "element": "edb2bab5-7951-4f24-a627-bd29fe163468" + }, + "isManuallyLayouted": false + }, + { + "id": "87e43f7f-b12c-4840-90d3-f227f4eb5ce1", "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 910, "y": 410, "width": 195, "height": 100 }, + "bounds": { + "x": 320, + "y": 730, + "width": 630, + "height": 200 + }, "path": [ - { "x": 0, "y": 100 }, - { "x": 195, "y": 100 }, - { "x": 195, "y": 0 } + { + "x": 0, + "y": 200 + }, + { + "x": 630, + "y": 200 + }, + { + "x": 630, + "y": 0 + } ], "source": { "direction": "Right", - "element": "b75b552e-dd63-4453-a22f-79294fc74773" + "element": "58be4097-4f30-400d-9aa1-131df8c563c9" }, "target": { "direction": "Down", - "element": "df334929-e6b4-4769-88bc-19700962febd" + "element": "4f2725bb-a5e9-42fa-8de6-2d88bb9f01a1" }, "isManuallyLayouted": false }, { - "id": "f84dd657-aafb-4ee6-b355-aea9a69c752c", + "id": "edd00375-6319-4c50-88b7-ed85f9f6f354", "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 680, "y": 497, "width": 224, "height": 63 }, + "bounds": { + "x": 1280, + "y": 437, + "width": 174, + "height": 163 + }, + "strokeColor": "#fd9644", "path": [ - { "x": 0, "y": 63 }, - { "x": 0, "y": 13 }, - { "x": 210, "y": 13 } + { + "x": 0, + "y": 163 + }, + { + "x": 80, + "y": 163 + }, + { + "x": 80, + "y": 13 + }, + { + "x": 160, + "y": 13 + } ], "source": { - "direction": "Up", + "direction": "Right", + "element": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35" + }, + "target": { + "direction": "Left", + "element": "d01d4398-8da0-4977-8566-f78cfa1af782" + }, + "isManuallyLayouted": false + }, + { + "id": "f7f7299a-e60c-4d51-b78c-e89c916575ab", + "name": "", + "type": "DeploymentInterfaceRequired", + "owner": null, + "bounds": { + "x": 1280, + "y": 527, + "width": 174, + "height": 73 + }, + "strokeColor": "#fd9644", + "path": [ + { + "x": 0, + "y": 73 + }, + { + "x": 80, + "y": 73 + }, + { + "x": 80, + "y": 13 + }, + { + "x": 160, + "y": 13 + } + ], + "source": { + "direction": "Right", + "element": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35" + }, + "target": { + "direction": "Left", + "element": "132614f0-c316-4d1c-9f34-f916fd8e8046" + }, + "isManuallyLayouted": false + }, + { + "id": "ad6b780a-3582-48e1-a4f6-5b523955be39", + "name": "", + "type": "DeploymentInterfaceRequired", + "owner": null, + "bounds": { + "x": 1280, + "y": 600, + "width": 174, + "height": 44 + }, + "strokeColor": "#fd9644", + "path": [ + { + "x": 0, + "y": 0 + }, + { + "x": 80, + "y": 0 + }, + { + "x": 80, + "y": 30 + }, + { + "x": 160, + "y": 30 + } + ], + "source": { + "direction": "Right", + "element": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35" + }, + "target": { + "direction": "Left", + "element": "53f6547e-394c-41a2-8675-fdeb7875459c" + }, + "isManuallyLayouted": false + }, + { + "id": "fe9a1d30-ea43-4672-9945-b34fca8a80f0", + "name": "", + "type": "DeploymentInterfaceRequired", + "owner": null, + "bounds": { + "x": 247, + "y": 467, + "width": 323, + "height": 243 + }, + "path": [ + { + "x": 323, + "y": 243 + }, + { + "x": 13, + "y": 243 + }, + { + "x": 13, + "y": 13 + } + ], + "source": { + "direction": "Left", "element": "edb2bab5-7951-4f24-a627-bd29fe163468" }, + "target": { + "direction": "Down", + "element": "5f17a5f8-8391-4015-b349-ca9b9879a334" + }, + "isManuallyLayouted": false + }, + { + "id": "0f7fe689-245e-47f4-b072-d1d44f1284d2", + "name": "", + "type": "DeploymentDependency", + "owner": null, + "bounds": { + "x": 810, + "y": 370, + "width": 30, + "height": 1 + }, + "strokeColor": "#fd9644", + "path": [ + { + "x": 0, + "y": 0 + }, + { + "x": 30, + "y": 0 + } + ], + "source": { + "direction": "Right", + "element": "729b6691-e7c2-43dd-8a58-c4cd2d6b38f0" + }, "target": { "direction": "Left", - "element": "b75b552e-dd63-4453-a22f-79294fc74773" + "element": "76fda618-a6dc-4f12-8b31-440df3ceea55" }, "isManuallyLayouted": false }, { - "id": "872cfc99-8c9b-4b1d-861b-cbf4b47eb4bb", + "id": "5a8aab02-4b5d-46c7-8150-62e131259ab4", "name": "", "type": "DeploymentDependency", "owner": null, - "bounds": { "x": 680, "y": 190, "width": 1, "height": 60 }, + "bounds": { + "x": 810, + "y": 430, + "width": 30, + "height": 1 + }, + "strokeColor": "#fd9644", "path": [ - { "x": 0, "y": 60 }, - { "x": 0, "y": 0 } + { + "x": 0, + "y": 0 + }, + { + "x": 30, + "y": 0 + } ], "source": { - "direction": "Up", - "element": "9339d43b-3f54-4968-8c73-67570bdcc9ca" + "direction": "Right", + "element": "2c04ee1a-bf0f-480f-b2d6-da8d3a5d54d5" + }, + "target": { + "direction": "Left", + "element": "6b6c386c-ab97-4c91-a6ab-ec53ac9a1d37" + }, + "isManuallyLayouted": false + }, + { + "id": "bfd08e61-803d-4963-8c99-ba35f6c59ccb", + "name": "", + "type": "DeploymentInterfaceRequired", + "owner": null, + "bounds": { + "x": 267, + "y": 597, + "width": 303, + "height": 113 + }, + "path": [ + { + "x": 303, + "y": 113 + }, + { + "x": 13, + "y": 113 + }, + { + "x": 13, + "y": 13 + } + ], + "source": { + "direction": "Left", + "element": "edb2bab5-7951-4f24-a627-bd29fe163468" }, "target": { "direction": "Down", - "element": "8d265620-1519-419d-99ac-0dcbd1c4cca3" + "element": "241881e7-07d6-4343-b980-25dc9aaa9fe8" }, "isManuallyLayouted": false }, { - "id": "c419e4e4-154c-4b1c-bc8a-4464501e0d8f", + "id": "8a06d676-29ef-4bf5-b156-deefe6331760", "name": "", "type": "DeploymentInterfaceProvided", "owner": null, - "bounds": { "x": 270, "y": 120, "width": 290, "height": 460 }, + "bounds": { + "x": 280, + "y": 520, + "width": 480, + "height": 70 + }, + "path": [ + { + "x": 480, + "y": 0 + }, + { + "x": 0, + "y": 0 + }, + { + "x": 0, + "y": 70 + } + ], + "source": { + "direction": "Left", + "element": "aa8d7a5f-ade7-4edc-a512-ed985720699d" + }, + "target": { + "direction": "Up", + "element": "241881e7-07d6-4343-b980-25dc9aaa9fe8" + }, + "isManuallyLayouted": false + }, + { + "id": "415c14ea-0bbd-4873-8b00-5bfe190bd405", + "name": "", + "type": "DeploymentAssociation", + "owner": null, + "bounds": { + "x": 1070, + "y": 600, + "width": 40, + "height": 1 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 0, "y": 460 }, - { "x": 290, "y": 460 } + { + "x": 0, + "y": 0 + }, + { + "x": 40, + "y": 0 + } + ], + "source": { + "direction": "Right", + "element": "2e00ad7d-bec9-49d1-a6b7-c2f3a3de8d21" + }, + "target": { + "direction": "Left", + "element": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35" + }, + "isManuallyLayouted": false + }, + { + "id": "745a21eb-82de-466c-8b5f-328f2c962dd0", + "name": "", + "type": "DeploymentDependency", + "owner": null, + "bounds": { + "x": 845, + "y": 540, + "width": 55, + "height": 60 + }, + "path": [ + { + "x": 0, + "y": 0 + }, + { + "x": 0, + "y": 60 + }, + { + "x": 55, + "y": 60 + } ], "source": { "direction": "Down", - "element": "7f38a685-f44a-441f-b457-3742447c525d" + "element": "aa8d7a5f-ade7-4edc-a512-ed985720699d" }, "target": { "direction": "Left", - "element": "edb2bab5-7951-4f24-a627-bd29fe163468" + "element": "2e00ad7d-bec9-49d1-a6b7-c2f3a3de8d21" }, "isManuallyLayouted": false }, { - "id": "501bdd20-071c-4540-9774-ee9cbe04ca02", + "id": "c10f704a-7bc5-4582-a6ab-30dc50d4f158", "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 100, "y": 60, "width": 184, "height": 310 }, - "strokeColor": "#26de81", + "bounds": { + "x": 1280, + "y": 177, + "width": 174, + "height": 423 + }, "path": [ - { "x": 0, "y": 310 }, - { "x": 0, "y": 0 }, - { "x": 170, "y": 0 }, - { "x": 170, "y": 40 } + { + "x": 0, + "y": 423 + }, + { + "x": 80, + "y": 423 + }, + { + "x": 80, + "y": 13 + }, + { + "x": 160, + "y": 13 + } ], "source": { - "direction": "Up", - "element": "50571be1-6b8d-4ccc-b443-ffab9c871245" + "direction": "Right", + "element": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35" }, "target": { - "direction": "Up", - "element": "7f38a685-f44a-441f-b457-3742447c525d" + "direction": "Left", + "element": "d5d8690f-364e-48fa-b9cb-685fa4b1d399" }, "isManuallyLayouted": false }, { - "id": "9d92347c-0f95-4792-9dd0-6bb93c21c676", + "id": "0deb841a-3965-4439-8723-b1c9d1d4b10c", "name": "", - "type": "DeploymentInterfaceProvided", + "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 280, "y": 110, "width": 280, "height": 1 }, + "bounds": { + "x": 1280, + "y": 257, + "width": 174, + "height": 343 + }, "path": [ - { "x": 0, "y": 0 }, - { "x": 280, "y": 0 } + { + "x": 0, + "y": 343 + }, + { + "x": 80, + "y": 343 + }, + { + "x": 80, + "y": 13 + }, + { + "x": 160, + "y": 13 + } ], "source": { "direction": "Right", - "element": "7f38a685-f44a-441f-b457-3742447c525d" + "element": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35" }, "target": { "direction": "Left", - "element": "6ea7a59a-7b26-428a-a82c-2dee126fe09c" + "element": "bbc2357f-4bc9-404e-85c3-a2c87614417f" }, "isManuallyLayouted": false }, { - "id": "6c3d840d-66e9-4e5c-8c36-da9ad19c9218", + "id": "616dc47c-2b8f-4e62-942a-dcb4369d9774", "name": "", "type": "DeploymentInterfaceRequired", "owner": null, - "bounds": { "x": 317, "y": 290, "width": 380, "height": 180 }, + "bounds": { + "x": 1280, + "y": 347, + "width": 174, + "height": 253 + }, + "path": [ + { + "x": 0, + "y": 253 + }, + { + "x": 80, + "y": 253 + }, + { + "x": 80, + "y": 13 + }, + { + "x": 160, + "y": 13 + } + ], + "source": { + "direction": "Right", + "element": "72c91d34-6f33-4299-ac4d-b5b83f6b5d35" + }, + "target": { + "direction": "Left", + "element": "07009480-5dd5-491b-b2a3-fee484254ac4" + }, + "isManuallyLayouted": false + }, + { + "id": "6db4ba4e-ca05-4a50-9e84-b5715009c0f3", + "name": "", + "type": "DeploymentDependency", + "owner": null, + "bounds": { + "x": 790, + "y": 540, + "width": 55, + "height": 60 + }, "path": [ - { "x": 363, "y": 0 }, - { "x": 363, "y": 113.80010986328125 }, - { "x": 13, "y": 113.80010986328125 }, - { "x": 13, "y": 170 } + { + "x": 55, + "y": 0 + }, + { + "x": 55, + "y": 60 + }, + { + "x": 0, + "y": 60 + } ], "source": { "direction": "Down", - "element": "9339d43b-3f54-4968-8c73-67570bdcc9ca" + "element": "aa8d7a5f-ade7-4edc-a512-ed985720699d" }, "target": { - "direction": "Up", - "element": "aecaa77c-a2b6-48d7-9918-cdd6c021e5e3" + "direction": "Right", + "element": "31c465a1-97c5-4362-9327-234a6622b854" }, - "isManuallyLayouted": true + "isManuallyLayouted": false } ], "assessments": [] - }, - "lastUpdate": "2022-01-25T20:57:46.530Z", - "diagramType": "DeploymentDiagram" -} + } +} \ No newline at end of file diff --git a/resources/deployment/Deployment_Overview.png b/resources/deployment/Deployment_Overview.png index 00a181b75..f95f3285e 100644 Binary files a/resources/deployment/Deployment_Overview.png and b/resources/deployment/Deployment_Overview.png differ diff --git a/resources/deployment/Deployment_Overview.svg b/resources/deployment/Deployment_Overview.svg deleted file mode 100644 index 79a7ff3d4..000000000 --- a/resources/deployment/Deployment_Overview.svg +++ /dev/null @@ -1,15 +0,0 @@ -«server»NavigaTUMnavigatum-dataManual Fixesnavigatum-webclientsearch_data.jsonserverMeiliSearch Instanceapi_data.jsonrendertronsearch_synonyms.jsonStatic MapsSitemapsfeedback«public API»mytum/"Rakete" Roomfinder«public Website»TUMonlineexisting RoomsRoom-Details WebsiteBuilding-mapsexisting BuildingsAPI (/api/)Maps/Images/Data (/cdn/)Website (/)«public API»Physics Department Roomfinderextra Roomsextra Buildingsextra Information«clients»CampusApps«humans»UsersJS Execution engine (/rendertron/)«bots»Twitterbot, ...«public Data»LMU Roomfinderextra Roomsextra BuildingsExternalPlannedStatic maps (/maps/)feedback-API (/api/feedback) diff --git a/resources/deployment/Flowchart.svg b/resources/deployment/Flowchart.svg deleted file mode 100644 index fb630685c..000000000 --- a/resources/deployment/Flowchart.svg +++ /dev/null @@ -1,15 +0,0 @@ -STARTendpoint?https?js-execution capability?serverwebclienttileserverrendertron rendering-proxyfeedbackcdn/api//cdn/elseyesyes/rendertron/redirect to httpsno/maps//api/feedback/ diff --git a/server/Dockerfile.dbinit b/server/Dockerfile.dbinit new file mode 100644 index 000000000..6b3e0b98d --- /dev/null +++ b/server/Dockerfile.dbinit @@ -0,0 +1,14 @@ +# Build the details database +FROM python:3.11-bullseye as build-stage +COPY load_api_data_to_db.py load_api_data_to_db.py + +# For local testing if navigatum is not available: +# - follow the data-docs to get api_data.json +# - copy it to the directory server/data +# - comment out the wget statement +# - and enable the next line +# COPY data/api_data.json data/api_data.json + +CMD wget https://nav.tum.de/cdn/api_data.json --directory-prefix data \ + && python3 load_api_data_to_db.py \ + && mv /data/api_data.db /tmp/server.db \ No newline at end of file diff --git a/server/Dockerfile.server b/server/Dockerfile.server index b54d936a5..961f1e530 100644 --- a/server/Dockerfile.server +++ b/server/Dockerfile.server @@ -9,17 +9,6 @@ COPY ./src ./src RUN RUSTFLAGS="-C target-feature=-crt-static" cargo build --release -# Build the details database -FROM python:3.11-bullseye as build-stage -COPY load_api_data_to_db.py load_api_data_to_db.py - -# get api_data.json -ADD https://nav.tum.de/cdn/api_data.json data/api_data.json -# For local testing if navigatum is not available: -# follow the data-docs to get api_data.json, copy it to the directory server/data and enable -# COPY data/api_data.json data/api_data.json -RUN python3 load_api_data_to_db.py - # RUN FROM alpine:3.17 @@ -27,9 +16,7 @@ RUN apk update --quiet \ && apk add -q --no-cache libgcc sqlite-libs tini \ && mkdir -p ./src/maps/font - COPY ./src/maps ./src/maps -COPY --from=build-stage /data/api_data.db ./data/api_data.db # add `navigatum-server` to the `/bin` so we can run it from anywhere and it's easy to find. COPY --from=compiler /nav/target/release/navigatum-server /bin/navigatum-server diff --git a/server/src/utils/mod.rs b/server/src/utils/mod.rs index 5d85c5143..76785b8b3 100644 --- a/server/src/utils/mod.rs +++ b/server/src/utils/mod.rs @@ -15,5 +15,6 @@ impl LangQueryArgs { } pub fn establish_connection() -> SqliteConnection { - SqliteConnection::establish("data/api_data.db").expect("Cannot open database") + let database_loc = std::env::var("DB_LOCATION").unwrap_or("data/api_data.db".to_string()); + SqliteConnection::establish(&database_loc).expect("Cannot open database") }