{"id":15035854,"url":"https://github.com/netflix/mantis","last_synced_at":"2025-05-13T20:12:47.202Z","repository":{"id":35007760,"uuid":"190664284","full_name":"Netflix/mantis","owner":"Netflix","description":"A platform that makes it easy for developers to build realtime, cost-effective, operations-focused applications","archived":false,"fork":false,"pushed_at":"2025-05-09T18:14:44.000Z","size":28128,"stargazers_count":1429,"open_issues_count":67,"forks_count":205,"subscribers_count":221,"default_branch":"master","last_synced_at":"2025-05-09T18:39:41.190Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Netflix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-06-06T23:44:48.000Z","updated_at":"2025-05-08T03:42:59.000Z","dependencies_parsed_at":"2023-12-18T15:45:25.745Z","dependency_job_id":"4c3e4698-1697-4f41-8671-804ab46b8850","html_url":"https://github.com/Netflix/mantis","commit_stats":{"total_commits":968,"total_committers":40,"mean_commits":24.2,"dds":0.7923553719008265,"last_synced_commit":"880d2fcd5bd10ba95ed0f5cc7dc5c04536795c78"},"previous_names":[],"tags_count":508,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Netflix%2Fmantis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Netflix%2Fmantis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Netflix%2Fmantis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Netflix%2Fmantis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Netflix","download_url":"https://codeload.github.com/Netflix/mantis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254020615,"owners_count":22000755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-24T20:29:37.220Z","updated_at":"2025-05-13T20:12:42.191Z","avatar_url":"https://github.com/Netflix.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg alt=\"Mantis logo\" src=\"./.assets/mantis.png\" width=\"200\" align=\"right\"\u003e\n\n# Mantis Documentation\n\n\n[![Build Status](https://img.shields.io/travis/com/Netflix/mantis.svg)](https://travis-ci.com/Netflix/mantis)\n[![OSS Lifecycle](https://img.shields.io/osslifecycle/Netflix/mantis.svg)](https://github.com/Netflix/mantis)\n[![License](https://img.shields.io/github/license/Netflix/mantis.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n\n\n[Official Website](https://netflix.github.io/mantis/) \n\n---\n\n## Development\n\n### Setting up Intellij\nRun `./gradlew idea` to (re-) generate IntelliJ project and module files from the templates in `.baseline`. The generated project is pre-configured with Baseline code style settings and support for the CheckStyle-IDEA plugin.\n\n### Install Docker\nInstall and run Docker to support local containers.\n\n### Building\n\n```sh\n$ ./gradlew clean build\n```\n\n### Testing\n\n```sh\n$ ./gradlew clean test\n```\n\n### Formatting the code\nRun `./gradlew format` task which autoformats all Java files using [Spotless](https://github.com/diffplug/spotless).\n\n### Building deployment into local Maven cache\n\n```sh\n$ ./gradlew clean publishNebulaPublicationToMavenLocal\n```\n\n### Releasing\n\nWe release by tagging which kicks off a CI build. The CI build will run tests, integration tests,\nstatic analysis, checkstyle, build, and then publish to the public Bintray repo to be synced into Maven Central.\n\nTag format:\n\n```\nvMajor.Minor.Patch\n```\n\nYou can tag via git or through Github's Release UI.\n\n## Contributing\n\nMantis is interested in building the community. We welcome any forms of contributions through discussions on any\nof our [mailing lists](https://netflix.github.io/mantis/community/#mailing-lists) or through patches.\n\nFor more information on contribution, check out the contributions file [here](https://github.com/Netflix/mantis/blob/master/CONTRIBUTING.md).\n\n\n### Module Structure\nThis excludes all connectors and examples as they are mostly leaf nodes in the dependency graph. \n\nModule                      | Purpose                                                                                                                 | Example Classes                                                                                             | Package Prefixes\n----------------------------|-------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------\nmantis-common-serde         | Support for serializing and deserializing POJOs using Json                                                              | \u003cli\u003eJsonSerializer\u003c/li\u003e                                                                                     | \u003cli\u003eio.mantisrx.common.*\u003c/li\u003e\nmantis-discovery-proto      | todo: need to fill this in                                                                                              | \u003cli\u003eJobDiscoveryProto\u003c/li\u003e\u003cli\u003eAppJobClustersMap\u003c/li\u003e\u003cli\u003eStageWorkers\u003c/li\u003e                                   | \u003cli\u003ecom.netflix.mantis.discovery.proto.*\u003c/li\u003e\nmantis-common               | Mantis common code shared across modules                                                                                | \u003cli\u003eMantisJobDefinition\u003c/li\u003e\u003cli\u003eMachineDefinition\u003c/li\u003e\u003cli\u003eMantisJobState                                    | \u003cli\u003eio.mantisrx.common.\\*\u003c/li\u003e\u003cli\u003e io.mantisrx.runtime.\\*\u003cli\u003eio.mantisrx.server.code.\\*\u003c/li\u003e\u003cli\u003eio.reactivx.mantis.operators.\\*\u003c/li\u003e\u003cli\u003ecom.mantisrx.common.utils.\\*\nmantis-remote-observable    | connection to other job,stage related code                                                                              | \u003cli\u003eConnectToObservable\u003c/li\u003e\u003cli\u003eConnectToGroupedObservable\u003c/li\u003e\u003cli\u003eRemoteObservable                         | \u003cli\u003eio.reactivex.mantis.remote.observable.\\*\u003c/li\u003e\u003cli\u003eio.reactivex.netty.codec.\\*\u003cli\u003e\nmantis-control-plane-core   | common code between mantis-control-plane-server, mantis-control-plane-client, mantis-server-worker, mantis-server-agent | \u003cli\u003eTaskExecutorID\u003c/li\u003e\u003cli\u003eClusterID\u003c/li\u003e\u003cli\u003eExecuteStageRequest\u003c/li\u003e\u003cli\u003eJobAssignmentResult\u003c/li\u003e\u003cli\u003eStatus | \u003cli\u003eio.mantisrx.server.core.\\*\u003c/li\u003e\u003cli\u003eio.mantisrx.server.master.resourcecluster.\\*\u003c/li\u003e\u003cli\u003eio.mantisrx.server.worker.\\*\nmantis-control-plane-client | API to talk to the mantis control plane server                                                                          | \u003cli\u003eMasterClientWrapper\u003c/li\u003e\u003cli\u003eMantisMasterGateway\u003c/li\u003e\u003cli\u003eMantisMasterClientApi                           | \u003cli\u003eio.mantisrx.server.master.client.\\*\u003cli\u003e io.mantisrx.server.master.resourcecluster.\\*\nmantis-network              | todo: need to fill this in                                                                                              |                                                                                                             |\nmantis-publish-core         | todo: need to fill this in                                                                                              |                                                                                                             |\nmantis-server-worker-client | API to interact with workers                                                                                            | \u003cli\u003eMetricsClient\u003c/li\u003e\u003cli\u003e MetricsClientImpl\u003c/li\u003e\u003cli\u003eWorkerConnection\u003c/li\u003e\u003cli\u003eWorkerMetricsClient           | \u003cli\u003eio.mantisrx.server.worker.client.\\*\nmantis-runtime              | Runtime that the jobs need to depend upon. Job DSL should go in here along with how to talk to other jobs               | \u003cli\u003eKeyToKey\u003c/li\u003e\u003cli\u003eGroupToGroup\u003c/li\u003e\u003cli\u003eSource\u003c/li\u003e\u003cli\u003eSink                                               | \u003cli\u003eio.mantisrx.runtime.\\*\nmantis-publish-netty        | todo: need to fill this in                                                                                              |                                                                                                             |\nmantis-client               | client to interact with mantis control plane                                                                            | \u003cli\u003eMantisClient::submitJob\u003c/li\u003e\u003cli\u003e MantisClient::killJob                                                  | \u003cli\u003eio.mantisrx.client.*\u003c/li\u003e\nmantis-publish-netty-guice  | todo: need to fill this in                                                                                              |                                                                                                             |\nmantis-control-plane-server | Actual server that runs the mantis master code                                                                          | \u003cli\u003eMasterMain\u003c/li\u003e\u003cli\u003eSchedulingService\u003c/li\u003e\u003cli\u003eServiceLifecycle                                           | \u003cli\u003eio.mantisrx.master.\\*\u003cli\u003eio.mantisrx.server.master.\\*\nmantis-server-agent         | Contains mantis-runtime agnostic code to start the task executor that runs on the agent                                 | \u003cli\u003eTaskExecutor\u003c/li\u003e\u003cli\u003eTaskExecutorStarter\u003c/li\u003e\u003cli\u003eBlobStore\u003c/li\u003e\u003cli\u003eBlobStoreAwareClassLoaderHandle      | \u003cli\u003eio.mantisrx.server.agent.\\*\nmantis-server-worker        | One implementation of Mantis Worker that depends on the master runtime                                                  | \u003cli\u003eMantisWorker\u003c/li\u003e\u003cli\u003eTask\u003c/li\u003e\u003cli\u003eExecuteStageRequestService\u003cli\u003eJobAutoScaler                           | \u003cli\u003eio.mantisrx.server.worker.config.\\*\u003cli\u003eio.mantisrx.server.worker.jobmaster.\\*\n\n### Dependency Graph\n\n```mermaid\ngraph TD;\n    A[mantis-common-serde]--\u003eB[mantis-common];\n    B--\u003eC[mantis-control-plane-core];\n    B--\u003eD[mantis-runtime];\n    C--\u003eE[mantis-control-plane-client];\n    E--\u003eF[mantis-server-worker-client];\n    F--\u003eG[mantis-client];\n    E--\u003eG;\n    C--\u003eH[mantis-control-plane-server];\n    C--\u003eI[mantis-server-worker];\n    F--\u003eI;\n    D--\u003eI;\n    F--\u003eJ[mantis-server-agent];\n    E--\u003eJ;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetflix%2Fmantis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetflix%2Fmantis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetflix%2Fmantis/lists"}