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 examine the instructions in the Readme. Open the solution in Visual Studio

Requirements

  • Use IHttpClientFactory to implement the resolver for the server status field. (There is a TODO to mark this area) - 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