Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bostaapp/be-assessment
Bosta's Backend assessment.
https://github.com/bostaapp/be-assessment
backend backend-assignment bosta restful-api uptime-monitor
Last synced: about 2 months ago
JSON representation
Bosta's Backend assessment.
- Host: GitHub
- URL: https://github.com/bostaapp/be-assessment
- Owner: bostaapp
- Created: 2021-02-06T16:19:38.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2023-09-14T22:26:35.000Z (over 1 year ago)
- Last Synced: 2023-10-20T18:24:25.893Z (over 1 year ago)
- Topics: backend, backend-assignment, bosta, restful-api, uptime-monitor
- Homepage:
- Size: 1000 Bytes
- Stars: 3
- Watchers: 2
- Forks: 68
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Backend Assessment
Build 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.
## Overview
- Signup with email verification.
- CRUD operations for URL checks (`GET`, `PUT` and `DELETE` can be called only by the user user who created the check).
- Authenticated users can receive a notification whenever one of their URLs goes down or up again:
- Email.
- Webhook *(optional)*.
- Authenticated users can get detailed uptime reports about their URLs availability, average response time, and total uptime/downtime.
- Authenticated users can group their checks by tags and get reports by tag.## Acceptance Criteria
- APIs should be consuming and producing `application/json`.
- Authenication should be stateless.
- Each URL check may have the following options:
- `name`: The name of the check.
- `url`: The URL to be monitored.
- `protocol`: The resource protocol name `HTTP`, `HTTPS`, or `TCP`.
- `path`: A specific path to be monitored *(optional)*.
- `port`: The server port number *(optional)*.
- `webhook`: A webhook URL to receive a notification on *(optional)*.
- `timeout` *(defaults to 5 seconds)*: The timeout of the polling request *(optional)*.
- `interval` *(defaults to 10 minutes)*: The time interval for polling requests *(optional)*.
- `threshold` *(defaults to 1 failure)*: The threshold of failed requests that will create an alert *(optional)*.
- `authentication`: An HTTP authentication header, with the Basic scheme, to be sent with the polling request *(optional)*.
- `authentication.username`
- `authentication.password`
- `httpHeaders`: A list of key/value pairs custom HTTP headers to be sent with the polling request (optional).
- `assert`: The response assertion to be used on the polling response (optional).
- `assert.statusCode`: An HTTP status code to be asserted.
- `tags`: A list of the check tags (optional).
- `ignoreSSL`: A flag to ignore broken/expired SSL certificates in case of using the HTTPS protocol.
- Each report may have the following information:
- `status`: The current status of the URL.
- `availability`: A percentage of the URL availability.
- `outages`: The total number of URL downtimes.
- `downtime`: The total time, in seconds, of the URL downtime.
- `uptime`: The total time, in seconds, of the URL uptime.
- `responseTime`: The average response time for the URL.
- `history`: Timestamped logs of the polling requests.## Evaluation Criteria
- Code quality.
- Code scalability as we should be able to add a new alerting notification channel like Slack, Firebase, SMS, etc.. with the minimum possible changes.
- Unit tests.## Bonus
- API documentation.
- Docker and Docker Compose.
- [Pushover](https://pushover.net/) integration to receive alerts on mobile devices.Try your best to implement as much as you can from the given requirements and feel free to add more if you want to.