{"id":13509157,"url":"https://github.com/polleverywhere/chaperon","last_synced_at":"2026-02-22T14:42:11.369Z","repository":{"id":25486201,"uuid":"82629456","full_name":"polleverywhere/chaperon","owner":"polleverywhere","description":"HTTP Service Performance \u0026 Load Testing Framework","archived":false,"fork":false,"pushed_at":"2024-05-09T19:05:06.000Z","size":578,"stargazers_count":139,"open_issues_count":4,"forks_count":20,"subscribers_count":18,"default_branch":"master","last_synced_at":"2026-01-21T23:26:50.799Z","etag":null,"topics":["analysis","histogram","http","load-testing","metrics","performance","websocket"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/polleverywhere.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-21T03:00:33.000Z","updated_at":"2026-01-19T21:21:59.000Z","dependencies_parsed_at":"2024-03-12T15:46:12.088Z","dependency_job_id":"4578aeec-69d9-45f5-b72a-3f16a31dd72e","html_url":"https://github.com/polleverywhere/chaperon","commit_stats":{"total_commits":577,"total_committers":9,"mean_commits":64.11111111111111,"dds":0.05025996533795496,"last_synced_commit":"7cdb40e83a07760c86a74255e41f9de101f12ffd"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/polleverywhere/chaperon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polleverywhere%2Fchaperon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polleverywhere%2Fchaperon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polleverywhere%2Fchaperon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polleverywhere%2Fchaperon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/polleverywhere","download_url":"https://codeload.github.com/polleverywhere/chaperon/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polleverywhere%2Fchaperon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29716358,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T13:30:57.152Z","status":"ssl_error","status_checked_at":"2026-02-22T13:30:28.561Z","response_time":110,"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":["analysis","histogram","http","load-testing","metrics","performance","websocket"],"created_at":"2024-08-01T02:01:03.780Z","updated_at":"2026-02-22T14:42:11.338Z","avatar_url":"https://github.com/polleverywhere.png","language":"Elixir","funding_links":[],"categories":["Testing"],"sub_categories":[],"readme":"# Chaperon\n\n## HTTP Service Performance Testing Framework\n\nThis is a framework / library \u0026 tool for doing load and performance tests on web services.\nIt tracks many kinds of metrics automatically and allows tracking custom ones, if needed.\n\nA load test is a combination of target web services \u0026 scenarios to run against them.\nIt also defines session \u0026 HTTP / WebSocket connection settings (like authentication credentials, custom headers, etc.) for each of the services.\n\nChaperon natively supports running both HTTP \u0026 WebSocket actions against a web server.\nIt defines a `Chaperon.Actionable` protocol for which implementations for additional types of actions can be defined.\nHave a look at the `examples/firehose.ex` example file to see an example of both HTTP and WebSocket commands in action.\n\nFor a more in-depth introduction check out the [basic starter tutorial here](docs/Tutorial.md).\n\n## Documentation \u0026 Links\n\n  - [API Documentation for latest release](https://hexdocs.pm/chaperon)\n  - [Package on hex.pm](https://hex.pm/packages/chaperon)\n\n\n## Distributed Load-Testing\n\nAside from running Chaperon scenarios from a single machine, you can also run them in a cluster.\nSince Chaperon is written in Elixir, it makes use of its built-in distribution mechanics (provided by the Erlang VM and OTP) to achieve this.\n\nTo run a Chaperon scenario in distributed mode, you need to deploy your Chaperon scenario and load test code to all machines in the cluster, start them up and connect to the master node.\n\nTo start any node simply load up the code in an iex shell:\n\n```\n$ iex --cookie my-secret-cluster-cookie --name \"chaperon@node1.myhost.com\" -S mix\n```\n\nFor the master node, run this inside the iex shell:\n\n```elixir\niex\u003e Chaperon.Master.start\n```\n\nThen enter the following code into any worker's iex shell to connect it to the master node:\n\n```elixir\niex\u003e Chaperon.connect_to_master :\"chaperon@node1.myhost.com\"\n```\n\nPick one of the nodes as your master node and connect to it from the worker nodes (see above).  \nBefore starting up the child nodes make sure you've given them the same VM cookie and config to point to the master node.  \nThe master node can be identical to the worker nodes, the only difference being that it kicks off the load test and distributes the workload across all worker nodes. When a worker node is done with running a scenario / session task, it sends the results back to the master, which then merges all results to give the final metrics for display / output.\n\n\n## Is this ready for production use?\n\nChaperon is being used at [Poll Everywhere](https://polleverywhere.com)  and was written for load testing our infrastructure and polling services.\nIt has been used to simulate over 100k concurrent vote participant sessions on a 4 node cluster.  \nIt currently is still on a pre 1.0 version. A 1.0 release is not planned yet as the main focus is to get rid of any potential bugs, refine the public API and internal implementation code until we're confident that everything works as expected.  \nThat doesn't mean it shouldn't be used in its current stage, though.\n\nIf you'd like to try out Chaperon, please give it a try. Any feedback, bug reports or patches are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolleverywhere%2Fchaperon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpolleverywhere%2Fchaperon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolleverywhere%2Fchaperon/lists"}