### codetube
    Copyright (C) 2011 payload payload@lavabit.com
    Copyright (C) 2011 dodo dodo.the.last@gmail.com

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>
###

config = require('./config')


module.exports = profiling = do () ->
    throw new Error("no cli parsed!") unless config.cli?
    return require('express').profiler() unless config.cli.opts.debugger

    profiler = require('v8-profiler')
    return (req, res, next) ->
        snapshot = "#{new Date()} #{res.statusCode} #{req.method} #{req.url}"
        profile =
            heap: profiler.takeSnapshot(snapshot)
            cpu: profiler.startProfiling(snapshot)

        end = res.end
        res.end = ->
            res.end = end
            res.end.apply(this, arguments)
            profile.cpu = profiler.stopProfiling(snapshot)

        next()
