diff --git a/modules/cache.js b/modules/cache.js index af0ad70..ed1420d 100644 --- a/modules/cache.js +++ b/modules/cache.js @@ -1,3 +1,4 @@ +var logging = require('./logging'); var config = require("./config"); var redis = null; var fs = require("fs"); @@ -5,7 +6,7 @@ var fs = require("fs"); // sets up redis connection // flushes redis when running on heroku (files aren't kept between pushes) function connect_redis() { - console.log("connecting to redis..."); + logging.log("connecting to redis..."); if (process.env.REDISCLOUD_URL) { var redisURL = require("url").parse(process.env.REDISCLOUD_URL); redis = require("redis").createClient(redisURL.port, redisURL.hostname); @@ -14,17 +15,17 @@ function connect_redis() { redis = require("redis").createClient(); } redis.on("ready", function() { - console.log("Redis connection established."); + logging.log("Redis connection established."); if(process.env.HEROKU) { - console.log("Running on heroku, flushing redis"); + logging.log("Running on heroku, flushing redis"); redis.flushall(); } }); redis.on("error", function (err) { - console.error(err); + logging.error(err); }); redis.on("end", function () { - console.warn("Redis connection lost!"); + logging.warn("Redis connection lost!"); }); } @@ -38,11 +39,11 @@ function update_file_date(hash) { var date = new Date(); fs.utimes(path, date, date, function(err){ if (err) { - console.error(err); + logging.error(err); } }); } else { - console.error("Tried to update " + path + " date, but it doesn't exist"); + logging.error("Tried to update " + path + " date, but it doesn't exist"); } }); } @@ -56,7 +57,7 @@ exp.get_redis = function() { // sets the timestamp for +uuid+ and its face file's date to now exp.update_timestamp = function(uuid, hash) { - console.log(uuid + " cache: updating timestamp"); + logging.log(uuid + " cache: updating timestamp"); var time = new Date().getTime(); redis.hmset(uuid, "t", time); update_file_date(hash); @@ -64,7 +65,7 @@ exp.update_timestamp = function(uuid, hash) { // create the key +uuid+, store +hash+ and time exp.save_hash = function(uuid, hash) { - console.log(uuid + " cache: saving hash"); + logging.log(uuid + " cache: saving hash"); var time = new Date().getTime(); redis.hmset(uuid, "h", hash, "t", time); }; diff --git a/modules/config.js b/modules/config.js index e5501f7..0934c0d 100644 --- a/modules/config.js +++ b/modules/config.js @@ -6,7 +6,8 @@ var config = { browser_cache_time: 3600, // seconds until browser will request image again http_timeout: 3000, // ms until connection to mojang is dropped faces_dir: 'skins/faces/', // directory where faces are kept. should have trailing '/' - helms_dir: 'skins/helms/' // directory where helms are kept. should have trailing '/' + helms_dir: 'skins/helms/', // directory where helms are kept. should have trailing '/' + debug_enabled: true // enables logging.debug }; module.exports = config; diff --git a/modules/helpers.js b/modules/helpers.js index 7d2d70e..025927c 100644 --- a/modules/helpers.js +++ b/modules/helpers.js @@ -1,4 +1,5 @@ var networking = require('./networking'); +var logging = require('./logging'); var config = require('./config'); var cache = require('./cache'); var skins = require('./skins'); @@ -20,17 +21,17 @@ function store_images(uuid, details, callback) { callback(err, null); } else { if (skin_url) { - console.log(uuid + " " + skin_url); + logging.log(uuid + " " + skin_url); // set file paths var hash = get_hash(skin_url); if (details && details.hash == hash) { // hash hasn't changed - console.log(uuid + " hash has not changed"); + logging.log(uuid + " hash has not changed"); cache.update_timestamp(uuid, hash); callback(null, hash); } else { // hash has changed - console.log(uuid + " new hash: " + hash); + logging.log(uuid + " new hash: " + hash); var facepath = __dirname + '/../' + config.faces_dir + hash + ".png"; var helmpath = __dirname + '/../' + config.helms_dir + hash + ".png"; // download skin, extract face/helm @@ -67,18 +68,18 @@ function get_image_hash(uuid, callback) { } else { if (details && details.time + config.local_cache_time * 1000 >= new Date().getTime()) { // uuid known + recently updated - console.log(uuid + " uuid known & recently updated"); + logging.log(uuid + " uuid known & recently updated"); callback(null, (details.hash ? 1 : 0), details.hash); } else { - console.log(uuid + " uuid not known or too old"); - console.log("details:"); - console.log(details); - console.log("/details"); + logging.log(uuid + " uuid not known or too old"); + logging.log("details:"); + logging.log(details); + logging.log("/details"); store_images(uuid, details, function(err, hash) { if (err) { callback(err, -1, details && details.hash); } else { - console.log(uuid + " hash: " + hash); + logging.log(uuid + " hash: " + hash); var oldhash = details && details.hash; var status = hash !== oldhash ? 2 : 3; callback(null, status, hash); @@ -102,7 +103,7 @@ exp.uuid_valid = function(uuid) { // image is the user's face+helm when helm is true, or the face otherwise // for status, see get_image_hash exp.get_avatar = function(uuid, helm, size, callback) { - console.log("\nrequest: " + uuid); + logging.log("\nrequest: " + uuid); get_image_hash(uuid, function(err, status, hash) { if (hash) { var filepath = __dirname + '/../' + (helm ? config.helms_dir : config.faces_dir) + hash + ".png"; diff --git a/modules/logging.js b/modules/logging.js new file mode 100644 index 0000000..66f1f2f --- /dev/null +++ b/modules/logging.js @@ -0,0 +1,16 @@ +var config = require("./config"); + +var exp = {}; + +function debug() { + if (config.debug_enabled) { + console.log(Array.prototype.slice.call(arguments).join(" ")); + } +} + +exp.log = console.log; +exp.warn = console.warn; +exp.error = console.error; +exp.debug = debug; + +module.exports = exp; \ No newline at end of file diff --git a/modules/networking.js b/modules/networking.js index b6e488d..098d85e 100644 --- a/modules/networking.js +++ b/modules/networking.js @@ -1,3 +1,4 @@ +var logging = require('./logging'); var request = require('request'); var config = require('./config'); var skins = require('./skins'); @@ -32,24 +33,24 @@ var get_username_url = function(name, callback) { }, function(error, response, body) { if (!error && response.statusCode == 301) { // skin_url received successfully - console.log(name + " skin url received"); + logging.log(name + " skin url received"); callback(null, response.headers.location); } else if (error) { callback(error, null); } else if (response.statusCode == 404) { // skin doesn't exist - console.log(name + " has no skin"); + logging.log(name + " has no skin"); callback(0, null); } else if (response.statusCode == 429) { // Too Many Requests // Never got this, seems like skins aren't limited - console.warn(name + " Too many requests"); - console.warn(body); + logging.warn(name + " Too many requests"); + logging.warn(body); callback(null, null); } else { - console.error(name + " Unknown error:"); - console.error(response); - console.error(body); + logging.error(name + " Unknown error:"); + logging.error(response); + logging.error(body); callback(null, null); } }); @@ -64,23 +65,23 @@ var get_uuid_url = function(uuid, callback) { }, function (error, response, body) { if (!error && response.statusCode == 200) { // profile downloaded successfully - console.log(uuid + " profile downloaded"); + logging.log(uuid + " profile downloaded"); callback(null, extract_skin_url(JSON.parse(body))); } else if (error) { callback(error, null); } else if (response.statusCode == 204 || response.statusCode == 404) { // we get 204 No Content when UUID doesn't exist (including 404 in case they change that) - console.log(uuid + " uuid does not exist"); + logging.log(uuid + " uuid does not exist"); callback(0, null); } else if (response.statusCode == 429) { // Too Many Requests - console.warn(uuid + " Too many requests"); - console.warn(body); + logging.warn(uuid + " Too many requests"); + logging.warn(body); callback(null, null); } else { - console.error(uuid + " Unknown error:"); - console.error(response); - console.error(body); + logging.error(uuid + " Unknown error:"); + logging.error(response); + logging.error(body); callback(null, null); } }); @@ -108,7 +109,7 @@ exp.get_skin_url = function(uuid, callback) { // callback contains error exp.skin_file = function(url, facename, helmname, callback) { if (fs.existsSync(facename) && fs.existsSync(facename)) { - console.log("Images already exist, not downloading."); + logging.log("Images already exist, not downloading."); callback(null); return; } @@ -119,32 +120,32 @@ exp.skin_file = function(url, facename, helmname, callback) { }, function (error, response, body) { if (!error && response.statusCode == 200) { // skin downloaded successfully - console.log(url + " skin downloaded"); + logging.log(url + " skin downloaded"); skins.extract_face(body, facename, function(err) { if (err) { callback(err); } else { - console.log(facename + " face extracted"); + logging.log(facename + " face extracted"); skins.extract_helm(facename, body, helmname, function(err) { - console.log(helmname + " helm extracted."); + logging.log(helmname + " helm extracted."); callback(err); }); } }); } else { if (error) { - console.error("Error downloading '" + url + "': " + error); + logging.error("Error downloading '" + url + "': " + error); } else if (response.statusCode == 404) { - console.warn("texture not found (404): " + url); + logging.warn("texture not found (404): " + url); } else if (response.statusCode == 429) { // Too Many Requests // Never got this, seems like textures aren't limited - console.warn("too many requests for " + url); - console.warn(body); + logging.warn("too many requests for " + url); + logging.warn(body); } else { - console.error("unknown error for " + url); - console.error(response); - console.error(body); + logging.error("unknown error for " + url); + logging.error(response); + logging.error(body); error = "unknown error"; // Error needs to be set, otherwise null in callback } callback(error);