Skip to content

Instantly share code, notes, and snippets.

@mrajagopal
Last active August 29, 2015 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrajagopal/e6e5add0ef20adbb7cc4 to your computer and use it in GitHub Desktop.
Save mrajagopal/e6e5add0ef20adbb7cc4 to your computer and use it in GitHub Desktop.
A Node.js script for LineRate extolling the moveRequest() method
// Move request example
"use strict";
var vsm = require('lrs/virtualServerModule');
var redis = require('redis');
var url = require('url');
var async = require('async');
var trialUsersServer = undefined;
var client = redis.createClient();
var userAccountDB = 1;
// Select the dedicated db for user accounts
client.select(userAccountDB, function(err, result){
if(err){
return err;
}
});
client.on('error', function(err){
console.log('Error ' + err);
});
// Connect to the redis server and populate with sample entries
client.on('connect', function(){
console.log("Connected to redis server");
client.mset("John", "trial", "Jane", "paid", "Donald", "trial");
});
function getUsername(servReq, callback){
var url_parts = url.parse(servReq.url, true);
var query = url_parts.query;
console.log(query.name);
return callback(null, query.name);
}
// Determine whether the user is a trial or paid user of the services
function getUserStatus(username, callback){
if (!username){
console.log("No username found");
return callback(null, false);
}
// If the query string contains a name, process request
// based on user's trial or paid 'status'
client.get(username, function(err, result){
if (err){
throw err;
}
if (!result){
console.log("User " + username + " not found");
client.set(username, "trial", function(err, result){
if(err){
return callback(err);
}
if (result){
console.log("User " + username + " added");
return callback(null, true);
}
});
}
else{
console.log("User " + username + " found");
if (result === "trial"){
return callback(null, true);
}
else if(result === "paid"){
return callback(null, false);
}
else{
console.log("Parse error from redis value");
return callback(null, false);
}
}
});
}
function processRequest(isTrialUser, servReq, servResp, cliReq){
if (trialUsersServer && isTrialUser){
trialUsersServer.moveRequest(servReq, servResp);
}
else{
cliReq();
}
}
var onUserRequest = function(servReq, servResp, cliReq){
async.waterfall([
function(callback){
getUsername(servReq, callback);
},
function(username, callback){
getUserStatus(username, callback);
},
function(isTrialUser, callback){
processRequest(isTrialUser, servReq, servResp, cliReq);
}
], function(err, result){
if(err){
console.log("Error processing request " + err);
processRequest(false, servReq, servResp, cliReq);
}
});
}
var onPaidUsersServerExists = function(vs){
console.log("Paid users' server ready");
vs.on('request', onUserRequest);
}
vsm.on('exist', 'paidUsersServer', onPaidUsersServerExists);
var onTrialUsersServerExists = function(vs){
console.log("Trial users' server ready");
trialUsersServer = vs;
}
vsm.on('exist', 'trialUsersServer', onTrialUsersServerExists);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment