{"id":15433201,"url":"https://github.com/simonw/dogproxy","last_synced_at":"2025-04-19T17:52:59.850Z","repository":{"id":799708,"uuid":"500532","full_name":"simonw/dogproxy","owner":"simonw","description":"Experimental HTTP proxy (using node.js) for avoiding the dog pile effect.","archived":false,"fork":false,"pushed_at":"2019-02-15T16:01:42.000Z","size":4,"stargazers_count":61,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-18T07:54:24.202Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/simonw.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}},"created_at":"2010-02-03T11:43:38.000Z","updated_at":"2023-09-08T16:26:19.000Z","dependencies_parsed_at":"2022-07-05T16:00:56.751Z","dependency_job_id":null,"html_url":"https://github.com/simonw/dogproxy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonw%2Fdogproxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonw%2Fdogproxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonw%2Fdogproxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonw%2Fdogproxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simonw","download_url":"https://codeload.github.com/simonw/dogproxy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249753110,"owners_count":21320664,"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-01T18:32:33.100Z","updated_at":"2025-04-19T17:52:59.834Z","avatar_url":"https://github.com/simonw.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dogproxy\n\nA very simple dog pile preventing proxy.\n\nThe dog pile effect (also known as a thundering herd) affects caching systems\nthat use time-based expiry. In a heavy traffic system, a cached item expiring\ncould cause dozens of parallel \"update\" requests to be fired at once.\n\ndogproxy assumes that these update requests go over HTTP. It joins together\nsimultaneous requests for the same URL, and only performs one actual fetch to\nthat resource.\n\nSTATUS: highly experimental. Known bugs (Content-Type is not correctly passed\nthrough, for example). Expect to modify this code further before use.\n\nUsage:\n\n    $ node dogproxy.js \n    Server running at http://127.0.0.1:8009/\n\nTesting using ab:\n\n    $ ab -n 10 -c 5 'http://127.0.0.1:8009/?url=http://example.com/'\n\ndogproxy.js says:\n\n```\nRequest for http://example.com/\n... kicking off backend HTTP fetch\nRequest for http://example.com/\n... already in flight, adding to queue\nRequest for http://example.com/\n... already in flight, adding to queue\nRequest for http://example.com/\n... already in flight, adding to queue\nRequest for http://example.com/\n... already in flight, adding to queue\nFetched http://example.com/, alerting 5 waiting clients\nRequest for http://example.com/\n... kicking off backend HTTP fetch\nRequest for http://example.com/\n... already in flight, adding to queue\nRequest for http://example.com/\n... already in flight, adding to queue\nRequest for http://example.com/\n... already in flight, adding to queue\nRequest for http://example.com/\n... already in flight, adding to queue\nFetched http://example.com/, alerting 5 waiting clients\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonw%2Fdogproxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimonw%2Fdogproxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonw%2Fdogproxy/lists"}