const http = require('http')

const process = (request, response) => {
  setTimeout(() => {
    response.end()
  }, 100)
}

console.log('Listening on port 8081...')
http
  .createServer(function (request, response) {
    const requestStart = Date.now()

    let errorMessage = null
    let body = []
    request.on('data', chunk => {
      body.push(chunk)
    })
    request.on('end', () => {
      body = Buffer.concat(body)
      body = body.toString()
    })
    request.on('error', error => {
      errorMessage = error.message
    })

    response.on('finish', () => {
      const { rawHeaders, httpVersion, method, socket, url } = request
      const { remoteAddress, remoteFamily } = socket

      console.log(
        JSON.stringify({
          timestamp: Date.now(),
          processingTime: Date.now() - requestStart,
          rawHeaders,
          errorMessage,
          httpVersion,
          method,
          remoteAddress,
          remoteFamily,
          url,
        })
      )
      console.log(JSON.parse(body))
    })

    process(request, response)
  })
  .listen(8081)