Skip to main content

Brief

Please install the required tools before continuing

The goal of this project is to create a simple server that aggregates website health checks.

First download the project zip from here. Unzip the file and and examine the instructions in the Readme

Requirements

  • Use the got library to do a get request against the server health check URI's embedded in the project. Consider any non 2xx response a failure
  • These results should be automatically fetched every 5 minutes (hint: use a lower value during testing)
  • Make sure the fetch request timeout is lower than 5 minutes
  • Make the health check calls in parallel
  • Store the last successful health check time in lastTimeUp
  • Ensure the checker is de-registered when the server shuts down
  • Add an error field to Server object which contains the status code and response body when the health check fails

Example Error Response:

{
"data": {
"servers": [
{
"id": 1,
"name": "Server1",
"healthCheckUri": "https://stackworx.io",
"status": "DOWN",
"error": {
"status": 500,
"body": "An Internal Server Error Occurred"
}
}
]
}
}

Bonus Requirements (Difficulty in brackets):

Bonus requirements for extra credit. Not listed in any particular order

  • Persist the server status and last up time somewhere so that they are not lost between server restarts (5)
  • Abstract all the code into a server layer and keep that code separate from the GraphQL code (2)
  • Add a filter parameter to the server field so that a user can request results for only specific servers (2)
  • Add a filter to only fetch servers with a specific status. E.g. DOWN (2)
  • Create a mutation to disable the checking of a server (10)

Help

Send an email to assignment@stackworx.io if you get stuck

Hints

  • Use httpstat to simulate failures
  • Graphql Resolvers can be async or return promises
  • Use an IDE that understands typescript

Resources