🚀 What's Changed
Visualization and analytics
- New events endpoint serving raw training and console command events, replacing the old server-rendered visualizations
GET /training-instances/{instanceId}/events, filtered by event type and a since timestamp, suitable for polling- Accessible to administrators, organizers of the instance and its participants
- Participants see only their own answer events and commands
- Removed all server-rendered visualizations in favour of the events endpoint, decoupling frontend charts from backend analysis
/visualizations/**- 22 endpoints/clusters/**- 6 endpoints- Command graphs - 11 endpoints
Score export
- Score export now returns a rich JSON report instead of a CSV file
GET /exports/training-instances/{instanceId}/scores- Carries rank, training and assessment score, total, per-level scores, hints taken, wrong answers, solutions displayed, start and end time, and duration; the old CSV carried only instance id, login and total training score
- Lists the levels it scores, in definition order
- Wrong answers on access levels are excluded from the total
- Ranked by score, ties broken by shorter time, then by run id
Bulk lookup
- New by-ids endpoints fetching many records in one request, each returning a lightweight projection
- Definitions, levels, hints, instances, runs and users
*BasicDTOprojections carry descriptive non-sensitive data only
Cleanup of removed service integrations
- Removed the training-feedback-service integration as a result of the microservice's removal
- Reference, trainee and summary graphs are no longer created alongside the training definition
- The feedback service client and its configuration are removed
- Removed the elasticsearch-service integration as a result of the microservice's removal
- Training events and console commands are queried directly from OpenSearch
- The elasticsearch-service client and its web client configuration are removed
- The
crczp-elasticsearch-documentsdependency is dropped
Deployment and configuration
- Event storage migrated from Elasticsearch to OpenSearch, to which the training-service now connects directly
- Properties added
opensearch.protocolopensearch.hostopensearch.portsandbox-service.uri
- Properties removed
openstack-server.uri- superseded bysandbox-service.urielasticsearch-service.uritraining-feedback-service.uri
- Audit logger renamed to
cz.cyberrange.platform.training.opensearch.events.training.logging.AuditService
Internal
- Added multiple bulk query operations to improve request performance
- Optimized listing training definitions, score export and the MITRE technique report
- Consolidated the API model into a single DTO hierarchy
- Shared level, definition, instance and run fields lifted into abstract base types
- Made explicit which training definition DTOs contain levels via a dedicated type instead of a nullable
levelsfield - Accessors, equality and string forms generated uniformly with Lombok across all DTOs
- Whole repository reformatted to Google Java Format
- Service tests reorganized into a
unitpackage, with new tests for mappers, facades, core services, scoring and event serialization
🙌 Thanks to all contributors in this release:
Full Changelog: v1.2.1...v2.1.2