[ 
https://issues.apache.org/jira/browse/AIRAVATA-3981?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yasith Jayawardana updated AIRAVATA-3981:
-----------------------------------------
    Description: 
h2. Goal

Automated end-to-end verification that the full Airavata stack starts cleanly 
after the thrift-server extraction. Single Tiltfile orchestrates infra, build, 
server startup, and health checks — replacing shell scripts, IDE launchers, and 
custom deployment tooling. Minimal bloat.

h2. Components

h3. 1. Monitoring Server Enhancement (airavata-api)

Extend MonitoringServer (HTTP on port 9097) with two new endpoints alongside 
existing Prometheus /metrics. No auth (internal admin port).

*GET /health/services* — Returns JSON with status of the thrift server and all 
background services. Status values: UP, DOWN, DISABLED. Each entry includes 
status, uptime_ms, last_error.

*POST /admin/restart/\{serviceName\}* — Restarts a background service by label. 
200 OK (restarted), 404 (unknown), 500 (failed).

Implementation: ServiceRegistry class tracks background services. 
AiravataServer registers services with the registry instead of raw lists. 
MonitoringServer queries the registry for /health/services and triggers 
restarts via /admin/restart.

h3. 2. Tiltfile (repo root)

Single orchestration file for dev setup AND integration verification. Replaces 
ide-integration module.

* docker_compose for infra (MariaDB, RabbitMQ, ZooKeeper, Kafka, Keycloak)
* local_resource for build (mvn package)
* local_resource for airavata-server (classpath mode, readiness probe on 
/health/services)
* local_resource for integration-tests (manual trigger)

What goes away: modules/ide-integration/, 
dev-tools/deployment-scripts/docker-startup.sh

h3. 3. integration-tests/ Maven Module

8 JUnit 5 test classes:

* ThriftServiceHealthTest — multiplexed thrift client calls getAPIVersion() on 
all 9 services
* DatabaseHealthTest — JDBC to MariaDB, verify key tables
* RabbitMQHealthTest — AMQP connection, verify exchanges
* KafkaHealthTest — Kafka admin client, verify broker reachable
* KeycloakHealthTest — realm endpoint, obtain token
* PrometheusHealthTest — GET /metrics
* ServiceHealthEndpointTest — GET /health/services, all services UP
* BackgroundServiceHealthTest — all expected background services present

  was:
After the thrift-server extraction (PR #595), add end-to-end integration health 
checking:

1. ServiceRegistry + monitoring endpoints — Extend MonitoringServer (port 9097) 
with GET /health/services and POST /admin/restart/{name}
2. Tiltfile — Single orchestration file for dev setup and integration 
verification, replacing ide-integration module
3. integration-tests module — 8 JUnit 5 test classes verifying all 9 thrift 
services, DB, RabbitMQ, Kafka, Keycloak, Prometheus, and the new health endpoint


> Add integration health check: ServiceRegistry, monitoring endpoints, 
> Tiltfile, and test suite
> ---------------------------------------------------------------------------------------------
>
>                 Key: AIRAVATA-3981
>                 URL: https://issues.apache.org/jira/browse/AIRAVATA-3981
>             Project: Airavata
>          Issue Type: Improvement
>            Reporter: Yasith Jayawardana
>            Priority: Major
>
> h2. Goal
> Automated end-to-end verification that the full Airavata stack starts cleanly 
> after the thrift-server extraction. Single Tiltfile orchestrates infra, 
> build, server startup, and health checks — replacing shell scripts, IDE 
> launchers, and custom deployment tooling. Minimal bloat.
> h2. Components
> h3. 1. Monitoring Server Enhancement (airavata-api)
> Extend MonitoringServer (HTTP on port 9097) with two new endpoints alongside 
> existing Prometheus /metrics. No auth (internal admin port).
> *GET /health/services* — Returns JSON with status of the thrift server and 
> all background services. Status values: UP, DOWN, DISABLED. Each entry 
> includes status, uptime_ms, last_error.
> *POST /admin/restart/\{serviceName\}* — Restarts a background service by 
> label. 200 OK (restarted), 404 (unknown), 500 (failed).
> Implementation: ServiceRegistry class tracks background services. 
> AiravataServer registers services with the registry instead of raw lists. 
> MonitoringServer queries the registry for /health/services and triggers 
> restarts via /admin/restart.
> h3. 2. Tiltfile (repo root)
> Single orchestration file for dev setup AND integration verification. 
> Replaces ide-integration module.
> * docker_compose for infra (MariaDB, RabbitMQ, ZooKeeper, Kafka, Keycloak)
> * local_resource for build (mvn package)
> * local_resource for airavata-server (classpath mode, readiness probe on 
> /health/services)
> * local_resource for integration-tests (manual trigger)
> What goes away: modules/ide-integration/, 
> dev-tools/deployment-scripts/docker-startup.sh
> h3. 3. integration-tests/ Maven Module
> 8 JUnit 5 test classes:
> * ThriftServiceHealthTest — multiplexed thrift client calls getAPIVersion() 
> on all 9 services
> * DatabaseHealthTest — JDBC to MariaDB, verify key tables
> * RabbitMQHealthTest — AMQP connection, verify exchanges
> * KafkaHealthTest — Kafka admin client, verify broker reachable
> * KeycloakHealthTest — realm endpoint, obtain token
> * PrometheusHealthTest — GET /metrics
> * ServiceHealthEndpointTest — GET /health/services, all services UP
> * BackgroundServiceHealthTest — all expected background services present



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to