create : function(params, callback){ var bus = new Bus(); var ref = this; var m = this._getSuper(); bus.on('start', function(){ StateMachine.getStartState(EMAIL.name, function(err, data){ if(err != null){ callback(err, null); return; }else{ startState = data.data[0].name; params['status'] = startState; // Start State bus.fire('stateSet'); } }); }); bus.on('stateSet', function(){ m.call(ref, params, callback); }); bus.fire('start'); },
getSplitExperimentById : function(id, callback){ var bus = new Bus(); var ref = this; bus.on('start', function(){ ref.getById(id, function(err, data){ if(err){ callback(err, null);// Respond back with error }else{ //Get Links var experiment = data.data; bus.fire('experiment_fetched', experiment); } }); }); bus.on('experiment_fetched', function(experiment){ linksImpl.search(function(err, data){ if(err){ callback(err); }else{ var links = data.data; experiment.links = links; callback(null,response.success(experiment, 1, codes.success.RECORD_FETCHED([ref.displayName, id]))); } }, 'experimentId:eq:' + experiment.id + "___isDisabled:eq:0"); }); bus.fire('start'); },
function boot() { // Start client session manager sessionManager.start(config.get("session")); // Load request routes routerLoader.load({ autoLoader: autoLoader, httpConnection: httpConnection, socketIOConnection: socketIOConnection, sessionManager: sessionManager, viewEngine: viewEngine }); // Bind registed service providers serviceProviderRegister(serviceContainer); // Load autoload classes autoLoader.loadConfiguration(config.get("app.autoload")); // Start HTTP connection listener httpConnection.listen(httpServer); // Start Socket.io connection listener socketIOConnection.listen(httpServer, sessionManager); // Start http server httpServer.listen(config.get("app.port"), sessionManager); // Fire event event.fire("system.booted"); //Start consumer to listen ActiveMQ consumer.connect(); }
setInterval(function() { var now = new Date(); console.log('\x1b[35mSchedule\x1b[0m: Short interval elapsed (' + now.getHours() + ':' + (now.getMinutes() < 10 ? '0' : '') + now.getMinutes() + ')'); schedEvent.fire(controllers, 'short'); }, (shortPollSeconds * 1000));
setInterval(function() { var now = new Date(); console.log('\x1b[35mSchedule\x1b[0m: Long interval elapsed (' + now.getHours() + ':' + (now.getMinutes() < 10 ? '0' : '') + now.getMinutes() + ')'); schedEvent.fire(controllers, 'long'); }, (longPollMinutes * 60000));
ref.search(function(err, data){ if(err){ callback(err, null);// Respond back with error }else{ //Get Links var experiment = data.data; bus.fire('experiments_fetched', experiment); } }, query, start, fetchSize, sortBy, sortDir);
ref.getById(id, function(err, data){ if(err){ callback(err, null);// Respond back with error }else{ //Get Links var experiment = data.data; bus.fire('experiment_fetched', experiment); } });
ref.update(id, params, function(err, data){ if(err){ callback(err, null);// Respond back with error }else{ //Create a link var experiment = data.data; bus.fire('experiment_updated', id, params, experiment); } });
StateMachine.getStartState(EMAIL.name, function(err, data){ if(err != null){ callback(err, null); return; }else{ startState = data.data[0].name; params['status'] = startState; // Start State bus.fire('stateSet'); } });
linksImpl.search(function(err, data){ if(err){ callback(err); }else{ if(params['url']){ // If URL is getting updated if(data.totalCount > 0){ var link = data.data[0]; bus.fire('link_fetched', link.id, params, experiment); }else{ bus.fire('create_link', params, experiment); } }else{ if(data.totalCount > 0){ var link = data.data[0]; experiment.links = [link]; callback(null,response.success(experiment, 1, codes.success.RECORD_UPDATED([ref.displayName, id]))); } } } }, 'experimentId:eq:' + id + "___isDisabled:eq:0");
createSplitExperiment : function(params, callback){ var bus = new Bus(); var ref = this; // URL should not be blank var url = params['url']; if(check.isNull(url)){ callback(response.error(codes.error.EXPERIMENT_URL_EMPTY())); return; } // URL should be valid if(check.isNull(params['url'])){ callback(response.error(codes.error.INVALID_EXPERIMENT_URL())); return; } params['type'] = EXPERIMENT.types.SPLITTER; bus.on('start', function(){ ref.create(params, function(err, data){ if(err){ callback(err, null);// Respond back with error }else{ //Create a link var experiment = data.data; bus.fire('experiment_created', params, experiment); } }); }); bus.on('experiment_created', function(params, experiment){ var payload = { experimentId : experiment.id, url : params['url'], createdBy : experiment.createdBy, userId : experiment.userId }; linksImpl.create(payload, function(err, data){ if(err){ callback(err); }else{ var link = data.data; experiment.links = [link]; callback(null,response.success(experiment, 1, codes.success.RECORD_CREATED([ref.displayName]))); } }); }); bus.fire('start'); },
ref.search(function(err,data){ // If error occurred if(err){ callback(err); return; } if(data && data.totalCount > 0){ // Records with same User Id and Name can not exist callback(response.error(codes.error.GOAL_USER_ID_NAME_EXISTS())); }else{ bus.fire('noDuplicates'); } }, 'userId:eq:' + params.userId + '___name:eq:' + params.name);
update : function(id, params, callback){ if(id == null){ callback(response.error(codes.error.ID_NULL)); }else{ var bus = new Bus(); var ref = this; var m = this._getSuper(); // Only Status of an email can be updated var status = params.status; bus.on('start', function(){ ref._dao.getById(id).then(function(model){ if(model == undefined){ callback(response.error(codes.error.RECORD_WITH_ID_NOT_EXISTS([ref.displayName, id]))); }else{ bus.fire('modelFound', model); } }, function(error){ callback(response.error(codes.error.RECORD_WITH_ID_NOT_FETCHED([ref.displayName, id]))); }); }); bus.on('modelFound', function(model){ if(status && status != model.status){ //Status is getting changed StateMachine.isValidTransition(EMAIL.name, model.status, status, function(err, data){ if(err != null){ callback(err, null); return; }else{ bus.fire('validOrNoTransitions'); } }); }else{ bus.fire('validOrNoTransitions'); } }); bus.on('validOrNoTransitions', function(){ m.call(ref, id, {status : status}, callback); }); bus.fire('start'); } },
this.onConnection = function (req, res) { // Fire event event.fire("connection.http.request", req); // Pass to listeners var self = this; var url = req.url; if (req.method === "GET") { var contentType = req.headers["content-type"]; var callback = getCallback.bind(this)("GET", url); if (callback.fn != null) { req.inputs = callback.urlInputs; req.inputs = req.inputs.merge(getInputs(url, "GET", contentType)); req.baseUrl = getBaseUrl(url); callback.fn(req, res, url); } else { res.writeHead(404, {"Content-Type": "application/json"}); res.end(JSON.stringify({ status: 404, result: "page not found" })); } } else if (req.method === "POST") { var body = ""; var contentType = req.headers["content-type"]; req.on("data", function (data) { body += data; // Too much POST data, close the connection! if (body.length > 1e6) req.connection.destroy(); }); req.on("end", function () { req.inputs = getInputs(body, "POST", contentType); req.baseUrl = getBaseUrl(url); var callback = getCallback.bind(self)("POST", url); if (callback.fn != null) { callback.fn(req, res); } else { res.writeHead(404, {"Content-Type": "application/json"}); res.end(JSON.stringify({ status: 404, result: "page not found" })); } }); } };
searchSplitExperiments : function(callback, query, start, fetchSize, sortBy, sortDir){ var ref = this; var bus = new Bus(); bus.on('start', function(){ ref.search(function(err, data){ if(err){ callback(err, null);// Respond back with error }else{ //Get Links var experiment = data.data; bus.fire('experiments_fetched', experiment); } }, query, start, fetchSize, sortBy, sortDir); }); bus.on('experiments_fetched', function(experiments){ if(experiments.length > 0){ var count = 0; _.each(experiments, function(experiment){ linksImpl.search(function(err, data){ if(err){ callback(err); }else{ var links = data.data; experiment.links = links; if(++count == experiments.length){ callback(null,response.success(experiments, experiments.length, codes.success.RECORDS_SEARCHED([ref.displayName]))); }; }; }, 'experimentId:eq:' + experiment.id + "___isDisabled:eq:0"); }); }else{ callback(null,response.success(experiments, experiments.length, codes.success.RECORDS_SEARCHED([ref.displayName]))); } }); bus.fire('start'); }
updateSplitExperiment : function(id, params, callback){ var bus = new Bus(); var ref = this; if(params['url'] && !check.isURL(params['url'])){ // URL should be valid callback(response.error(codes.error.INVALID_EXPERIMENT_URL())); return; } bus.on('start', function(){ ref.update(id, params, function(err, data){ if(err){ callback(err, null);// Respond back with error }else{ //Create a link var experiment = data.data; bus.fire('experiment_updated', id, params, experiment); } }); }); bus.on('experiment_updated', function(id, params, experiment){ linksImpl.search(function(err, data){ if(err){ callback(err); }else{ if(params['url']){ // If URL is getting updated if(data.totalCount > 0){ var link = data.data[0]; bus.fire('link_fetched', link.id, params, experiment); }else{ bus.fire('create_link', params, experiment); } }else{ if(data.totalCount > 0){ var link = data.data[0]; experiment.links = [link]; callback(null,response.success(experiment, 1, codes.success.RECORD_UPDATED([ref.displayName, id]))); } } } }, 'experimentId:eq:' + id + "___isDisabled:eq:0"); }); bus.on('create_link', function(params, experiment){ var payload = { experimentId : experiment.id, url : params['url'], createdBy : experiment.createdBy, userId : experiment.userId }; linksImpl.create(payload, function(err, data){ if(err){ callback(err); }else{ var link = data.data; experiment.links = [link]; callback(null,response.success(experiment, 1, codes.success.RECORD_CREATED([ref.displayName]))); } }); }); bus.on('link_fetched', function(linkId, params, experiment){ var payload = { url : params['url'], updatedBy : experiment.createdBy, userId : experiment.userId }; linksImpl.update(linkId, payload, function(err, data){ if(err){ callback(err); }else{ var link = data.data; experiment.links = [link]; callback(null,response.success(experiment, 1, codes.success.RECORD_UPDATED([ref.displayName, id]))); } }); }); bus.fire('start'); },
update : function(id, params, callback){ if(id == null){ callback(response.error(codes.error.ID_NULL)); }else{ var bus = new Bus(); var ref = this; var m = this._getSuper(); var userId = null; bus.on('start', function(){ ref._dao.getById(id).then(function(model){ if(model == undefined){ callback(response.error(codes.error.RECORD_WITH_ID_NOT_EXISTS([ref.displayName, id]))); }else{ userId = model.userId; bus.fire('modelFound', model); } }, function(error){ callback(response.error(codes.error.RECORD_WITH_ID_NOT_FETCHED([ref.displayName, id]))); }); }); bus.on('modelFound', function(model){ if(params.userId && params.userId != model.userId){ // Can't change the user id of an experiment callback(response.error(codes.error.GOAL_USER_ID_CANT_UPDATE())); return; } if(params.url && params.url != model.url){ // URL is getting changes // URL should not be blank if(check.isNull(params['url'])){ callback(response.error(codes.error.GOAL_URL_REQUIRED())); return; } // URL should not be blank if(!check.isURL(params['url'])){ callback(response.error(codes.error.INVALID_GOAL_URL())); return; } } if(params.name && params.name != model.name){ //Name is getting updated var name = params.name || model.name; ref.search(function(err,data){ // If error occurred if(err){ callback(err); return; } if(data && data.totalCount > 0){ // Records with same User Id and Name can not exist callback(response.error(codes.error.GOAL_USER_ID_NAME_EXISTS())); }else{ bus.fire('noDuplicates', model); } }, 'userId:eq:' + model.userId + '___name:eq:' + name); }else{ bus.fire('noDuplicates', model); } }); bus.on('noDuplicates', function(model){ if(params.status && params.status != model.status){ StateMachine.isValidTransition(GOAL.name, model.status, params.status, function(err, data){ if(err != null){ callback(err, null); return; }else{ bus.fire('validOrNoTransitions'); } }); }else{ bus.fire('validOrNoTransitions'); } }); bus.on('validOrNoTransitions', function(){ m.call(ref, id, params, callback); // Mark script old for the user emitter.emit(EVENT_MARK_SCRIPT_OLD, userId); }); bus.fire('start'); } }
create : function(params, callback){ var bus = new Bus(); var ref = this; var m = this._getSuper(); // User ID should not be valid var userId = params['userId']; if(check.isNull(userId) || !check.isInt(userId)){ callback(response.error(codes.error.VALID_USER_REQUIRED())); return; } // Name should not be blank var name = params['name']; if(check.isNull(name)){ callback(response.error(codes.error.GOAL_NAME_REQUIRED())); return; } // Type should not be blank if(check.isNull(params['type'])){ callback(response.error(codes.error.GOAL_TYPE_REQUIRED())); return; } // URL should not be blank if(check.isNull(params['url'])){ callback(response.error(codes.error.GOAL_URL_REQUIRED())); return; } // URL should not be blank if(!check.isURL(params['url'])){ callback(response.error(codes.error.INVALID_GOAL_URL())); return; } bus.on('start', function(){ StateMachine.getStartState(GOAL.name, function(err, data){ if(err != null){ callback(err, null); return; }else{ startState = data.data[0].name; params['status'] = startState; // Start State bus.fire('stateSet'); } }); }); bus.on('stateSet', function(){ ref.search(function(err,data){ // If error occurred if(err){ callback(err); return; } if(data && data.totalCount > 0){ // Records with same User Id and Name can not exist callback(response.error(codes.error.GOAL_USER_ID_NAME_EXISTS())); }else{ bus.fire('noDuplicates'); } }, 'userId:eq:' + params.userId + '___name:eq:' + params.name); }); bus.on('noDuplicates', function(){ m.call(ref, params, callback); // Mark script old for the user emitter.emit(EVENT_MARK_SCRIPT_OLD, userId); }); bus.fire('start'); },