Skip to content

Instantly share code, notes, and snippets.

@ernestlv
Last active September 1, 2015 04:05
Show Gist options
  • Save ernestlv/88bc895ba9829b39fe94 to your computer and use it in GitHub Desktop.
Save ernestlv/88bc895ba9829b39fe94 to your computer and use it in GitHub Desktop.
http - module to monitor an http request from Node.js
var http = require("http");
var log = require("./log");
var cache = require("./cache");
var getRequestTime = require("./request-time");
var requestList = []; //request buffer
//register a Node.js http request then monitor the request
//monitor means to check if the request is in process, a duplicate or it finished
function registerRequest(url){
var start = new Date();
var reqID = setInterval(function(){ //monitor request status and time
log("IN PROGRESS", url, "time:", getRequestTime(start, new Date()));
}, 1000);
log("BEGIN", url); //request just started
return function(){ //http request ended
clearInterval(reqID);
log("FINISHED", url, "time:", getRequestTime(start, new Date()));
};
}
function ingestResponse(serviceResponse, unregisterRequest, url, httpRes){ //consume the server http response
serviceResponse.setEncoding('utf8');
var data = "";
serviceResponse.on("data", function(chunk) {
data += chunk;
});
serviceResponse.on("end", function(){
try{
unregisterRequest();
httpRes.json(serviceResponse.statusCode, JSON.parse(data));
}catch(e){
log("ERROR", e, url);
}
});
}
function doRequest(url, httpRes){ //Node.js http request
log("GET", url);
var unregisterRequest = registerRequest(url);
http.get(url, function(serviceResponse){
ingestResponse(serviceResponse, unregisterRequest, url, httpRes);
}).on("error", function(e){
log("ERROR", url, e);
unregisterRequest();
httpRes.json(500, e);
});
}
exports = module.exports = {
getClients: function(httpRes){ //web service request
var url = "clients";
doRequest(url, httpRes);
},
getSales: function(httpRes){ //web service request
var url = "sales?client="+req.client;
doRequest(url, httpRes);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment