{"id":17111114,"url":"https://github.com/davidrjonas/condemn","last_synced_at":"2026-05-18T06:12:01.717Z","repository":{"id":75475127,"uuid":"170551103","full_name":"davidrjonas/condemn","owner":"davidrjonas","description":"A curl-able dead man's switch in Rust","archived":false,"fork":false,"pushed_at":"2019-05-28T06:09:27.000Z","size":151,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-25T17:54:32.213Z","etag":null,"topics":["deadmanswitch","http","monitoring","redis","rust","warp"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davidrjonas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-13T17:39:18.000Z","updated_at":"2024-09-25T08:35:42.000Z","dependencies_parsed_at":"2023-06-06T14:45:31.384Z","dependency_job_id":null,"html_url":"https://github.com/davidrjonas/condemn","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/davidrjonas/condemn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidrjonas%2Fcondemn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidrjonas%2Fcondemn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidrjonas%2Fcondemn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidrjonas%2Fcondemn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidrjonas","download_url":"https://codeload.github.com/davidrjonas/condemn/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidrjonas%2Fcondemn/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33167431,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T05:43:36.989Z","status":"ssl_error","status_checked_at":"2026-05-18T05:43:19.133Z","response_time":71,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["deadmanswitch","http","monitoring","redis","rust","warp"],"created_at":"2024-10-14T16:49:15.377Z","updated_at":"2026-05-18T06:12:01.701Z","avatar_url":"https://github.com/davidrjonas.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"Condemn\n=======\n\nA curl-able [dead man's switch](https://en.wikipedia.org/wiki/Dead_man%27s_switch).\n\nCall this service at the start of a process and at the end. If the second call never arrives, be notified of the failure.\n\nClient Usage\n------------\n\nAt the beginning of your script call condemn with a deadline. `deadline` will accept durations like `15days 2min 2s`. See Durations for more info.\n\n```bash\ncurl http://condemn.example.net/myscriptname?deadline=1h\n```\n\nAt the end of your script call condemn again with the same path. Include a deadline and optional window if you want to ensure the script runs again, for instance a cron job.\n\n```bash\ncurl http://condemn.example.net/myscriptname?deadline=25h\u0026window=2h\n```\n\nIf condemn is called again for your scriptname less than 23h for now it will notify that it started early. If there has been no call within the next 25 hours it will notify that the script is dead.\n\nDurations\n---------\n\nWill accept,\n\n- nsec, ns -- microseconds\n- usec, us -- microseconds\n- msec, ms -- milliseconds\n- seconds, second, sec, s\n- minutes, minute, min, m\n- hours, hour, hr, h\n- days, day, d\n- weeks, week, w\n- months, month, M -- defined as 30.44 days\n- years, year, y -- defined as 365.25 days\n\nSet up\n------\n\nDocker image available at https://hub.docker.com/r/davidrjonas/condemn\n\n### Configuration\n\n```\ncondemn 0.4.0\nDavid Jonas \u003cdjonas@noip.com\u003e\n\nUSAGE:\n    condemn [OPTIONS]\n\nFLAGS:\n    -h, --help       Prints help information\n    -V, --version    Prints version information\n\nOPTIONS:\n    -f, --db-file \u003cdb-file\u003e                  Path to persistent data file [env: DB_FILE=]  [default: condemn.json]\n    -l, --listen \u003clisten\u003e                    The IP and port to listen on. [env: LISTEN=]  [default: 0.0.0.0:80]\n    -n, --notify \u003cnotify\u003e...                 The notifiers to use. May require other options to be set, such as\n                                             `--notify-command` or `--sentry-dsn`. [env: NOTIFY=]  [possible values:\n                                             command, sentry]\n    -c, --notify-command \u003cnotify-command\u003e    Command to run on notify. CONDEMN_NAME env var will be set. CONDEMN_EARLY\n                                             env var will be set to the number of seconds, 0 if deadlined. [env:\n                                             NOTIFY_COMMAND=]\n    -r, --redis-url \u003credis-url\u003e              The URL for Redis with database; redis://host:port/db [env: REDIS_URL=]\n                                             [default: redis://127.0.0.1:6379]\n        --sentry-dsn \u003csentry-dsn\u003e            Configures `sentry` notifier. If notify includes 'sentry', `sentry-dsn` is\n                                             required. [env: SENTRY_DSN=]\n    -s, --store \u003cstore\u003e                      Which storage type to use. May require other options to be set, such as\n                                             `--redis-url` or `--db-file`. [env: STORE=]  [default: memory]  [possible\n                                             values: memory, disk, redis]\n```\n\nContributing\n------------\n\nPull requests welcome!\n\nNotifiers are easy to add. Just implement the `Notifier` trait and add an entry to main() for configuration. See `sentry` as an example.\n\nFuture improvements\n-------------------\n\n- [ ] Test(s)\n- [X] Sentry notifier\n- [ ] Basic auth with username as prefix to all keys\n- [ ] Other notifiers like Slack, OpsGenie, webhook\n- [X] Use a transaction with redis / pipeline\n- [X] Refactor for readability\n- [ ] Add client ip to notifies, other additional context the client may supply, like \u0026ctx={\"a\":\"b\"} or \u0026ctx[a]=b\u0026ctx[c]=d\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidrjonas%2Fcondemn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidrjonas%2Fcondemn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidrjonas%2Fcondemn/lists"}