{"id":23045336,"url":"https://github.com/bostaapp/be-assessment","last_synced_at":"2025-08-17T14:06:53.019Z","repository":{"id":42122055,"uuid":"336580441","full_name":"bostaapp/be-assessment","owner":"bostaapp","description":"Bosta's Backend assessment.","archived":false,"fork":false,"pushed_at":"2023-11-06T18:58:18.000Z","size":1,"stargazers_count":8,"open_issues_count":14,"forks_count":67,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-03T01:45:08.940Z","etag":null,"topics":["backend","backend-assignment","bosta","restful-api","uptime-monitor"],"latest_commit_sha":null,"homepage":"","language":null,"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/bostaapp.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":"2021-02-06T16:19:38.000Z","updated_at":"2024-12-26T10:18:53.000Z","dependencies_parsed_at":"2023-10-20T18:35:10.811Z","dependency_job_id":null,"html_url":"https://github.com/bostaapp/be-assessment","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bostaapp/be-assessment","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bostaapp%2Fbe-assessment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bostaapp%2Fbe-assessment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bostaapp%2Fbe-assessment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bostaapp%2Fbe-assessment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bostaapp","download_url":"https://codeload.github.com/bostaapp/be-assessment/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bostaapp%2Fbe-assessment/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270856775,"owners_count":24657700,"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","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["backend","backend-assignment","bosta","restful-api","uptime-monitor"],"created_at":"2024-12-15T21:19:51.904Z","updated_at":"2025-08-17T14:06:52.979Z","avatar_url":"https://github.com/bostaapp.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Backend Assessment\n\nBuild an uptime monitoring RESTful API server that allows authenticated users to monitor URLs, and get detailed uptime reports about their availability, average response time, and total uptime/downtime.\n\n## Overview\n\n- Signup with email verification.\n- CRUD operations for URL checks (`GET`, `PUT` and `DELETE` can be called only by the user user who created the check).\n- Authenticated users can receive a notification whenever one of their URLs goes down or up again:\n  - Email.\n  - Webhook *(optional)*.\n- Authenticated users can get detailed uptime reports about their URLs availability, average response time, and total uptime/downtime.\n- Authenticated users can group their checks by tags and get reports by tag.\n\n## Acceptance Criteria\n\n- APIs should be consuming and producing `application/json`.\n- Authenication should be stateless.\n- Each URL check may have the following options:\n  - `name`: The name of the check.\n  - `url`: The URL to be monitored.\n  - `protocol`: The resource protocol name `HTTP`, `HTTPS`, or `TCP`.\n  - `path`: A specific path to be monitored *(optional)*.\n  - `port`: The server port number *(optional)*.\n  - `webhook`: A webhook URL to receive a notification on *(optional)*.\n  - `timeout` *(defaults to 5 seconds)*: The timeout of the polling request *(optional)*.\n  - `interval` *(defaults to 10 minutes)*: The time interval for polling requests *(optional)*.\n  - `threshold` *(defaults to 1 failure)*: The threshold of failed requests that will create an alert *(optional)*.\n  - `authentication`: An HTTP authentication header, with the Basic scheme, to be sent with the polling request *(optional)*.\n    - `authentication.username`\n    - `authentication.password`\n  - `httpHeaders`: A list of key/value pairs custom HTTP headers to be sent with the polling request (optional).\n  - `assert`: The response assertion to be used on the polling response (optional).\n    - `assert.statusCode`: An HTTP status code to be asserted.\n  - `tags`: A list of the check tags (optional).\n  - `ignoreSSL`: A flag to ignore broken/expired SSL certificates in case of using the HTTPS protocol.\n- Each report may have the following information:\n  - `status`: The current status of the URL.\n  - `availability`: A percentage of the URL availability.\n  - `outages`: The total number of URL downtimes.\n  - `downtime`: The total time, in seconds, of the URL downtime.\n  - `uptime`: The total time, in seconds, of the URL uptime.\n  - `responseTime`: The average response time for the URL.\n  - `history`: Timestamped logs of the polling requests.\n\n## Evaluation Criteria\n\n- Code quality.\n- Code scalability as we should be able to add a new alerting notification channel like Slack, Firebase, SMS, etc.. with the minimum possible changes.\n- Unit tests.\n\n## Bonus\n\n- API documentation.\n- Docker and Docker Compose.\n- [Pushover](https://pushover.net/) integration to receive alerts on mobile devices.\n\nTry your best to implement as much as you can from the given requirements and feel free to add more if you want to.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbostaapp%2Fbe-assessment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbostaapp%2Fbe-assessment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbostaapp%2Fbe-assessment/lists"}