Skip to content

Instantly share code, notes, and snippets.

@pherris
Created December 18, 2014 19:21

Revisions

  1. pherris created this gist Dec 18, 2014.
    137 changes: 137 additions & 0 deletions app.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,137 @@
    var htmlparser = require("htmlparser");
    var fs = require('fs');
    var sys = require("sys");
    var _ = require('lodash');
    var prettyjson = require('prettyjson');
    var express = require('express');
    var bodyParser = require('body-parser');
    var requestify = require('requestify');

    var app = express();
    app.use(bodyParser.text({ limit: '10mb', type: '*/x-www-form-urlencoded' }));

    var handler = new htmlparser.DefaultHandler(function (error, dom) {
    if (error) {
    console.log(error);
    } else {
    //all good
    }
    });
    var parser = new htmlparser.Parser(handler);

    var publish = {
    flowdock: function(text) {
    console.log('post', text);
    var trimmedText = text.substr(1, text.length).substr(0, text.length -2); //trim off the leading { and traling }
    requestify.post('https://api.flowdock.com/v1/messages/chat/c14d50f98d17fb7687f190c226419102', { //TFP back chanel
    content: text,
    external_user_name: 'jenkinsci'
    })
    .then(function(response) {
    // Get the response body (JSON parsed or jQuery object for XMLs)
    //console.log(response.getBody());
    console.log('sent to flowdock');
    }).catch(function (error) {
    // Handle any error from all above steps
    console.log(error);
    });
    }
    };

    // handle POST, body is HTML file
    app.post('/:build/:almWarVersion', function(req, res) {
    parser.parseComplete(req.body);

    var ar = _.find(_.find(_.find(handler.dom, { 'raw': 'html' }).children, { 'raw': 'body' }).children[0].children, { 'raw': "script type=\"text/javascript\"" });

    //evil
    eval(ar.children[0].raw.substr(0, ar.children[0].raw.indexOf("}]}]');")+7)); //creates summaries var

    var jsonObject = {};

    for (metric in summaries) {
    var summary = summaries[metric], header, columns;

    jsonObject[summary.name] = {
    description: summary.text,
    count: 0
    // ,
    // changes: []
    };

    for (changeIndex in summary.table) {
    var change = {};

    for (index in summary.table[changeIndex]) {
    change[summary.columns[index].title] = summary.table[changeIndex][index];
    }

    // jsonObject[summary.name].changes.push(change);
    jsonObject[summary.name].count++;
    }
    }

    var toReport = JSON.stringify(jsonObject, undefined, 4);
    toReport = 'ALM CSRT METRICS \n' +
    (req.params.build ? 'Report: http://almci/job/gui-perf/job/alm-gui-perf-stats/' + req.params.build + '/artifact/csrt-report.html\n' : '' ) +
    toReport;


    publish.flowdock(toReport);
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(toReport);

    });

    //server listen
    port = 3000;
    var server = app.listen(port, function () {

    var host = server.address().address
    var port = server.address().port

    console.log('Example app listening at http://%s:%s', host, port)

    });
    console.log('Listening at http://localhost:' + port)




    // fs.readFile('csrt-report.html', {encoding: 'utf-8'}, function(err, data) {
    // if (err) {
    // return console.log('error: ', err);
    // }
    // parser.parseComplete(data);

    // var ar = _.find(_.find(_.find(handler.dom, { 'raw': 'html' }).children, { 'raw': 'body' }).children[0].children, { 'raw': "script type=\"text/javascript\"" });

    // //evil
    // eval(ar.children[0].raw.substr(0, ar.children[0].raw.indexOf("}]}]');")+7)); //creates summaries var

    // var jsonObject = {};

    // for (metric in summaries) {
    // var summary = summaries[metric], header, columns;

    // jsonObject[summary.name] = {
    // description: summary.text,
    // count: 0
    // // ,
    // // changes: []
    // };

    // for (changeIndex in summary.table) {
    // var change = {};

    // for (index in summary.table[changeIndex]) {
    // change[summary.columns[index].title] = summary.table[changeIndex][index];
    // }

    // // jsonObject[summary.name].changes.push(change);
    // jsonObject[summary.name].count++;
    // }
    // }

    // console.log(prettyjson.render(jsonObject));
    // });