// Example logging HTTP server request and response objects.

var http = require('http');
var bunyan = require('../lib/bunyan');

var log = bunyan.createLogger({
    name: 'myserver',
    serializers: {
        req: bunyan.stdSerializers.req,
        res: bunyan.stdSerializers.res
    }
});

var server = http.createServer(function (req, res) {
    log.info({req: req}, 'start request');  // <-- this is the guy we're testing
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
    log.info({res: res}, 'done response');  // <-- this is the guy we're testing
});
server.listen(1337, '127.0.0.1', function () {
    log.info('server listening');
    var options = {
        port: 1337,
        hostname: '127.0.0.1',
        path: '/path?q=1#anchor',
        headers: {
            'X-Hi': 'Mom'
        }
    };
    var req = http.request(options);
    req.on('response', function (res) {
        res.on('end', function () {
            process.exit();
        })
    });
    req.write('hi from the client');
    req.end();
});


/* BEGIN JSSTYLED */
/**
 *
 * $ node server.js
 * {"service":"myserver","hostname":"banana.local","level":3,"msg":"server listening","time":"2012-02-02T05:32:13.257Z","v":0}
 * {"service":"myserver","hostname":"banana.local","req":{"method":"GET","url":"/path?q=1#anchor","headers":{"x-hi":"Mom","connection":"close"}},"level":3,"msg":"start request","time":"2012-02-02T05:32:13.260Z","v":0}
 * {"service":"myserver","hostname":"banana.local","res":{"statusCode":200,"_hasBody":true,"_header":"HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n","_trailer":""},"level":3,"msg":"done response","time":"2012-02-02T05:32:13.261Z","v":0}
 *
 * $ node server.js | ../bin/bunyan
 * [2012-02-02T05:32:16.006Z] INFO: myserver on banana.local: server listening
 * [2012-02-02T05:32:16.010Z] INFO: myserver on banana.local: start request
 *     GET /path?q=1#anchor
 *     x-hi: Mom
 *     connection: close
 * [2012-02-02T05:32:16.011Z] INFO: myserver on banana.local: done response
 *     HTTP/1.1 200 OK
 *     Content-Type: text/plain
 *     Connection: close
 *     Transfer-Encoding: chunked
 *     (body)
 *
 */
/* END JSSTYLED */