Skip to main content

Register trainee teachers - Healthcheck and Ping Endpoints

Healthchecks are handled by HeartbeatController.

Ping

Use the /ping endpoint as a lightweight check to see if the app is up. This can be used by load-balancers, for example, which may frequently test whether to send traffic to a given host running this app. The response will simply be PONG, with a 200 status code, and not specific resources are checked when this endpoint is activated.

Healthcheck

Use the /healthcheck to check whether that the app's dependencies are working. This returns a JSON structure that lists the checks it performs and their results. For example:

{
  "checks": {
    "database": true,
    "redis": true,
    "sidekiq_processes": true
  }
}

The available checks:

database

Check that 'ActiveRecord' connection to the database is active.

redis

Checks that Sidekiq can connect to the Redis server.

sidekiq_processes

Check which queues currently have jobs, as reported by Sidekiq, and checks that there is a Sidekiq running for each one. In theory there should be a process for each queue that is being used, and we determine which queues are being used by looking at what jobs we have queued up.

Failures caused by stale jobs

This check will fail if there are stale jobs in a queue that doesn't have a processor running. You can check which queues have jobs by starting the Rails console and running:

stats = Sidekiq::Stats.new
processes = Sidekiq::ProcessSet.new
stats.queues.keys.each do |queue|
  running = processes.any? { |process| queue.in? process["queues"] }
  puts "#{queue} running? #{running}"
end

If you see jobs in a queue that shouldn't be running anymore (e.g. we've retired find_sync and shouldn't see any jobs for it) then you'll need to remove any job queues that exist for it for this test to return true. If, on the other hand, you only have the queues you expected listed, but no process is listed for them, then you have a problem.