From 1a79a5e4d8feb2b12d648c0442ffb71c8db6e65b Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Tue, 22 Apr 2025 14:19:56 +0200
Subject: [PATCH] WIP

Signed-off-by: Martin Weise <martin.weise@tuwien.ac.at>
---
 .docs/api/analyse-service.md                  |    2 +-
 .docs/api/data-service.md                     |    2 +-
 .docs/api/metadata-service.md                 |    2 +-
 .docs/api/search-service.md                   |    2 +-
 .docs/api/ui.md                               |    2 +-
 .docs/concepts/logging.md                     |   23 +
 .../dashboards/System/dbrepo.json             | 2566 +++++++++++------
 .../dashboards/System/logging.json            |  808 ++++--
 dbrepo-data-service/Dockerfile                |    7 +-
 .../dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar   |  Bin 1118870 -> 1118871 bytes
 .../1.8.1/dbrepo-core-1.8.1.jar.md5           |    2 +-
 .../1.8.1/dbrepo-core-1.8.1.jar.sha1          |    2 +-
 .../ifs/dbrepo/dbrepo-core/maven-metadata.xml |    2 +-
 .../dbrepo/dbrepo-core/maven-metadata.xml.md5 |    2 +-
 .../dbrepo-core/maven-metadata.xml.sha1       |    2 +-
 dbrepo-data-service/pom.xml                   |    2 +-
 .../src/main/resources/application.yml        |    6 +-
 dbrepo-logging-service/dbrepo_parser.conf     |    4 +-
 dbrepo-metadata-service/Dockerfile            |    9 +-
 .../dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar   |  Bin 1118870 -> 1118871 bytes
 .../1.8.1/dbrepo-core-1.8.1.jar.md5           |    2 +-
 .../1.8.1/dbrepo-core-1.8.1.jar.sha1          |    2 +-
 .../ifs/dbrepo/dbrepo-core/maven-metadata.xml |    2 +-
 .../dbrepo/dbrepo-core/maven-metadata.xml.md5 |    2 +-
 .../dbrepo-core/maven-metadata.xml.sha1       |    2 +-
 dbrepo-metadata-service/oai/pom.xml           |    2 +-
 dbrepo-metadata-service/pom.xml               |    9 +-
 dbrepo-metadata-service/report/pom.xml        |    9 +-
 dbrepo-metadata-service/repositories/pom.xml  |    8 +-
 dbrepo-metadata-service/rest-service/pom.xml  |    7 +-
 .../src/main/resources/application.yml        |    8 +-
 dbrepo-metadata-service/services/pom.xml      |    9 +-
 docker-compose.yml                            |  101 -
 helm/dbrepo/files/create-event-listener.jar   |  Bin 10139 -> 10139 bytes
 lib/java/dbrepo-core/pom.xml                  |    4 +-
 make/build.mk                                 |    6 +-
 make/dev.mk                                   |    2 +-
 mkdocs.yml                                    |    1 +
 38 files changed, 2430 insertions(+), 1191 deletions(-)
 create mode 100644 .docs/concepts/logging.md

diff --git a/.docs/api/analyse-service.md b/.docs/api/analyse-service.md
index 6a6bb5f506..0b8bf886f3 100644
--- a/.docs/api/analyse-service.md
+++ b/.docs/api/analyse-service.md
@@ -6,7 +6,7 @@ author: Martin Weise
 
 !!! debug "Debug Information"
 
-    Image: [`registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.4.7`](https://hub.docker.com/r/dbrepo/analyse-service)
+    Image: [`registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.8.1`](https://hub.docker.com/r/dbrepo/analyse-service)
 
     * Ports: 5000/tcp
     * Prometheus: `http://<hostname>:5000/metrics`
diff --git a/.docs/api/data-service.md b/.docs/api/data-service.md
index 66089a1cd6..50193a54e6 100644
--- a/.docs/api/data-service.md
+++ b/.docs/api/data-service.md
@@ -6,7 +6,7 @@ author: Martin Weise
 
 !!! debug "Debug Information"
 
-    Image: [`registry.datalab.tuwien.ac.at/dbrepo/data-service:1.4.7`](https://hub.docker.com/r/dbrepo/data-service)
+    Image: [`registry.datalab.tuwien.ac.at/dbrepo/data-service:1.8.1`](https://hub.docker.com/r/dbrepo/data-service)
 
     * Ports: 9093/tcp
     * Info: `http://<hostname>:9093/actuator/info`
diff --git a/.docs/api/metadata-service.md b/.docs/api/metadata-service.md
index a9218b4733..435ef9cdd1 100644
--- a/.docs/api/metadata-service.md
+++ b/.docs/api/metadata-service.md
@@ -6,7 +6,7 @@ author: Martin Weise
 
 !!! debug "Debug Information"
 
-    Image: [`registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.4.7`](https://hub.docker.com/r/dbrepo/metadata-service)
+    Image: [`registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.8.1`](https://hub.docker.com/r/dbrepo/metadata-service)
 
     * Ports: 9099/tcp
     * Info: `http://<hostname>:9099/actuator/info`
diff --git a/.docs/api/search-service.md b/.docs/api/search-service.md
index ede6eefd65..22cf6e71b5 100644
--- a/.docs/api/search-service.md
+++ b/.docs/api/search-service.md
@@ -6,7 +6,7 @@ author: Martin Weise
 
 !!! debug "Debug Information"
 
-    Image: [`registry.datalab.tuwien.ac.at/dbrepo/search-service:1.4.7`](https://hub.docker.com/r/dbrepo/search-service)
+    Image: [`registry.datalab.tuwien.ac.at/dbrepo/search-service:1.8.1`](https://hub.docker.com/r/dbrepo/search-service)
 
     * Ports: 4000/tcp
     * Health: `http://<hostname>:4000/api/search/health`
diff --git a/.docs/api/ui.md b/.docs/api/ui.md
index 5393c9ff79..ddc8b9d883 100644
--- a/.docs/api/ui.md
+++ b/.docs/api/ui.md
@@ -6,7 +6,7 @@ author: Martin Weise
 
 !!! debug "Debug Information"
 
-    Image: [`registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.7`](https://hub.docker.com/r/dbrepo/ui)
+    Image: [`registry.datalab.tuwien.ac.at/dbrepo/ui:1.8.1`](https://hub.docker.com/r/dbrepo/ui)
 
     * Ports: 3000/tcp
 
diff --git a/.docs/concepts/logging.md b/.docs/concepts/logging.md
new file mode 100644
index 0000000000..c6dae7f787
--- /dev/null
+++ b/.docs/concepts/logging.md
@@ -0,0 +1,23 @@
+---
+author: Martin Weise
+---
+
+This is a short conceptional overview on the logging mechanisms provided by [fluentbit](https://fluentbit.io/).
+
+## Collection
+
+fluentd, [Structured Logging in Spring Boot](https://spring.io/blog/2024/08/23/structured-logging-in-spring-boot-3-4)
+
+The [Docker Compose](../../installation) test setup uses the `fluentd` logging driver to forward logs from the console
+for every service, except for the [Metadata Service](../../api/metadata-service) and 
+the [Data Service](../../api/data-service). In this case fluentbit scrapes the logs from a logging file in 
+`/app/logs.json` (in [ECS](https://www.elastic.co/docs/reference/ecs) format).
+
+## Storage
+
+opensearch
+
+## Insights
+
+opensearch dashboards, grafana
+
diff --git a/dbrepo-dashboard-ui/dashboards/System/dbrepo.json b/dbrepo-dashboard-ui/dashboards/System/dbrepo.json
index e9d03fd40d..7b59f98778 100644
--- a/dbrepo-dashboard-ui/dashboards/System/dbrepo.json
+++ b/dbrepo-dashboard-ui/dashboards/System/dbrepo.json
@@ -35,6 +35,7 @@
   ],
   "panels": [
     {
+      "collapsed": false,
       "gridPos": {
         "h": 1,
         "w": 24,
@@ -42,6 +43,7 @@
         "y": 0
       },
       "id": 34,
+      "panels": [],
       "title": "tl;dr",
       "type": "row"
     },
@@ -110,7 +112,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -180,7 +182,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -248,7 +250,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -298,7 +300,7 @@
         "x": 12,
         "y": 1
       },
-      "id": 5,
+      "id": 39,
       "options": {
         "colorMode": "background",
         "graphMode": "none",
@@ -316,7 +318,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -432,7 +434,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -477,8 +479,8 @@
         "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 8,
+        "h": 8,
+        "w": 12,
         "x": 0,
         "y": 4
       },
@@ -503,10 +505,12 @@
           "values": false
         },
         "tooltip": {
+          "hideZeros": false,
           "mode": "single",
           "sort": "none"
         }
       },
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -524,80 +528,79 @@
       "title": "Popular Data Sources",
       "type": "piechart"
     },
-    {
-      "collapsed": false,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 11
-      },
-      "id": 22,
-      "panels": [],
-      "title": "UI",
-      "type": "row"
-    },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "description": "",
       "fieldConfig": {
         "defaults": {
-          "mappings": [],
-          "max": 100,
-          "min": 0,
+          "color": {
+            "mode": "thresholds"
+          },
+          "custom": {
+            "fillOpacity": 70,
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineWidth": 1
+          },
+          "mappings": [
+            {
+              "options": {
+                "0": {
+                  "index": 0,
+                  "text": "DOWN"
+                },
+                "1": {
+                  "index": 1,
+                  "text": "UP"
+                }
+              },
+              "type": "value"
+            }
+          ],
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "green",
+                "color": "red",
                 "value": null
               },
               {
-                "color": "#EAB839",
-                "value": 300
-              },
-              {
-                "color": "orange",
-                "value": 600
-              },
-              {
-                "color": "red",
-                "value": 900
+                "color": "green",
+                "value": 1
               }
             ]
-          },
-          "unit": "ms"
+          }
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 4,
-        "x": 0,
-        "y": 12
+        "h": 8,
+        "w": 12,
+        "x": 12,
+        "y": 4
       },
-      "id": 17,
+      "id": 16,
       "options": {
-        "colorMode": "background",
-        "graphMode": "none",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "percentChangeColorMode": "standard",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
+        "colWidth": 0.9,
+        "legend": {
+          "displayMode": "list",
+          "placement": "bottom",
+          "showLegend": false
         },
-        "showPercentChange": false,
-        "textMode": "auto",
-        "wideLayout": true
+        "rowHeight": 0.9,
+        "showValue": "auto",
+        "tooltip": {
+          "hideZeros": false,
+          "mode": "single",
+          "sort": "none"
+        }
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -605,171 +608,1258 @@
             "uid": "dbrepometrics0"
           },
           "disableTextWrap": false,
-          "editorMode": "code",
-          "expr": "avg(page_render_time)",
+          "editorMode": "builder",
+          "expr": "up",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "__auto",
+          "legendFormat": "{{instance}}",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "UI Response Time (avg)",
-      "type": "stat"
+      "title": "Service QoS",
+      "type": "status-history"
+    },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 12
+      },
+      "id": 6,
+      "panels": [],
+      "title": "Application",
+      "type": "row"
     },
     {
       "datasource": {
-        "type": "prometheus",
-        "uid": "dbrepometrics0"
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
       },
-      "description": "",
       "fieldConfig": {
         "defaults": {
+          "color": {
+            "mode": "fixed"
+          },
+          "custom": {
+            "axisBorderShow": false,
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
+            "axisLabel": "",
+            "axisPlacement": "auto",
+            "fillOpacity": 80,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineWidth": 1,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
           "mappings": [],
-          "max": 100,
-          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
                 "color": "green",
                 "value": null
-              },
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "warn"
+            },
+            "properties": [
               {
-                "color": "#EAB839",
-                "value": 0.02
-              },
+                "id": "color",
+                "value": {
+                  "fixedColor": "orange",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "error"
+            },
+            "properties": [
               {
-                "color": "orange",
-                "value": 0.05
-              },
+                "id": "color",
+                "value": {
+                  "fixedColor": "red",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "info"
+            },
+            "properties": [
               {
-                "color": "red",
-                "value": 0.1
+                "id": "color",
+                "value": {
+                  "fixedColor": "green",
+                  "mode": "fixed"
+                }
               }
             ]
           },
-          "unit": "s"
-        },
-        "overrides": []
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "debug"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "blue",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          }
+        ]
       },
       "gridPos": {
-        "h": 3,
-        "w": 4,
-        "x": 4,
-        "y": 12
+        "h": 8,
+        "w": 24,
+        "x": 0,
+        "y": 13
       },
-      "id": 24,
+      "id": 42,
       "options": {
-        "colorMode": "background",
-        "graphMode": "none",
-        "justifyMode": "auto",
+        "barRadius": 0,
+        "barWidth": 0.97,
+        "fullHighlight": false,
+        "groupWidth": 0.7,
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "right",
+          "showLegend": true
+        },
         "orientation": "auto",
-        "percentChangeColorMode": "standard",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
+        "showValue": "auto",
+        "stacking": "percent",
+        "tooltip": {
+          "hideZeros": false,
+          "mode": "single",
+          "sort": "none"
         },
-        "showPercentChange": false,
-        "textMode": "auto",
-        "wideLayout": true
+        "xTickLabelRotation": 0,
+        "xTickLabelSpacing": 100
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
+          "alias": "WARN",
+          "bucketAggs": [
+            {
+              "id": "2",
+              "settings": {
+                "interval": "auto",
+                "min_doc_count": "0",
+                "trimEdges": "0"
+              },
+              "type": "date_histogram"
+            }
+          ],
           "datasource": {
-            "type": "prometheus",
-            "uid": "dbrepometrics0"
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
           },
-          "disableTextWrap": false,
-          "editorMode": "code",
-          "expr": "nodejs_eventloop_lag_mean_seconds",
-          "fullMetaSearch": false,
-          "includeNullMetadata": true,
-          "instant": false,
-          "legendFormat": "__auto",
-          "range": true,
-          "refId": "A",
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "hide": false,
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "level: WARN",
+          "queryType": "lucene",
+          "refId": "warn",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "ERROR",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "level: ERROR",
+          "queryType": "lucene",
+          "refId": "error",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "INFO",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "level: INFO",
+          "queryType": "lucene",
+          "refId": "info",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "DEBUG",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "level: DEBUG",
+          "queryType": "lucene",
+          "refId": "debug",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Errors and Warnings over Time",
+      "type": "barchart"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {},
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 0,
+        "y": 21
+      },
+      "id": 43,
+      "options": {
+        "dedupStrategy": "none",
+        "enableInfiniteScrolling": false,
+        "enableLogDetails": true,
+        "prettifyLogMessage": false,
+        "showCommonLabels": false,
+        "showLabels": false,
+        "showTime": true,
+        "sortOrder": "Descending",
+        "wrapLogMessage": false
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "level: ERROR",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Errors",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "message",
+                "container_id",
+                "container_name",
+                "logger",
+                "@timestamp"
+              ]
+            }
+          }
+        }
+      ],
+      "type": "logs"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {},
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 12,
+        "y": 21
+      },
+      "id": 44,
+      "options": {
+        "dedupStrategy": "none",
+        "enableInfiniteScrolling": false,
+        "enableLogDetails": true,
+        "prettifyLogMessage": false,
+        "showCommonLabels": false,
+        "showLabels": false,
+        "showTime": true,
+        "sortOrder": "Descending",
+        "wrapLogMessage": false
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "level: WARN",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Warnings",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "message",
+                "container_id",
+                "container_name",
+                "logger",
+                "@timestamp"
+              ]
+            }
+          }
+        }
+      ],
+      "type": "logs"
+    },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 29
+      },
+      "id": 45,
+      "panels": [],
+      "title": "Application Debugging",
+      "type": "row"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {},
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 0,
+        "y": 30
+      },
+      "id": 46,
+      "options": {
+        "dedupStrategy": "none",
+        "enableInfiniteScrolling": false,
+        "enableLogDetails": true,
+        "prettifyLogMessage": false,
+        "showCommonLabels": false,
+        "showLabels": false,
+        "showTime": true,
+        "sortOrder": "Descending",
+        "wrapLogMessage": false
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "level: INFO",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Info",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "message",
+                "container_id",
+                "container_name",
+                "logger",
+                "@timestamp"
+              ]
+            }
+          }
+        }
+      ],
+      "type": "logs"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {},
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 12,
+        "y": 30
+      },
+      "id": 47,
+      "options": {
+        "dedupStrategy": "none",
+        "enableInfiniteScrolling": false,
+        "enableLogDetails": true,
+        "prettifyLogMessage": false,
+        "showCommonLabels": false,
+        "showLabels": false,
+        "showTime": true,
+        "sortOrder": "Descending",
+        "wrapLogMessage": false
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "level: DEBUG",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Debug",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "message",
+                "container_id",
+                "container_name",
+                "logger",
+                "@timestamp"
+              ]
+            }
+          }
+        }
+      ],
+      "type": "logs"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "dbrepometrics0"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisBorderShow": false,
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
+            "axisLabel": "",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "barWidthFactor": 0.6,
+            "drawStyle": "line",
+            "fillOpacity": 25,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "insertNulls": false,
+            "lineInterpolation": "smooth",
+            "lineWidth": 2,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "normal"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "none"
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "auth-service:9000"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "yellow",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "data-service:8080"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "blue",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "metadata-service:8080"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "purple",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "metadata-service:80"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "blue",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 7,
+        "w": 12,
+        "x": 0,
+        "y": 38
+      },
+      "id": 40,
+      "options": {
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom",
+          "showLegend": true
+        },
+        "tooltip": {
+          "hideZeros": false,
+          "mode": "multi",
+          "sort": "none"
+        }
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "dbrepometrics0"
+          },
+          "disableTextWrap": false,
+          "editorMode": "builder",
+          "expr": "process_cpu_usage",
+          "fullMetaSearch": false,
+          "hide": false,
+          "includeNullMetadata": true,
+          "instant": false,
+          "legendFormat": "{{instance}}",
+          "range": true,
+          "refId": "process_cpu_usage",
           "useBackend": false
         }
       ],
-      "title": "UI Event Lag (avg)",
-      "type": "stat"
+      "title": "CPU Usage",
+      "type": "timeseries"
+    },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 45
+      },
+      "id": 5,
+      "panels": [],
+      "title": "HTTP Gateway",
+      "type": "row"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "custom": {
+            "align": "auto",
+            "cellOptions": {
+              "type": "auto"
+            },
+            "inspect": false
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "request.method"
+            },
+            "properties": [
+              {
+                "id": "custom.width"
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 0,
+        "y": 46
+      },
+      "id": 7,
+      "options": {
+        "cellHeight": "sm",
+        "footer": {
+          "countRows": false,
+          "fields": "",
+          "reducer": [
+            "sum"
+          ],
+          "show": false
+        },
+        "showHeader": true,
+        "sortBy": []
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "container_name: \"/dbrepo-gateway-service\" AND code: >=400",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "HTTP Gateway Errors",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "code",
+                "method",
+                "path",
+                "size"
+              ]
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {},
+            "includeByName": {},
+            "indexByName": {
+              "code": 2,
+              "method": 0,
+              "path": 1,
+              "size": 3
+            },
+            "renameByName": {
+              "@timestamp": "",
+              "code": "response.status",
+              "method": "request.method",
+              "path": "request.url",
+              "size": "body.size"
+            }
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "Count",
+            "mode": "reduceRow",
+            "reduce": {
+              "include": [
+                "request.url",
+                "response.status"
+              ],
+              "reducer": "distinctCount"
+            },
+            "replaceFields": false
+          }
+        },
+        {
+          "id": "sortBy",
+          "options": {
+            "fields": {},
+            "sort": [
+              {
+                "desc": true,
+                "field": "Count"
+              }
+            ]
+          }
+        }
+      ],
+      "type": "table"
     },
     {
       "datasource": {
-        "type": "prometheus",
-        "uid": "dbrepometrics0"
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
       },
-      "description": "",
       "fieldConfig": {
         "defaults": {
+          "color": {
+            "mode": "fixed"
+          },
+          "custom": {
+            "axisBorderShow": false,
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
+            "axisLabel": "Count",
+            "axisPlacement": "auto",
+            "fillOpacity": 80,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineWidth": 1,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
           "mappings": [],
-          "max": 100,
-          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "blue",
+                "color": "green",
                 "value": null
               }
             ]
-          },
-          "unit": "none"
+          }
         },
-        "overrides": []
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "200"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "green",
+                  "mode": "fixed"
+                }
+              },
+              {
+                "id": "displayName",
+                "value": "200s"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "300"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "purple",
+                  "mode": "fixed"
+                }
+              },
+              {
+                "id": "displayName",
+                "value": "300s"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "400"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "orange",
+                  "mode": "fixed"
+                }
+              },
+              {
+                "id": "displayName",
+                "value": "400s"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "500"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "red",
+                  "mode": "fixed"
+                }
+              },
+              {
+                "id": "displayName",
+                "value": "500s"
+              }
+            ]
+          }
+        ]
       },
       "gridPos": {
-        "h": 3,
-        "w": 4,
-        "x": 8,
-        "y": 12
+        "h": 9,
+        "w": 24,
+        "x": 0,
+        "y": 54
       },
-      "id": 25,
+      "id": 3,
       "options": {
-        "colorMode": "background",
-        "graphMode": "none",
-        "justifyMode": "auto",
+        "barRadius": 0,
+        "barWidth": 0.97,
+        "fullHighlight": false,
+        "groupWidth": 0.7,
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "right",
+          "showLegend": true
+        },
         "orientation": "auto",
-        "percentChangeColorMode": "standard",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
+        "showValue": "auto",
+        "stacking": "normal",
+        "tooltip": {
+          "hideZeros": false,
+          "mode": "multi",
+          "sort": "none"
         },
-        "showPercentChange": false,
-        "textMode": "auto",
-        "wideLayout": true
+        "xTickLabelRotation": 0,
+        "xTickLabelSpacing": 100
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "id": "2",
+              "settings": {
+                "interval": "auto",
+                "min_doc_count": "0",
+                "trimEdges": "0"
+              },
+              "type": "date_histogram"
+            }
+          ],
           "datasource": {
-            "type": "prometheus",
-            "uid": "dbrepometrics0"
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
           },
-          "disableTextWrap": false,
-          "editorMode": "code",
-          "expr": "nodejs_active_handles{type=\"Server\"}",
-          "fullMetaSearch": false,
-          "includeNullMetadata": true,
-          "instant": false,
-          "legendFormat": "__auto",
-          "range": true,
-          "refId": "A",
-          "useBackend": false
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "container_name: \"/dbrepo-gateway-service\" AND code: (>=200 AND <300)",
+          "queryType": "lucene",
+          "refId": "200",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "id": "2",
+              "settings": {
+                "interval": "auto",
+                "min_doc_count": "0",
+                "trimEdges": "0"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "container_name: \"/dbrepo-gateway-service\" AND code: (>=300 AND <400)",
+          "queryType": "lucene",
+          "refId": "300",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "id": "2",
+              "settings": {
+                "interval": "auto",
+                "min_doc_count": "0",
+                "trimEdges": "0"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "container_name: \"/dbrepo-gateway-service\" AND code: (>=400 AND <500)",
+          "queryType": "lucene",
+          "refId": "400",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "id": "2",
+              "settings": {
+                "interval": "auto",
+                "min_doc_count": "0",
+                "trimEdges": "0"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "container_name: \"/dbrepo-gateway-service\" AND code: >=500",
+          "queryType": "lucene",
+          "refId": "500",
+          "timeField": "@timestamp"
         }
       ],
-      "title": "UI Servers",
-      "type": "stat"
+      "title": "HTTP Status Codes over Time",
+      "type": "barchart"
+    },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 63
+      },
+      "id": 22,
+      "panels": [],
+      "title": "UI",
+      "type": "row"
     },
     {
       "datasource": {
@@ -786,22 +1876,34 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "blue",
+                "color": "green",
                 "value": null
+              },
+              {
+                "color": "#EAB839",
+                "value": 300
+              },
+              {
+                "color": "orange",
+                "value": 600
+              },
+              {
+                "color": "red",
+                "value": 900
               }
             ]
           },
-          "unit": "none"
+          "unit": "ms"
         },
         "overrides": []
       },
       "gridPos": {
         "h": 3,
         "w": 4,
-        "x": 12,
-        "y": 12
+        "x": 0,
+        "y": 64
       },
-      "id": 26,
+      "id": 17,
       "options": {
         "colorMode": "background",
         "graphMode": "none",
@@ -819,7 +1921,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -828,7 +1930,7 @@
           },
           "disableTextWrap": false,
           "editorMode": "code",
-          "expr": "nodejs_active_handles{type=\"Socket\"}",
+          "expr": "avg(page_render_time)",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
@@ -838,7 +1940,7 @@
           "useBackend": false
         }
       ],
-      "title": "UI Sockets",
+      "title": "UI Response Time (avg)",
       "type": "stat"
     },
     {
@@ -849,36 +1951,47 @@
       "description": "",
       "fieldConfig": {
         "defaults": {
-          "color": {
-            "fixedColor": "blue",
-            "mode": "fixed"
-          },
           "mappings": [],
+          "max": 100,
+          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "blue",
-                "value": null
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "#EAB839",
+                "value": 0.02
+              },
+              {
+                "color": "orange",
+                "value": 0.05
+              },
+              {
+                "color": "red",
+                "value": 0.1
               }
             ]
           },
-          "unit": "none"
+          "unit": "s"
         },
         "overrides": []
       },
       "gridPos": {
         "h": 3,
         "w": 4,
-        "x": 16,
-        "y": 12
+        "x": 4,
+        "y": 64
       },
-      "id": 27,
+      "id": 24,
       "options": {
         "colorMode": "background",
         "graphMode": "none",
         "justifyMode": "auto",
         "orientation": "auto",
+        "percentChangeColorMode": "standard",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -890,7 +2003,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -899,7 +2012,7 @@
           },
           "disableTextWrap": false,
           "editorMode": "code",
-          "expr": "nodejs_active_requests_total",
+          "expr": "nodejs_eventloop_lag_mean_seconds",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
@@ -909,7 +2022,7 @@
           "useBackend": false
         }
       ],
-      "title": "Active Requests",
+      "title": "UI Event Lag (avg)",
       "type": "stat"
     },
     {
@@ -917,51 +2030,38 @@
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
+      "description": "",
       "fieldConfig": {
         "defaults": {
-          "color": {
-            "mode": "thresholds"
-          },
           "mappings": [],
+          "max": 100,
+          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "green",
+                "color": "blue",
                 "value": null
-              },
-              {
-                "color": "yellow",
-                "value": 300
-              },
-              {
-                "color": "orange",
-                "value": 600
-              },
-              {
-                "color": "red",
-                "value": 900
               }
             ]
           },
-          "unit": "ms"
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 12,
-        "x": 0,
-        "y": 15
+        "h": 3,
+        "w": 4,
+        "x": 8,
+        "y": 64
       },
-      "id": 20,
+      "id": 25,
       "options": {
-        "displayMode": "basic",
-        "maxVizHeight": 300,
-        "minVizHeight": 16,
-        "minVizWidth": 8,
-        "namePlacement": "auto",
-        "orientation": "horizontal",
+        "colorMode": "background",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "percentChangeColorMode": "standard",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -969,11 +2069,11 @@
           "fields": "",
           "values": false
         },
-        "showUnfilled": true,
-        "sizing": "auto",
-        "valueMode": "color"
+        "showPercentChange": false,
+        "textMode": "auto",
+        "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -981,99 +2081,69 @@
             "uid": "dbrepometrics0"
           },
           "disableTextWrap": false,
-          "editorMode": "builder",
-          "expr": "page_render_time",
+          "editorMode": "code",
+          "expr": "nodejs_active_handles{type=\"Server\"}",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "{{path}}",
+          "legendFormat": "__auto",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "UI Response Time per Path (avg)",
-      "type": "bargauge"
+      "title": "UI Servers",
+      "type": "stat"
     },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
+      "description": "",
       "fieldConfig": {
         "defaults": {
-          "color": {
-            "mode": "palette-classic"
-          },
-          "custom": {
-            "axisBorderShow": false,
-            "axisCenteredZero": false,
-            "axisColorMode": "text",
-            "axisLabel": "",
-            "axisPlacement": "auto",
-            "barAlignment": 0,
-            "drawStyle": "line",
-            "fillOpacity": 0,
-            "gradientMode": "none",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "insertNulls": false,
-            "lineInterpolation": "smooth",
-            "lineWidth": 2,
-            "pointSize": 5,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "showPoints": "auto",
-            "spanNulls": false,
-            "stacking": {
-              "group": "A",
-              "mode": "none"
-            },
-            "thresholdsStyle": {
-              "mode": "dashed"
-            }
-          },
           "mappings": [],
+          "max": 100,
+          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "green",
+                "color": "blue",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 256000000
               }
             ]
           },
-          "unit": "decbytes"
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 12,
+        "h": 3,
+        "w": 4,
         "x": 12,
-        "y": 15
+        "y": 64
       },
-      "id": 21,
+      "id": 26,
       "options": {
-        "legend": {
-          "calcs": [],
-          "displayMode": "list",
-          "placement": "bottom",
-          "showLegend": true
+        "colorMode": "background",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "percentChangeColorMode": "standard",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
         },
-        "tooltip": {
-          "mode": "multi",
-          "sort": "none"
-        }
+        "showPercentChange": false,
+        "textMode": "auto",
+        "wideLayout": true
       },
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1081,79 +2151,53 @@
             "uid": "dbrepometrics0"
           },
           "disableTextWrap": false,
-          "editorMode": "builder",
-          "expr": "nodejs_heap_space_size_total_bytes",
+          "editorMode": "code",
+          "expr": "nodejs_active_handles{type=\"Socket\"}",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "{{space}}",
+          "legendFormat": "__auto",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "NodeJS Heap Bytes",
-      "type": "timeseries"
-    },
-    {
-      "collapsed": false,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 22
-      },
-      "id": 31,
-      "panels": [],
-      "title": "AMPQ / MQTT API",
-      "type": "row"
+      "title": "UI Sockets",
+      "type": "stat"
     },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "description": "Quality of Service",
+      "description": "",
       "fieldConfig": {
         "defaults": {
+          "color": {
+            "fixedColor": "blue",
+            "mode": "fixed"
+          },
           "mappings": [],
-          "max": 100,
-          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "purple"
-              },
-              {
-                "color": "red",
-                "value": 0
-              },
-              {
-                "color": "orange",
-                "value": 60
-              },
-              {
-                "color": "#EAB839",
-                "value": 80
-              },
-              {
-                "color": "green",
-                "value": 100
+                "color": "blue",
+                "value": null
               }
             ]
           },
-          "unit": "percent"
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
         "h": 3,
         "w": 4,
-        "x": 0,
-        "y": 23
+        "x": 16,
+        "y": 64
       },
-      "id": 32,
+      "id": 27,
       "options": {
         "colorMode": "background",
         "graphMode": "none",
@@ -1171,7 +2215,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1180,17 +2224,17 @@
           },
           "disableTextWrap": false,
           "editorMode": "code",
-          "expr": "rabbitmq_channels*100/rabbitmq_channel_consumers",
+          "expr": "nodejs_active_requests_total",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "Services Running",
+          "legendFormat": "__auto",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "Broker Service QoS",
+      "title": "Active Requests",
       "type": "stat"
     },
     {
@@ -1198,37 +2242,57 @@
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "description": "",
       "fieldConfig": {
         "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
           "mappings": [],
-          "max": 100,
-          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "blue"
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "yellow",
+                "value": 300
+              },
+              {
+                "color": "orange",
+                "value": 600
+              },
+              {
+                "color": "red",
+                "value": 900
               }
             ]
           },
-          "unit": "none"
+          "unit": "ms"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 4,
-        "x": 4,
-        "y": 23
+        "h": 7,
+        "w": 12,
+        "x": 0,
+        "y": 67
       },
-      "id": 29,
+      "id": 20,
       "options": {
-        "colorMode": "background",
-        "graphMode": "none",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "percentChangeColorMode": "standard",
+        "displayMode": "basic",
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom",
+          "showLegend": false
+        },
+        "maxVizHeight": 300,
+        "minVizHeight": 16,
+        "minVizWidth": 8,
+        "namePlacement": "auto",
+        "orientation": "horizontal",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -1236,11 +2300,11 @@
           "fields": "",
           "values": false
         },
-        "showPercentChange": false,
-        "textMode": "auto",
-        "wideLayout": true
+        "showUnfilled": true,
+        "sizing": "auto",
+        "valueMode": "color"
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1248,68 +2312,102 @@
             "uid": "dbrepometrics0"
           },
           "disableTextWrap": false,
-          "editorMode": "code",
-          "expr": "rabbitmq_connection_channels",
+          "editorMode": "builder",
+          "expr": "page_render_time",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "__auto",
+          "legendFormat": "{{path}}",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "Channels",
-      "type": "stat"
+      "title": "UI Response Time per Path (avg)",
+      "type": "bargauge"
     },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "description": "",
       "fieldConfig": {
         "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisBorderShow": false,
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
+            "axisLabel": "",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "barWidthFactor": 0.6,
+            "drawStyle": "line",
+            "fillOpacity": 0,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "insertNulls": false,
+            "lineInterpolation": "smooth",
+            "lineWidth": 2,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "dashed"
+            }
+          },
           "mappings": [],
-          "max": 100,
-          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "blue"
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 256000000
               }
             ]
           },
-          "unit": "none"
+          "unit": "decbytes"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 4,
-        "x": 8,
-        "y": 23
+        "h": 7,
+        "w": 12,
+        "x": 12,
+        "y": 67
       },
-      "id": 30,
+      "id": 21,
       "options": {
-        "colorMode": "background",
-        "graphMode": "none",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "percentChangeColorMode": "standard",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom",
+          "showLegend": true
         },
-        "showPercentChange": false,
-        "textMode": "auto",
-        "wideLayout": true
+        "tooltip": {
+          "hideZeros": false,
+          "mode": "multi",
+          "sort": "none"
+        }
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1317,26 +2415,39 @@
             "uid": "dbrepometrics0"
           },
           "disableTextWrap": false,
-          "editorMode": "code",
-          "expr": "rabbitmq_channel_consumers",
+          "editorMode": "builder",
+          "expr": "nodejs_heap_space_size_total_bytes",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "__auto",
+          "legendFormat": "{{space}}",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "Consumers",
-      "type": "stat"
+      "title": "NodeJS Heap Bytes",
+      "type": "timeseries"
+    },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 74
+      },
+      "id": 31,
+      "panels": [],
+      "title": "AMPQ / MQTT API",
+      "type": "row"
     },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "description": "",
+      "description": "Quality of Service",
       "fieldConfig": {
         "defaults": {
           "mappings": [],
@@ -1346,33 +2457,38 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "green"
+                "color": "purple",
+                "value": null
               },
               {
-                "color": "#EAB839",
-                "value": 10
+                "color": "red",
+                "value": 0
               },
               {
                 "color": "orange",
-                "value": 100
+                "value": 60
               },
               {
-                "color": "red",
-                "value": 1000
+                "color": "#EAB839",
+                "value": 80
+              },
+              {
+                "color": "green",
+                "value": 100
               }
             ]
           },
-          "unit": "none"
+          "unit": "percent"
         },
         "overrides": []
       },
       "gridPos": {
         "h": 3,
         "w": 4,
-        "x": 12,
-        "y": 23
+        "x": 0,
+        "y": 75
       },
-      "id": 35,
+      "id": 32,
       "options": {
         "colorMode": "background",
         "graphMode": "none",
@@ -1390,7 +2506,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1399,17 +2515,17 @@
           },
           "disableTextWrap": false,
           "editorMode": "code",
-          "expr": "rabbitmq_queue_messages_persistent",
+          "expr": "rabbitmq_channels*100/rabbitmq_channel_consumers",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "__auto",
+          "legendFormat": "Services Running",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "Persistent Messages",
+      "title": "Broker Service QoS",
       "type": "stat"
     },
     {
@@ -1417,7 +2533,7 @@
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "description": "Ready and unacknowledged messages stored in memory",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "mappings": [],
@@ -1427,19 +2543,8 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "green"
-              },
-              {
-                "color": "#EAB839",
-                "value": 10
-              },
-              {
-                "color": "orange",
-                "value": 100
-              },
-              {
-                "color": "red",
-                "value": 1000
+                "color": "blue",
+                "value": null
               }
             ]
           },
@@ -1450,10 +2555,10 @@
       "gridPos": {
         "h": 3,
         "w": 4,
-        "x": 16,
-        "y": 23
+        "x": 4,
+        "y": 75
       },
-      "id": 36,
+      "id": 29,
       "options": {
         "colorMode": "background",
         "graphMode": "none",
@@ -1471,7 +2576,7 @@
         "textMode": "auto",
         "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1480,7 +2585,7 @@
           },
           "disableTextWrap": false,
           "editorMode": "code",
-          "expr": "rabbitmq_queue_messages_ram",
+          "expr": "rabbitmq_connection_channels",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
@@ -1490,7 +2595,7 @@
           "useBackend": false
         }
       ],
-      "title": "Ready Messages",
+      "title": "Channels",
       "type": "stat"
     },
     {
@@ -1498,7 +2603,7 @@
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "description": "Messages delivered to consumers but not yet acknowledged",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "mappings": [],
@@ -1508,19 +2613,8 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "green"
-              },
-              {
-                "color": "#EAB839",
-                "value": 10
-              },
-              {
-                "color": "orange",
-                "value": 100
-              },
-              {
-                "color": "red",
-                "value": 1000
+                "color": "blue",
+                "value": null
               }
             ]
           },
@@ -1531,10 +2625,10 @@
       "gridPos": {
         "h": 3,
         "w": 4,
-        "x": 20,
-        "y": 23
+        "x": 8,
+        "y": 75
       },
-      "id": 37,
+      "id": 30,
       "options": {
         "colorMode": "background",
         "graphMode": "none",
@@ -1551,136 +2645,90 @@
         "showPercentChange": false,
         "textMode": "auto",
         "wideLayout": true
-      },
-      "pluginVersion": "10.4.9",
-      "targets": [
-        {
-          "datasource": {
-            "type": "prometheus",
-            "uid": "dbrepometrics0"
-          },
-          "disableTextWrap": false,
-          "editorMode": "code",
-          "expr": "rabbitmq_queue_messages_unacked",
-          "fullMetaSearch": false,
-          "includeNullMetadata": true,
-          "instant": false,
-          "legendFormat": "__auto",
-          "range": true,
-          "refId": "A",
-          "useBackend": false
-        }
-      ],
-      "title": "Unacked Messages",
-      "type": "stat"
-    },
-    {
-      "datasource": {
-        "type": "prometheus",
-        "uid": "dbrepometrics0"
-      },
-      "description": "Messages for received protocol messages",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "palette-classic"
-          },
-          "custom": {
-            "axisBorderShow": false,
-            "axisCenteredZero": false,
-            "axisColorMode": "text",
-            "axisLabel": "",
-            "axisPlacement": "auto",
-            "barAlignment": 0,
-            "drawStyle": "line",
-            "fillOpacity": 0,
-            "gradientMode": "none",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "insertNulls": false,
-            "lineInterpolation": "smooth",
-            "lineWidth": 2,
-            "pointSize": 5,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "showPoints": "auto",
-            "spanNulls": false,
-            "stacking": {
-              "group": "A",
-              "mode": "none"
-            },
-            "thresholdsStyle": {
-              "mode": "off"
-            }
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "dbrepometrics0"
           },
+          "disableTextWrap": false,
+          "editorMode": "code",
+          "expr": "rabbitmq_channel_consumers",
+          "fullMetaSearch": false,
+          "includeNullMetadata": true,
+          "instant": false,
+          "legendFormat": "__auto",
+          "range": true,
+          "refId": "A",
+          "useBackend": false
+        }
+      ],
+      "title": "Consumers",
+      "type": "stat"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "dbrepometrics0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
           "mappings": [],
+          "max": 100,
+          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "green"
-              }
-            ]
-          },
-          "unit": "mps"
-        },
-        "overrides": [
-          {
-            "matcher": {
-              "id": "byRegexp",
-              "options": "/amqp.*/"
-            },
-            "properties": [
+                "color": "green",
+                "value": null
+              },
               {
-                "id": "color",
-                "value": {
-                  "fixedColor": "red",
-                  "mode": "shades"
-                }
-              }
-            ]
-          },
-          {
-            "matcher": {
-              "id": "byRegexp",
-              "options": "/mqtt.*/"
-            },
-            "properties": [
+                "color": "#EAB839",
+                "value": 10
+              },
               {
-                "id": "color",
-                "value": {
-                  "fixedColor": "yellow",
-                  "mode": "shades"
-                }
+                "color": "orange",
+                "value": 100
+              },
+              {
+                "color": "red",
+                "value": 1000
               }
             ]
-          }
-        ]
+          },
+          "unit": "none"
+        },
+        "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 12,
-        "x": 0,
-        "y": 26
+        "h": 3,
+        "w": 4,
+        "x": 12,
+        "y": 75
       },
-      "id": 33,
+      "id": 35,
       "options": {
-        "legend": {
-          "calcs": [],
-          "displayMode": "list",
-          "placement": "bottom",
-          "showLegend": true
+        "colorMode": "background",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "percentChangeColorMode": "standard",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
         },
-        "tooltip": {
-          "mode": "single",
-          "sort": "none"
-        }
+        "showPercentChange": false,
+        "textMode": "auto",
+        "wideLayout": true
       },
-      "pluginVersion": "10.4.3",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1689,111 +2737,80 @@
           },
           "disableTextWrap": false,
           "editorMode": "code",
-          "expr": "rate(rabbitmq_global_messages_received_total[$__range])",
+          "expr": "rabbitmq_queue_messages_persistent",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "{{protocol}}",
+          "legendFormat": "__auto",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "Throughput",
-      "type": "timeseries"
-    },
-    {
-      "collapsed": false,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 33
-      },
-      "id": 2,
-      "panels": [],
-      "title": "REST API",
-      "type": "row"
+      "title": "Persistent Messages",
+      "type": "stat"
     },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "description": "",
+      "description": "Ready and unacknowledged messages stored in memory",
       "fieldConfig": {
         "defaults": {
-          "color": {
-            "mode": "palette-classic"
-          },
-          "custom": {
-            "axisBorderShow": false,
-            "axisCenteredZero": false,
-            "axisColorMode": "text",
-            "axisLabel": "",
-            "axisPlacement": "auto",
-            "barAlignment": 0,
-            "drawStyle": "line",
-            "fillOpacity": 0,
-            "gradientMode": "none",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "insertNulls": false,
-            "lineInterpolation": "smooth",
-            "lineWidth": 2,
-            "pointSize": 5,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "showPoints": "auto",
-            "spanNulls": false,
-            "stacking": {
-              "group": "A",
-              "mode": "none"
-            },
-            "thresholdsStyle": {
-              "mode": "off"
-            }
-          },
           "mappings": [],
+          "max": 100,
+          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "green"
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "#EAB839",
+                "value": 10
+              },
+              {
+                "color": "orange",
+                "value": 100
               },
               {
                 "color": "red",
-                "value": 80
+                "value": 1000
               }
             ]
-          }
+          },
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 12,
-        "x": 0,
-        "y": 34
+        "h": 3,
+        "w": 4,
+        "x": 16,
+        "y": 75
       },
-      "id": 23,
+      "id": 36,
       "options": {
-        "legend": {
-          "calcs": [],
-          "displayMode": "list",
-          "placement": "bottom",
-          "showLegend": true
+        "colorMode": "background",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "percentChangeColorMode": "standard",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
         },
-        "tooltip": {
-          "mode": "multi",
-          "sort": "none"
-        }
+        "showPercentChange": false,
+        "textMode": "auto",
+        "wideLayout": true
       },
-      "pluginVersion": "10.4.9",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1802,89 +2819,80 @@
           },
           "disableTextWrap": false,
           "editorMode": "code",
-          "expr": "process_open_fds\n",
+          "expr": "rabbitmq_queue_messages_ram",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "{{instance}}",
+          "legendFormat": "__auto",
           "range": true,
-          "refId": "process_open_fds",
+          "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "File Descriptors",
-      "type": "timeseries"
+      "title": "Ready Messages",
+      "type": "stat"
     },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "thresholds"
-          },
-          "custom": {
-            "fillOpacity": 70,
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "lineWidth": 1
-          },
-          "mappings": [
-            {
-              "options": {
-                "0": {
-                  "index": 0,
-                  "text": "DOWN"
-                },
-                "1": {
-                  "index": 1,
-                  "text": "UP"
-                }
-              },
-              "type": "value"
-            }
-          ],
+      "description": "Messages delivered to consumers but not yet acknowledged",
+      "fieldConfig": {
+        "defaults": {
+          "mappings": [],
+          "max": 100,
+          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "red"
+                "color": "green",
+                "value": null
               },
               {
-                "color": "green",
-                "value": 1
+                "color": "#EAB839",
+                "value": 10
+              },
+              {
+                "color": "orange",
+                "value": 100
+              },
+              {
+                "color": "red",
+                "value": 1000
               }
             ]
-          }
+          },
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 12,
-        "x": 12,
-        "y": 34
+        "h": 3,
+        "w": 4,
+        "x": 20,
+        "y": 75
       },
-      "id": 16,
+      "id": 37,
       "options": {
-        "colWidth": 0.9,
-        "legend": {
-          "displayMode": "list",
-          "placement": "bottom",
-          "showLegend": false
+        "colorMode": "background",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "percentChangeColorMode": "standard",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
         },
-        "rowHeight": 0.9,
-        "showValue": "auto",
-        "tooltip": {
-          "mode": "single",
-          "sort": "none"
-        }
+        "showPercentChange": false,
+        "textMode": "auto",
+        "wideLayout": true
       },
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -1892,25 +2900,26 @@
             "uid": "dbrepometrics0"
           },
           "disableTextWrap": false,
-          "editorMode": "builder",
-          "expr": "up",
+          "editorMode": "code",
+          "expr": "rabbitmq_queue_messages_unacked",
           "fullMetaSearch": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "{{instance}}",
+          "legendFormat": "__auto",
           "range": true,
           "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "Service QoS",
-      "type": "status-history"
+      "title": "Unacked Messages",
+      "type": "stat"
     },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
+      "description": "Messages for received protocol messages",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -1923,8 +2932,9 @@
             "axisLabel": "",
             "axisPlacement": "auto",
             "barAlignment": 0,
+            "barWidthFactor": 0.6,
             "drawStyle": "line",
-            "fillOpacity": 25,
+            "fillOpacity": 0,
             "gradientMode": "none",
             "hideFrom": {
               "legend": false,
@@ -1942,7 +2952,7 @@
             "spanNulls": false,
             "stacking": {
               "group": "A",
-              "mode": "normal"
+              "mode": "none"
             },
             "thresholdsStyle": {
               "mode": "off"
@@ -1953,69 +2963,40 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "green"
+                "color": "green",
+                "value": null
               }
             ]
           },
-          "unit": "none"
+          "unit": "mps"
         },
         "overrides": [
           {
             "matcher": {
-              "id": "byName",
-              "options": "auth-service:9000"
-            },
-            "properties": [
-              {
-                "id": "color",
-                "value": {
-                  "fixedColor": "yellow",
-                  "mode": "fixed"
-                }
-              }
-            ]
-          },
-          {
-            "matcher": {
-              "id": "byName",
-              "options": "data-service:8080"
-            },
-            "properties": [
-              {
-                "id": "color",
-                "value": {
-                  "fixedColor": "blue",
-                  "mode": "fixed"
-                }
-              }
-            ]
-          },
-          {
-            "matcher": {
-              "id": "byName",
-              "options": "metadata-service:8080"
+              "id": "byRegexp",
+              "options": "/amqp.*/"
             },
             "properties": [
               {
                 "id": "color",
                 "value": {
-                  "fixedColor": "purple",
-                  "mode": "fixed"
+                  "fixedColor": "red",
+                  "mode": "shades"
                 }
               }
             ]
           },
           {
             "matcher": {
-              "id": "byName",
-              "options": "metadata-service:80"
+              "id": "byRegexp",
+              "options": "/mqtt.*/"
             },
             "properties": [
               {
                 "id": "color",
                 "value": {
-                  "fixedColor": "blue",
-                  "mode": "fixed"
+                  "fixedColor": "yellow",
+                  "mode": "shades"
                 }
               }
             ]
@@ -2026,9 +3007,9 @@
         "h": 7,
         "w": 12,
         "x": 0,
-        "y": 41
+        "y": 78
       },
-      "id": 6,
+      "id": 33,
       "options": {
         "legend": {
           "calcs": [],
@@ -2037,11 +3018,12 @@
           "showLegend": true
         },
         "tooltip": {
-          "mode": "multi",
+          "hideZeros": false,
+          "mode": "single",
           "sort": "none"
         }
       },
-      "pluginVersion": "11.2.0",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -2049,19 +3031,18 @@
             "uid": "dbrepometrics0"
           },
           "disableTextWrap": false,
-          "editorMode": "builder",
-          "expr": "process_cpu_usage",
+          "editorMode": "code",
+          "expr": "rate(rabbitmq_global_messages_received_total[$__range])",
           "fullMetaSearch": false,
-          "hide": false,
           "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "{{instance}}",
+          "legendFormat": "{{protocol}}",
           "range": true,
-          "refId": "process_cpu_usage",
+          "refId": "A",
           "useBackend": false
         }
       ],
-      "title": "CPU Usage",
+      "title": "Throughput",
       "type": "timeseries"
     },
     {
@@ -2083,6 +3064,7 @@
             "axisLabel": "",
             "axisPlacement": "auto",
             "barAlignment": 0,
+            "barWidthFactor": 0.6,
             "drawStyle": "line",
             "fillOpacity": 25,
             "gradientMode": "none",
@@ -2113,7 +3095,8 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "green"
+                "color": "green",
+                "value": null
               }
             ]
           },
@@ -2186,9 +3169,9 @@
         "h": 7,
         "w": 12,
         "x": 12,
-        "y": 41
+        "y": 78
       },
-      "id": 7,
+      "id": 41,
       "options": {
         "legend": {
           "calcs": [],
@@ -2197,11 +3180,12 @@
           "showLegend": true
         },
         "tooltip": {
+          "hideZeros": false,
           "mode": "multi",
           "sort": "none"
         }
       },
-      "pluginVersion": "11.2.0",
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
@@ -2225,81 +3209,24 @@
       "type": "timeseries"
     },
     {
-      "datasource": {
-        "type": "prometheus",
-        "uid": "dbrepometrics0"
-      },
-      "description": "Top 10 by frequency of access",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "palette-classic"
-          },
-          "custom": {
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            }
-          },
-          "mappings": [],
-          "unit": "reqps"
-        },
-        "overrides": []
-      },
+      "collapsed": false,
       "gridPos": {
-        "h": 7,
-        "w": 12,
+        "h": 1,
+        "w": 24,
         "x": 0,
-        "y": 48
-      },
-      "id": 18,
-      "options": {
-        "displayLabels": [
-          "percent"
-        ],
-        "legend": {
-          "calcs": [],
-          "displayMode": "hidden",
-          "placement": "right",
-          "showLegend": false,
-          "values": []
-        },
-        "pieType": "pie",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
-        },
-        "tooltip": {
-          "mode": "single",
-          "sort": "none"
-        }
+        "y": 85
       },
-      "targets": [
-        {
-          "datasource": {
-            "type": "prometheus",
-            "uid": "dbrepometrics0"
-          },
-          "editorMode": "code",
-          "expr": "topk(10, rate(dbrepo_table_data_get_total[$__range]))",
-          "instant": false,
-          "legendFormat": "__auto",
-          "range": true,
-          "refId": "A"
-        }
-      ],
-      "title": "Popular Datasources",
-      "type": "piechart"
+      "id": 2,
+      "panels": [],
+      "title": "REST API",
+      "type": "row"
     },
     {
       "datasource": {
         "type": "prometheus",
         "uid": "dbrepometrics0"
       },
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -2312,8 +3239,9 @@
             "axisLabel": "",
             "axisPlacement": "auto",
             "barAlignment": 0,
+            "barWidthFactor": 0.6,
             "drawStyle": "line",
-            "fillOpacity": 25,
+            "fillOpacity": 0,
             "gradientMode": "none",
             "hideFrom": {
               "legend": false,
@@ -2342,52 +3270,25 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "green"
-              }
-            ]
-          },
-          "unit": "reqps"
-        },
-        "overrides": [
-          {
-            "matcher": {
-              "id": "byRegexp",
-              "options": "/.*search-service.*/"
-            },
-            "properties": [
-              {
-                "id": "color",
-                "value": {
-                  "fixedColor": "orange",
-                  "mode": "fixed"
-                }
-              }
-            ]
-          },
-          {
-            "matcher": {
-              "id": "byRegexp",
-              "options": "/.*analyse-service.*/"
-            },
-            "properties": [
+                "color": "green",
+                "value": null
+              },
               {
-                "id": "color",
-                "value": {
-                  "fixedColor": "super-light-orange",
-                  "mode": "fixed"
-                }
+                "color": "red",
+                "value": 80
               }
             ]
           }
-        ]
+        },
+        "overrides": []
       },
       "gridPos": {
         "h": 7,
         "w": 12,
-        "x": 12,
-        "y": 48
+        "x": 0,
+        "y": 86
       },
-      "id": 19,
+      "id": 23,
       "options": {
         "legend": {
           "calcs": [],
@@ -2396,30 +3297,37 @@
           "showLegend": true
         },
         "tooltip": {
+          "hideZeros": false,
           "mode": "multi",
           "sort": "none"
         }
       },
+      "pluginVersion": "11.5.3",
       "targets": [
         {
           "datasource": {
             "type": "prometheus",
             "uid": "dbrepometrics0"
           },
+          "disableTextWrap": false,
           "editorMode": "code",
-          "expr": "rate(flask_http_request_duration_seconds_count{status!~\"200|201|202\"}[$__rate_interval])",
+          "expr": "process_open_fds\n",
+          "fullMetaSearch": false,
+          "includeNullMetadata": true,
           "instant": false,
-          "legendFormat": "{{method}} {{instance}} ({{status}})",
+          "legendFormat": "{{instance}}",
           "range": true,
-          "refId": "A"
+          "refId": "process_open_fds",
+          "useBackend": false
         }
       ],
-      "title": "Failed API Requests",
+      "title": "File Descriptors",
       "type": "timeseries"
     }
   ],
+  "preload": false,
   "refresh": "1m",
-  "schemaVersion": 39,
+  "schemaVersion": 40,
   "tags": [
     "ui",
     "dashboard",
@@ -2441,7 +3349,7 @@
   "timepicker": {},
   "timezone": "browser",
   "title": "DBRepo",
-  "uid": "bdz20owu8zn5se",
-  "version": 8,
+  "uid": "bdz20owu8zn5se2",
+  "version": 45,
   "weekStart": ""
 }
\ No newline at end of file
diff --git a/dbrepo-dashboard-ui/dashboards/System/logging.json b/dbrepo-dashboard-ui/dashboards/System/logging.json
index 3a561f64b1..f737dfaf57 100644
--- a/dbrepo-dashboard-ui/dashboards/System/logging.json
+++ b/dbrepo-dashboard-ui/dashboards/System/logging.json
@@ -29,6 +29,614 @@
         "x": 0,
         "y": 0
       },
+      "id": 6,
+      "panels": [],
+      "title": "Application",
+      "type": "row"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "fixed"
+          },
+          "custom": {
+            "axisBorderShow": false,
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
+            "axisLabel": "",
+            "axisPlacement": "auto",
+            "fillOpacity": 80,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineWidth": 1,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "warn"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "orange",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "error"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "red",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "info"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "green",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byFrameRefID",
+              "options": "debug"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "blue",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 7,
+        "w": 24,
+        "x": 0,
+        "y": 1
+      },
+      "id": 1,
+      "options": {
+        "barRadius": 0,
+        "barWidth": 0.97,
+        "fullHighlight": false,
+        "groupWidth": 0.7,
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "right",
+          "showLegend": true
+        },
+        "orientation": "auto",
+        "showValue": "auto",
+        "stacking": "percent",
+        "tooltip": {
+          "hideZeros": false,
+          "mode": "single",
+          "sort": "none"
+        },
+        "xTickLabelRotation": 0,
+        "xTickLabelSpacing": 100
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "WARN",
+          "bucketAggs": [
+            {
+              "id": "2",
+              "settings": {
+                "interval": "auto",
+                "min_doc_count": "0",
+                "trimEdges": "0"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "hide": false,
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "level: WARN",
+          "queryType": "lucene",
+          "refId": "warn",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "ERROR",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "level: ERROR",
+          "queryType": "lucene",
+          "refId": "error",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "INFO",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "level: INFO",
+          "queryType": "lucene",
+          "refId": "info",
+          "timeField": "@timestamp"
+        },
+        {
+          "alias": "DEBUG",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Metric",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "count"
+            }
+          ],
+          "query": "level: DEBUG",
+          "queryType": "lucene",
+          "refId": "debug",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Errors and Warnings over Time",
+      "type": "barchart"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {},
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 0,
+        "y": 8
+      },
+      "id": 8,
+      "options": {
+        "dedupStrategy": "none",
+        "enableInfiniteScrolling": false,
+        "enableLogDetails": true,
+        "prettifyLogMessage": false,
+        "showCommonLabels": false,
+        "showLabels": false,
+        "showTime": true,
+        "sortOrder": "Descending",
+        "wrapLogMessage": false
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "level: ERROR",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Errors",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "message",
+                "container_id",
+                "container_name",
+                "logger",
+                "@timestamp"
+              ]
+            }
+          }
+        }
+      ],
+      "type": "logs"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {},
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 12,
+        "y": 8
+      },
+      "id": 9,
+      "options": {
+        "dedupStrategy": "none",
+        "enableInfiniteScrolling": false,
+        "enableLogDetails": true,
+        "prettifyLogMessage": false,
+        "showCommonLabels": false,
+        "showLabels": false,
+        "showTime": true,
+        "sortOrder": "Descending",
+        "wrapLogMessage": false
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "level: WARN",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Warnings",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "message",
+                "container_id",
+                "container_name",
+                "logger",
+                "@timestamp"
+              ]
+            }
+          }
+        }
+      ],
+      "type": "logs"
+    },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 16
+      },
+      "id": 17,
+      "panels": [],
+      "title": "Application Debugging",
+      "type": "row"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {},
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 0,
+        "y": 17
+      },
+      "id": 15,
+      "options": {
+        "dedupStrategy": "none",
+        "enableInfiniteScrolling": false,
+        "enableLogDetails": true,
+        "prettifyLogMessage": false,
+        "showCommonLabels": false,
+        "showLabels": false,
+        "showTime": true,
+        "sortOrder": "Descending",
+        "wrapLogMessage": false
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "level: INFO",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Info",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "message",
+                "container_id",
+                "container_name",
+                "logger",
+                "@timestamp"
+              ]
+            }
+          }
+        }
+      ],
+      "type": "logs"
+    },
+    {
+      "datasource": {
+        "type": "grafana-opensearch-datasource",
+        "uid": "dbrepoopensearch0"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {},
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 12,
+        "y": 17
+      },
+      "id": 16,
+      "options": {
+        "dedupStrategy": "none",
+        "enableInfiniteScrolling": false,
+        "enableLogDetails": true,
+        "prettifyLogMessage": false,
+        "showCommonLabels": false,
+        "showLabels": false,
+        "showTime": true,
+        "sortOrder": "Descending",
+        "wrapLogMessage": false
+      },
+      "pluginVersion": "11.5.3",
+      "targets": [
+        {
+          "alias": "",
+          "bucketAggs": [
+            {
+              "field": "@timestamp",
+              "id": "2",
+              "settings": {
+                "interval": "auto"
+              },
+              "type": "date_histogram"
+            }
+          ],
+          "datasource": {
+            "type": "grafana-opensearch-datasource",
+            "uid": "dbrepoopensearch0"
+          },
+          "format": "table",
+          "hide": false,
+          "luceneQueryType": "Logs",
+          "metrics": [
+            {
+              "id": "1",
+              "type": "logs"
+            }
+          ],
+          "query": "level: DEBUG",
+          "queryType": "lucene",
+          "refId": "A",
+          "timeField": "@timestamp"
+        }
+      ],
+      "title": "Debug",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "message",
+                "container_id",
+                "container_name",
+                "logger",
+                "@timestamp"
+              ]
+            }
+          }
+        }
+      ],
+      "type": "logs"
+    },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 25
+      },
       "id": 5,
       "panels": [],
       "title": "HTTP Gateway",
@@ -84,7 +692,7 @@
         "h": 8,
         "w": 12,
         "x": 0,
-        "y": 1
+        "y": 26
       },
       "id": 7,
       "options": {
@@ -234,8 +842,7 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "green",
-                "value": null
+                "color": "green"
               }
             ]
           }
@@ -323,9 +930,9 @@
         "h": 9,
         "w": 24,
         "x": 0,
-        "y": 9
+        "y": 34
       },
-      "id": 3,
+      "id": 14,
       "options": {
         "barRadius": 0,
         "barWidth": 0.97,
@@ -477,195 +1084,10 @@
       ],
       "title": "HTTP Status Codes over Time",
       "type": "barchart"
-    },
-    {
-      "collapsed": false,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 18
-      },
-      "id": 6,
-      "panels": [],
-      "title": "Application",
-      "type": "row"
-    },
-    {
-      "datasource": {
-        "type": "grafana-opensearch-datasource",
-        "uid": "dbrepoopensearch0"
-      },
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "fixed"
-          },
-          "custom": {
-            "axisBorderShow": false,
-            "axisCenteredZero": false,
-            "axisColorMode": "text",
-            "axisLabel": "",
-            "axisPlacement": "auto",
-            "fillOpacity": 80,
-            "gradientMode": "none",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "lineWidth": 1,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "thresholdsStyle": {
-              "mode": "off"
-            }
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          }
-        },
-        "overrides": [
-          {
-            "matcher": {
-              "id": "byFrameRefID",
-              "options": "warn"
-            },
-            "properties": [
-              {
-                "id": "color",
-                "value": {
-                  "fixedColor": "orange",
-                  "mode": "fixed"
-                }
-              }
-            ]
-          },
-          {
-            "matcher": {
-              "id": "byFrameRefID",
-              "options": "error"
-            },
-            "properties": [
-              {
-                "id": "color",
-                "value": {
-                  "fixedColor": "red",
-                  "mode": "fixed"
-                }
-              }
-            ]
-          }
-        ]
-      },
-      "gridPos": {
-        "h": 7,
-        "w": 24,
-        "x": 0,
-        "y": 19
-      },
-      "id": 1,
-      "options": {
-        "barRadius": 0,
-        "barWidth": 0.97,
-        "fullHighlight": false,
-        "groupWidth": 0.7,
-        "legend": {
-          "calcs": [],
-          "displayMode": "list",
-          "placement": "right",
-          "showLegend": false
-        },
-        "orientation": "auto",
-        "showValue": "auto",
-        "stacking": "none",
-        "tooltip": {
-          "hideZeros": false,
-          "mode": "single",
-          "sort": "none"
-        },
-        "xTickLabelRotation": 0,
-        "xTickLabelSpacing": 100
-      },
-      "pluginVersion": "11.5.3",
-      "targets": [
-        {
-          "alias": "",
-          "bucketAggs": [
-            {
-              "id": "2",
-              "settings": {
-                "interval": "auto",
-                "min_doc_count": "0",
-                "trimEdges": "0"
-              },
-              "type": "date_histogram"
-            }
-          ],
-          "datasource": {
-            "type": "grafana-opensearch-datasource",
-            "uid": "dbrepoopensearch0"
-          },
-          "format": "table",
-          "hide": false,
-          "luceneQueryType": "Metric",
-          "metrics": [
-            {
-              "hide": false,
-              "id": "1",
-              "type": "count"
-            }
-          ],
-          "query": "level: WARN",
-          "queryType": "lucene",
-          "refId": "warn",
-          "timeField": "@timestamp"
-        },
-        {
-          "alias": "",
-          "bucketAggs": [
-            {
-              "field": "@timestamp",
-              "id": "2",
-              "settings": {
-                "interval": "auto"
-              },
-              "type": "date_histogram"
-            }
-          ],
-          "datasource": {
-            "type": "grafana-opensearch-datasource",
-            "uid": "dbrepoopensearch0"
-          },
-          "format": "table",
-          "hide": false,
-          "luceneQueryType": "Metric",
-          "metrics": [
-            {
-              "id": "1",
-              "type": "count"
-            }
-          ],
-          "query": "level: ERROR",
-          "queryType": "lucene",
-          "refId": "error",
-          "timeField": "@timestamp"
-        }
-      ],
-      "title": "Errors and Warnings over Time",
-      "type": "barchart"
     }
   ],
   "preload": false,
-  "refresh": "",
+  "refresh": "1m",
   "schemaVersion": 40,
   "tags": [
     "ui",
@@ -682,13 +1104,13 @@
     "list": []
   },
   "time": {
-    "from": "now-30m",
+    "from": "now-1h",
     "to": "now"
   },
   "timepicker": {},
   "timezone": "browser",
   "title": "Logging",
   "uid": "aejhojr0mrpj4c",
-  "version": 23,
+  "version": 33,
   "weekStart": ""
 }
\ No newline at end of file
diff --git a/dbrepo-data-service/Dockerfile b/dbrepo-data-service/Dockerfile
index 8c4f6ab6c5..ab91fc8054 100644
--- a/dbrepo-data-service/Dockerfile
+++ b/dbrepo-data-service/Dockerfile
@@ -15,7 +15,7 @@ COPY ./services ./services
 RUN mvn -fn clean package -DskipTests
 
 ###### SECOND STAGE ######
-FROM amazoncorretto:17-alpine3.19 AS runtime
+FROM amazoncorretto:17-alpine3.21 AS runtime
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk --no-cache add \
@@ -25,11 +25,12 @@ RUN apk --no-cache add \
 
 WORKDIR /app
 
-RUN adduser -D dbrepo --uid 1001
+RUN adduser -D dbrepo --uid 1001 && \
+    chown -R 1001:1001 /app
 
 USER 1001
 
-COPY --from=build --chown=1001 ./rest-service/target/rest-service-*.jar ./data-service.jar
+COPY --from=build --chown=1001 ./rest-service/target/*rest-service-*.jar ./data-service.jar
 
 # non-root port
 EXPOSE 8080
diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar
index 7b9014efc7563a26c2dcff518c59595087ed4b72..9ad489e8e468bc0b5e7e6c160408d7674a9ec639 100644
GIT binary patch
delta 15963
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

delta 15979
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
D5nA`B

diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5
index d4c0f7e67a..f0f519729b 100644
--- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5
+++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5
@@ -1 +1 @@
-dfe2abb9c96c05cbdc6467bf60537695
\ No newline at end of file
+082f84bc96626ba0af33b55e6371e900
\ No newline at end of file
diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1
index 9f526fb4b3..c459a8e4c3 100644
--- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1
+++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1
@@ -1 +1 @@
-1d27fdc406b24d5e19e7325cc1c475e54dabdbd8
\ No newline at end of file
+73352b727fd328a6f6c87ebb55c5685101ef26a2
\ No newline at end of file
diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml
index 25773a1df8..d008830f7c 100644
--- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml
+++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml
@@ -7,6 +7,6 @@
     <versions>
       <version>1.8.1</version>
     </versions>
-    <lastUpdated>20250421083956</lastUpdated>
+    <lastUpdated>20250422121915</lastUpdated>
   </versioning>
 </metadata>
diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5
index 995497dd53..b0067ff28f 100644
--- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5
+++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5
@@ -1 +1 @@
-746a0f0ea34d057de25fcd3c55b6e0ac
\ No newline at end of file
+9c8ded18aad1ff29f91e6ea5b11e33d4
\ No newline at end of file
diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1
index 26a8079ba8..fac33bc3ef 100644
--- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1
+++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1
@@ -1 +1 @@
-f460c93edbab2a5eb6e49a6e124ca6a03d1b60cc
\ No newline at end of file
+8784dd005d25156e9599b598deabb8aa15b7a8c1
\ No newline at end of file
diff --git a/dbrepo-data-service/pom.xml b/dbrepo-data-service/pom.xml
index 6f67e74b70..2277a8d5cf 100644
--- a/dbrepo-data-service/pom.xml
+++ b/dbrepo-data-service/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>3.3.5</version>
+        <version>3.4.0</version>
     </parent>
 
     <organization>
diff --git a/dbrepo-data-service/rest-service/src/main/resources/application.yml b/dbrepo-data-service/rest-service/src/main/resources/application.yml
index 41d23f4c7f..e0b0a55366 100644
--- a/dbrepo-data-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-data-service/rest-service/src/main/resources/application.yml
@@ -29,6 +29,9 @@ spring:
     port: ${BROKER_PORT:5672}
   main:
     banner-mode: off
+  output:
+    ansi:
+      enabled: never
 management:
   endpoints:
     web:
@@ -48,7 +51,8 @@ server:
   tomcat:
     max-swallow-size: -1
 logging:
-  pattern.console: "%d %highlight(%-5level) %msg%n"
+  pattern:
+    console: "%d [%thread] %-5level %logger{36} - %msg%n"
   level:
     root: warn
     at.ac.tuwien.ac.at.ifs.dbrepo.: "${LOG_LEVEL:info}"
diff --git a/dbrepo-logging-service/dbrepo_parser.conf b/dbrepo-logging-service/dbrepo_parser.conf
index f407dbc1ea..4c778adc52 100644
--- a/dbrepo-logging-service/dbrepo_parser.conf
+++ b/dbrepo-logging-service/dbrepo_parser.conf
@@ -1,8 +1,8 @@
 [PARSER]
-    # https://rubular.com/r/u029eqdrtxeOT9
+    # https://rubular.com/r/78ieBhDKvlzPnW
     Name        java
     Format      regex
-    Regex       (?<time>[^ ]* {1,2}[^ ]*) (?<level>[^ ]*)  *(?<message>.*)$
+    Regex       (?<time>[^ ]* {1,2}[^ ]*) \[(?<thread>.*)\] *(?<level>[^ ]*) (?<logger>.*) - (?<message>.*)$
     Time_Key    time
     Time_Format %Y-%m-%d %H:%M:%S,%L
     Time_Keep   On
diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile
index d705bdf235..d53d1f7e00 100644
--- a/dbrepo-metadata-service/Dockerfile
+++ b/dbrepo-metadata-service/Dockerfile
@@ -16,7 +16,7 @@ COPY ./services ./services
 RUN mvn -fn clean package -DskipTests
 
 ###### SECOND STAGE ######
-FROM amazoncorretto:17-alpine3.19 AS runtime
+FROM amazoncorretto:17-alpine3.21 AS runtime
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk --no-cache add \
@@ -26,15 +26,16 @@ RUN apk --no-cache add \
 
 WORKDIR /app
 
-RUN adduser -D dbrepo --uid 1001
+RUN adduser -D dbrepo --uid 1001 && \
+    chown -R 1001:1001 /app
 
 USER 1001
 
-COPY --from=build --chown=1001 ./rest-service/target/dbrepo-metadata-service-rest-service-*.jar ./metadata-service.jar
+COPY --from=build --chown=1001 ./rest-service/target/*rest-service-*.jar ./metadata-service.jar
 
 # non-root port
 EXPOSE 8080
 
-ENV JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true"
+ENV JAVA_OPTS=""
 
 ENTRYPOINT exec java $JAVA_OPTS -jar ./metadata-service.jar
\ No newline at end of file
diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar
index 7b9014efc7563a26c2dcff518c59595087ed4b72..9ad489e8e468bc0b5e7e6c160408d7674a9ec639 100644
GIT binary patch
delta 15963
zcmbQX)Mffo7v2DGW)?061`Y;>^rC4Kc~zJ}l*v}+)S_t<-^hWe$-In;VA_yT15C#-
z>VWBPMq`lb$p;xNnA3`;P5#4Z52o#yJizom4!y|=ePWXXIJv<5TTD@4dOmZ&^mXs}
zdAVUWgEY@)P6bP{vm}D)Y?d%Ey@Azqdcp^O9u&m_to~q0eono~6If-z><z4*VA@|)
zZ~6mKCZWkTY!GWb*<8R96WE-<&i%uvH$7o3Gy7yNc8CITb{nvQg}g@77u;guL<$p-
z%jU5=!le^@SUD%lazOM6@Ec8kFp-rPP5nY%qsbpQ&`sIL;RiN_pVJ#m$8v^)X-O{M
z=>l)qI41LOK}?n8iU&(nbH#z_J6yqhX+_hb7~o*~{FU75)4bUg&@7(F9Rk+D&uKl~
z;RgpBnzVzk(RBZxXdzk8;{(=njt3HF^Vp51+kfR`ogBaman3w;qsjfe{9r{3d0oLY
zKc~_311ennlePFDiu^^5rXTptFMtwBo@{#4Ke%)8PTtSQ3D!1&O>cU^A2bID@I#_)
zABWNO4eeY)lNazq%v{Uw3)c0QKN3vOX9nx$nw%h{jOMe00@+|C`hvyiK_z&SQ+@h_
zLjo?7rG+5oY6$g#74H;s0H<P*k011Mv!a>lAnXQKHi1oVvH%Cm^z-)w&;#_Gusc|Z
zzo^k95pIE;6n#Wyf+QTH=?8uauuh&M0<qd()O_*-5n-^VY!<!g1zUOL(5&?r^#Ui-
zIij{;dLFypG=4tT$^2q`V7`KwGnh^j(*o0z#UP3Lh8Q?`ZPpa`0|)lzDusO<Ad5Cz
zYjU%K8J>Dy*}x1((@)G`hM8qNgfYWrfizgeI^qCC&A+%-h*VpW93NO}c>yyEn6b8G
zE<2dvTjK^1nbuGYVeqs*<^ab)^z~%JE*1ucB*E$R57?A9EA%~vs9>A?iwmq``gfNQ
z2^I#16MWM@R<SEjR_IfjzJQONdvn}8YlzZ0i@rb%yZ@Sh+8t&Fh7O+T1{|yqrSaeS
z*{8qfWM|v_Vf8PFOW&^F1M%^i9gDcZ4h%fv0rC2rlQs~>?Q`ECZohKvEyQrPpw}Hy
z%nS_QIHwEl<5Zp;@L7HO9bp0S%?1xrAm&bgyb)rY_xmf%V7D(xyIR-F&cM(qJpE%W
zxANwI&qpApivMnu0@=KMwkV?^SZMos8AdfRu-FeHMoq8-x2sq)I)MGSJ>8!1h$L86
zFOo4v2+ZouW)y?SF3V?JAOIHgY+z*L1l#>eZAzJf00Tq5;q-$koXXo9IvM>1z%oXK
z|7^-x85q1pr}L|`DsP*`xDD*-?K|f)-Ur9(_SwrAnIO(uu$Iw95N!1GeT-EQ>rxIg
zvO-un#~IIolk9feON@;Wv4htb??a-lVoBG@Ol}4SXIZfKr#C1G$ZUW6kg<gu><;eG
zMLTaZGccs_f<ttAgNA_Y^ab()irXK&Wqb+_)9oidGG2y+#k^lIv9^DV517DC%4B5n
zfmphOl_?d%Qs83hhnT;ZQ*O>zW(J1O?9&TtnM|jPzZT%%&M3wNbvvgNlP<*Hmhw!C
zA)4<iGyMP;VcTyRGu1$3BQ2TuAdbnhVfq5`ZK6BVTzRk)7}J?-AhHfwOwth9xDqB=
zh*(`Y(^ZI5!>X8gA!2E@Obfy3WII<UQw=!JZ10@T6c4fO^&F-^h&uZPOx_Sy?_#E8
zh$)|!G8sd}G*>cNLJ}F%v>iE5m>3wovw|afx&j|F*Y>$<m^dK{SFUGrhOpjmVsd8Y
z1XU3aJ#>7YPcOXAWVAhZ8<PM;x?v|%EX0-vyP4b|Vw(GzoFJ^cLrfkJ*3P3$=}h1V
zyfEWe3_BA8!xQG|4%?V?r(gKN#JWA<1d}$zn7&g?X%N=;GfdtP$1do0j%8(HV0g$3
ziW8OT4KJCvw%1*NX<2iLDHEba;wn=Bgq3}r$sM9u{$CB>Qziz6|EzG$Jlj9qg8B5%
zU0BcsJY))mXkPIc7Ib{im>eJ;2z<#Dz|0E@hu;jdTbY;`7_LrdG-KA=e&-F78pLNN
zi)&7CFflN^WuCq<pAqa#&gtiz1=y#bGZT>79`~L}2%=DQ>4G=E85tPPGa~{Y5)K<a
zGD$<+aPBkAQ&!)YqM0~AHk*mRnm>KrdM2~!(<}rer~h5g#JT<J52j}j9ru1S<v>`z
z|Ck&huAa!q90&=9^m}J(AEQUOEGshyM4<);b0mb-!p)q`1di}r2|?`#(_<Z(jkas?
zF|$CV4F#E@(Of0M><bY)CC;1%(V|k!d;7)o1`%eX>37~RaZmTq5|G^9FU9-`;_*Bt
z4Xbxd3=G0-kPu2R6yVyvSC&}<V$KZ(W<Q7zG?ke>A!4O!%n=aQ1x;o<2uo0x85%1g
z2F!NMT%fRtUy}ZefoZzqHzq@HP)^r%6p)y{AexzL`4?kmh^gOAnG+zaC<|t2Hd$fK
z>;f_My&ZEZL^j-!*#Z)3n?GHg{fCi(;TH3B#%?a<?FU?#^&o0Kx-n-!STUZ=c@WlF
zZ<zb#{9rCj41|T(su1Qdh^f0mqgR2FBrh}=3Y-MEw%bH7^Ftis7tI_8F>rk>Gc+fC
zNnp125lk<d7WFPDep1;71_r5qW(J$dg7Xx%C#+?j|A7xAC-l?DX^R;H!@>UP2AUko
z+YRQi+&2>h1<#y0b%89b3=GY@3=CFaT@F`Sv>~NO-Yu315EkPD7EMT*ru&5D8id96
zlI1Xjb>=OL9)$JxBg<ZhTlaotSqmxibN{mRg2lG}WmSa;sdBKsf%y3D)&lb+RtAQz
z{Gf1D2RDSb`}452L+rgN$hr|?a<3Sx0ED$biggdzyzTLFtU3^}J|$L2TVOkjI;$l_
zuY(S2F@&|vko7r4-2yXKUWnKRYt}?&zSN>=QQy~{y{*8^z!1eTeL^Ld`t(=90tVa5
z>{+!SmMnH+Wr1i}<<1JNl=OUHj&TfNm4z6c7{a;`qK-8RX5ITZRtt!%Rx&Fq3pl{v
zZ}C1Y#KyqzNP>YOZu&+iR^90iQLH@E9rmztPOpg&kl(&AomB=>aURHJeFt&H#zL4q
z7fV@>L&RoRvc^D6|5eKx0?`rJ!m7XmE{(jcKdY}{W?)dBKEaJs1Jq-XnBK66RbaY9
z9xK=Mx)=er?e{uZw?T}W-oq*aas0Z8tY#2HpHF3lGzhlMV(o?~>zm8E6e4N1h!t8x
z&RfQ601>;miuD{b*pDB~9;+F#Ffe5DFfatb{m8%l%{ta#7I0y||ImS|Ko$lD9iHiq
z8`-p{CnU3qZ1363ng)@+>~}a|5i<kBN_He^`yH&?A@2COn^h6q-rO#GlyxCQ?BEGj
zNQ-RyzB8;z5M$UUU7f$3oq<727~FZ8zQKr1YJ2`g*5i<5XnB+M9>nQV_gFVT#Lhlt
zO=bl<QT6n?N@ivThCX&sW71&yhGaI5>2)n^Y};#IvqFo}1MgU$LIQrpS5_v7S!;i?
z&Vx9~?=LJ=Q<>N_<-j%kL<Kfxh)vVg*-{{^e|l`S5FK?!Yz+`o7|q$9@ql%_a%S5L
zVXX>aONOWu2w`(#2fK2qQ~fIy76t}=uIYj=S=2#Y!0i*F*&HDOFmqMHI$dT4hU@Ip
z8Ru}Tg93nmI^Q!^&h2suY#|V{N|V{RIKk0Y&$uX9i<N;vOaK&Zh8J0Nr+>&2;MsmM
zhs_U?I;4u&CPUo3p^_~S5>69WEor{S!ocu=YkFc8lk(&QZeB=OefY`By*;R&?HR;J
z)-7yy5LQhGn=wSM_Ow;y8`v2bmJ5Sj4{@JVp#bl;KDJ#Di}p@sa}oo4b(Q8T|2-@W
z4DI}r1t%+SH(0~Q3~`m&Mz*hz<e;~kO&uZ@ae!?;BxZgcV{?Fr*`8rL5Aieq1-3kh
z@eSA66d|r!a+~cegjMo@Z4pF=<TJMA5SJS9p8lG^%D}K#0Mr{$pH?oQJKeuRKxn(k
z8@4Qn;)NgC!XXCy{>o+r5wrNsRs?Bru4QI_4H28o$-Wh$E|`y97vjif5q7A<*GjUN
zLma6t%dP{F4O3>{#R|^Vw=3%EH!(9X$V_h#;ntW|E1)!;yG}rHdxs`Fv`}={WuE}i
zb<3Fj3dE$1=InlK;3!s2|JPN<%)p?{$-q!Qy>J4%_4I^h0q*Jh8wJF+=h(3?gJ=+S
zV&4XF_Bk*1hmfLr<+HXqjjRj|y}Xm}UsK-xz>obb#6KHC*j*w1`4Pcx3ejee$esmp
z#oToE4G`IY9QGFw<E;zWVM(EcJsqO%Srz*>h`Rap?7JYQ#B{K;K>ABvJu~-xVP#<O
z=LOdj)4bWmr>|`n;N8A+0{cIRGj>g5UjfmUI-k7>(sq8elHF4RoQup3u^T`v$~?iI
z2uUqxFS2{`f@LM|vmb$2{@^kDWQZwcZ`k=DCbxfNzW{M~)K~Te5Osflvd@R4p!tj(
z(h#w|tQ^@89opO+M<AiLIZb}01TzCe4jZWEHJiSmMu20xH9v<2#K1Hm4snQ<25}B{
zh%sH#9Iqg<<?<Y>Ax>4*<k$#NcT<l8T2y~9=C}?~cgmb&FSrx1yvvybVo0w$2ejsN
z^x+VJxHKY|!wF)@+z5{M5LSO2hccv#$MNy&!KWe&3?JPmGm5HDZ}`h9I9+DC0Oxkb
z4376A;2d~-Z}43<76yi9?&<vMtdQblyGbpF5yZ~SMh;#`@2+wZ$0dl<{HAe0)71Bw
z94jGWi|2A=Lv#o(;;4a$O<2ky2r1F*qNZ3|vN14B;sb@40eDPly1^U)j_C=r1=zNK
zUc=!GiAc-M9FCCgRqY`TE{K6$$2epl9$R^uV;&?Ty{>R*LDZE$=7@#JUVp*C3z2>P
zfkPT%@vT>z^qiR)7|yYQDjkFE4nH{3A&y)1o5K^VZ|gVCMu<=q3uitgYTod2o`Hz%
z7UWEYRK6$X<tt8QWnj2AeceJH4M<q(y0CF<&lBU^3pQ!Ho(yL(q>wH=xAf^seg=l=
z2H-*vRD@5T5Y5Ii{r@{w&h2j$ICnx^zruiXCnQm|^L$=w#m>NRS_GUMrt=4LicWvG
zLV$Do786b{NMtkGa6&Udn;T~mBy?VTalVJh-VNf+fVjgWf-?^yyEBIK7esbj3THTE
z1VEsavlSBBGpac~A@23jdAxBt3j>2KAE>9T4!2!(dq4x{LWmko&(zu@tPBiOq3t@b
z3;QEDIj1+Q6kyx#)yjDeV!d=X=NSm=)dbGnkZ@cvh4VMWA<O1)CPQR-7IA)pIFoTX
z=Y1Y<ay+1RZSrAG1_l)=P<P32yZjc;Cy+Q{+s8Q>qHoS&&U6Ti?IbK1vd?n<gm^0b
z3g=NsNuhtA^F73N#mAhftQ?@WabolYkLd+xIo+lQY!Kj_{%(T++xEvVIOns0ZGWCr
z?WDxYz!1y_>a!?=hU+Hr@=W*NC?LK4-g{0Rh^@R|Ib&EsBYxX+esMyZk01VVPG$y+
zwJ~wM<p8tFxVhROI{piAl|WoqCeHN$;-*MxF33>Q_8AIXpCMv>DqNQ!$)Reis_R`=
z1_ld0P|sO;y1)_v*6ACJxHz`Y)8Jx;xORWfe!pC11_ox%=?%$j>Y#yC&h7X0xMo8P
zt2N@1gjhP$f@=rFSf%%S?CMz=7;f=Qceu^1KK;ONe!l7cI|O95Z?NI&ggDm5iK`h>
zK`!DHpLmv;f#E*;^mqei<?SEbxuET_x87Xx5VQG%xS%c8yf7|ku^=ABB?d`r23cIt
z&claXuCtH?aG;dy5X6P8m0T?lQ+OJ<pc(FVGuHx$Y+XB7DTMW{i)$f7-K>dRHjpH9
zb1K&Z2y4$QE)IyxkI(1&24Njo%EbneJ-L!=EreCMjw>5t-t&!I(1t|k4z5aw$*lXi
z+92xs4s)G^xHRfC*E@)q_XREu2&?Q0*CdD?+_$)tAuPlDFx#via~VU#3SMyWL3A{}
z;aUc<L+dk_0}D85<bLP60g?6i!v)DATiLi}*ucG)t~s>^qFf9NF0#`DwYYVr%hqvo
zZ%=3AR^<Zg?HAyF0!eCRBHVHi^QKF1pI{dRb$zbHrCv&9W?<0bWMC)&wbNCmgT|z%
z|2ik&wf(UIcRr+tG~HW%?krXYhUq-hCo*wqOi#EVz&U;Hc>%ud^HsQ)KvK7x7PllP
z*wBS}?Jm<f7#N(y85m5E4E6WrX5Bu|n0pl@!F$_q&tU_*@s$(z6bP%)lY0upwGzJE
zoe;|>D{wJ?WMg1x6$F=#(+^w|;NJc)fSZRMtocJY_gx6<LOk~(7I2un;Ch$8hJ%5D
zMFOscZTkEh0s`Cjrf~0pSYMONT?q+}ABEhz*unakymx!;WoBS7;R3amb*DRA70}-<
zQ^kE8;-+V{-1!jCMl^GugNSLib2mZUzOI*>4`Sf{iQKUemi#pCD-a#uW^+SR*0KfM
zdmv@x8};^c+n5;`UV_Jf)u$`m=N6j2@1}sp_KQoo4?t4il$G4xkm`BP_5&3bEDQ|g
zJkuw-aY9sYSKG{;0ZAGYw{x>X64T5*+z%mQwFkM^Lrb?a+*=?e<Fl*WJ`i=Lx4EIc
zzjybz|3IvJ`-uAtMDL#G+_xbKan?KTzYy73pSTZ0OiB2|%?^>xV&aj5$ab^x?1b3n
zF2EB2ZjNl9CC#%PVqS;>j{(Hqc2yn=NLN^<bIV;-76t|jUIvD&>59fYmeb!pWaOUy
zL7InUyMz``2t;eX9uKruF}rp_ZX-Jb!(@f&jEtP>(?2-#h;ENE=6MLof_BzCwUA1E
zpED1%mvzL8M+D;1+W|bLkbn;mj+?ZXg@J*A7u+qJB*MKtAe840#5VmXo<wMy^SuSf
zW*!EH&4$w#p5rmvej$nH8l)q(GM^_DGUCqI#lr`w@~4YxMQmedV7NSep#-<abc2@y
zVxZw?mg)C5@^EfX@8dZDairEX9_SFM?M$ANkf7t7%QFLF`;vt`<&a>KTh5aQ3C{kF
zJog}C1>1R`t$h96JjxIqq5FAQA)bys&SM6#W7;{M=Ma+{F7ZH{$Bj35u0a~RQO|fT
zLCn*C!?PM<$K7u{br8LA|9Gk)Cf{M=eGL&i#l@Qi5i{rKT?)~AUxarOBslY)1-y91
z&cLur1T-)YiIwT#h)j4dz`6arB<}}E1Iu@l5*sTI14Eu3xTm=NgCegfBtSLvcoiVV
zdK>fdL#&E5=e-LNv$f@Y3rTmn?!2=gv3bguw;AHafI!|f2y15uZwW+)K@{%<NF{dg
zmu##sHv_{Ox#<_r@+(hosN?0`{x6nS4U$0BGkF^zp|`4#_c=t1%-tW-f0-B<jMzc_
zOpp%F?Waq5ts$0hR`R+*YP@+Xy$yabF)%Q&Lt4WJehP3-uV)qH-aey_R}rFmPb04*
z*h$;kd6gj+srB>zh8VDO<?W=GEDQ{y+@J=hI%w98e|qg-0g>&MQ+Yo_LLq+^?_aP1
z+w&Ljo`o1{zl66F!aBX2R}B&gEj9Bthp{j)Y~-0<FrOW47Uy>THM~ub)X6(lVh%40
z1H<X*AF9|jKsK>Xbr7`OuCb9<9FiFg+9XXt^BaZS3=E~yFUIm}PJST5IlY!qP-*HP
zL6z+%w(|amSbAzF?`253Sa6URS`+6V<?RDU%(gSU%OT2Eo#%zj^KIw3%nMC$4{z}9
zfXL3d!wVg|JN<z7FT}5>pYjSp{QBS(FLX9V-~+EMB-{di@P330v@<LAFHL1-VDOvX
zz|95r4CnUxKfJXNz5f~cs#!p@l-q0B_^Oz|tX~{_(ad001P@<16DMd))ZF*2ro=Q(
zKC|t7{Ct`aSt}tvU5Jh>5x(6JF%1bmP8RSes{h9)De)W(47tLS8AX*r6QtASRr%Pq
z=gRQaaDYvJqr$fyqHCT8UpmAj4sE_-2&+z)uM*5^|E15j{g*y})HJY5s<b);)TbY~
z#BaWR$}xTmu#)ZPPw>}3SbnGZOCe6K{Qmo{+H^i`KJ)2w`2^XwbDiTifT*#(zz_B6
zu1ow?5Y+{Dc;2gmjh%jgUyyx!^;Ld-i0ZZ1`AZ;b{&V>8>Q9g3;WOKwaEsr83GC17
zpVCi%V`5;4W1X&li{Ehj{X6{Z5MRB#&tC{JBK8q~F%zeh*R-fbyu1eT({DcE_oy#^
zWF}H~etkh^ysG1gNhZ#Fe7C>!Nt=|nZ1&r4p*NUBa!yW7;duLHf4KPljgf~{ZhvU$
zKR0n-@zskn_tp0)=lixSnG?(FR$%dggS*1x=A*0+KR<>S7*@QW?<0J0zQ+QavuB@N
zO;{OH)EUroy~T0Pg9J|naqcf4KFZBKxbWW7BlV~2!=8MKyyTR#`R0MMH@N2TwJU#l
z{`ao>UgsXh)SyJM39EK2nSN>Ay^jpq+@Dt;ua1>DZ&c!v@N>aGxgXy)WS(&r`ukAl
z;q9xMt1kM<#5b`fp3)ca6K`66GWW&nzYBd@w%v(&Fe7J2#6ijDSzSeaL2TTv&n*IG
zy>MxG$P!h(u)c%gU61Cf4O2JG-2TVV##rLBe>>mP4|kRyYmxkW`_|e`te1cMIez}0
zxYrGlo9l}VMJMLJQ8x}>S>oI)%G_b9vU!$l=>0!S(s<VNIH-9&7iu$h6uP&;^(tQ<
zBTLML*rT$Kq`W(KZ8*UZcOdYnQl6=bk$}lY4f~8h{YA!&N3YGUFMjy<)93eMVN*3H
zXWu%Q5xA9gk&kth)<iZfQ5Pk4{!Eb-S<5G^@jN2TyDI5PQ^X}N+xNY{&ir;-q2l{J
zLT@gw$*1JgZ02omm+zV`;~cx<*}6kNWd)n07_?a;Q<@CscTHNAr1z9bPTfR_$!lI$
z!;i(EHM8PhPPwvjgTg9bqv(1~)y=P1(lvVz<vgCfrt9anj+c9G91qSD{aA4<d_&KQ
zi>xyK%T_q*vxcQeyU0xUUM?JKeQsGs`odM2j}9#>I>*x2yXb6dkj84^s`Dl~)6PFw
z+4<wz)}Sw(?Aj+KIW`{3nms{CTV}7Z>5|C{D{D?LFPM9-z)5>{%z<*tHnX-pM)jeG
zRL}FAm3;O4*o9N;-@X>RZrYcT@p$jja|^;ma*rfG{MxufadY3J|7IUNg_bm}di%Or
z$Nv?#$#jOU6MfoOSW6ZhzF6+_?*D3ygyK#1Rj1=_+?0qFXPNWnqVoAo^8YedGyOM{
zYB3ja$=ccL>GI)^Z~HFI&Ig(Y^QD%=d2W34s9s^heZ~iOAFEv4UCAKRWw-xcmBP8m
z(#K-Qb3?ZaXeIBgtln25BhM_~ZkTGdHzPg&U++|nTdi_YB6}R}A7-4mNjpl)>dh9F
zT(1bpyxr+CKWD{mUwicV|K+bvYwl2QT_;@S@+;--ifrxb7gLPC1+2KYs%+QkyOoi_
zcfWI)aNRekcl8x7UvTZ0ipBNws!H=7bEL_tpRqnCr<P&1@_}d9$BY}N)na+yd8a)&
zt-WK3v64hs%BQtcO#b~{@$%l+!*2xxWA`vt-A|tS-D&IZ-s_APmN4I%H?946W0n1@
zun!j&<n28EJO1Ha-dB33xR!ou*wlaXm9vGH_>_~!PWDBqzss0d&wKJtu=VZb&Qq6J
z<t><If4))pUD;ewev8?cUA3f&+ok-?6b%~p9ur+|rp|7<Fvntp@)a4WD^nADw7H)u
z?w66@5Ou1oEInlJy}db+d~3h&-tg=Cf7zSP@0({C+*&`^ce<!z=kjSGRWU6t6+c(_
zq!(^@^sA@xh<RE@^FOcB1+VLwRjsV&&+$JtS^l&m`vDymKE(@m3~J3ec?ECRstVpu
zRx`I+q4vIQ`Qq-+p1Sts1+p)utTz?4K6LzBu(h=8#rUgFzFT-Kej$4{c#As!SH<2#
z6N6LYCU5%nc%PD#fLiw913g#F9`D)qm2J+fkHM!~jOF*GZN7er!``0l?%lc_KaJmB
z?!C#R7b+8)w(h8z;?-kIH($wm&UV2x$aSmKwMUny+)Ao=@t+;ETt|d~frA6I_HDZ7
zEB*zbx?}pASNtYmhVpBEdr;qIdg^O_JuqY1Ykos8<J4<@3owKA4ZjVT;qrzbyfkNe
z*BgHDTB_;uKJiOW|L}(21T?ZaUHvV81ekG=RX}?B+_(JBVBX`m{8?Z|z&rj@7(;sc
z<9Gbv#d6af-t!lNh3lCGq^F;M&ktTcHeL1uWLebo$`AbD^<vXE{@|CM{_O+516Z}}
z2Y%`4As_kez`Q~x0qN-*KJtUt=S{!+n_qf5?<amsuv`tuIVqp`&B0!t_lY08v~K!`
zPyFDOVbkqD^M`^Jo&y=O=`+6>m}mc)UwS&*7k(=+4{TlB7pQgfzd*Hsy(;t->Q%4{
zi@!o$xa}){I#{p5H~xGWLwfq!Z~Wj@Y|~l3^XGwuOTY6cgBiEK^XGsWUO)I#z>JMQ
z_@luL{-6Bd<$}{Qe)7kFMUMZ31~=H*w!fgx2J<GucwkRF{RQ;|*nPIYq3#2R+3eql
zFoQS?99;f?_|3t#fc?GX57gfv?@s#*^{v}q{#dY@Wq<iI!Hj@+{L<5P|3M?R>mPqL
zSeWBKe>0fT_n&_Ph%r@BU>=x0BoF{jT3|;TFbY6Ip8qGm^z;@+0c((&>0tNVWfXw8
zN1RCjysU6~A(H?k{hVVG2m~tx`^T190FnmknFZ1i!ptlJ_TcDuWfAZNGr(4EU=c6_
z^IozD1cMp&tO8bGMh&Y#5SVe1RRFwBak>$k03>!6vI&%djh12;r~)&lvkO3?l7mAa
z11wU^Ay5Klyy6gmB>!+u0q_FQ>H9eaAj!dy3#xbym%wzeVl!@mRxo29x4=p;Ba26%
z1I+l!BLH63H@%G)s#t*!s(1w-RLYWHpcbrnC%-^9nBguU0EvU6Fov_Bzznd|Jwbs<
zU`DYJ)H`p41iHW?mBIpTU<Q+jKpmLTECO`~pQr#N6Ss*9l!K(Ei9v0s6BB@>f>&Zt
z^OD5{nm|gXzYvGUMWBR05?ExL1k|Nwk^;qGku{P6xnPEj6qL~;1y#c%Ezk*;njtMv
z31*1MKtrxxMgWquSY-u@z*1GR(5QGV3vuA|R5<}iK0Gf6b-TMf)PEP`p;2nD0CoIo
z1!%k}DMABdy&^Q6T$BU~z*cNmf<~aGGGtxm^y$jb;89Y6+SQ{14FpzIfqJm6c2xmL
zIrm!?nj$jPpmyC?6Q}{JiBlJ-05fi?Lp|uC0rk#S4XCB+n$Yyvp$RqTt0q)effh6{
zpJ_pLg=@nSoi@~|x;oI{ovQ;?!>0@NSEDY}g<o}{QfYcn1MlcTMSS(4;e1FR8oV|J
zP+c1gpyntWLPe$<Lfy=11l3h%1a-z6BdD4LW2l--#!v%&OrRqBOrVzPn?l_@-&CLg
zJYEi305#pfT|jKQt{F7@H=04+`rQnwI^A3V65_Ybp(grTKuz3dAy5QfV6=3XQo-Zt
z3)}@nr~6q71cL*Ai6t~V<*lG5^;<y`Ij=QTA7o*Yyt9Dl^tskh7kspa+Lvkrjr@By
zP>~>8sK{wss4E@qph<6o9W+Sf>;=lfZaU_?TKCa(u-TjKp=Pr?KqI@v0jm6w1JqL?
zj!=^hJ3^gn>;#R8WiW=MGgM87GgRugGc-yHT%f7&xeL_fP*<oqM_r+cE!?05-BvfK
z^R?Xta=<YW@^;Ic=@0b;#HMd`hlU@whd?s8=q&UQNCz`+dqA_7yC*a~uJ?o*r0NCD
z+#9_Fdcnc(=nYN#YrLTafQ}E;tqXkwAT=esFVsI}zEH&veW68Oz8}=lkNlvK9qbP^
z=d!=RM6ea<0no6!82~Lq69b`Y9tJ{94hVvpyc@<)3l?YuS68coq4`xa1e)C^hd>jE
zU?|j_iJ?%b-=R>ua>Jm3_$o}G9qf#faDnAuhFk<R5LQJ9Yy^wMMGDLZF{VX9br(fJ
z%aJcp&@`11EwB)zWI9ibKns{LIR+XAim}izm=X)MN-hrSu6c1#x68&0%mwS(8xKtY
zCJ9hi97urr#x4<R`vw?8DG6%w)FfzvWJ-oAZb*g(*z06y5Jsgyoq8?>Dq@=o)wL=W
zT8p`)K^=A^4XRx~9qNqT>Cp1pI0LF{K?XD%NoGP#?#&eF2m3-k3mTKlv!DSlm<>(O
z_1VyB<99YR^(E&(?K+nu&<NHZlnYgJE*I(@pFF7TNAjT6YiK?+K^@B%m<iUEQ~<5m
zP8UE8G%JLr^hJeG_h=PC!*EU!H1!!2Lu-rO#R7}L<|LLtqms20T4i>XLL*M34B8Sn
zPzDXLsB);ukIJFZT~Gm);;Mvd@2`Z`a1vF};GIzg^@V0N)Pu{bp{Xyh1{ymDYM?2>
zycX)_m9@~|wXTDTtgVBlL;ZTF$ijMoRbXHEH9*7gRD%Gxoi{zU5n749YJ|2rTAQE&
z&e<%`0M^yh3=IwO7J+GCkqs@-8rQWI>iDCrP{)V0K~wM5HfYNvtR0#lPqst-<=z3U
zNDg*Diw(0*XnbAjgf<r<x}YZC=n|L;wzQxdnzUYaL(8Gc9;lk1Jy3J<dZBhb?1e@_
zW*^kR_kB>mXZJ%B!1aD;_;^l$D!w=Y8oVA8p$6`q2vw{(2^y8#CqWh4PlhJ84U?f!
z;4}rAB+g8M)=%zJp}}%vD%52EX;5dJo(4^sCexw5*fJg3_L7_d6`45$TF!IMgfc2;
zLc{R;OlTf#o(1(F=WM7`OJR(Mv!Qmy&VlN>JqMakJ?26kzjH1$pX$zoO3j)F)g?9`
z8a^HKp`rSFKGcJ)3!sWWEr6Pnybx-|!-Y`yq%VR7)cZxytQWNy8t+#YLk)Ca0ySsL
z5@-o&y%g%x)k_5+O?QoD(44Yy8Pq+>%b{u}FNY>ku@z9p%oR|@N-LpOOkD|0kRq#~
zaoV{G>gHdopb5KmHB=Yh8mLn%*Fdd!xdtj#v=*A?+1Ck709UN~ZGZfxPuu{iSl0=F
zcL+@vTn{z6X+6}k@9Ux3dNx2)0P{v@#ag*hAQfC&J=_Ql@z_lQ)nJj^n*>t845!V|
z`gFx+Xrq#I3)E$mTcE|?$1TvLP`edcehF@aMr!LesL71mp{XrvyTBB1c4FKC%}!N2
zpiX_i16mx%?u0t^%1)@~V|PJ|?Bg(o;clqn`MaTI6W<=FPZ#fjhPcvRXnC=FFEmX!
z?t>b5Y9BOuZ1+PW{>Xl)n=KANJ-Ffk)ExDL(2DT*L4j*v$1gY}a2U);J1nph%uqT4
zE#uA~5jX}GnQ;_aq8T3(SPvF?dQ4z9n6db{z$`Gs;e^0sFyq<@fz4n>&q-(jEqDrQ
z>Bdt631BIa(*gzHNNGO}jf)qjp~*M&j6e)nYRegcBrrqrtiV(-W8+zYelWxNoIpO9
zvGtt5Y%nAEJT#Vformg@zaS6~mTJ5pPzq-JydY2nX5?KIs01@!!5C?m1Tw%P7cW5*
zlI3Nnu8o(WQZiSdmiAo{$OJ3?bp_f+s=EqR{OzhhJ6NjWnm{&~@$Q;HGni3w9hx9N
zU57d~@&>eexO+pO2OKOpH=%L*^(HhWq}+nW>FZn2Je+YG8mBjILlctI9cTjBdIu_{
zdKa1?=iP-GsD2OH8tA_V%>`fYLDl5lhuU@bJ~V|#K7f|FR~|s?zp#f;HAf#pqcZgo
zG`fF3f~N4I$I#k^>j^aP%zFYY<20T^^Vfo>(EO$I3|h*phcS$vL#<c{V+g!}`m6Z`
zG;Mr%0WA{}UqZ{T%P*lW41EQ4#+g@8DZAIuoO0wf)Ex6S(Bfk48)(@i@fKRpx4ebc
zNkZ?S=5)S;>iY8z8Y~s>p#lErJ=CXFAE0)<`2Y>xkdIKQHy@#SFyRxliv92j8VDJm
zp@Hz_GgKt!3)EkCzd)Ul{S_+p_$#z<2>b?(xb5GdzR>*+tt|I{hgNd-KcH%s{(x2w
z@;{;ZtKp{rWR&gsPiXt8@fWmG;rtENmH!)R&imicgcSb=>aXK}pxX8RLcP4;FEqaR
z|3U5Q{09vv*8fmO<A12s@Bfg>duos10&q&#XB2D#Gqx}aLdG&QnFJw&BlDRAAtNB#
z%!1%im+4EH1tH@wvMhp-VVq4Yf{>=H8LMC#*qr&Sf{>vn9yX{*DVrc<c<KS0AY>rM
zm0b|hqgu@_SPky0X>th0f*GAK#!DE(lM^bnl2b4atcHtAun^3s;}T2&GahmYrhyq=
z+=7r^;0A7}VnH6kIPfeakHG>Do$2}<f}+!Vc?7}xJEvdb5sU`wGvI|PpU4Zf?ITPi
zhz}~Y8O9Ldhl-TK7}xlrmO$nk!IlIGKrNXr05$SEj1ev<7>6{sxKB_p9_$JQAwg+o
e+gJS4-?IvsOz(Zg&o{k6NKk<7-Yb3v1_l77{ja<L

delta 15979
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
D5nA`B

diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5
index d4c0f7e67a..f0f519729b 100644
--- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5
+++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5
@@ -1 +1 @@
-dfe2abb9c96c05cbdc6467bf60537695
\ No newline at end of file
+082f84bc96626ba0af33b55e6371e900
\ No newline at end of file
diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1
index 9f526fb4b3..c459a8e4c3 100644
--- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1
+++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1
@@ -1 +1 @@
-1d27fdc406b24d5e19e7325cc1c475e54dabdbd8
\ No newline at end of file
+73352b727fd328a6f6c87ebb55c5685101ef26a2
\ No newline at end of file
diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml
index b6f7fd380d..b7ee7dbe99 100644
--- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml
+++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml
@@ -7,6 +7,6 @@
     <versions>
       <version>1.8.1</version>
     </versions>
-    <lastUpdated>20250421083957</lastUpdated>
+    <lastUpdated>20250422121933</lastUpdated>
   </versioning>
 </metadata>
diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5
index e0626a5c47..3d856af716 100644
--- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5
+++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5
@@ -1 +1 @@
-8a5f8a644242230dab9041ce299fd77f
\ No newline at end of file
+f7d3706978b0e0277aa64ce2b5538405
\ No newline at end of file
diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1
index 76b83b9802..5e5ee45feb 100644
--- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1
+++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1
@@ -1 +1 @@
-102e640934487420a19e7e092eb8af3dcac9950f
\ No newline at end of file
+7de1d14129a4071daefae0475eea792e1a8f406c
\ No newline at end of file
diff --git a/dbrepo-metadata-service/oai/pom.xml b/dbrepo-metadata-service/oai/pom.xml
index d14d0bcf61..49abf35216 100644
--- a/dbrepo-metadata-service/oai/pom.xml
+++ b/dbrepo-metadata-service/oai/pom.xml
@@ -4,7 +4,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <groupId>at.tuwien</groupId>
+        <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
         <artifactId>dbrepo-metadata-service</artifactId>
         <version>1.8.1</version>
     </parent>
diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml
index 313d6d0db5..cdecf72b4a 100644
--- a/dbrepo-metadata-service/pom.xml
+++ b/dbrepo-metadata-service/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>3.3.5</version>
+        <version>3.4.0</version>
     </parent>
 
     <organization>
@@ -13,7 +13,7 @@
         <url>https://www.tuwien.ac.at</url>
     </organization>
 
-    <groupId>at.tuwien</groupId>
+    <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
     <artifactId>dbrepo-metadata-service</artifactId>
     <name>dbrepo-metadata-service</name>
     <version>1.8.1</version>
@@ -178,11 +178,6 @@
             <artifactId>spring-security-test</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
diff --git a/dbrepo-metadata-service/report/pom.xml b/dbrepo-metadata-service/report/pom.xml
index 847272f66f..dbdc6f9a80 100644
--- a/dbrepo-metadata-service/report/pom.xml
+++ b/dbrepo-metadata-service/report/pom.xml
@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <artifactId>dbrepo-metadata-service</artifactId>
-        <groupId>at.tuwien</groupId>
+        <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
         <version>1.8.1</version>
     </parent>
 
@@ -15,12 +15,7 @@
 
     <dependencies>
         <dependency>
-            <groupId>at.tuwien</groupId>
-            <artifactId>dbrepo-metadata-service-rest-service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>at.tuwien</groupId>
+            <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
             <artifactId>dbrepo-metadata-service-services</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/dbrepo-metadata-service/repositories/pom.xml b/dbrepo-metadata-service/repositories/pom.xml
index 4f9850d3d3..b37ea9075a 100644
--- a/dbrepo-metadata-service/repositories/pom.xml
+++ b/dbrepo-metadata-service/repositories/pom.xml
@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <artifactId>dbrepo-metadata-service</artifactId>
-        <groupId>at.tuwien</groupId>
+        <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
         <version>1.8.1</version>
     </parent>
 
@@ -16,15 +16,9 @@
     <dependencies>
         <dependency>
             <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
-            <artifactId>dbrepo-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>at.tuwien</groupId>
             <artifactId>dbrepo-metadata-service-oai</artifactId>
             <version>${project.version}</version>
         </dependency>
-
     </dependencies>
 
 </project>
diff --git a/dbrepo-metadata-service/rest-service/pom.xml b/dbrepo-metadata-service/rest-service/pom.xml
index 0f1abad18e..19815840d4 100644
--- a/dbrepo-metadata-service/rest-service/pom.xml
+++ b/dbrepo-metadata-service/rest-service/pom.xml
@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <artifactId>dbrepo-metadata-service</artifactId>
-        <groupId>at.tuwien</groupId>
+        <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
         <version>1.8.1</version>
     </parent>
 
@@ -16,11 +16,6 @@
     <dependencies>
         <dependency>
             <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
-            <artifactId>dbrepo-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>at.tuwien</groupId>
             <artifactId>dbrepo-metadata-service-services</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
index 492aafb6c5..29b6c27348 100644
--- a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
@@ -25,6 +25,9 @@ spring:
     port: ${BROKER_PORT:5672}
   main:
     banner-mode: off
+  output:
+    ansi:
+      enabled: never
 management:
   endpoints:
     web:
@@ -42,10 +45,11 @@ management:
 server:
   port: 8080
 logging:
-  pattern.console: "%d %highlight(%-5level) %msg%n"
+  pattern:
+    console: "%d [%thread] %-5level %logger{36} - %msg%n"
   level:
     root: warn
-    at.ac.tuwien.ifs.dbrepo.: "${LOG_LEVEL:info}"
+    at.ac.tuwien.ac.at.ifs.dbrepo.: "${LOG_LEVEL:info}"
     org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug
 dbrepo:
   datacite:
diff --git a/dbrepo-metadata-service/services/pom.xml b/dbrepo-metadata-service/services/pom.xml
index db32fbe9cc..dfac0b7ea6 100644
--- a/dbrepo-metadata-service/services/pom.xml
+++ b/dbrepo-metadata-service/services/pom.xml
@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <artifactId>dbrepo-metadata-service</artifactId>
-        <groupId>at.tuwien</groupId>
+        <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
         <version>1.8.1</version>
     </parent>
 
@@ -16,16 +16,11 @@
     <dependencies>
         <dependency>
             <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
-            <artifactId>dbrepo-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>at.tuwien</groupId>
             <artifactId>dbrepo-metadata-service-oai</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>at.tuwien</groupId>
+            <groupId>at.ac.tuwien.ifs.dbrepo</groupId>
             <artifactId>dbrepo-metadata-service-repositories</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/docker-compose.yml b/docker-compose.yml
index 6accc2bc09..287d7e5791 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,57 +1,3 @@
-x-resources-nano: &resources-nano
-  resources:
-    reservations:
-      cpus: '0.1'
-      memory: 128M
-    limits:
-      cpus: '0.15'
-      memory: 192M
-
-x-resources-micro: &resources-micro
-  resources:
-    reservations:
-      cpus: '0.25'
-      memory: 256M
-    limits:
-      cpus: '0.375'
-      memory: 384M
-
-x-resources-nano-hm: &resources-micro-hm
-  resources:
-    reservations:
-      cpus: '0.25'
-      memory: 256M
-    limits:
-      cpus: '0.375'
-      memory: 4096M
-
-x-resources-small: &resources-small
-  resources:
-    reservations:
-      cpus: '0.5'
-      memory: 512M
-    limits:
-      cpus: '0.75'
-      memory: 768M
-
-x-resources-medium: &resources-medium
-  resources:
-    reservations:
-      cpus: '0.5'
-      memory: 1024M
-    limits:
-      cpus: '0.75'
-      memory: 1536M
-
-x-resources-large: &resources-large
-  resources:
-    reservations:
-      cpus: '1'
-      memory: 2048M
-    limits:
-      cpus: '1.5'
-      memory: 3072M
-
 x-healthcheck-params: &healthcheck-params
   interval: 30s
   timeout: 10s
@@ -89,8 +35,6 @@ services:
     healthcheck:
       test: /opt/bitnami/scripts/mariadb/healthcheck.sh --connect --innodb_initialized
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-micro-hm
     logging:
       driver: fluentd
       options:
@@ -118,8 +62,6 @@ services:
     healthcheck:
       test: /opt/bitnami/scripts/mariadb/healthcheck.sh --connect --innodb_initialized
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-micro-hm
     logging:
       driver: fluentd
       options:
@@ -146,8 +88,6 @@ services:
     healthcheck:
       test: "psql -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak} -c 'select version();'"
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-micro
     logging:
       driver: fluentd
       options:
@@ -185,8 +125,6 @@ services:
     healthcheck:
       test: curl -fsS localhost:8080/realms/master
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-medium
     depends_on:
       dbrepo-identity-service:
         condition: service_healthy
@@ -216,8 +154,6 @@ services:
       READONLY_USERNAME: "${READONLY_USERNAME:-readonly}"
       SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
       SYSTEM_PASSWORD: ${SYSTEM_PASSWORD:-admin}
-    deploy:
-      <<: *resources-nano
     depends_on:
       dbrepo-auth-service:
         condition: service_healthy
@@ -284,8 +220,6 @@ services:
     healthcheck:
       test: curl -sSL localhost:8080/actuator/health/liveness | grep 'UP' || exit 1
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-small
     depends_on:
       dbrepo-auth-service:
         condition: service_healthy
@@ -336,8 +270,6 @@ services:
     healthcheck:
       test: curl -sSL localhost:8080/health | grep 'UP' || exit 1
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-micro
     logging:
       driver: fluentd
       options:
@@ -369,8 +301,6 @@ services:
     healthcheck:
       test: rabbitmq-diagnostics -q is_running | grep 'is fully booted and running'
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-micro
     logging:
       driver: fluentd
       options:
@@ -389,8 +319,6 @@ services:
     healthcheck:
       test: curl -sSL 127.0.0.1:9200
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-medium
     logging:
       driver: json-file
 
@@ -421,8 +349,6 @@ services:
     healthcheck:
       test: curl -sSL localhost:8080/health | grep 'UP' || exit 1
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-micro
     logging:
       driver: fluentd
       options:
@@ -456,8 +382,6 @@ services:
     healthcheck:
       test: curl -fsSL 127.0.0.1:3000 && curl -fsSL 127.0.0.1:3000/health
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-micro
     depends_on:
       dbrepo-search-service:
         condition: service_healthy
@@ -483,9 +407,6 @@ services:
     healthcheck:
       test: wget -O- http://127.0.0.1:8080
       <<: *healthcheck-params
-    deploy:
-      # TODO may need less but takes forever to stop
-      <<: *resources-micro
     depends_on:
       dbrepo-analyse-service:
         condition: service_healthy
@@ -533,8 +454,6 @@ services:
     healthcheck:
       test: "ldapwhoami -H ldap://localhost:1389 -D ${IDENTITY_SERVICE_ADMIN_DN:-cn=admin,dc=dbrepo,dc=at} -w ${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin} || exit 1"
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-nano
     logging:
       driver: fluentd
       options:
@@ -558,8 +477,6 @@ services:
       OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200}
       SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
       SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
-    deploy:
-      <<: *resources-nano
     depends_on:
       dbrepo-search-db:
         condition: service_healthy
@@ -589,8 +506,6 @@ services:
       METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080}
       SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
       SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
-    deploy:
-      <<: *resources-nano
     depends_on:
       dbrepo-dashboard-ui:
         condition: service_healthy
@@ -621,8 +536,6 @@ services:
     healthcheck:
       test: echo "cluster.check" | weed shell | grep "checking master.*ok" || exit 1
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-nano
     logging:
       driver: fluentd
       options:
@@ -643,8 +556,6 @@ services:
     healthcheck:
       test: promtool check healthy
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-nano
     logging:
       driver: fluentd
       options:
@@ -665,8 +576,6 @@ services:
       S3_BUCKET: "${S3_BUCKET:-dbrepo}"
       S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-seaweedfsadmin}
       STORAGE_ENDPOINT: ${STORAGE_ENDPOINT:-http://storage-service:9000}
-    deploy:
-      <<: *resources-nano
     depends_on:
       dbrepo-storage-service:
         condition: service_healthy
@@ -722,8 +631,6 @@ services:
     healthcheck:
       test: curl -sSL localhost:8080/actuator/health/liveness | grep 'UP' || exit 1
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-large
     depends_on:
       dbrepo-data-db:
         condition: service_healthy
@@ -762,8 +669,6 @@ services:
     healthcheck:
       test: curl -fsSL --head 127.0.0.1:3000
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-nano
     extra_hosts:
       - "localhost:host-gateway"
     logging:
@@ -791,8 +696,6 @@ services:
     healthcheck:
       test: curl -fsSL --head 127.0.0.1:8080/health
       <<: *healthcheck-params
-    deploy:
-      <<: *resources-micro
     depends_on:
       dbrepo-dashboard-ui:
         condition: service_healthy
@@ -814,8 +717,6 @@ services:
     volumes:
       - ./dbrepo-logging-service/default.conf:/opt/bitnami/fluent-bit/conf/fluent-bit.conf
       - ./dbrepo-logging-service/dbrepo_parser.conf:/opt/bitnami/fluent-bit/conf/dbrepo_parser.conf
-    deploy:
-      <<: *resources-micro
     healthcheck:
       test: ps -p 1 | grep "fluent-bit"
       <<: *healthcheck-params
@@ -835,8 +736,6 @@ services:
     environment:
       OPENSEARCH_DASHBOARDS_OPENSEARCH_URL: "${OPENSEARCH_HOST:-search-db}"
       OPENSEARCH_DASHBOARDS_OPENSEARCH_PORT_NUMBER: "${OPENSEARCH_PORT:-9200}"
-    deploy:
-      <<: *resources-micro
     depends_on:
       dbrepo-logging-service:
         condition: service_healthy
diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar
index 3c984d8705a677ec2d7b2e424c5683a3aa2edffd..dd348c636f84e0ec4e345bc53cdcda60c1d2b6c9 100644
GIT binary patch
delta 645
zcmbR3Kigj@z?+#xgn@yBgW*Wpw5b20=7|%9l<Iwh4=V`lO;`KhXwR_4SNiy!HF8@n
zzw-IJLx00YAK^=lzFGhGnq0LglljV^^CtQJV_ofnZATpbu-0zq)xHtYbLq(~WdSKW
zdyyPgS*x<AUyqf&h*VqVeq_(qsSmj~Kkc`^^6{4IEE(nKC|(imkLuo{VrMk^cegov
zOUqp-4|{A`U-V$!m!;<?pEKE)&|N9a6wJQO?QmY>r6=p|g+?r1y#MF91@}3QzG?qs
zZ#n<^>89L{vV{|h_TT4@W^;UdZ;|i<)(KnIeGxdZeO6Sz<Gd#)O*-A47e+d;GvDXc
z;?A@9^TuP#H^mRh>|AVHPcHxaPwv%^J4;L7M(>yZu(QMV$;}z{^$GH&XV*(V4+x&m
zze_Jp_p9?Mi~K0nlHk+2awS&}lySKDc-{Ta+8298M*f_(G>7c3;D@GV-(0LuFH>vh
z3CUAiEaUdnr*})><d~U4pA1)cF4H%jJolaL?^maH-Z%01)Ul~gZqffsm$*Bd?6$Zl
zUw$GBiUuwQ1`Y;rG)&&esLXsgZQA7PjJnK6(xy#jXOaWc8ceESI)F(FOxH4*faxtv
zUSRc%%xA&$Mdogh_~v+)IZR;2KQ?YoFoQ>+Mi9i9+^skZOlv4j=72^0<iko<Ai+t>
zCSYUCm2E-X$>qv=V0wkJDVTns3|2N-R>cL(Pf>{it3Rj`45r0ZbHU>6s<B}DxvC?W
R)>hjEreCOKfazd$4***yAU^;A

delta 645
zcmbR3Kigj@z?+#xgn@yBgMlS<YLvL1qr^lZrTWu(hZO|&M1QjXz}zrdApGmvO#a*}
z?NjXDWk;B6nDr&RHK~t(v}K)CXfFSOLwweUb;=*)v^M_W{*@3NzM=EPr6-q^1*G=f
z5P!p0Rr2Q0>#c7uZk`#yeq_<+tq;97KkSdb^6^&WEE%QfNL~@`kLup0VrQnvZP#t@
zyJoZC{n}%}^-oUN%6iRLo10mCa9Xz+OW3=cT)ey4ye7|1i%xFt`}fScu})d!v;3$3
zPio@siskrj;ccC=`>x*&Esj@ZVsjaE8<vz#ZFksr`AQ|vCk_8)o+eiPr-iB{ey-cF
z<-xJT=lfi;<(ceD79?Dl5yShtI^$7s{@T~~+WvN&cYUKc-}gs7`?o;zKbuPVOnHAU
znEmMLC4(hBpLc1u=1K27xOZLjjh@C1&z0@_4{Yq8_4sgQF7ra?dYwIo?#X4YuAF(^
zDEC|l-_lbCr?(hM&N<9-b<3qJyY(T<mi?-DfAf0$xxdRCC%I4Y{UY#p`ZPxmkuM8X
zrDm$V2So!H0|N&GI2tBzWK?Em4xKvrI-@R_W@nNE(;7^w%q*c(CkHTTf$3T%6EMAn
z$qOvc$b1$|Uu5nE(VOF0<}iU7|Jb-W!3-XO8bPp@ZpB$(T0?0v2Q2C*A6Bvg2~JWr
z0V$qru51gY%a!%O^a^EDko4pS%3x)aWmR0j{1lZau>3)lU@$GNnhU1eRb#>Qb5%z$
St*y2Ttp0^s2AB?3_W%GA7z|th

diff --git a/lib/java/dbrepo-core/pom.xml b/lib/java/dbrepo-core/pom.xml
index d86419d19d..ca435617a6 100644
--- a/lib/java/dbrepo-core/pom.xml
+++ b/lib/java/dbrepo-core/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>3.3.5</version>
+        <version>3.4.0</version>
     </parent>
 
     <organization>
@@ -38,7 +38,7 @@
         <lombok.version>1.18.36</lombok.version>
         <keycloak.version>26.0.4</keycloak.version>
         <mapstruct.version>1.6.3</mapstruct.version>
-        <spring-cloud.version>4.1.4</spring-cloud.version>
+        <spring-cloud.version>4.2.1</spring-cloud.version>
         <jackson-datatype.version>2.15.0</jackson-datatype.version>
         <springdoc-openapi.version>2.8.5</springdoc-openapi.version>
     </properties>
diff --git a/make/build.mk b/make/build.mk
index f767915fb1..288ad7d0ca 100644
--- a/make/build.mk
+++ b/make/build.mk
@@ -1,14 +1,16 @@
 ##@ Build
 
 .PHONY: build-images
-build-images: build-java-lib ## Build Docker images.
-	docker compose build --parallel
+build-images: build-java-lib build-auth-event-listener ## Build Docker images.
+	docker compose build
 
 .PHONY: build-java-lib
 build-java-lib: ## Build the Java Library.
 	mvn -f ./lib/java/dbrepo-core/pom.xml clean package -DskipTests
 	mvn deploy:deploy-file -Dfile=./lib/java/dbrepo-core/target/dbrepo-core-$(APP_VERSION).jar -DgroupId=at.ac.tuwien.ifs.dbrepo -DartifactId=dbrepo-core -Dversion=$(APP_VERSION) -Dpackaging=jar -Durl=file:./dbrepo-data-service/lib/ -DrepositoryId=maven-repository -DupdateReleaseInfo=true
+	mvn -f ./dbrepo-data-service/pom.xml clean package -DskipTests
 	mvn deploy:deploy-file -Dfile=./lib/java/dbrepo-core/target/dbrepo-core-$(APP_VERSION).jar -DgroupId=at.ac.tuwien.ifs.dbrepo -DartifactId=dbrepo-core -Dversion=$(APP_VERSION) -Dpackaging=jar -Durl=file:./dbrepo-metadata-service/lib/ -DrepositoryId=maven-repository -DupdateReleaseInfo=true
+	mvn -f ./dbrepo-metadata-service/pom.xml clean package -DskipTests
 
 .PHONY: build-auth-event-listener
 build-auth-event-listener: ## Build the Auth Service Event Listener.
diff --git a/make/dev.mk b/make/dev.mk
index dbad9eff6f..c19e505e9e 100644
--- a/make/dev.mk
+++ b/make/dev.mk
@@ -1,7 +1,7 @@
 ##@ Development
 
 .PHONY: start-dev
-start-dev: build-images build-auth-event-listener ## Start the development deployment.
+start-dev: build-images ## Start the development deployment.
 	docker container stop dbrepo-gateway-service || true
 	docker container rm dbrepo-gateway-service || true
 	docker compose up -d
diff --git a/mkdocs.yml b/mkdocs.yml
index 7060289640..5051d9a328 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -20,6 +20,7 @@ nav:
     - Data Versioning: concepts/data-versioning.md
     - Dashboards: concepts/dashboards.md
     - Data Visibility: concepts/data-visibility.md
+    - Logging: concepts/logging.md
     - Messaging: concepts/messaging.md
     - Monitoring: concepts/monitoring.md
     - Persistent Identifier: concepts/pid.md
-- 
GitLab