Skip to content

Commit

Permalink
remove packages appended to the api object; include them only where n…
Browse files Browse the repository at this point in the history
…eeded
  • Loading branch information
evantahler committed Jan 11, 2013
1 parent 897ae0b commit 6400b14
Show file tree
Hide file tree
Showing 17 changed files with 121 additions and 111 deletions.
44 changes: 11 additions & 33 deletions actionHero.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
// evan@evantahler.com
// https://github.com/evantahler/actionHero

var fs = require("fs");
var path = require("path");
var async = require('async');

var actionHero = function(){
var self = this;

Expand All @@ -11,35 +15,9 @@ var actionHero = function(){

self.api.connections = {};

// core packages for the API
self.api.util = require("util");
self.api.exec = require('child_process').exec;
self.api.fork = require('child_process').fork;
self.api.net = require("net");
self.api.tls = require("tls");
self.api.http = require("http");
self.api.https = require("https");
self.api.url = require("url");
self.api.fs = require("fs");
self.api.path = require("path");
self.api.os = require('os');
self.api.formidable = require('formidable');
self.api.request = require("request");
self.api.async = require('async');
self.api.crypto = require("crypto");
self.api.uuid = require("node-uuid");
self.api.consoleColors = require('colors');
self.api.data2xml = require('data2xml');
self.api.mime = require('mime');
self.api.redisPackage = require('redis');
self.api.cluster = require('cluster');
self.api.io = require('socket.io');
self.api.bf = require('browser_fingerprint');
self.api.argv = require('optimist').argv;

// backwards compatibility for old node versions
self.api.fs.existsSync || (self.api.fs.existsSync = self.api.path.existsSync);
self.api.fs.exists || (self.api.fs.exists = self.api.path.exists);
fs.existsSync || (fs.existsSync = path.existsSync);
fs.exists || (fs.exists = path.exists);
try{ self.api.domain = require("domain"); }catch(e){ }
};

Expand All @@ -64,8 +42,8 @@ actionHero.prototype.start = function(params, next){
var initializerMethods = [];
for(var i in initializerFolders){
var folder = initializerFolders[i];
if(self.api.fs.existsSync(folder)){
self.api.fs.readdirSync(folder).sort().forEach( function(file) {
if(fs.existsSync(folder)){
fs.readdirSync(folder).sort().forEach( function(file) {
if (file[0] != "."){
var initalizer = file.split(".")[0];
if(require.cache[initializerFolders[i] + file] !== null){
Expand Down Expand Up @@ -153,7 +131,7 @@ actionHero.prototype.start = function(params, next){
}
};

self.api.async.series(orderedInitializers);
async.series(orderedInitializers);
};

actionHero.prototype.stop = function(next){
Expand All @@ -166,7 +144,7 @@ actionHero.prototype.stop = function(next){
orderedTeardowns['watchedFiles'] = function(next){
self.api.log(" > teardown: watchedFiles", 'grey');
for(var i in self.api.watchedFiles){
self.api.fs.unwatchFile(self.api.watchedFiles[i]);
fs.unwatchFile(self.api.watchedFiles[i]);
}
next();
}
Expand All @@ -189,7 +167,7 @@ actionHero.prototype.stop = function(next){
if(typeof next == "function"){ next(null, self.api); }
};

self.api.async.series(orderedTeardowns);
async.series(orderedTeardowns);
}else{
self.api.log("Cannot shut down (not running any servers)");
if(typeof next == "function"){ next(null, self.api); }
Expand Down
10 changes: 6 additions & 4 deletions examples/tasks/cleanLogFiles.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
var fs = require('fs');

var task = {};

/////////////////////////////////////////////////////////////////////
Expand All @@ -10,15 +12,15 @@ task.frequency = 60000;
/////////////////////////////////////////////////////////////////////
// functional
task.run = function(api, params, next){
api.fs.readdirSync(api.configData.logFolder).forEach( function(file) {
fs.readdirSync(api.configData.logFolder).forEach( function(file) {
file = api.configData.log.logFolder + "/" + file;
api.fs.exists(file, function (exists){
fs.exists(file, function (exists){
if(exists){
size = api.fs.statSync(file).size;
size = fs.statSync(file).size;
if(size >= api.configData.general.maxLogFileSize)
{
api.log(file + " is larger than " + api.configData.general.maxLogFileSize + " bytes. Deleting.", "yellow");
api.fs.unlinkSync(file);
fs.unlinkSync(file);
}
}
});
Expand Down
14 changes: 8 additions & 6 deletions initializers/actions.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
var fs = require('fs');

var actions = function(api, next){
api.actions = {};

Expand Down Expand Up @@ -29,20 +31,20 @@ var actions = function(api, next){
}

var actionsPath = process.cwd() + "/actions/";
api.fs.exists(actionsPath, function (exists) {
fs.exists(actionsPath, function (exists) {
if(!exists){
var defaultActionsPath = process.cwd() + "/node_modules/actionHero/actions/";
api.log("no ./actions path in project, loading defaults from "+defaultActionsPath, "yellow");
actionsPath = defaultActionsPath;
}

function loadFolder(path){
if(api.fs.existsSync(path)){
api.fs.readdirSync(path).forEach( function(file) {
if(fs.existsSync(path)){
fs.readdirSync(path).forEach( function(file) {
if(path[path.length - 1] != "/"){ path += "/"; }
var fullFilePath = path + file;
if (file[0] != "."){
var stats = api.fs.statSync(fullFilePath);
var stats = fs.statSync(fullFilePath);
if(stats.isDirectory()){
loadFolder(fullFilePath);
}else if(stats.isSymbolicLink()){
Expand Down Expand Up @@ -80,10 +82,10 @@ var actions = function(api, next){
if(api.configData.general.developmentMode == true){
api.watchedFiles.push(fullFilePath);
(function() {
api.fs.watchFile(fullFilePath, {interval:1000}, function(curr, prev){
fs.watchFile(fullFilePath, {interval:1000}, function(curr, prev){
if(curr.mtime > prev.mtime){
process.nextTick(function(){
if(api.fs.readFileSync(fullFilePath).length > 0){
if(fs.readFileSync(fullFilePath).length > 0){
delete require.cache[fullFilePath];
delete api.actions[actionName];
actionLoader(fullFilePath, true);
Expand Down
13 changes: 8 additions & 5 deletions initializers/config.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
var fs = require('fs');
var argv = require('optimist').argv;

var config = function(api, startingParams, next){

api.watchedFiles = [];
Expand All @@ -8,10 +11,10 @@ var config = function(api, startingParams, next){
}
}

if(api.argv["config"] != null){
var configFile = api.argv["config"];
console.log(' >> configuration read from: ' + api.argv["config"]);
}else if(api.fs.existsSync(process.cwd() + '/config.js')){
if(argv["config"] != null){
var configFile = argv["config"];
console.log(' >> configuration read from: ' + argv["config"]);
}else if(fs.existsSync(process.cwd() + '/config.js')){
var configFile = process.cwd() + '/config.js';
}else{
var configFile = __dirname + "/../config.js";
Expand All @@ -35,7 +38,7 @@ var config = function(api, startingParams, next){
if(api.configData.general.developmentMode == true){
api.watchedFiles.push(configFile);
(function() {
api.fs.watchFile(configFile, {interval:1000}, function(curr, prev){
fs.watchFile(configFile, {interval:1000}, function(curr, prev){
if(curr.mtime > prev.mtime){
api.log("\r\n\r\n*** rebooting due to config change ***\r\n\r\n");
delete require.cache[configFile];
Expand Down
23 changes: 14 additions & 9 deletions initializers/fileServer.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
var url = require('url');
var fs = require('fs');
var path = require('path');
var mime = require('mime');

var fileServer = function(api, next){

api.fileServer = {}
Expand All @@ -14,7 +19,7 @@ var fileServer = function(api, next){

// determine the filename
if((connection.params.fileName == null || typeof connection.params.fileName == "undefined") && connection.type == "web"){
var parsedURL = api.url.parse(connection.req.url);
var parsedURL = url.parse(connection.req.url);
var parts = parsedURL.pathname.split("/");
parts.shift();
if (connection.directModeAccess == true){ parts.shift(); }
Expand All @@ -29,33 +34,33 @@ var fileServer = function(api, next){
if(connection.error === null){ fileName = connection.params.fileName; }
}

fileName = api.path.normalize(api.configData.general.flatFileDirectory + "/" + fileName);
fileName = path.normalize(api.configData.general.flatFileDirectory + "/" + fileName);
api.fileServer.checkPublic(fileName, connection, next);
};

api.fileServer.checkPublic = function(fileName, connection, next){
if(fileName.indexOf(api.path.normalize(api.configData.general.flatFileDirectory)) === 0 && connection.error == null){
if(fileName.indexOf(path.normalize(api.configData.general.flatFileDirectory)) === 0 && connection.error == null){
api.fileServer.checkExistance(fileName, connection, next);
}else{
api.fileServer.sendFileNotFound(connection, next);
}
}

api.fileServer.checkExistance = function(fileName, connection, next){
api.fs.stat(fileName, function(err, stats){
fs.stat(fileName, function(err, stats){
if(err != null){
api.fileServer.sendFileNotFound(connection, next);
}else{
if(stats.isDirectory()){
fileName += "/";
var indexPage = api.path.normalize(fileName + api.configData.commonWeb.directoryFileType);
var indexPage = path.normalize(fileName + api.configData.commonWeb.directoryFileType);
api.fileServer.checkExistance(indexPage, connection, next);
}else if(stats.isSymbolicLink()){
api.fs.readLink(fileName, function(err, truePath){
fs.readLink(fileName, function(err, truePath){
if(err != null){
api.fileServer.sendFileNotFound(connection, next);
}else{
truePath = api.path.normalize(truePath);
truePath = path.normalize(truePath);
api.fileServer.checkExistance(truePath, connection, next);
}
});
Expand All @@ -71,7 +76,7 @@ var fileServer = function(api, next){
api.fileServer.sendFile = function(file, connection, next){
api.stats.increment("fileServer:filesSent");
var fileSize = 0;
var fileStream = api.fs.createReadStream(file, {
var fileStream = fs.createReadStream(file, {
'flags': 'r',
}).addListener( "data", function(chunk) {
fileSize = fileSize + chunk.length;
Expand All @@ -81,7 +86,7 @@ var fileServer = function(api, next){
});

if(connection.type == "web"){
connection.responseHeaders.push(['Content-Type', api.mime.lookup(file)]);
connection.responseHeaders.push(['Content-Type', mime.lookup(file)]);
connection.responseHeaders.push(['Expires', new Date(new Date().getTime() + api.configData.commonWeb.flatFileCacheDuration * 1000).toUTCString()]);
connection.responseHeaders.push(['Cache-Control', "max-age=" + api.configData.commonWeb.flatFileCacheDuration + ", must-revalidate"]);
api.webServer.cleanHeaders(connection);
Expand Down
4 changes: 3 additions & 1 deletion initializers/id.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
var cluster = require('cluster')

var id = function(api, next){

var externalIP = api.utils.getExternalIPAddress();
Expand All @@ -9,7 +11,7 @@ var id = function(api, next){
api.id = externalIP;
if(api.configData.httpServer.enable){ api.id += ":" + api.configData.httpServer.port }
if(api.configData.tcpServer.enable){ api.id += ":" + api.configData.tcpServer.port }
if(api.cluster.isWorker){ api.id += ":" + process.pid; }
if(cluster.isWorker){ api.id += ":" + process.pid; }

next();
}
Expand Down
16 changes: 10 additions & 6 deletions initializers/log.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
var fs = require('fs');
var colors = require('colors');
var cluster = require('cluster');

var log = function(api, next){

try { api.fs.mkdirSync(api.configData.log.logFolder, "777") } catch(e) {};
try { fs.mkdirSync(api.configData.log.logFolder, "777") } catch(e) {};

api.logger = {};

Expand All @@ -9,8 +13,8 @@ var log = function(api, next){
if (styles == null){styles = ["white"];}
if (typeof styles == "string"){styles = [styles];}
for(var i in styles){
if(api.consoleColors[styles[i]] != null){
inner_message = api.consoleColors[styles[i]](inner_message);
if(colors[styles[i]] != null){
inner_message = colors[styles[i]](inner_message);
}
}
return inner_message;
Expand All @@ -24,15 +28,15 @@ var log = function(api, next){
}else{
var time_string = "!";
}
if(api.cluster.isWorker){
if(cluster.isWorker){
time_string += " [" + process.pid + "]";
}
var console_message = api.consoleColors.grey(time_string) + api.consoleColors.grey(" | ");
var console_message = colors.grey(time_string) + colors.grey(" | ");
console_message += api.logger.colorize(original_message, styles);
console.log(console_message);
var file_message = time_string + " | " + original_message;
if (api.logWriter == null){
api.logWriter = api.fs.createWriteStream((api.configData.log.logFolder + "/" + api.pids.title + ".log"), {flags:"a"});
api.logWriter = fs.createWriteStream((api.configData.log.logFolder + "/" + api.pids.title + ".log"), {flags:"a"});
}
process.nextTick(function() {
try{
Expand Down
8 changes: 5 additions & 3 deletions initializers/paramsAndRoutes.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
var fs = require('fs');

var paramsAndRoutes = function(api, next){

// special params we will always accept
Expand Down Expand Up @@ -135,7 +137,7 @@ var paramsAndRoutes = function(api, next){
var loadRoutes = function(){
api.routes = {};
var routesFile = process.cwd() + '/routes.js';
if(api.fs.existsSync(routesFile)){
if(fs.existsSync(routesFile)){
delete require.cache[routesFile];
api.routes = require(routesFile).routes;
for(var i in api.routes){
Expand All @@ -153,10 +155,10 @@ var paramsAndRoutes = function(api, next){

if(api.configData.general.developmentMode == true){
var routesFile = process.cwd() + '/routes.js';
api.fs.watchFile(routesFile, {interval:1000}, function(curr, prev){
fs.watchFile(routesFile, {interval:1000}, function(curr, prev){
if(curr.mtime > prev.mtime){
process.nextTick(function(){
if(api.fs.readFileSync(routesFile).length > 0){
if(fs.readFileSync(routesFile).length > 0){
loadRoutes();
}
});
Expand Down
16 changes: 10 additions & 6 deletions initializers/pids.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
var fs = require('fs');
var cluster = require('cluster');
var argv = require('optimist').argv;

var pids = function(api, next){

api.pids = {};
Expand All @@ -7,28 +11,28 @@ var pids = function(api, next){
api.configData.general.pidFileDirectory = process.cwd() + "/pids/";
}

if(api.argv["title"] != null){
api.pids.title = api.argv["title"];
if(argv["title"] != null){
api.pids.title = argv["title"];
}else if(process.env["title"] != null){
api.pids.title = process.env["title"];
}else if(api.cluster.isMaster){
}else if(cluster.isMaster){
api.pids.title = "actionHero-" + api.id.replace(new RegExp(':', 'g'), '-');
}else{
api.pids.title = "actionHeroWorker-" + new Date().getTime();
}

try { api.fs.mkdirSync(api.configData.general.pidFileDirectory, "777") } catch(e) {};
try { fs.mkdirSync(api.configData.general.pidFileDirectory, "777") } catch(e) {};

api.pids.setTitle = function(){
process.title = api.pids.title;
}

api.pids.writePidFile = function(){
api.fs.writeFileSync(api.configData.general.pidFileDirectory + api.pids.title, api.pids.pid.toString(), 'ascii');
fs.writeFileSync(api.configData.general.pidFileDirectory + api.pids.title, api.pids.pid.toString(), 'ascii');
}

api.pids.clearPidFile = function(){
api.fs.unlinkSync(api.configData.general.pidFileDirectory + api.pids.title);
fs.unlinkSync(api.configData.general.pidFileDirectory + api.pids.title);
}

api.pids._start = function(api, next){
Expand Down
Loading

0 comments on commit 6400b14

Please sign in to comment.