{"id":17340685,"url":"https://github.com/qgadrian/smokex","last_synced_at":"2026-02-04T06:04:00.456Z","repository":{"id":194977788,"uuid":"314315120","full_name":"qgadrian/smokex","owner":"qgadrian","description":"With Smokex you can automate your HTTP requests and create tests to help in your development.","archived":false,"fork":false,"pushed_at":"2023-11-17T09:13:15.000Z","size":2534,"stargazers_count":0,"open_issues_count":28,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-10T10:16:13.300Z","etag":null,"topics":["automated-requests","request-automation","smoke-test","smoke-tests","test-automation","testing","testing-tools"],"latest_commit_sha":null,"homepage":"https://smokex.io/","language":"Elixir","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/qgadrian.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}},"created_at":"2020-11-19T17:03:38.000Z","updated_at":"2023-09-15T09:25:27.000Z","dependencies_parsed_at":"2023-11-17T10:33:15.179Z","dependency_job_id":null,"html_url":"https://github.com/qgadrian/smokex","commit_stats":null,"previous_names":["qgadrian/smokex"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/qgadrian/smokex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qgadrian%2Fsmokex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qgadrian%2Fsmokex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qgadrian%2Fsmokex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qgadrian%2Fsmokex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qgadrian","download_url":"https://codeload.github.com/qgadrian/smokex/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qgadrian%2Fsmokex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29072475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-04T03:31:03.593Z","status":"ssl_error","status_checked_at":"2026-02-04T03:29:50.742Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["automated-requests","request-automation","smoke-test","smoke-tests","test-automation","testing","testing-tools"],"created_at":"2024-10-15T15:46:08.493Z","updated_at":"2026-02-04T06:04:00.441Z","avatar_url":"https://github.com/qgadrian.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Deploy to Heroku](https://github.com/qgadrian/smokex/workflows/Deploy%20to%20Heroku/badge.svg)\n![Run test suite and linters](https://github.com/qgadrian/smokex/workflows/Run%20test%20suite%20and%20linters/badge.svg)\n\n# Smokex.Umbrella\n\n\u003c!-- vim-markdown-toc GFM --\u003e\n\n* [Deployment](#deployment)\n  * [Heroku](#heroku)\n    * [Logs](#logs)\n  * [Run a release locally](#run-a-release-locally)\n    * [Need to know](#need-to-know)\n* [Architecture](#architecture)\n* [Why Smokex?](#why-smokex)\n  * [Experience situations where Smokex tests were needed](#experience-situations-where-smokex-tests-were-needed)\n* [Uses cases (smoke tests \u0026 HTTP automation)](#uses-cases-smoke-tests--http-automation)\n  * [Distributed application](#distributed-application)\n\n\u003c!-- vim-markdown-toc --\u003e\n\n## Deployment\n\n### Heroku\n\nThis project is deployed to Heroku using Docker containers.\n\n* Login into Heroku registry `heroku container:login`\n* Build and push an image `heroku container:push web`\n\n#### Logs\n\n```bash\nheroku drains:add 'https://http-intake.logs.datadoghq.com/v1/input/\u003cDD_APY_KEY\u003e?ddsource=heroku\u0026service=smokex\u0026host=gigalixir' -a smokex\n\n```\n\n### Run a release locally\n\nThere are multiple environment variables that are expected to be set in order to\nrun a release:\n\n```bash\nSECRET_KEY_BASE=kGXrNEYUVAm2zOpB8UQMRfK+JkDnqFcH4WOcM8nYApN/fMWVJoQPMGqrUTwv15w5 DATABASE_HOSTNAME=postgres-free-tier-1.gigalixir.com DATABASE_USERNAME=test DATABASE_PASSWORD=test DATABASE_NAME=test PORT=4000 POOL_SIZE=1 DATABASE_URL=\"\" STRIPE_API_KEY=\"\" STRIPE_SIGNING_SECRET=\"\" _build/prod/rel/smokex/bin/smokex start_iex\n```\n\n#### Need to know\n\n* The Stripe button to buy a subscription requires environment variables to be\n    configured or it will throw the `unexpected item shape` error if not.\n* The Slack integration also requires a runtime configuration therefore it will\n    fail locally. Also, the redirection done by Slack is to production host.\n\n## Architecture\n\n![architecture.png](docs/architecture.png)\n\n\n## Why Smokex?\n\n* Not everybody has CI pipelines\n* You don't want to mix CI executions with smoke testing\n* You want a clear way to identify downtimes, errors...\n* Monitor any legacy project with little effort\n* But also easily run smoke tests on a new project to validate deployments\n* Can give access to third parties without to have access to source code o\n    sensitive tools\n* Won't require technical knowledge\n* Won't be coupled to any testing library and making changes transparent to the\n    repo\n\n### Experience situations where Smokex tests were needed\n\n* Empty deployment with health check workng ok but actual endpoints were all\n    failing\n* App requires some environment variables set before start, they were available\n    on deployment so all went good. After some days the app got restarted but\n    the variables were not available anymore (were managed by a third party\n    service), entering in a crash loop and no one noticing.\n\n## Uses cases (smoke tests \u0026 HTTP automation)\n\n* Schedule a HTTP request to keep Heroku instances up.\n* Send a ping request to ensure a system is reachable.\n* Retrieve a information from currency prices and send it to your server to get update value #nocode\n\n### Distributed application\n\nThe current application is a single monolith, although it uses umbrella\napplications running in a single node.\n\nThe goal is release several application instances with role _worker_ that will\nbe executing the actions triggered by an orchestrator, which can be considered\nas _producer_.\n\nConsiderations for distributed architecture:\n\n* The project is using `quantum` to schedule jobs, it can use mnesia to store the\n    schedule jobs but keep in mind the network partition problems. This\n    application uses Cachex already so consider implementing a backend for it\n    (https://hexdocs.pm/quantum/configuration.html#persistent-storage). To solve\n    this problem we can have a _producer_ node that will be handling the\n    schedule jobs and when the node taking the role starts just puts all the\n    scheduled jobs in a cache, so everytime the _producer_ node dies the new one\n    will regenerate the state.\n* Oban might need extra configurations for distributed systems, need to check\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqgadrian%2Fsmokex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqgadrian%2Fsmokex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqgadrian%2Fsmokex/lists"}