{"id":17992963,"url":"https://github.com/leostera/pry","last_synced_at":"2025-04-04T04:46:08.476Z","repository":{"id":141534923,"uuid":"56746885","full_name":"leostera/pry","owner":"leostera","description":":telescope: An Erlang application for observing supervision trees","archived":false,"fork":false,"pushed_at":"2016-08-11T21:33:35.000Z","size":783,"stargazers_count":2,"open_issues_count":3,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-09T16:16:52.147Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Erlang","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leostera.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}},"created_at":"2016-04-21T06:05:09.000Z","updated_at":"2017-06-03T12:44:39.000Z","dependencies_parsed_at":"2023-08-15T23:51:14.948Z","dependency_job_id":null,"html_url":"https://github.com/leostera/pry","commit_stats":null,"previous_names":["leostera/pry"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fpry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fpry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fpry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fpry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leostera","download_url":"https://codeload.github.com/leostera/pry/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247123103,"owners_count":20887260,"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-10-29T20:09:43.752Z","updated_at":"2025-04-04T04:46:08.458Z","avatar_url":"https://github.com/leostera.png","language":"Erlang","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pry [![Travis-CI](https://api.travis-ci.org/ostera/pry.svg)](https://travis-ci.org/ostera/pry)\n\u003e 🔭 An Erlang application for observing supervision trees\n\nAs of right now, `pry` is just a very simple application that will trace and store all of\n`erlang:spawn` and `erlang:spawn_link` calls being made for any non-standard Erlang module.\n\nHave a look at `pry_blacklist` to see exactly what's being ignored.\n\n## Installation\n\nSimply include in your `rebar.config` as:\n\n```erlang\n{deps, [\n  % ...\n  {pry, {git, \"https://github.com/ostera/pry\", {tag, \"0.1.0\"}}}\n  % ...\n]}.\n```\n\n## Usage\n\nInclude `pry` in your application start up list, before your actual application,\nso it'll start tracking everything.\n\n#### Shell Sesssion Tutorial\n\n```erlang\nEshell V7.3  (abort with ^G)\n1\u003e application:start(pry).\nok\n2\u003e pry:add_publisher(self()).\nok\n3\u003e application:start(schrodinger).\nok\n4\u003e flush().\nShell got #{info =\u003e [{registered_name,schrodinger_sup},\n             {current_function,{gen_server,loop,6}},\n             {initial_call,{proc_lib,init_p,5}},\n             {status,waiting},\n             {message_queue_len,0},\n             {messages,[]},\n             {links,[\u003c0.86.0\u003e,\u003c0.88.0\u003e]},\n             {dictionary,[{'$ancestors',[\u003c0.86.0\u003e]},\n                          {'$initial_call',{supervisor,schrodinger_sup,1}}]},\n             {trap_exit,true},\n             {error_handler,error_handler},\n             {priority,normal},\n             {group_leader,\u003c0.85.0\u003e},\n             {total_heap_size,233},\n             {heap_size,233},\n             {stack_size,9},\n             {reductions,104},\n             {garbage_collection,[{min_bin_vheap_size,46422},\n                                  {min_heap_size,233},\n                                  {fullsweep_after,65535},\n                                  {minor_gcs,0}]},\n             {suspending,[]}],\n            mfa =\u003e {schrodinger_sup,start_link,0},\n            parent =\u003e \u003c0.86.0\u003e,\n            self =\u003e \u003c0.87.0\u003e,\n            timestamp =\u003e {1465,643365,584223}}\nShell got #{info =\u003e [{registered_name,schrodinger_lab},\n             {current_function,{gen_server,loop,6}},\n             {initial_call,{proc_lib,init_p,5}},\n             {status,waiting},\n             {message_queue_len,0},\n             {messages,[]},\n             {links,[\u003c0.87.0\u003e]},\n             {dictionary,[{'$ancestors',[schrodinger_sup,\u003c0.86.0\u003e]},\n                          {'$initial_call',{schrodinger_lab,init,1}}]},\n             {trap_exit,false},\n             {error_handler,error_handler},\n             {priority,normal},\n             {group_leader,\u003c0.85.0\u003e},\n             {total_heap_size,233},\n             {heap_size,233},\n             {stack_size,9},\n             {reductions,20},\n             {garbage_collection,[{min_bin_vheap_size,46422},\n                                  {min_heap_size,233},\n                                  {fullsweep_after,65535},\n                                  {minor_gcs,0}]},\n             {suspending,[]}],\n            mfa =\u003e {schrodinger_lab,init,1},\n            parent =\u003e \u003c0.87.0\u003e,\n            self =\u003e \u003c0.88.0\u003e,\n            timestamp =\u003e {1465,643365,584277}}\nok\n```\n\n#### Event format\n\n\n```erlang\n#{\n  % Raw Process information\n  info =\u003e [{current_function,{pry,dummy,1}}, ..],\n\n  % Quick access to the MFA this process was spawned with\n  mfa =\u003e {pry,dummy,1},\n\n  % Pid of the parent\n  parent =\u003e \u003c0.77.0\u003e,\n\n  % Pid of this process\n  self =\u003e \u003c0.79.0\u003e,\n\n  % Timestamp when the tracer sent this process for tracking\n  timestamp =\u003e {1465,43729,784546}\n}\n```\n\n## Motivation\n\nInspired by Ruby's [pry](https://github.com/pry/pry), I set forth to make a tool\nthat would collect, format, and export as much information of the running process\ntrees as they were being created and destroyed.\n\nThe goal of pry is to be a drop-in tool to get an exploratory view of your running\nerlang system.\n\n## Contributing\n\nFork, make a topic branch, and send a Pull Request. Travis will let you know if\nit's good to go, and from the on we can review, retouch, and merge.\n\nIncluded here is a `Makefile` with handy targets. Run `make` to execute the complete\nbattery of tests.\n\n## Next Steps\n\nSee the [issues page](https://github.com/ostera/pry/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement) for a list of planned enhancements and features.\n\n## License\n\nSee [LICENSE](https://github.com/ostera/pry/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleostera%2Fpry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleostera%2Fpry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleostera%2Fpry/lists"}