const http = require("http")
const throng = require("throng")
const createServer = require("./server/createServer")

const port = parseInt(process.env.PORT, 10) || 5000

function startServer(id) {
  const server = http.createServer(createServer())

  // Heroku dynos automatically timeout after 30s. Set our
  // own timeout here to force sockets to close before that.
  // https://devcenter.heroku.com/articles/request-timeout
  server.setTimeout(25000, function(socket) {
    const message = `Timeout of 25 seconds exceeded`

    socket.end(
      [
        "HTTP/1.1 503 Service Unavailable",
        "Date: " + new Date().toGMTString(),
        "Content-Length: " + Buffer.byteLength(message),
        "Content-Type: text/plain",
        "Connection: close",
        "",
        message
      ].join("\r\n")
    )
  })

  server.listen(port, function() {
    console.log("Server #%s listening on port %s, Ctrl+C to stop", id, port)
  })
}

throng({
  workers: process.env.WEB_CONCURRENCY || 1,
  lifetime: Infinity,
  grace: 25000,
  start: startServer
})