{"id":31762662,"url":"https://github.com/dcos-labs/drax","last_synced_at":"2025-10-09T22:48:29.279Z","repository":{"id":57601142,"uuid":"60954916","full_name":"dcos-labs/drax","owner":"dcos-labs","description":"DC/OS Resilience Automated Xenodiagnosis tool","archived":false,"fork":false,"pushed_at":"2019-07-10T09:04:37.000Z","size":139,"stargazers_count":42,"open_issues_count":4,"forks_count":12,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-06-20T12:42:01.391Z","etag":null,"topics":["dcos","dcos-networking-guild"],"latest_commit_sha":null,"homepage":"","language":"Go","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/dcos-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-12T08:04:09.000Z","updated_at":"2023-10-25T07:40:21.000Z","dependencies_parsed_at":"2022-08-25T17:53:33.014Z","dependency_job_id":null,"html_url":"https://github.com/dcos-labs/drax","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/dcos-labs/drax","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcos-labs%2Fdrax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcos-labs%2Fdrax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcos-labs%2Fdrax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcos-labs%2Fdrax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dcos-labs","download_url":"https://codeload.github.com/dcos-labs/drax/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcos-labs%2Fdrax/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002105,"owners_count":26083307,"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","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["dcos","dcos-networking-guild"],"created_at":"2025-10-09T22:48:26.407Z","updated_at":"2025-10-09T22:48:29.271Z","avatar_url":"https://github.com/dcos-labs.png","language":"Go","readme":"# DRAX\n\nThis is DRAX, the [DC/OS](https://dcos.io) Resilience Automated Xenodiagnosis tool. It helps to test DC/OS deployments by applying a [Chaos Monkey](http://techblog.netflix.com/2012/07/chaos-monkey-released-into-wild.html)-inspired, proactive and invasive testing approach.\n\nWell, actually DRAX is a reverse acronym inspired by the Guardians of the Galaxy character Drax the Destroyer.\n\nYou might have heard of Netflix's [Chaos Monkey](http://techblog.netflix.com/2012/07/chaos-monkey-released-into-wild.html) or it's containerized [variant](https://medium.com/production-ready/chaos-monkey-for-fun-and-profit-87e2f343db31). Maybe you've seen a [gaming version](https://www.wehkamplabs.com/blog/2016/06/02/docker-and-zombies/) of it or stumbled upon a [lower-level species](http://probablyfine.co.uk/2016/05/30/announcing-byte-monkey/). In any case I assume you're somewhat familiar with chaos-based resilience testing.\n\nDRAX is a DC/OS-specific resilience testing tool that works mainly on the task-level. Future work may include node-level up to cluster-level.\n\n## Installation and usage\n\nNote that DRAX assumes a running [DC/OS 1.9](https://dcos.io/) cluster.\n\n### Production\n\nLaunch DRAX using the DC/OS CLI via the Marathon app spec provided:\n\n    $ dcos marathon app add marathon-drax.json\n\nNow you can (modulo the public node of your cluster) do the following:\n\n    $ http http://ec2-52-38-188-110.us-west-2.compute.amazonaws.com:7777/stats\n    HTTP/1.1 200 OK\n    Content-Length: 10\n    Content-Type: application/javascript\n    Date: Mon, 13 Jun 2016 14:39:11 GMT\n\n    {\"gone\":0}\n\nIf you launched DRAX via Marathon, you can also trigger a POST to the /rampage continuously by deploying a DC/OS job.  The example job is triggering the destruction every business hour from Monday till Friday: \n\n    $ dcos job add metronome-drax.json\n\n### Testing and development\n\nGet DRAX and build from source:\n\n    $ go get github.com/dcos-labs/drax\n    $ go build\n    $ MARATHON_URL=http://localhost:8080 ./drax\n    INFO[0000] This is DRAX in version 0.4.0                 main=init\n    INFO[0000] Listening on port 7777                        main=init\n    INFO[0000] On destruction level 0                        main=init\n    INFO[0000] Using Marathon at  http://localhost:8080      main=init\n    INFO[0000] I will destroy 2 tasks on a rampage           main=init\n\nAnd in a different terminal session:\n\n    $ http http://localhost:7777/stats\n    HTTP/1.1 200 OK\n    Content-Length: 10\n    Content-Type: application/javascript\n    Date: Mon, 13 Jun 2016 14:39:11 GMT\n\n    {\"gone\":0}\n\nFor Go development, be aware of the following dependencies (not using explicit vendoring ATM):\n\n- [github.com/gambol99/go-marathon](https://github.com/gambol99/go-marathon), an API library for working with Marathon.\n- [github.com/Sirupsen/logrus](https://github.com/Sirupsen/logrus), a logging library.\n\n### Configuration\n\nNote that the following environment variables are pre-set in the [Marathon app spec](marathon-drax.json) and yours to overwrite.\n\n\n#### Number of target tasks\n\nTo specify how many tasks DRAX is supposed to destroy in one rampage, use `NUM_TARGETS`. For example, `NUM_TARGETS=5 drax` means that (up to) 5 tasks will be destroyed, unless the overall number of tasks is less, of course.\n\n#### Log level\n\nTo influence the log level, use the `LOG_LEVEL` env variable, for example `LOG_LEVEL=DEBUG drax` would give you fine-grained log messages (defaults to `INFO`).\n\n## API\n\n### /health [GET]\n\nWill return a HTTP 200 code and `I am Groot` if DRAX is healthy.\n\n### /stats [GET]\n\nWill return runtime statistics, such as killed containers or apps and will report from the beginning of time (well, beginning of time for DRAX anyways).\n\n    $ http http://localhost:7777/stats\n    HTTP/1.1 200 OK\n    Content-Length: 10\n    Content-Type: application/javascript\n    Date: Mon, 13 Jun 2016 14:39:11 GMT\n\n    {\"gone\":2}\n\n### /rampage [POST]\n\nWill trigger a destruction. Invoke with:\n\n    $ http POST localhost:7777/rampage\n    HTTP/1.1 200 OK\n    Content-Length: 121\n    Content-Type: application/javascript\n    Date: Mon, 13 Jun 2016 12:15:19 GMT\n\n    {\"success\":true,\"goners\":[\"webserver.0fde0035-315f-11e6-aad0-1e9bbbc1653f\",\"dummy.11a7c3bb-315f-11e6-aad0-1e9bbbc1653f\"]}\n","funding_links":[],"categories":["Notable Tools","3. Fault Injection"],"sub_categories":["Containers \u0026 Orchestrators"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcos-labs%2Fdrax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdcos-labs%2Fdrax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcos-labs%2Fdrax/lists"}