Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
db/
neo4j-data/
neo4j-data-new/
observability/
logs/

# Ignore Gradle project-specific cache directory
nbproject
Expand Down Expand Up @@ -233,7 +235,7 @@ Temporary Items
### Gradle ###
.gradle
**/build/
!src/**/build/
!idoris/**/build/

# Ignore Gradle GUI configuration
gradle-app.setting
Expand All @@ -258,3 +260,4 @@ gradle-app.setting
*.hprof

# End of https://www.toptal.com/developers/gitignore/api/intellij+all,macos,java,gradle,webstorm+all,git!/.idea/!/db/
*/build
25 changes: 11 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,6 @@

IDORIS is an **Integrated Data Type and Operations Registry with Inheritance System**.

## Cloning this repository

This repository includes files that are stored using Git LFS.
Please install Git LFS before cloning this repository.
For more information, see https://git-lfs.com/.
Then execute the following command to clone this repository:

```
git lfs install
git lfs clone https://github.com/maximiliani/idoris.git
```

## Installation of Neo4j

IDORIS relies on the Neo4j graph database.
Expand Down Expand Up @@ -49,7 +37,7 @@ For macOS, you can install it using Homebrew: ```brew install openjdk@21```.

For Fedora, you can install it using DNF: ```sudo dnf install java-21```.

Configure the [application.properties](src/main/resources/application.properties) file to contain the Neo4j API
Configure the [application.properties](idoris/main/resources/application.properties) file to contain the Neo4j API
credentials.

```
Expand All @@ -58,7 +46,8 @@ logging.level.root=INFO
spring.neo4j.uri=bolt://localhost:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=superSecret
spring.data.rest.basePath=/api
# Base path for all REST endpoints
server.servlet.context-path=/api
server.port=8095
idoris.validation-level=info
idoris.validation-policy=strict
Expand All @@ -71,3 +60,11 @@ When Neo4j is running, start IDORIS with the following command:
```

You can access the IDORIS API at http://localhost:8095/api.

### API Documentation

IDORIS provides comprehensive API documentation using OpenAPI/Swagger. You can access the API documentation
at http://localhost:8095/swagger-ui.html when the application is running.

All endpoints support HATEOAS (Hypermedia as the Engine of Application State) and return HAL (Hypertext Application
Language) responses, making the API self-discoverable.
17 changes: 4 additions & 13 deletions catalog-info.yaml

Large diffs are not rendered by default.

142 changes: 142 additions & 0 deletions docker-compose-observability.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
version: '3.8'

services:
# Prometheus for metrics collection
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./observability/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
- '--web.enable-remote-write-receiver'
restart: unless-stopped
networks:
- observability-network

# Mimir for scalable metrics storage
mimir:
image: grafana/mimir:latest
container_name: mimir
ports:
- "9009:9009" # HTTP API
- "9095:9095" # gRPC API
- "9093:9093" # Alertmanager API
volumes:
# - ./observability/mimir/mimir-config.yaml:/etc/mimir/config.yaml
- mimir_data:/data
# command: [ "-config.file=/etc/mimir/config.yaml" ]
restart: unless-stopped
networks:
- observability-network

# Loki for log aggregation
loki:
image: grafana/loki:latest
container_name: loki
ports:
- "3100:3100"
volumes:
- ./observability/loki/loki-config.yml:/etc/loki/local-config.yaml
- loki_data:/loki
command: -config.file=/etc/loki/local-config.yaml
restart: unless-stopped
networks:
- observability-network

# Grafana Alloy for unified observability data collection
alloy:
image: grafana/alloy:latest
container_name: alloy
volumes:
- ./observability/alloy/alloy-config.alloy:/etc/alloy/config.alloy
- /var/log:/var/log
- ./logs:/logs
- ./observability/alloy/alloy_data:/var/lib/alloy/data
command: [ "run", "--storage.path=/var/lib/alloy/data", "--server.http.listen-addr=0.0.0.0:12345", "/etc/alloy/config.alloy" ]
restart: unless-stopped
ports:
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
- "12345:12345" # Alloy UI
depends_on:
- loki
- prometheus
networks:
- observability-network

# Tempo for distributed tracing
tempo:
image: grafana/tempo:latest
container_name: tempo
command: [ "-config.file=/etc/tempo/tempo-config.yml" ]
user: root # Run as root to avoid permission issues
volumes:
- ./observability/tempo/tempo-config.yml:/etc/tempo/tempo-config.yml
- tempo_data:/tmp/tempo
ports:
- "3200:3200" # tempo
- "4319:4319" # OTLP gRPC (changed from 4317 to avoid conflict with Alloy)
- "4320:4320" # OTLP HTTP (changed from 4318 to avoid conflict with Alloy)
- "9411:9411" # Zipkin
restart: unless-stopped
networks:
- observability-network

# Pyroscope for continuous profiling
pyroscope:
image: grafana/pyroscope:latest
container_name: pyroscope
ports:
- "4040:4040" # HTTP API and UI
volumes:
# - ./observability/pyroscope/pyroscope-config.yaml:/etc/pyroscope/config.yaml
- pyroscope_data:/data
# command: [ "-config.file=/etc/pyroscope/config.yaml" ]
restart: unless-stopped
networks:
- observability-network

# Grafana for visualization
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- ./observability/grafana/provisioning:/etc/grafana/provisioning
- ./observability/grafana/dashboards:/var/lib/grafana/dashboards
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_USERS_ALLOW_SIGN_UP=false
- GF_INSTALL_PLUGINS=grafana-piechart-panel
restart: unless-stopped
depends_on:
- prometheus
- mimir
- loki
- tempo
- pyroscope
networks:
- observability-network

volumes:
prometheus_data:
mimir_data:
loki_data:
tempo_data:
pyroscope_data:
grafana_data:

networks:
observability-network:
driver: bridge
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
# Copyright (c) 2025 Karlsruhe Institute of Technology
# Copyright (c) 2025-2026 Karlsruhe Institute of Technology
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand All @@ -15,7 +15,7 @@
#
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
Loading