{"id":20792519,"url":"https://github.com/luchkonikita/canary","last_synced_at":"2026-04-11T16:04:40.852Z","repository":{"id":76639842,"uuid":"114486637","full_name":"luchkonikita/canary","owner":"luchkonikita","description":"Canary is a microservice for testing your websites.","archived":false,"fork":false,"pushed_at":"2019-01-13T10:14:43.000Z","size":220,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-18T10:52:01.479Z","etag":null,"topics":["ci","golang","microservice","rest-api"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/luchkonikita.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-12-16T19:56:42.000Z","updated_at":"2019-01-13T10:14:45.000Z","dependencies_parsed_at":"2023-04-11T12:01:04.289Z","dependency_job_id":null,"html_url":"https://github.com/luchkonikita/canary","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luchkonikita%2Fcanary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luchkonikita%2Fcanary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luchkonikita%2Fcanary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luchkonikita%2Fcanary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luchkonikita","download_url":"https://codeload.github.com/luchkonikita/canary/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243136025,"owners_count":20241990,"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":["ci","golang","microservice","rest-api"],"created_at":"2024-11-17T15:52:41.829Z","updated_at":"2025-12-24T16:50:22.241Z","avatar_url":"https://github.com/luchkonikita.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Travis Badge](https://travis-ci.org/luchkonikita/canary.svg?branch=master)\n\nCanary is a microservice for testing your websites.\nIt can be deployed as a single binary and used via HTTP API or a build-in web interface.\nYou can add your sitemap and the application will request all the pages and store results.\nWith this done, you can detect any broken resources on your website.\n\nThe service uses [Bolt](https://github.com/boltdb/bolt) as a storage and stores all\nthe data locally. You don't need any external store for making it work.\n\nWith the embedded storage Canary can provide you with some historical data if needed.\n\n## Installation\n\n```\ngo get github.com/luchkonikita/canary\ngo install github.com/luchkonikita/canary\n```\n\n## Usage\n\nUse the `canary` from the command-line with the following flags:\n\n```\n-db string\n      database file (default \"canary.db\")\n-origin string\n      origin to allow cross-origin requests (default \"http://localhost:4000\")\n-password string\n      password for basic auth (if needed)\n-port string\n      port to listen on (default \"4000\")\n-username string\n      username for basic auth (if needed)\n```\n\nThis is the API shape.\n\n```\nUsage examples:\n\n- GET /crawlings\n\tReturns a list of crawlings.\n\n- POST /crawlings\n\t{\n\t\t\"url\": \"http://example.com/sitemap.xml\",\n\t\t\"concurrency\": 10\n\t}\n\tCreates a new crawling and starts it.\n\n- GET /crawlings/1\n\t{}\n\tReturns a crawling for specified ID.\n\n- DELETE /crawlings/1\n\t{}\n\tDeletes a crawling for specified ID.\n```\n\nWeb interface is available on http://localhost:4000.\n\n## Testing\n\nRun `go test ./...` from the project root.\n\n## TODO\n\n- [x] When crawling is deleted need to turn off the WIP worker.\n- [ ] Optimize front-end build.\n- [x] Debounce form inputs.\n- [x] Clipboard.\n- [x] Add ETA to the crawling card.\n- [x] Show report summary and details.\n- [x] Handle the hanged worker when the connectivity goes down.\n- [ ] Split `Crawling` UI component into smaller chunks.\n- [x] Do better JSON serialization.\n- [ ] Introduce timeout option for the crawling.\n- [x] Use `dep`.\n- [x] Compress responses.\n- [ ] Store pages HTML.\n- [ ] Store time for requests and show some statistics.\n- [ ] Update README.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluchkonikita%2Fcanary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluchkonikita%2Fcanary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluchkonikita%2Fcanary/lists"}