Organize geographically distributed data stored in Song and Score, with a single, configurable index.
Documentation is hosted on :
- github pages: https://overture-stack.github.io/maestro/
- read the docs: https://maestro-overture.readthedocs.io/en/latest/ (using mkdocs https://docs.readthedocs.io/en/stable/intro/getting-started-with-mkdocs.html)
Meastro was created to enable genomic researchers to enhance their Overture SONGs by building indexes, elastic search by default, that makes searching Analyses and Studies much more powerful and easier.
Skip down to the How to section it has the steps to get started.
- Supports indexing from multiple metadata repositories (SONG).
- Multiple indexing requests: analysis, study, full repository.
- Event driven indexing.
- Integration with SONG to index published analysis and delete suppressed / unpublished analyses
- Ability to Exclude analysis based on different Ids: Study, Analysis, Donor, Sample Or file.
- Slack web hook integration
- Event driven
- Resiliency & Fault tolerance
- Failure audit
- Dead letters queue for faulty messages to be retried later and reviewed.
- Human readable Error log
- Runtime configurability
- Extendable: separate domain from infrastructure & configuration
Technologies & libraries:
- Java 11 - OpenJDK 11
- Maven 3 (YOU NEED MAVEN 3.5+, if you don't want to use the wrapper or your IDE points to older version)
- Spring boot 2
- Spring webflux & project reactor
- Spring retry
- Spring Cloud
- Streams (for Kafak integration)
- config client
- Spring boot admin + client
- Elasticsearch 7+
- Apache Kafka
- retry module
- Testing libraries:
- Junit 5
- Mockito 2
- Spring cloud contract wiremock
The project is following the ports/adapters architecture, where the domain is completely isolated from external infrastructure and frameworks.
- Two maven modules:
- the core features and framework independent logic that is portable and contains the main indexing, rules, notifications
logic as specified by the business features. Has packages like:
- entities : contains POJOs and entities
- api: the logic that fulfills the business features
- ports: contains the interfaces needed by the api to communicate with anything outside the indexing context.
- the core features and framework independent logic that is portable and contains the main indexing, rules, notifications logic as specified by the business features. Has packages like:
- The main runnable (spring boot app)
- Contains the infrastructure and adapters (ports implementations) that is needed to connect the domain with the outside world like elastic search, song web clients, configuration files etc. It also has the Spring framework configurations here to keep technologies outside of the domain.
To Successfully run Maestro (as is) you need the following services to be deployed and configure it to use them:
you can check the sample docker compose files under
./run/docker-compose for containerized versions of elastic & kafka.
for SONG please check the SONG github repo here
on how to run it with docker. Or you can run it as jar.
Note: if you don't/can't use the Makefile, look inside it for the shell commands and replicate them.
make docker-start-devstarts the infrastructure containers
- elastic search
- other helper tools if you want like kafka rest proxy
make runOR start maestro (Maestro.java) from the IDE/cmd as a java application
- Repository: https://hub.docker.com/r/overture/maestro
make docker-startstarts maestro from a docker image along with all needed infrastructure